Я нашел решение, чтобы предотвратить 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?
}
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);
}
Этот код работает нормально. Так что только когда я добавляю поток, я получаю эту ошибку.
Вы можете создать QApplication
в другом потоке, но вы должны создать все объекты classe GUI в этом потоке, иначе вы получите неопределенное поведение. QApplication
одноэлементный, поэтому вы не можете создать несколько экземпляров QApplication
в разных темах.