我正在创建一个应用程序,其中我在paintevent中使用循环绘制四个矩形。我希望每个矩形必须在500ms后绘制。因为我正在应用msleep()。但是每当我使用它时运行应用程序,它挂起2000毫秒,然后同时绘制所有矩形。任何人都告诉我这个问题的解决方案,以便在延迟后绘制每个矩形。 谢谢。
答案 0 :(得分:5)
请勿在{{1}}中使用sleep/msleep
。您希望快速处理事件,而不是在函数调用中花费2秒钟。线程在运行事件处理代码时无法处理任何其他事件。
在这种简单的情况下,您可以使用paintEvent()
每500毫秒接收四次信号。在处理槽中,更新成员变量以指示要绘制多少个矩形并在窗口小部件上调用QTimer
。然后在小部件的update()
中,检查成员变量,绘制矩形并尽快返回。
(有关更复杂的动画需求,请查看paintEvent()
。)
答案 1 :(得分:0)
我不知道qt,但我认为答案取决于使用计时器。
答案 2 :(得分: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