Qt-DBus:实现多个接口的注册对象



使用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个QDBusAbstractAdaptor类继承,因为它们本身继承自不支持多重继承的QObject和QtDBus-Adaptor文档:

该类还必须包含一个名为"D-Bus接口"的Q_CLASSINFO条目,声明要导出的接口。每个类只支持一个条目。

因此,您无法为自己实现一个支持多个接口的适配器。

您的问题似乎在于注册对象的方式。您不应该注册适配器,应该注册对象本身,默认情况下,适配器中的可导出项将根据文档发布在DBus中。

在您的示例中,如果您有I1AdaptorI2Adaptor类,则应该实例化它们并注册对象,如下所示:

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

一旦你这样做了,你就会在任何DBus调试器中看到这两个接口,比如d-feet。

最新更新