1

我在这里找到了防止app.exec()阻塞主线程的解决方案。

我试图实现这一点,但出现以下错误:

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?

}

主.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);

}

这段代码工作正常。所以只有当我添加线程时我才会收到这个错误。

4

1 回答 1

5

你可以QApplication在不同的线程中创建,但你应该在这个线程中创建所有 GUI 类的对象,否则你会得到未定义的行为。QApplication是单例的,所以你不能QApplication在不同的线程中创建多个实例。

于 2015-04-24T10:21:32.543 回答