Кто-нибудь знает, как обработчик событий управляет опубликованными событиями?
В моем приложении у меня есть два потока (guiThread и computationThread). После создания исключения я вызываю postEvent(..) в существующее диалоговое окно. Qt-Event-Handler удерживает его до закрытия диалога.
Извините, мой вопрос немного туманный. Точнее напишу, если будет время. Я нашел работу. Но для меня проблема все еще интересна.





Как упоминалось в документации Qt о QCoreApplication :: postEvent:
When control returns to the main event loop, all events that are stored in the queue will be sent using the notify() function.
... что объясняет, почему обработчик событий Qt удерживает событие до закрытия диалогового окна.
Если я правильно понимаю, что вы хотите сделать, я бы попробовал использовать sendEvent.
Я предполагаю, что созданный вами диалог является модальным, что означает, что он выполняет свой собственный цикл обработки событий. Никакие события, отправленные в общий guiThread, не будут обрабатываться, пока не будут завершены все циклы модальных событий.
В качестве альтернативы, если вам нужно, чтобы диалоговое окно было модальным и знало о событии, вы можете опубликовать событие непосредственно в диалоговом окне. Вам нужно будет выяснить, как обрабатывать указатели совместно, но если ничего сложного не происходит, вы можете использовать функцию QApplication :: activeWindow ().
Как уже писали другие, я считаю, что это поведение вызвано тем фактом, что диалог запускает собственный цикл событий.
Если вы используете Qt4, вы можете попробовать использовать поставленные в очередь соединения сигналов / слотов в качестве альтернативы публикации событий.