Qt вызывает QApplication :: exec из библиотеки - PullRequest
1 голос
/ 04 июля 2011

Это продолжение вопроса, который я задал по поводу встраивания кода Qt в устаревшее приложение C.

Я могу встроить код Qt в свое приложение C и с удивлением обнаружил, что могу даже запуститьGUI-код из статической библиотеки, которую я использую для этого.(Кстати, мое приложение на C также управляется с помощью графического интерфейса).Это открывает некоторые захватывающие возможности, и я пытаюсь заставить два GUI работать бок о бок.

Проблема, с которой я столкнулся сейчас, заключается в том, что для запуска кода Qt GUI мне нужно вызвать QApplication ::exec (), которая эффективно блокирует остальную часть моего приложения, поскольку оно не возвращается, пока я не убью графический интерфейс qt.

Можно ли как-нибудь запустить код qt gui и вернуться к своему хост-приложению?

Я ценю, что могу запустить свой код Qt как другой процесс и реализовать некоторый межпроцессный процессобщение, но суть в том, чтобы попытаться встроить это как библиотеку.

Также я не могу разместить унаследованное приложение в Qt, пока кто-нибудь не предложил это!

Спасибо за вашепомощь!

Ответы [ 3 ]

5 голосов
/ 04 июля 2011

Не вызывайте QApplication :: exec ().Вместо этого вызовите в приложении цикл обработки событий QApplication :: processEvents ().

0 голосов
/ 04 июля 2011

Ответом на вашу проблему является многопоточность.

Поскольку вы делаете C, вам, вероятно, доступны pthreads .

void * qt_thread(void * parm) {
    // code here
    QApplication::exec();
} 

//some where in your main()
pthread_t qt;
pthread_create(&qt, NULL, qt_thread, NULL); //returns immediately
// rest of code

Это ОЧЕНЬ грубоНапример, вы должны учиться и изучать потоки правильно.

Хорошая ссылка: https://computing.llnl.gov/tutorials/pthreads/

0 голосов
/ 04 июля 2011

Ну, вы можете запустить второй поток (например, используя библиотеку pthread) и запустить QApplication :: exec () из второго потока.Однако вы должны быть очень осторожны при общении с вашим кодом QT, чтобы в вашей библиотеке не было условий гонки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...