2015-01-18 2 views
0

Я пытаюсь получить значение свойства от dbus. Я не получаю ошибки, но я тоже не получаю правильное значение. Другими словами, возвращаемое значение не совпадает с значением, возвращаемым qdbus. Вот мой код:Dbus.Properties Метод get не работает в qt4

const QString service = "org.freedesktop.UPower"; 
    const QString path = "/org/freedesktop/UPower/devices/line_power_ADP1"; 
    const QString interface = "org.freedesktop.UPower.Device"; 
    const QString property = "Online";  

    QDBusConnection bus = QDBusConnection::systemBus(); 

    QList<QVariant> args; 
    args.append(QVariant(interface)); 
    args.append(QVariant(property)); 

    QDBusMessage mesg = QDBusMessage::createMethodCall(service, path, "org.freedesktop.DBus.Properties", "Get"); 
    mesg.setArguments(args); 

    QDBusMessage ret = bus.call(mesg); 

    if (ret.type() == QDBusMessage::ErrorMessage) 
    { 
     qDebug() << "Error getting property value. " << ret.errorName() << ": " << ret.errorMessage(); 
    } 

    bool value = ret.arguments()[0].value<bool>(); //incorrect value! 

Насколько я могу судить, это должно получить свойство «Интернет», соответствующий путь «/ орг/Freedesktop/UPower/устройства/line_power_ADP1» службы «org.freedesktop .UPower "на системной шине. Но на самом деле все, что он получает, это мусор - не ошибка, а только хлам.

ответ

0

Ahhhh ... Ну, по-видимому (просто чтобы ввести в заблуждение lol), dbus отправляет информацию как «QDBusVariant». Поэтому мне нужно преобразовать «QVariant» вывода QDBusMessage в «QDBusVariant», а затем вернуться к «QVariant», а затем преобразовать его в фактическое значение (в данном случае «bool»). Другими словами, я должен использовать:

bool value = ret.arguments()[0].value<QDBusVariant>().variant().value<bool>(); 

вместо

bool value = ret.arguments()[0].value<bool>();