Обработчик событий в Qt с многопоточностью

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

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


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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
4 062
3

Ответы 3

Как упоминалось в документации 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, вы можете попробовать использовать поставленные в очередь соединения сигналов / слотов в качестве альтернативы публикации событий.

Другие вопросы по теме