我正在創建一個應用程序,我在paintevent中使用一個循環來繪製四個矩形,並且我希望每個矩形必須在500ms後繪製。 msleep()。但通過使用這個,每當我運行應用程序時,它會掛起2000ms,然後在同一時間繪製所有矩形。任何人都可以告訴我一個解決方案,以便每個矩形在延遲後繪製。 謝謝。Qt:如何使用sleep()和paintEvent
0
A
回答
5
請勿在paintEvent()
中使用sleep/msleep
。您希望快速處理事件,而不是在函數調用中花費2秒鐘。線程在運行事件處理代碼時無法處理任何其他事件。
在這種簡單的情況下,您可以使用QTimer
每500ms接收四次信號。在處理槽中,更新一個成員變量以指示要繪製多少個矩形,並在小部件上調用update()
。然後在小部件的paintEvent()
中,檢查成員變量,繪製矩形並儘快返回。
(對於更復雜的動畫需求,看看QTimeLine
)
0
我不知道qt,但我認爲答案在於使用計時器。
0
試試這個睡眠,這可能有助於
QTimer *t= new QTimer();
t->setSingleShot(true);
t->start(60000);//this is the time to sleep in this case 60 seconds
QEventLoop pause;
connect(t, SIGNAL(timeout()), &pause, SLOT(quit()));
pause.exec();//keeps the program responsive
是指想鏈接QEventLoop
可以請你提供給我一個快照,如何爲我的代碼做到這一點? – CuriousCase 2010-10-04 16:19:13
如預期繪製四個矩形繪製事件也在做其他事情,我只需要延遲,而矩形draw.so我不能調用更新很多timessoso,所以我不知道如何使用QTimer。 – CuriousCase 2010-10-04 16:23:35