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