Сеансовые соединения 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)
Итак, я думаю, это сработает. Я уверен, что мне не хватает какой-то мелкой детали, которая скрыта глубоко в какой-то документации. Кто-нибудь знает, где я иду не так?
1 ответ
Итак, хорошие люди на qtforum.org позабавили мое невежество. Видимо, мне нужно было включить систему Qt Event. Обычно это делается классом QApplication, который я не включил. После включения все работает отлично.