【发布时间】:2014-10-07 17:14:15
【问题描述】:
我正在创建一个应用程序,在该应用程序中我使用paintevent 中的循环来绘制四个矩形。我希望每个矩形必须在 500 毫秒后绘制。因为我正在应用 msleep()。但是每当我使用这个运行应用程序,它挂起 2000 毫秒,然后同时绘制所有矩形。谁能告诉我这个问题的解决方案,以便在延迟后绘制每个矩形。 谢谢。
【问题讨论】:
标签: qt
我正在创建一个应用程序,在该应用程序中我使用paintevent 中的循环来绘制四个矩形。我希望每个矩形必须在 500 毫秒后绘制。因为我正在应用 msleep()。但是每当我使用这个运行应用程序,它挂起 2000 毫秒,然后同时绘制所有矩形。谁能告诉我这个问题的解决方案,以便在延迟后绘制每个矩形。 谢谢。
【问题讨论】:
标签: qt
不要在paintEvent() 中使用sleep/msleep。您想快速处理您的事件,而不是在函数调用中花费 2 秒。该线程在运行您的事件处理代码时无法处理任何其他事件。
在这种简单的情况下,您可以使用QTimer 每 500 毫秒接收四次信号。在处理槽中,更新一个成员变量以指示要绘制多少个矩形并在小部件上调用update()。然后在widget的paintEvent()中,检查成员变量,画出你的矩形,尽快返回。
(对于更复杂的动画需求,请查看QTimeLine。)
【讨论】:
试试这个而不是睡觉这可能会有所帮助
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
【讨论】: