1

したがって、私の人生では、オブジェクトをセッションバスに接続することはできません。そこで、「my_obj」の「wakeup」を 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)

だから、これはうまくいくと思います。いくつかのドキュメントの奥深くに埋もれている細かい詳細が欠けていると確信しています。私がどこで間違っているのか誰にもわかりますか?

4

1 に答える 1

2

それで、qtforum.org の善良な人々は、私の無知をユーモアを交えて説明してくれました。どうやら、Qt イベント システムを有効にする必要がありました。通常、これは QApplication クラスによって行われますが、これは含めませんでした。含まれると、すべて正常に動作します。

于 2015-01-20T02:50:07.487 に答える