2012-03-19 11 views
1

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

그들 자신 QObject에서 상속 때문에 다중 상속을 지원하지 않는, 2 개 QDBusAbstractAdaptor 클래스에서 상속 할 수 없으며, QtDBus Adaptor documentation에서 :

클래스는 또한 "D 하나 Q_CLASSINFO의 항목이 있어야합니다 -Bus Interface "이름을 사용하여 내보낼 인터페이스를 선언합니다. 클래스 당 하나의 항목 만 지원됩니다.

따라서 다중 인터페이스를 지원하는 어댑터를 구현할 수 없습니다.

+0

감사합니다. 예를 들어 dbus-cxx 프로젝트는 객체 당 여러 인터페이스를 더 잘 지원합니다. – xtofl

+0

상속받을 수는 없지만, QDBusAbstractAdaptor의 다중 상속을 사용하여 두 개의 DBus 인터페이스를 구현할 필요가 없습니다. –

0

개체를 등록하는 방식에 문제가있는 것처럼 보입니다. 어댑터를 등록하지 말고 오브젝트 자체를 등록해야하며 기본적으로 어댑터의 익스포트 할 수있는 항목은 DBus as per the docs에 게시됩니다. 당신의 예에서

, 당신은 I1AdaptorI2Adaptor 클래스가있는 경우, 당신은 그것들을 초기화해야하며, 다음과 같이 객체를 등록 : 당신이 그런 식으로 그것을 일단

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

, 당신은 어떤 DBUS에 두 인터페이스를 볼 수 있습니다 디버거, d-feet처럼.