我有一个奇怪的问题,困扰我好几天了。互联网研究等也没有帮助。我目前正在开发一个简单的应用程序,其中四个矩形应该沿着方形路径以不同的速度移动。 一切都工作得很好,除了所有的矩形都以完全相同的速度移动,无论我做什么。
我有一个 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很新,所以希望你们能帮助我! 顺便说一句:我遗漏了很多代码。抱歉任何错误,英语不是我的母语。
提前致谢。