2010-10-02 71 views
0

我正在創建一個應用程序,我在paintevent中使用一個循環來繪製四個矩形,並且我希望每個矩形必須在500ms後繪製。 msleep()。但通過使用這個,每當我運行應用程序時,它會掛起2000ms,然後在同一時間繪製所有矩形。任何人都可以告訴我一個解決方案,以便每個矩形在延遲後繪製。 謝謝。Qt:如何使用sleep()和paintEvent

回答

5

請勿在paintEvent()中使用sleep/msleep。您希望快速處理事件,而不是在函數調用中花費2秒鐘。線程在運行事件處理代碼時無法處理任何其他事件。

在這種簡單的情況下,您可以使用QTimer每500ms接收四次信號。在處理槽中,更新一個成員變量以指示要繪製多少個矩形,並在小部件上調用update()。然後在小部件的paintEvent()中,檢查成員變量,繪製矩形並儘快返回。

(對於更復雜的動畫需求,看看QTimeLine

+0

可以請你提供給我一個快照,如何爲我的代碼做到這一點? – CuriousCase 2010-10-04 16:19:13

+0

如預期繪製四個矩形繪製事件也在做其他事情,我只需要延遲,而矩形draw.so我不能調用更新很多timessoso,所以我不知道如何使用QTimer。 – CuriousCase 2010-10-04 16:23:35

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