dbus会话连接:用qt插槽连接dbus信号,怎么办?

时间:2015-01-18 06:39:45

标签: c++ qt dbus qdbus qtdbus

所以,对于我的生活,我无法让我的对象连接到会话总线。所以,我试图将“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 个答案:

答案 0 :(得分:2)

所以,qtforum.org上的好人们嘲笑我的无知。显然,我需要启用Qt Event系统。通常这是由QApplication类完成的,我没有包含它。一旦包括在内,一切正常。