2016-05-18 2 views
0

Я пытаюсь подключиться к сигналу D-Bus таким образом (:Как получить QDBusConnection :: подключения) Причина ошибки

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

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

QDBusConnection::connect() возвращает логическое значение, как мне получить расширенную информацию об ошибке? Если чек QDBusConnection::lastError() не возвращает никакой полезной информации (как QDBusError::isValid() - false).

ответ

0

Вы можете попробовать эти трюки:

1) Установить QDBUS_DEBUG переменную окружения перед запуском приложения.

export QDBUS_DEBUG=1 

2) Запустить dbus-monitor, чтобы увидеть, что происходит на автобусе. Возможно, вам потребуется установить глобальную политику, чтобы иметь возможность использовать системную шину eavesdrop в зависимости от вашего дистрибутива.

Update:

Вы уверены, что подключение к системной шине удалось? Если это не удается, вы должны, вероятно, проверить политику system.conf и, возможно, создать собственный conf в system.d. Возможно, это полезно post.

Вы можете сначала подключиться к системной шине с помощью QDBusConnection::connectToBus и проверить, удалось ли это с помощью QDBusConnection::isConnected. Только после этого вы пытаетесь подключиться к сигналу и проверить, удалось ли это.

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

Я попробовал оба трюки, но они не помогают, как проблема не на автобусе, но в пределах QtDBus ... – Wizard79

+0

Я обновил свой ответ. Подозревать в подключении к системной шине не удается. – talamaki

+0

Да, он подключается: я могу вызывать методы на одном и том же интерфейсе D-Bus. Я просто получаю сообщение об ошибке, пытающееся подключить SLOT к сигналу D-Bus. Но я не хочу быть слишком конкретным и устранять неполадки в моем конкретном сценарии. Я хотел бы знать, есть ли способ получить причину неудачи. – Wizard79

Смежные вопросы