我找到了阻止app.exec()
阻止主帖here的解决方案。
我试图实现这个但是我遇到了以下错误:
WARNING: QApplication was not created in the main() thread.
QWidget: Cannot create a QWidget without QApplication
这是我的代码:
PB是一个具有初始化GUI的静态函数的类。
pb.cpp:
bool PB::Init(int argc, char *argv[],
int ID) {
QApplication app(argc, argv);
PB PB(ID); // The constructor creates an instance of the pushbutton qt object
app.exec();
return true; // Do I even need this because app.exec() runs an infinite loop right?
}
main.cpp中:
int main(int argc, char *argv[]) {
std::thread first(&PB::Init, argc, argv, 0);
std::thread second(&PB::Init, argc, argv, 1);
first.join();
second.join();
}
问题是,我在类中初始化QApplication,所以它应该工作......我确保它可以在单独使用QApplication的单独测试中使用:
int main(int argc, char *argv[]) {
PB::Init(argc, argv, 0);
}
此代码工作正常。所以只有当我添加线程时才会出现此错误。
答案 0 :(得分:4)
您可以在不同的线程中创建QApplication
,但是您应该在此线程中创建所有GUI classe的对象,否则您将获得未定义的行为。 QApplication
是单例,因此您无法在不同的线程中创建QApplication
的多个实例。