Приложение, над которым я работаю, состоит из множества потоков C, сообщающихся вместе через сообщения (0mq
). Один из этих потоков обрабатывает дисплей и должен отображать на экране виджет, чтобы передать его "скриншот" другим потокам приложения.
Дело в том, что для того, чтобы нарисовать виджет, вам нужно поместить его в QApplication
и вызвать метод exec()
QApplication
, который по существу является циклом. Поэтому мой поток затем полностью застревает и больше не может общаться с внешним миром, так как он используется в методе exec().
Есть ли способ запустить QApplication в отдельном потоке и связаться с ним, чтобы поток отображения не застревал? Или есть хотя бы способ сделать то, что я хочу делать с Qt?
Большое спасибо !
Редактировать: это приложение в конечном итоге будет Qt Embedded Application
Обновление В основном, мой вопрос: как запустить QApplication в отдельном потоке из моего кода C и связаться с ним?
Я закончил создание отдельного потока для основного цикла событий QApplication (exec()) и использовал сокеты 0mq для связи с ним из остальной части моего приложения.
Я не понимаю, что вы подразумеваете под "нарисовать виджет". Но имейте в виду: QWidget является частью GUI, а части GUI должны быть затронуты только потоком Main (UI). Это правило, которое вы не можете изменить. Кроме того, QApplication работает в основном потоке только с тех пор, как QApplication является основной частью самого GUI. Вы можете отправлять сообщения в QAppplication, используя глобальный объект qApp
(для этого вам необходимо включить QApplication) и sendEvent()
или postEvent()
.
Также я бы предложил вам создать QImage с любыми имеющимися у вас данными и распространить его через вышеупомянутый механизм событий на необходимый вам виджет. Но, очевидно, я не знаю, что вам действительно нужно.