使用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) );
我有来实现我自己的适配器来实现这个目标吗?
答案 0 :(得分:2)
你不能从2个QDBusAbstractAdaptor类继承,因为它们本身都是从不支持多重继承的QObject
继承而来的,并且来自QtDBus Adaptor documentation:
该类还必须包含一个带有“D-Bus接口”名称的Q_CLASSINFO条目,声明它正在导出哪个接口。每个类只支持一个条目。
因此,您无法实现支持多个接口的适配器。
答案 1 :(得分:0)
您的问题似乎在于您注册对象的方式。您不应该注册适配器,您应该注册对象本身,默认情况下,适配器中的可导出项目在DBus as per the docs中发布。
在您的示例中,如果您有I1Adaptor
和I2Adaptor
类,则应实例化它们并按如下方式注册对象:
new I1Adaptor(theObject);
new I2Adaptor(theObject);
QDBusConnection dbus = QDBusConnection::sessionBus();
dbus.registerObject("/obj", theObject);
一旦你这样做,你就会在任何DBus调试器中看到两个接口,比如d-feet。