QT界面在多线程下的实时刷新

Posted aron566

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT界面在多线程下的实时刷新相关的知识,希望对你有一定的参考价值。

QT界面在多线程下的实时刷新

问题现象

主界面:4个Lable控件,用作视频图片的显示,不过为了主线程的操作顺滑,使用了四个线程去采集视频流,采集到直接设置图片显示到Lable上

VIDEOlabel->setPixmap(QPixmap::fromImage(imgScaled));

后来运行后,发现界面视频刚开始可以正常运行显示也很流畅,大约2min左右开始视频显示卡顿,有时只有一个Lable在正常显示刷新,有时4个全部不刷新,不过通过窗口最小化或者点击界面中的按钮切换到下一个界面再返回界面又会正常刷新了,不过坚持不了多长时间。

尝试过的解决方法

不过最终处理都是指向:UI界面的对象操作只在主线程中执行。

最终处理

线程中,采集到最新的图像通过信号与槽发送到主线程中执行

emit UpdateWidgetSignalx(pixmap);/**< 发送更新控件信号*/

主线程中接收信号,调用槽函数前去处理

/**
 * @brief MainWindow::slotUpdateWidgetx
 * @param winindex
 * @param VideoWindow
 */
void MainWindow::slotUpdateWidgetx(quint8 winindex ,QPixmap &VideoWindow)

    if(winindex <= 0)
    
        return;
    
    char windowstr = 'A'+static_cast<char>(winindex)-1;
    switch(windowstr)
    
        case 'A':
            VIDEOAlabel->setPixmap(VideoWindow);
            break;
        case 'B':
            VIDEOBlabel->setPixmap(VideoWindow);
            break;
        case 'C':
            VIDEOClabel->setPixmap(VideoWindow);
            break;
        case 'D':
            VIDEODlabel->setPixmap(VideoWindow);
            break;
        default:
            break;
    

以上是关于QT界面在多线程下的实时刷新的主要内容,如果未能解决你的问题,请参考以下文章

界面实时刷新线程信息

qt线程(转)----这篇很专业!

Qt 表格实时显示数据的问题?

界面编程之QT的线程20180731

Qt在多线程中使用信号槽的示例

QT中UI主窗口如何与子线程相互传递参数