如何在预先确定的时间间隔内更新GUI,同时仍在进行非GUI工作?

时间:2012-04-30 17:30:04

标签: c++ qt

基本上,我正在进行一些图像处理,并在QLabel中使用QImage来显示视频序列中的当前帧。假设我想以30 fps的速度将QImage更新到下一帧(或者如果30 fps间隔没有完成某些处理,请等到它完成),但我不希望整个程序在30 fps期间停止。

所以流程是......

if (done_some_work && 30fps_interval_has_passed)
{
   updateQImage();
}

在Qt中如何完成?谢谢!

2 个答案:

答案 0 :(得分:1)

使用QTimer发送信号每1000/30毫秒重新绘制一次帧

myTimer= new QTimer(this);
myTimer->setInterval(1000/fps); // ms
connect(myTimer, SIGNAL(timeout()), this, SLOT(doNextFrame())); 

// where
public slots:
    virtual void doNextFrame() {repaint();}

答案 1 :(得分:0)

评论是正确的,您应该在另一个线程中完成工作,然后在想要以可视方式更新内容时发出要更新UI线程的信号。不要在UI线程上进行处理工作,否则您的GUI将无法响应。这不是一个QT问题,而是一个GUI问题。