Обработчик событий в Qt с многопоточностью - PullRequest
1 голос
/ 10 сентября 2008

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

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


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

Ответы [ 3 ]

2 голосов
/ 10 сентября 2008

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

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

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

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

1 голос
/ 16 сентября 2008

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

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

0 голосов
/ 30 сентября 2008

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

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

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