如何使用线程实例化多个QApplication

时间:2015-04-24 10:13:31

标签: c++ multithreading qt user-interface qapplication

我找到了阻止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);

}

此代码工作正常。所以只有当我添加线程时才会出现此错误。

1 个答案:

答案 0 :(得分:4)

您可以在不同的线程中创建QApplication,但是您应该在此线程中创建所有GUI classe的对象,否则您将获得未定义的行为。 QApplication是单例,因此您无法在不同的线程中创建QApplication的多个实例。