为什么有几个QTimers只使用最小的间隔?

时间:2014-08-22 14:27:49

标签: c++ timer intervals qpainter qtimer

我有一个奇怪的问题,困扰我好几天了。互联网研究等也没有帮助。我目前正在开发一个简单的应用程序,其中四个矩形应该沿着方形路径以不同的速度移动。 一切都工作得很好,除了所有的矩形都以完全相同的速度移动,无论我做什么。

我有一个 RectClass 类,它定义了一个矩形。 zeichenFeld 是它的父窗口小部件,我创建了四个矩形(这意味着四个RectClass实例)。每个矩形都有一定的坐标,颜色和保存当前状态的文件,但这不是我的问题的一部分。

以下是我的代码的重要部分:

zeichenFeld.cpp

zeichenFeld::zeichenFeld(QWidget *parent)
     : QWidget(parent)
{
resize(1500, 1500);
setPalette(QPalette(QColor(250, 250, 200)));
setAutoFillBackground(true);
setMouseTracking(false);

Rect1 = new RectClass(25, 25, Qt::red, "rect1.txt", this);
Rect2 = new RectClass(275,275, Qt::green, "rect2.txt", this);
Rect3 = new RectClass(1025, 25, Qt::blue, "rect3.txt", this);
Rect4 = new RectClass(775, 275, Qt::black, "rect4.txt", this);
}

(...)

void zeichenFeld::start()
{
    Rect1->start(10);
    Rect2->start(20);
    Rect3->start(30);
    Rect4->start(40);

}

RectClass.h

class RectClass : public QWidget
{
public:
    RectClass(int coX, int coY, QColor input, char filename[100], QWidget *parent);
    ~RectClass();

    void start(int speed) { timer->start(speed);}

(...)
}

RectClass.cpp

#include "RectClass.h"


RectClass::RectClass(int coX, int coY, QColor input, char filename[100], QWidget *parent)
    :QWidget(parent)
{
    resize(parent->width(),parent->height());

    lastX = coX+75; //lastX and lastY have something to do with the square path thing
    lastY = coX+75;
    timer=new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
}


void RectClass::paintEvent(QPaintEvent *)
{
    QPainter painter;
    QPen pen;
    int x,y,width,height;
    x=lastX-25;
    y=lastY-25;
    width=50;
    height=50;

    pen.setWidth(3);
    painter.setPen(pen);
    QRect rect(x,y,width,height);
    painter.drawRect(rect);
    painter.fillRect(rect, color);

(...)

}

当调用 zeichenFeld :: start 时,所有四个定时器总是使用我选择的最小间隔(在本例中为10),同时完全忽略我设置的其他间隔。我甚至不知道为什么会发生这种情况,但我仍然对Qt很新,所以希望你们能帮助我! 顺便说一句:我遗漏了很多代码。抱歉任何错误,英语不是我的母语。

提前致谢。

0 个答案:

没有答案