2017-01-20 11 views
0

QTプログラミングを始めました。 DBUSを使用して2つのqtアプリケーション間で通信しようとしていますが、次のようにインターフェイスアダプタを作成して通信できました。qt dbusのサーバークライアント間の通信

  • サービスをサーバーアプリケーションに登録しています。
  • クライアント側のインターフェイスオブジェクトに接続し、サーバー内のメソッドを呼び出します。

私の質問は、サーバーがクライアントにメッセージを返さなければならない場合、クライアントは新しいインターフェイスを作成する必要がありますか、それとも他の方法がありますか?

答えて

0

D-Busには信号があります(Qt信号ではありませんが、QDBusAbstractAdaptorと一緒に使用すると信号にマッピングされます)。

class MainApplicationAdaptor: public QDBusAbstractAdaptor 
{ 
    Q_OBJECT 
    Q_CLASSINFO("D-Bus Interface", "org.kde.DBus.MainApplication") 
    Q_PROPERTY(QString caption READ caption WRITE setCaption) 
    Q_PROPERTY(QString organizationName READ organizationName) 
    Q_PROPERTY(QString organizationDomain READ organizationDomain) 

    ... 

signals: 
    void aboutToQuit(); 
    void mainWindowHasFocus(); 
}; 

インタフェースの定義:

interface org.kde.DBus.MainApplication 
{ 
    property readwrite STRING caption 
    property read STRING organizationName 
    property read STRING organizationDomain 

    method quit() annotation("org.freedesktop.DBus.Method.NoReply", "true") 
    method reparseConfiguration() 
    method mainWindowObject(out STRING) 
    method disableSessionManagement(in BOOLEAN enable) 

    signal aboutToQuit() 
    signal mainWindowHasFocus() 
} 

This example

は、クライアントに通知を送信することができ、サーバD-BUSオブジェクトを示してい