Dbus.Properties Get方法在qt4中不起作用

时间:2015-01-18 00:33:47

标签: qt4 dbus qdbus

我试图从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!

据我所知,这应该得到&#34; Online&#34;对应于路径&#34; / org / freedesktop / UPower / devices / line_power_ADP1&#34;服务&#34; org.freedesktop.UPower&#34;在系统总线上。但实际上,它所得到的只是垃圾 - 没有错误,只有垃圾。

1 个答案:

答案 0 :(得分:0)

啊......好吧,显然(只是让人困惑)lbus将信息发送为“QDBusVariant”。所以我需要将QDBusMessage输出的“QVariant”转换为“QDBusVariant”,然后再转换为“QVariant”,然后将其转换为实际值(在本例中为“bool”)。换句话说,我应该使用:

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

而不是

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