Qt主窗口在线程终止后出现

Qt MainWindows appears after threads has terminated

本文关键字:终止 线程 窗口 Qt      更新时间:2023-10-16

我正在Qt上使用boost::thread(我知道QThread)创建一个应用程序,我没有使用Qt Designer来创建我的用户界面。我创建了一个名为MainWindow的类,它派生自QWidget。在MainWindow中,两个线程正在读取和处理视频。

我的主要功能是

#include<QApplication>
#include<iostream>
#include<mainwindow.h>
#include<opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc,char * argv[])
{
    QApplication prog(argc,argv);
    cout<<"M"<<endl;
        MainWindow m;
    cout<<"H"<<endl;
        m.show();
    return prog.exec();
}

问题是,我的线程正在调用函数,其中我使用无限循环从磁盘读取帧。所以函数在无限循环被打破后返回。在上面的代码中,首先所有循环完成,然后显示主窗口。我如何使主窗口可见,而线程循环正在运行。

注意MainWindow不是Qt的默认类,它是我手工创建的

一旦应用程序的事件循环开始,您的表单就会显示在屏幕上。

如果你"使用"应用程序的主线程来执行一些阻塞任务(在循环中从磁盘读取帧),那么表单将无法显示。

这里的解决方案是让表单出现在屏幕上,然后(一旦表单显示出来)在其他线程中开始你耗时的活动(这些线程可能通过信号/插槽机制与UI通信)。

不管怎么说,你总是说boost::thread,但你只提交了一堆代码,不涵盖…如果您需要更多帮助,请与我们分享其他相关代码