基本上,我正在做一些图像处理并在 QLabel 中使用 QImage 来显示视频序列中的当前帧。假设我想以 30 fps 将 QImage 更新到下一帧(或者如果某些处理没有在 30 fps 间隔内完成,请等到它完成),但我不希望整个程序在 30 fps 期间停止.
所以流量是...
if (done_some_work && 30fps_interval_has_passed)
{
updateQImage();
}
这是如何在 Qt 中完成的?谢谢!
并使用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();}
评论是正确的,您应该在另一个线程中完成您的工作,然后在您想要直观地更新某些内容时发出您想要更新 UI 线程的信号。不要在 UI 线程上进行处理工作,否则您的 GUI 将无响应。这与其说是一个 QT 问题,不如说是一个 GUI 问题。