2017-01-20 4 views
0

Я новичок в программировании QT. Я пытаюсь установить связь между двумя qt-приложениями с помощью DBUS, мне удалось создать интерфейсный адаптер и установить связь следующим образом:связь между сервером-клиентом в qt dbus

  • Регистрация службы на серверном приложении.
  • Подключение к интерфейсу объекта на стороне клиента и вызов методов на сервере.

Мой вопрос в том, должен ли сервер отправлять обратные сообщения клиенту, должен ли клиент создать новый интерфейс или есть ли другой способ, которым это можно сделать?

ответ

0

D-Bus имеет сигналы (не сигналы Qt, но они отображаются на сигналы, если они используются с QDBusAbstractAdaptor).

This example показывает сервер D-Bus объект, который может отправлять уведомления для клиентов: определение

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() 
}