QtDbus - рд░рд╣рд╕реНрдп рдореЗрдВ рдЫрд╛рдпрд╛ рд╣реБрдЖ рдЕрдВрдзреЗрд░рд╛ред рднрд╛рдЧ 1

рд╣рдорд╛рд░реА рдпрд╛рддреНрд░рд╛ рдХреНрдпреВрдЯреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдИ, рд╣рдо рдЗрд╕рдХреЗ рдЙрдЬреНрдЬреНрд╡рд▓ рдкрдХреНрд╖ рд╕реЗ рднрд░реНрддреА рд╣реБрдП, рдФрд░ рдлрд┐рд░ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рдореЗрдВ рд╢рд░реАрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╣рд┐рд╕реНрд╕реЛрдВ рдкрд░ рдПрдХ рд░реИрдХ рдорд┐рд▓рд╛ред

рдпрд╣ рд▓реЗрдЦ рдореБрдЦреНрдп рдХрдерд╛рдирдХ рдХрд╛ рд╕реНрдкрд┐рди-рдСрдл рд╣реИред рдЗрд╕рдореЗрдВ, рдХрд╣рд╛рдиреА QtDBus рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧреАред рдпрд╣ рдХреНрдпреВрдЯреА рдореЙрдбреНрдпреВрд▓ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди рдХреНрдпреВрдЯреА 5.0 рдорд╛рд░рд╛, рдФрд░ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдпрд╣ рддрдереНрдп рд╕рд╛рдордиреЗ рдЖрдпрд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдЧреЛрджреА рдЕрдВрдзреЗрд░реЗ рдХреЗ рд╕рд╛рде рдереАред ред
рдХреЗрд╕ рдирдВрдмрд░ 1ред рдХреИрд╕реЗ рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдкрдХрд╛рдирд╛ рд╣реИ

рдХреНрдпреВрдЯреА рдЧреЛрджреА рдкрд░ DBus рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рдПрдХ рдзрдиреНрдпрд╡рд╛рдж рдХрд╛ рдХрд╛рдо рд╣реИред рд╡рд╣рд╛рдБ рдХреБрдЫ рдмреЗрд╣рддрд░ рд╣реИ - рдпрд╣ рдЦреБрдж dbus рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИред рдФрд░ рдпрджреНрдпрдкрд┐ рдореИрдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рд▓реЗрдЦ рдХреА рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрд░реЗрдЦрд╛ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рддреЛ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реА:
рдЫрд╡рд┐ рдмрд╕ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдкреНрд░рддреНрдпреЗрдХ рдбреА-рдмрд╕ рд╕рдВрджреЗрд╢ рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░реЗрд╖рдХ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рд╛рд░рдг рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╣реИред рдкреНрд░реЗрд╖рдХ рдФрд░ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдкрддреЗ рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреА-рдмрд╕ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрди рд╕рдорд╛рди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪред

рддреЛ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
  1. рдмрд╕ рдореЗрдВ рдПрдХ рдбреЗрдореЙрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ QDBusConnection рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╛рдирдХ рдмрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рддрд░реАрдХреЗ рд╣реИрдВред
  2. рд╡рд╣рд╛рдВ рдЕрдкрдирд╛ рдирд╛рдо рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, рдкрдардиреАрдп рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдирд╛рдо рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡реЗ рд╣рдорд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП, QDBusConnection :: registerService () рд╡рд┐рдзрд┐ рд╣реИ ред
  3. рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ ( QDBusConnection :: registerObject () )ред
  4. рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЪреБрдиреЗрдВ, рдареАрдХ рд╣реИ, рдЙрд╕реЗ рдХреБрдЫ рдирд╛рдо рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред рдбрд┐рдмрдЧрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдмрдиреА рд╣реБрдИ рд╣реИред

рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ:

рдХреЗрд╕ рдирдВрдмрд░ 2ред рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред
рддреЛ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдЗрдП, рдирд░рдХ рдХреЗ рджреНрд╡рд╛рд░ рдЦреБрд▓рддреЗ рд╣реИрдВред рдкрд╣рд▓реА рдмрд╛рдд рд╣рдо рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдПрдХ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдЖрдЗрдП рджреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ: рдкрд┐рдВрдЧ рдФрд░ рдкреЛрдВрдЧ ( рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди), рдЬреЛ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВрдЧреЗред
рдкрд┐рдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛:
main.cpp
#include <stdio.h> #include <QObject> #include <QCoreApplication> #include <QDBusConnection> #include <QDBusConnectionInterface> #include <QDBusServiceWatcher> #include <QDebug> #include "Ping.h" #include "../serviceNameAndProperty.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); if (!QDBusConnection::sessionBus().isConnected()) { fprintf(stderr, "Cannot connect to the D-Bus session bus.\n" "To start it, run:\n" "\teval `dbus-launch --auto-syntax`\n"); return 1; } qDebug()<<"Ping connected to D-bus"; Ping ping; QDBusConnectionInterface *iface = QDBusConnection::sessionBus().interface(); QObject::connect(iface, SIGNAL(serviceRegistered(QString)), &ping, SLOT(connectToService(QString))); QObject::connect(iface, SIGNAL(serviceUnregistered(QString)), &ping, SLOT(disconnect(QString))); QStringList registedServices = iface->registeredServiceNames(); if(registedServices.contains(ping.m_aviableServiceName)) ping.connectToService(ping.m_aviableServiceName); return a.exec(); } 
Ping.h
 #ifndef PING_H #define PING_H #include <QObject> #include <QDBusAbstractInterface> #include <qdbusinterface.h> class Ping : public QObject { Q_OBJECT public: explicit Ping(QObject *parent = 0); public slots: void connectToService(const QString &name); void disconnect(const QString &name); public: QString m_aviableServiceName; private: QDBusInterface *m_interface; QString m_interfaceName; static const QString _propertyName; }; #endif // PING_H 
Ping.cpp
 #include "Ping.h" #include "../serviceNameAndProperty.h" #include <QDBusConnectionInterface> #include <QDebug> const QString Ping::_propertyName(QUIOTING(IMAGE_DATA_SHARED_ID)); Ping::Ping(QObject *parent) : QObject(parent) { m_interface = NULL; m_interfaceName = QString(BUFFER_NAME); m_aviableServiceName = QString(SERVICE_NAME); } void Ping::connectToService(const QString &name) { if(name != m_aviableServiceName) return; qDebug()<<"Connceting"; m_interface = new QDBusInterface(name, "/", m_interfaceName, QDBusConnection::sessionBus(), this); if(!m_interface->isValid()){ qDebug()<<"Invalid interface"<<m_interface->lastError(); delete m_interface; m_interface = NULL; return; } qDebug()<<m_interface->interface(); QVariant var("ku"); var = m_interface->property("imageDataSharedId"); qDebug()<<var; } void Ping::disconnect(const QString &name) { if(name != m_aviableServiceName) return; if(name != m_interface->service()) return; delete m_interface; m_interface = NULL; qDebug()<<"Disconnect"; } 

рдкреЛрдВрдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛:
main.cpp
 #include <QCoreApplication> #include <QDBusConnection> #include <QDBusError> #include <QDebug> #include "Pong.h" #include "../serviceNameAndProperty.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QObject obj; Pong *pong = new Pong(&obj); if( ! QDBusConnection::sessionBus().registerObject("/", &obj)){ fprintf(stderr, "%s\n", qPrintable("Can't register object")); exit(1); } qDebug()<<"Pong connected to D-bus"; if (!QDBusConnection::sessionBus().registerService(SERVICE_NAME)) { fprintf(stderr, "%s\n", qPrintable(QDBusConnection::sessionBus().lastError().message())); exit(1); } qDebug()<<"Test service start"; return a.exec(); } 
Pong.h
 #ifndef PONG_H #define PONG_H #include <QDBusAbstractAdaptor> #include <QDBusVariant> #include "../serviceNameAndProperty.h" class Pong : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", BUFFER_NAME) Q_PROPERTY(QString IMAGE_DATA_SHARED_ID READ imageDataSharedId) public: explicit Pong(QObject *parent = nullptr); QString imageDataSharedId(); private: QString m_imageDataSharedId; }; #endif // PONG_H 
Pong.cpp
 #include "Pong.h" Pong::Pong(QObject *parent) : QDBusAbstractAdaptor(parent) { m_imageDataSharedId = "testImageBufferId"; } QString Pong::imageDataSharedId() { return m_imageDataSharedId; } 

рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рд╕реЗрд╡рд╛NameAndProperty.h
 #ifndef SERVICENAMEANDPROPERTY_H #define SERVICENAMEANDPROPERTY_H #define SERVICE_NAME "ru.sonarh.dbus.pong" #define BUFFER_NAME "buffer" #define IMAGE_DATA_SHARED_ID imageDataSharedId #define QUIOTING(text) #text #endif // SERVICENAMEANDPROPERTY_H 

рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд╣рд▓реЗ рдкрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкреЛрдВрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╣реИ:

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкрд┐рдВрдЧ рдХреЛ рдкреЛрдВрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо qdbusviewer рдХреЛрдб рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ:
 QDBusConnectionInterface *iface = c.interface(); connect(iface, SIGNAL(serviceRegistered(QString)), this, SLOT(serviceRegistered(QString))); connect(iface, SIGNAL(serviceUnregistered(QString)), this, SLOT(serviceUnregistered(QString))); connect(iface, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(serviceOwnerChanged(QString,QString,QString))); 

рдпрд╣ рдПрдХ рд╣реА рдмрд╛рдд рд▓рдЧрддреА рд╣реИред рд▓реЗрдХрд┐рди рдирд╣реАрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реНрд▓реЙрдЯ рд╣реИрдВ:
 void QDBusViewer::serviceOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) { QModelIndex hit = findItem(servicesModel, name); if (!hit.isValid() && oldOwner.isEmpty() && !newOwner.isEmpty()) serviceRegistered(name); else if (hit.isValid() && !oldOwner.isEmpty() && newOwner.isEmpty()) servicesModel->removeRows(hit.row(), 1); else if (hit.isValid() && !oldOwner.isEmpty() && !newOwner.isEmpty()) { servicesModel->removeRows(hit.row(), 1); serviceRegistered(name); } } 

рдЕрдЪрд╛рдирдХ, рдХреЛрдб рдбреЙрдХ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдареАрдХ рд╣реИ, рд╣рдо рдШрд░ рдкрд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ:
 void Ping::manageConnection(const QString& name, const QString &oldVAlue, const QString &newValue) { if(name != m_aviableServiceName) return; if(newValue.isEmpty()) disconnect(name); else connectToService(name); } 

рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреЗрд╡рд▓ serviceOwnerChanged рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИ, рдЯреНрд░реЙрд▓реНрд╕ рдиреЗ рд╣рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреЗрдд рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдареАрдХ рд╣реИ, рддреЛ рд╣рдо рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 QDBusServiceWatcher watcher; watcher.setConnection(QDBusConnection::sessionBus());; QObject::connect(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)),&ping, SLOT(manageConnection(QString,QString,QString))); 
рд╕рдВрдХрд▓рди рдХрд░реЗрдВ, рдЪрд▓рд╛рдПрдВред рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ ... рдЕрд░реЗ, рдЯреНрд░реЛрд▓, рддреБрдо рдмрд╣реБрдд рдореЛрдЯреА рдЯреНрд░реЛрд▓! рдмрддрд╛рдЗрдП рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕ рдЪреАрдЬ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓? рдирд╣реАрдВ, рдореИрдВ рд╕рдордЭрддреА рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝ рджреВрдВ
  watcher.addWatchedService(ping.m_aviableServiceName); 
рдпрд╣ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рд╣рдо рднреА рдкрдВрдЬреАрдХрд░рдг рдФрд░ рд╕реЗрд╡рд╛ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рдирд╛рдо рдирд╣реАрдВ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдореБрдЦреМрдЯрд╛?

рдХреЗрд╕ рдирдВрдмрд░ 3ред рдХрд╛рдо рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред
рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкрд╣рд▓реЗ рд░рд╛рдЙрдВрдб рдХреЛ рдкрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдареАрдХ рдЙрд╕рдХреЗ рдмрд╛рдж рджреВрд╕рд░рд╛ рдЖрддрд╛ рд╣реИ! рдФрд░ рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рдпрд╛рдиреА рд╣рдо рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗред рд╣рдо рдлрд┐рд░ рд╕реЗ qdbusviewer рдореЗрдВ рдЪрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рджреЗрдЦрддреЗ рд╣реИрдВ:
  QDBusMessage message = QDBusMessage::createMethodCall(sig.mService, sig.mPath, QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("Get")); QList<QVariant> arguments; arguments << sig.mInterface << sig.mName; message.setArguments(arguments); c.callWithCallback(message, this, SLOT(dumpMessage(QDBusMessage))); 

рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк, рд╣рд╛рдБ, рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЧреЛрджреА рд╣рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдирд░рдо, рдЕрдзрд┐рдХ рд╕рд╛рд░ рдХреБрдЫ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд░ рдЕрдм рдЗрди рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓ рджреЗрдВ
  QDBusInterface iface(sig.mService, sig.mPath, sig.mInterface,c); if( !iface.isValid()) qDebug()<<(QDBusError(iface.lastError()).message()); else qDebug()<<iface.property(sig.mName.toLatin1().data()); 
рд╡рд╣ рд╕рдорд╕реНрдпрд╛ рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рд░реЛрдХрд╛ рд╡рд╣ рдлрд┐рд░ рд╕реЗ рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реА рдЗрдЪреНрдЫрд╛ рдХреНрдпреВрдЯреА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЖрдирд╛ рд╣реИред рд╕рдорд╛рдзрд╛рди рд▓рд▓рд╛рдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдореБрдЭреЗ рд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рдорд┐рд▓реА, рдФрд░ рдореЗрд░рд╛ рдорд╕реНрддрд┐рд╖реНрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдерд╛ред рд╕рдорд╛рдзрд╛рди рдкрдХреНрд╖ рд╕реЗ рдЖрдпрд╛: рдХреЗрдбреАрдИ рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреИрд╕реЗ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐
рдирд╛рдордХрд░рдг рд╕реНрд╡рд░реВрдкреЛрдВ рдФрд░ рдЙрдирдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рд╕реЗрд╡рд╛ рдХрд╛ рдирд╛рдордиреЗрдЯрд╡рд░реНрдХ рд╣реЛрд╕реНрдЯрдирд╛рдордбреЙрдЯ-рдЕрд▓рдЧ ("рд╣реЛрд╕реНрдЯрдирд╛рдо рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ")
рд╡рд╕реНрддреБ рдкрдеURL рдкрде рдШрдЯрдХрд╕реНрд▓реЗрд╢-рдЕрд▓рдЧ ("рдПрдХ рдкрде рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ")
рдЗрдВрдЯрд░рдлрд╝реЗрд╕рдкреНрд▓рдЧрдЗрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдбреЙрдЯ рдЕрд▓рдЧ
рдпрд╣ рд╕рд┐рдлрд╛рд░рд┐рд╢ рдпрд╛ рд╕рдВрдШ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдордЭреМрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк BUFFER_NAME рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯ fdgfsgf.buffer рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдбреА-рдмрд╕ рдХреА рдЕрдзрд┐рдХ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд╛рдо рдореЗрдВ рдПрдХ рдбреЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдХреНрдпреВрдмрд╕реНрдпреВрд╡реНрдпреВрдЕрд░ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдмреЛрдирд╕ рд╕реНрддрд░
рдпрджрд┐ рдкрд╛рдВрдЧ рдореЗрдВ, main.cpp рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдмрдирд╛рдПрдБ:
 Pong pong; if( ! QDBusConnection::sessionBus().registerObject("/", &pong)){ 
рддрдм рдореЗрд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯреЗрд╢рди рджреЛрд╖ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ;

рдирд┐рд╖реНрдХрд░реНрд╖ред

рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд▓реЗрдЦ рдХреЛ рдПрдХ рд▓реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рдпреЛрдЬрдирд╛рдмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛, рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╢реНрди рд╕рдВрдЪрд┐рдд рд╣реЛ рдЧрдП рдФрд░ рд▓реЗрдЦ рдмрдврд╝рддрд╛ рдЧрдпрд╛ рдФрд░ рдмрдврд╝рддрд╛ рдЧрдпрд╛ред рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдореВрд▓ рдЖрдХрд╛рд░ рддрдХ рдмрдврд╝ рдЧрдпрд╛ рдореВрд▓ рдмрд╛рддреЗрдВ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА, рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?

рд╕рдВрджрд░реНрдн

Source: https://habr.com/ru/post/In185212/


All Articles