Qt MainWindows 在线程终止后出现
Qt MainWindows appears after threads has terminated
我正在 Qt 上使用 boost::thread
(我知道 QThread
)创建一个应用程序。我没有使用 Qt Designer 来创建我的用户界面。我创建了一个名为 MainWindow
的 class 派生自 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();
}
问题是,我的线程正在调用我使用无限循环从磁盘读取帧的函数。所以函数在无限循环被打破后返回。在上面的代码中,首先完成所有循环,然后显示 main window。当线程中的循环为 运行 时,如何使 main window 可见。
注意 MainWindow 不是 Qt 的默认 class,它是我手动创建的。
一旦应用程序的事件循环开始,您的表单就会显示在屏幕上。
如果您"use"应用程序的主线程执行某些阻塞任务(循环读取磁盘中的帧),则无法显示表单。
这里的解决方案是让表单出现在屏幕上,然后(一旦显示表单)在其他线程中开始您的耗时活动(可能通过 [= 与 UI 通信20=]机制)。
不管怎样,你总是在谈论boost::thread
,但你只提交了一堆没有涵盖那个的代码......如果你需要更多帮助,请与我们分享其他相关代码。
我正在 Qt 上使用 boost::thread
(我知道 QThread
)创建一个应用程序。我没有使用 Qt Designer 来创建我的用户界面。我创建了一个名为 MainWindow
的 class 派生自 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();
}
问题是,我的线程正在调用我使用无限循环从磁盘读取帧的函数。所以函数在无限循环被打破后返回。在上面的代码中,首先完成所有循环,然后显示 main window。当线程中的循环为 运行 时,如何使 main window 可见。
注意 MainWindow 不是 Qt 的默认 class,它是我手动创建的。
一旦应用程序的事件循环开始,您的表单就会显示在屏幕上。
如果您"use"应用程序的主线程执行某些阻塞任务(循环读取磁盘中的帧),则无法显示表单。
这里的解决方案是让表单出现在屏幕上,然后(一旦显示表单)在其他线程中开始您的耗时活动(可能通过 [= 与 UI 通信20=]机制)。
不管怎样,你总是在谈论boost::thread
,但你只提交了一堆没有涵盖那个的代码......如果你需要更多帮助,请与我们分享其他相关代码。