何日も悩まされている奇妙な問題があります。インターネット調査などもあまり役に立ちませんでした。私は現在、4 つの長方形が正方形のパスに沿って異なる速度で移動することになっている単純なアプリケーションに取り組んでいます。私が何をしても、すべての長方形がまったく同じ速度で移動していることを除いて、すべてが正常に機能しています。
長方形を定義するクラスRectClassがあります。zeichenFeldは、4 つの四角形 (RectClass の 4 つのインスタンス) を作成する親ウィジェットです。すべての長方形には、特定の座標、色、および現在の状態が保存されるファイルがありますが、それは私の問題の一部ではありません。
私のコードの重要な部分は次のとおりです。
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が呼び出されると、4 つのタイマーはすべて、選択した最小の間隔 (この例では 10) を常に使用し、設定した他の間隔は完全に無視します。なぜこれが起こっているのか手がかりさえありませんが、私はまだQtにかなり慣れていないので、皆さんが私を助けてくれることを願っています!
ところで: 私は多くのコードを省略しました。英語は私の母国語ではありません。
前もって感謝します。