2016-05-18 16 views
0

Ich versuche, an ein D-Bus-Signal auf diese Weise zu verbinden:Anfahrt QDBusConnection :: connect() Störungsursache

bool result = QDBusConnection::systemBus().connect(
    "foo.bar", // service 
    "/foo/bar", // path 
    "foo.bar", // interface 
    "SignalSomething", 
    this, 
    SLOT(SignalSomethingSlot())); 

if(!result) 
{ 
    // Why!? 
} 

QDBusConnection::connect() gibt einen boolean, wie bekomme ich Fehlerinformationen verlängert? Wenn eine Überprüfung QDBusConnection::lastError() gibt es keine nützlichen Informationen zurück (wie QDBusError::isValid() ist false).

Antwort

0

Sie könnten diese Tricks versuchen:

1) Stellen Sie QDBUS_DEBUG Umgebungsvariable, bevor Sie Ihre Anwendung ausgeführt wird.

export QDBUS_DEBUG=1 

2) Starten Sie dbus-monitor zu sehen, was auf dem Bus geschieht. Möglicherweise müssen Sie eine globale Richtlinie festlegen, um abhängig von Ihrer Distribution den Systembus eavesdrop verwenden zu können.

Update:

sind sicher, dass Sie mit dem Systembus verbindet gelungen? Wenn es fehlschlägt, sollten Sie wahrscheinlich die Richtlinie system.conf überprüfen und möglicherweise ein eigenes Conf in system.d erstellen. Diese post könnte hilfreich sein.

Sie könnten zuerst eine Verbindung zum Systembus mit QDBusConnection::connectToBus herstellen und prüfen, ob es mit QDBusConnection::isConnected erfolgreich war. Erst danach versuchen Sie, sich mit dem Signal zu verbinden und zu prüfen, ob das erfolgreich war.

QDBusConnection bus = QDBusConnection::connectToBus(QDBusConnection::systemBus, myConnectionName); 
if (bus.isConnected()) 
{ 
    if(!bus.connect(...)) 
    { 
     // Connecting to signal failed 
    } 
} 
else 
{ 
    // Connecting to system bus failed 
} 
+0

Ich habe versucht, sowohl die Tricks, aber sie helfen nicht als das Problem nicht auf dem Bus ist aber innerhalb QtDBus ... – Wizard79

+0

ich meine Antwort aktualisiert. Die Verbindung mit dem Systembus ist nicht erfolgreich. – talamaki

+0

Ja, es verbindet: Ich kann Methoden auf der gleichen D-Bus-Schnittstelle aufrufen. Ich bekomme nur einen Fehler beim Versuch, einen SLOT mit einem D-Bus-Signal zu verbinden. Aber ich möchte nicht zu spezifisch sein und mein spezifisches Szenario nicht behandeln. Ich würde gerne wissen, ob es einen Weg gibt, den Grund für den Fehler zu finden. – Wizard79