2008-09-09 1 views
1

Кто-нибудь знает, как обработчик событий управляет размещенными событиями?Обработчик событий в Qt с многопоточным

В моем приложении у меня есть две темы (guiThread и computationThread). После того, как выбрано исключение, я вызываю postEvent(..) в существующее диалоговое окно. Обработчик Qt-Event-Handler удерживает эту кнопку до тех пор, пока диалог не будет закрыт.


Извините, мой вопрос немного облачный. Я напишу это более точно, если у меня осталось время. Я нашел работу. Но для меня проблема все еще интересна.

ответ

2

Как упоминалось в документации Qt о QCoreApplication::postEvent:

Когда управление возвращается в основной цикл событий, все события, которые хранятся в очереди будут отправлены с помощью функции уведомит().

... который объясняет, почему обработчик события Qt удерживает событие до закрытия диалогового окна.

Если я правильно понимаю, что вы хотите сделать, я бы попытался использовать sendEvent.

1

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

Альтернативно, если вам нужно, чтобы диалог был модальным и знал о событии, вы можете отправить событие непосредственно в диалоговом окне. Вам нужно будет выяснить, как обращаться с указателями совместно, но если ничего сложного не происходит, вы можете использовать функцию QApplication :: activeWindow().

0

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

Если вы используете Qt4, вы можете попробовать использовать queued signal/slot connections в качестве альтернативы публикации событий.