Qt Direct Connection - PullRequest
       3

Qt Direct Connection

1 голос
/ 13 июня 2010

Я создал элемент управления деревом Qt (и его узлы) в другом потоке, чем основной поток. В основном потоке я хочу показать контекстное меню для выбранного узла, поэтому я связываю действия в меню с соответствующими слотами в основном потоке. Функция connect возвращает true, но слот никогда не выполняется. Если я явно говорю в функции подключения, что это Qt :: DirectConnection, то все работает нормально. Почему это?

Я создаю свое дерево в основном потоке, все также работает нормально, не говоря уже о том, что это Qt :: DirectConnection.

1 Ответ

4 голосов
/ 13 июня 2010

См. Документацию здесь .

Тип соединения по умолчанию, Qt :: AutoConnection, такой же, как Qt :: DirectConnection, если сигнал отправляется из того же потока, что и слот получателя, в противном случае поведение такое же, как у Qt :: QueuedConnection.

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

Поведение Qt :: QueuedConnection заключается ввызовите слот, когда тот цикл обработки событий потоков восстановит управление.

Чтобы решить вашу проблему, убедитесь, что в каждом потоке есть цикл обработки событий, который может принимать сигналы, если только вы вручную не укажете Qt :: DirectConnection (который, яПредположим, это будет означать, что слот вызывается из того же потока, что и источник сигнала - в основном эквивалентный обычному вызову функции).

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