В поисках QObject - PullRequest
       5

В поисках QObject

1 голос
/ 04 августа 2010

Я работаю над многопоточным приложением Qt и хотел бы соединить сигнал в потоке со слотом в другом потоке. Моя проблема в том, что у меня есть только строка, используемая для установки QObject:objectName в потоке сигнализации, который определен в файле констант всего проекта.

Моя общая цель - избежать передачи указателей на объекты, которые находятся в нескольких слоях глубоко внутри других объектов. Я делал это в прошлом, и пока он работает, он добавляет много ненужной сложности в код. И это очень не элегантное решение проблемы.

Что я хотел бы сделать, так это выполнить глобальный поиск по всем объектам QO в моем приложении, чтобы найти тот, который соответствует имени. При чтении документации по Qt идет серьезное обсуждение того, как искать дочерние объекты текущего объекта, или вы можете искать с использованием родительских классов. Но с объектами в разных потоках это не похоже на работу. В частности, поскольку объект, выполняющий соединение, не имеет прямого доступа к QThread, которому принадлежит объект, выполняющий передачу сигналов.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 04 августа 2010

Деревья объектов должны принадлежать одному потоку. Подробное описание состояний QObject:

Используйте функцию moveToThread (), чтобы изменить сродство потока к объекту и его дочерним элементам (объект не может быть перемещен, если у него есть родительский элемент).

Я видел интересное решение проблемы поиска объектов, реализованное в Qt Creator: его менеджер плагинов имеет глобальный реестр объектов , где вы можете добавлять и удалять объекты, а затем запрашивать их по типу. Было бы легко расширить его и разрешить запросы по имени. Просто помните, что имена не должны быть уникальными.

1 голос
/ 04 августа 2010

вы можете написать свое собственное имя => карта объекта. Контейнерные классы Qt являются потокобезопасными.

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