QDbus: зарегистрировать несколько объектов на одном пути

#c #qt #dbus #qdbus

#c #qt #dbus #qdbus

Вопрос:

Если я понимаю, метод registerObject можно использовать только один раз по одному и тому же пути, даже если объекты имеют разные интерфейсы в Q_ClassInfo.

Правильно ли это?

Ответ №1:

Да, это правильно. Но если вы хотите зарегистрировать несколько объектов по одному и тому же пути, вы можете сделать это, объявив эти объекты (скажем, childX, childY) дочерними объектами объекта, скажем, ParentObject, а затем вызвать register object как:

 registerObject(yourPath, parentObject, QDBusConnection::ExportAdaptors)
  

Это приведет к регистрации объектов childX и childY в path yourPath

Примечание: дочерние элементы и дочерние элементы должны наследовать QDBusAbstractAdaptor

Комментарии:

1. Работает ли это? Мне не удалось создать экземпляр объекта с несколькими интерфейсами для Telepathy API (из спецификаций Client_Handler.xml и Client.xml сгенерированных привязок, как qdbusxml2cpp -a Client Client.xml в qt5.5).

2. Чтобы немного прояснить это: 1. class ParentClass : public QObject, public QDBusContext имеет childX' and 'childY' 2. the дочерние элементы private, а ChildY классы являются производными от QDBusAbstractAdaptor (производного) класса 3. при создании экземпляра ChildX и ChildY использовании в качестве родительского parentObject для них 4. зарегистрируйтесь parentObject в D-Bus, как описано в ответе выше