Qt DBus: зарегистрировать объект, который реализует несколько интерфейсов - PullRequest
1 голос
/ 19 марта 2012

Используя библиотеку Qt DBus, мне сложно зарегистрировать объект, реализующий несколько интерфейсов.

<node> 
  <interface name="x.I1"> <method name="foo"/> </interface>
  <interface name="x.I2"> <method name="bar"/> </interface>
</node>

У меня есть реализация обоих интерфейсов, использующая множественное наследование C ++.

class Impl : public x.I1, public x.I2 {
public:
   void foo(){}
   void bar(){}
};

Инструмент qdbusxml2cpp генерирует мне DBusAdaptor для каждого из интерфейсов, но QDBusConnection не имеет метода для добавления реализации интерфейса к этому объекту.

И я хочу опубликовать этот объект в службе DBus.

QDBusConnection conn=QDBusConnection::sessionBus();
conn.registerObject("/obj",new DBusAdaptor????(&myObject) );

У меня есть для реализации моего собственного адаптера для достижения этой цели?

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Вы не можете наследовать от 2 классов QDBusAbstractAdaptor, потому что они сами наследуют от QObject, который не поддерживает множественное наследование, и от документации по адаптеру QtDBus :

Класс также должен содержать одну запись Q_CLASSINFO с именем «Интерфейс D-Bus», указывающую, какой интерфейс он экспортирует.Поддерживается только одна запись для каждого класса.

Таким образом, вы не можете реализовать адаптер, поддерживающий несколько интерфейсов.

0 голосов
/ 05 января 2018

Ваша проблема заключается в том, как вы регистрируете объект.Вы не должны регистрировать адаптер, вы должны зарегистрировать сам объект, и по умолчанию экспортируемые элементы в адаптере публикуются в DBus, согласно документам .

В вашем примере, если у вас есть классы I1Adaptor и I2Adaptor, вы должны создать их экземпляр и зарегистрировать объект следующим образом:

new I1Adaptor(theObject);
new I2Adaptor(theObject);
QDBusConnection dbus = QDBusConnection::sessionBus();
dbus.registerObject("/obj", theObject);

Как только вы это сделаете, выВы увидите оба интерфейса в любом отладчике DBus, например, d-foot.

...