2015-01-18 17 views
1

그래서 내 인생에서 내 개체를 세션 버스에 연결할 수 없습니다. 그래서, "my_obj"의 "wakeup"을 dBus 신호 "profileChanged"에 연결하려고합니다. 그러나 qbusviewer를 통해이 신호가 방출되었다고 확신 할지라도 "wakeup"은 실행되지 않습니다. 여기 내 코드 중 일부이다dbus 세션 연결 : dbus 신호를 qt 슬롯에 연결하는 방법, 어떻게 수행 할 수 있습니까?

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은 "무효 (QString)" "profileChanged는"양식을 가지고 있음을 보여주고 난 어떤 오류도 경고를받지 못했습니다. 다음은 특정 신호에 대한 qdbus 출력입니다.

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

이렇게 생각해 봅니다. 나는 어떤 문서 안에 깊숙히 묻혀있는 몇 분의 세부 사항을 놓치고 있다고 확신한다. 아무도 내가 어디로 잘못 가고 있는지 알 수 없을까?

답변

2

그래서 qtforum.org의 유능한 사람들은 내 무지를 유쾌하게했습니다. 분명히 Qt 이벤트 시스템을 활성화해야했습니다. 일반적으로 이것은 포함하지 않은 QApplication 클래스에 의해 수행됩니다. 일단 포함되면 모든 것이 잘 작동합니다.