【问题标题】:Qt:how to use sleep() with paintEventQt:如何使用 sleep() 和paintEvent
【发布时间】:2014-10-07 17:14:15
【问题描述】:

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

【问题讨论】:

    标签: qt


    【解决方案1】:

    不要在paintEvent() 中使用sleep/msleep。您想快速处理您的事件,而不是在函数调用中花费 2 秒。该线程在运行您的事件处理代码时无法处理任何其他事件。

    在这种简单的情况下,您可以使用QTimer 每 500 毫秒接收四次信号。在处理槽中,更新一个成员变量以指示要绘制多少个矩形并在小部件上调用update()。然后在widget的paintEvent()中,检查成员变量,画出你的矩形,尽快返回。

    (对于更复杂的动画需求,请查看QTimeLine。)

    【讨论】:

    • 能否请您提供一个快照,说明如何为我的代码执行此操作?
    • 因为期望绘制四个矩形的绘制事件也在做其他事情,我只需要在绘制矩形时延迟。所以我不能多次调用更新。所以我不知道如何使用QTimer。
    【解决方案2】:

    试试这个而不是睡觉这可能会有所帮助

        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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多