对于习惯了Qt开发的同学来说,都习惯了将UI放在主线程,因为自动生成的main函数中,也是窗口在主线程启动的,所以,很容易习惯性地认为UI只能运行在主线程,其实不然。
UI其实是可以运行在用户定义的线程中,只要将Qt QApplication的时间循环定义在线程中,并在该线程中启动并执行该事件循环即可。如下所示。
#include "mainwindow.h"
#include <QApplication>
#include <thread>
int main(int argc, char *argv[])
{
int ret = 0;
std::thread([&]{
QApplication a(argc, argv);
MainWindow w;
w.show();
ret = a.exec();
}).join();
return ret;
}