Qt:如何在paintEvent中使用sleep()

时间:2010-10-02 13:31:09

标签: qt

我正在创建一个应用程序,其中我在paintevent中使用循环绘制四个矩形。我希望每个矩形必须在500ms后绘制。因为我正在应用msleep()。但是每当我使用它时运行应用程序,它挂起2000毫秒,然后同时绘制所有矩形。任何人都告诉我这个问题的解决方案,以便在延迟后绘制每个矩形。 谢谢。

3 个答案:

答案 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