koneksi sesi dbus: menghubungkan sinyal dbus dengan slot qt, bagaimana caranya?

Jadi, seumur hidup saya, saya tidak bisa menghubungkan objek saya ke bus sesi. Jadi, saya mencoba menghubungkan "wakeup" dari "my_obj" ke sinyal dBus "profileChanged". Tapi, walaupun saya yakin (via qbusviewer) sinyal ini dipancarkan, "wakeup" tidak akan berjalan. Berikut cuplikan kode saya:

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 menunjukkan bahwa "profileChanged" memiliki bentuk "void (QString)" dan saya tidak mendapatkan kesalahan atau peringatan apa pun. Berikut adalah keluaran qdbus untuk sinyal tersebut:

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

Jadi, menurutku ini akan berhasil. Saya yakin saya melewatkan beberapa detail kecil yang terkubur jauh di dalam beberapa dokumentasi. Adakah yang tahu di mana kesalahan saya?


person user2602914    schedule 18.01.2015    source sumber


Jawaban (1)


Jadi, orang-orang baik di qtforum.org menghibur ketidaktahuan saya. Rupanya, saya perlu mengaktifkan sistem Qt Event. Biasanya ini dilakukan oleh kelas QApplication, yang tidak saya sertakan. Setelah disertakan, semuanya berfungsi dengan baik.

person user2602914    schedule 20.01.2015