Я использую C ++ API для 3D-рендеринга и хочу использовать Qt для отображения GUI поверх него.
Мой API-интерфейс рендеринга работает в потоке приложения main () , какQt хочет.
Сначала я попытался запустить Qt в своем собственном std :: thread, и он прекрасно работал - и я понятия не имею, что означает документ Qt с
Как уже упоминалоськаждая программа имеет один поток при запуске.Этот поток называется «основным потоком» (также известным как «поток GUI» в приложениях Qt).Графический интерфейс Qt должен работать в этом потоке https://doc.qt.io/qt-5/thread-basics.html
Это либо неверно, либо плохо написано ...
Мой рабочий std :: thread выглядит примерно так:
int SomeClass::qt_app_worker(size_t width, size_t height, const std::string& title, const std::string& contents) {
int argc = 0;
QApplication app(argc, NULL);
// QDialog here
return app.exec();
}
Проблема в том, что я ничего не могу сделать с этим приложением Qt, потому что если я попытаюсь создать, скажем, другой QDialog из потока main (), Qt будет жаловаться, что я могу сделать это только из потока, владеющего моимQApplication (qt_app_worker).
Так что я либо навсегда заблокирован из потока qt_app_worker, либо мне нужно реализовать собственную очередь сообщений для ВСЕГО, связанного с Qt.
Я набросал ее с помощьюпроизводный класс QApplication с использованием startTimer () и последующей обработкой пользовательских сообщений в timerEvent (...), но это слишком много хлопот.
Я просто не понимаю, почему Qt не позволяет пользователю запускать его вотдельная тема, надеюсь, я просто что-то упустил.