Метод Dbus.Properties Get не работает в qt4

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

   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!

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

1 ответ

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

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

вместо

bool value = ret.arguments()[0].value<bool>(); 
Другие вопросы по тегам