如何使用线程实例化多个QApplication
How to use threads to instantiating multiple QApplication
我找到了防止 app.exec()
阻塞主线程 here 的解决方案。
我尝试执行此操作,但出现以下错误:
WARNING: QApplication was not created in the main() thread.
QWidget: Cannot create a QWidget without QApplication
这是我的代码:
PB 是一个 class 具有初始化 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();
}
问题是,我正在 classes 中初始化 QApplication,所以它应该可以工作...我确保它可以在单独的测试中工作,其中 QApplication 没有在主程序中使用:
int main(int argc, char *argv[]) {
PB::Init(argc, argv, 0);
}
这段代码工作正常。所以只有当我在其中添加线程时才会出现此错误。
您可以在不同的线程中创建 QApplication
,但您应该在该线程中创建所有 GUI 类的对象,否则会出现未定义的行为。 QApplication
是单例,因此您不能在不同线程中创建 QApplication
的多个实例。
我找到了防止 app.exec()
阻塞主线程 here 的解决方案。
我尝试执行此操作,但出现以下错误:
WARNING: QApplication was not created in the main() thread.
QWidget: Cannot create a QWidget without QApplication
这是我的代码:
PB 是一个 class 具有初始化 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();
}
问题是,我正在 classes 中初始化 QApplication,所以它应该可以工作...我确保它可以在单独的测试中工作,其中 QApplication 没有在主程序中使用:
int main(int argc, char *argv[]) {
PB::Init(argc, argv, 0);
}
这段代码工作正常。所以只有当我在其中添加线程时才会出现此错误。
您可以在不同的线程中创建 QApplication
,但您应该在该线程中创建所有 GUI 类的对象,否则会出现未定义的行为。 QApplication
是单例,因此您不能在不同线程中创建 QApplication
的多个实例。