2010-10-02 77 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