QGraphicsView で毎秒 1 つの画像を移動しようとしています。4 つの方法を試しましたが、どれもうまくいきませんでした。
1) 関数 QTest::qSleep() を使用して QTest を使用しましたが、これはまったく機能しませんでした。アプリケーションに 2 つのエラーが表示されました。プロジェクトの .pro ファイルに問題があると思われます。
2) 2 回目の試行で QThread::sleep() を使用して、少なくともアプリケーションを実行しましたが、イメージは既に前に設定した最後の位置にあります。つまり、スリープが機能していません (時々機能しますが、別の方法で、ループが完了し、ループ内でスリープが機能すると、アプリケーションが画面に表示されることがあります。時々、フリーズしてアプリを表示しません.)
3) 別の質問でユーザーが投稿した 1 つの機能を使用しました。彼は、Sleep 機能の代替であると述べました。
QTime dieTime= QTime::currentTime().addSecs(1);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
4) QWaitCondition も使用しました。これは、他のオプションと同様の 1 つの選択肢です。
QMutex dummy;
dummy.lock();
QWaitCondition waitCondition;
waitCondition.wait(&dummy, waitTime);
QTimer について読んだことがありますが、まだ使い方がわかりません。私は QT の初心者で、基本的なことしか知りません。私が試したのは、whileループの中でしたことだけです。
これを実装する必要があるコード:
void Window::start(PilaD *caminoGato,PilaD *caminoRaton){
/*
YOU DONT NEED TO UNDERSTAND THIS CODE
Nodo *recorGato,*recorRaton;
recorGato = new Nodo();
recorRaton = new Nodo();
recorGato = caminoGato->tope;
recorRaton = caminoRaton->tope;
By The Way, for you to understand, recorGato is a class, this class have two variable row and col
*/
QPixmap *icon = new QPixmap(list.at(2));
QGraphicsPixmapItem *gato = new QGraphicsPixmapItem(*icon);
scene->addItem(gato);
while(recorGato!=NULL){
//ALL I TRIED, I PLACE IT HERE, INSIDE THE LOOP
gato->setPos(recorGato->col*icon->width()+200,recorGato->row*icon->height()+100);
recorGato = recorGato->pre;
}
}
問題は、フレーム上の画像が2回通過するたびに、限界に達するまで次の位置に移動し、移動を停止することです。遅延させることが最善の方法かどうかはわかりませんが、毎秒画像を移動する必要があります。方法は問題ではありません。読んでくれてありがとう。