1

使用 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生成一个,但没有将接口实现器添加到该对象的方法。DBusAdaptorQDBusConnection

我想在 DBus 服务上发布这个对象。

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

是否必须实现自己的适配器才能实现这一目标?

4

2 回答 2

2

您不能从 2 个 QDBusAbstractAdaptor 类继承,因为它们本身继承QObject不支持多重继承,并且来自QtDBus Adapter 文档

该类还必须包含一个带有“D-Bus 接口”名称的 Q_CLASSINFO 条目,声明它正在导出哪个接口。每个类只支持一个条目。

所以你不能自己实现一个支持多个接口的适配器。

于 2012-03-19T11:13:33.487 回答
0

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

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

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

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

于 2018-01-04T23:14:43.677 回答