0

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

所以流量是...

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

这是如何在 Qt 中完成的?谢谢!

4

2 回答 2

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();}
于 2012-04-30T17:37:55.340 回答
0

评论是正确的,您应该在另一个线程中完成您的工作,然后在您想要直观地更新某些内容时发出您想要更新 UI 线程的信号。不要在 UI 线程上进行处理工作,否则您的 GUI 将无响应。这与其说是一个 QT 问题,不如说是一个 GUI 问题。

于 2012-04-30T17:36:17.343 回答