0

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

我有一个类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);

}

矩形类.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);}

(...)
}

矩形类.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 还是很陌生,所以希望你们能帮助我!
顺便说一句:我遗漏了很多代码。对于任何错误,我深表歉意,英语不是我的母语。

提前致谢。

4

0 回答 0