Как я могу подключить свой слот QT для ответа на сигналы D-BUS, генерируемые какой-либо сторонней службой?
Правильно ли следующее?
QDBusConnection bus = QDBusConnection::systemBus();
bus.connect("com.me.foo", "/", "com.me.foo.bar", "foo",
this, SLOT(fooSignal()));
Сначала вы должны выяснить, на какой шине зарегистрирована эта служба (система или сеанс). Для сеансовой шины вам нужно изменить QDBusConnection :: systemBus () на QDBusConnection :: sessionBus ()
Чтобы получить правильные значения аргументов для connect (), вам нужно получить имя службы, путь к объекту, интерфейс и имя сигнала.
Самый простой способ выполнить обе задачи — использовать приложение qdbusviewer, которое является частью инструментов Qt dev (qt4-dev-tools или qttools5-dev-tools в Ubuntu). Это позволяет видеть сервисы на обоих автобусах, перемещаться по деревьям объектов и перечислять методы. Свойства и сигналы интерфейсов D-Bus, реализуемые каждым зарегистрированным объектом.
Других решений пока нет …