сеансовые соединения dbus: подключение сигналов dbus к слотам qt, как это можно сделать?

Итак, на всю жизнь я не могу заставить свой объект подключиться к сеансовой шине. Итак, я пытаюсь подключить «пробуждение» «my_obj» к сигналу dBus «profileChanged». Но, несмотря на то, что я уверен (через qbusviewer), что этот сигнал испускается, «пробуждение» не запускается. Вот фрагмент моего кода:

const QString service = "org.kde.Solid.PowerManagement";
const QString path = "/org/kde/Solid/PowerManagement";
const QString interface = "org.kde.Solid.PowerManagement";    

QDBusConnection bus = QDBusConnection::sessionBus();

if (!bus.isConnected()) 
{
      qDebug() << "Can't connect to the D-Bus session bus.\n";
}                

class my_wake_up_class : public QObject
{
      Q_OBJECT
public slots:
      void wakeup(QString); //Does not run!
};

my_wake_up_class my_obj;

bool conn = bus.connect(service, path, interface, "profileChanged", &my_obj, SLOT(wakeup(QString)));
if (!conn) qDebug() << "not connected";

qDBus показывает, что «profileChanged» имеет вид «void (QString)», и я не получаю ни ошибок, ни предупреждений. Вот вывод qdbus для этого конкретного сигнала:

signal void org.kde.Solid.PowerManagement.profileChanged(QString)

Итак, я думаю, это сработает. Я уверен, что упустил какую-то мелкую деталь, скрытую глубоко в какой-то документации. Кто-нибудь знает, где я ошибаюсь?


person user2602914    schedule 18.01.2015    source источник


Ответы (1)


Итак, добрые люди с qtforum.org посмеялись над моим невежеством. Судя по всему, мне нужно было включить систему Qt Event. Обычно это делает класс QApplication, который я не включал. После включения все работает нормально.

person user2602914    schedule 20.01.2015