我在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();
}
问题是,我的线程正在调用函数,其中我使用无限循环从磁盘读取帧。所以函数在infinte循环被破坏后返回。在上面的代码中,首先完成所有循环,然后显示主窗口。如何在线程中的循环运行时使主窗口可见。
注意MainWindow不是Qt的默认类,它是我手动创建的。
答案 0 :(得分:2)
一旦应用程序的事件循环开始,您的表单就会显示在屏幕上。
如果您“使用”应用程序的主线程来执行某些阻塞任务(在循环中从磁盘读取帧),则表单无法显示。
这里的解决方案是让表单出现在屏幕上然后(一旦显示表单)在其他线程中启动您耗时的活动(可以通过信号/插槽机制与UI通信)。
无论如何,你总是谈论boost::thread
,但你只提交了一堆不涵盖的代码......如果你想要更多帮助,请与我们分享其他相关代码。