Как использовать потоки для создания нескольких приложений QApplication

Я нашел решение, чтобы предотвратить 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);

}

Этот код работает нормально. Так что только когда я добавляю поток, я получаю эту ошибку.

1

Решение

Вы можете создать QApplication в другом потоке, но вы должны создать все объекты classe GUI в этом потоке, иначе вы получите неопределенное поведение. QApplication одноэлементный, поэтому вы не можете создать несколько экземпляров QApplication в разных темах.

4

Другие решения


По вопросам рекламы [email protected]