繁体   English   中英

如何将 Qt DBus 调用中的 QDBusMessage 中的数据转换为 QString c++

[英]How do I convert data from QDBusMessage in a Qt DBus call to a QString c++

在下面的代码中,我正在获取有关我的蜂窝调制解调器的信息。 结果是我期望的数据。 现在我需要将“结果”转换为 QString,这样我就可以处理数据并获取对象路径,或者直接提取对象路径。 我尝试了各种方法来转换结果,但它们要么抛出无法转换 qdbusmessage 错误,要么返回空字符串。 谁能指出我正确的方向。 提前致谢

  QDBusInterface interface( "org.ofono",
                                "/",
                                "org.ofono.Manager",
                                QDBusConnection::systemBus() );

      QDBusMessage result = interface.call( "GetModems");
   qDebug() << "we got a" << result ;
//the last thing I tried was
QString eventReceivedName= result.arguments().at(0).value<QString>();//makes a empty string

这是 qDebug 的输出,也是我所期待的。

QDBusMessage(type=MethodReturn, service=":1.4", signature="a(oa{sv})", contents=([Argument: a(oa{sv}) {[Argument: (oa{sv}) [ObjectPath: /hfp/org/bluez/hci0/dev_XX_0D_XX_81_XX_98], [Argument: a{sv} {"Online" = [Variant(bool): false], "Powered" = [Variant(bool): false], "Lockdown" = [Variant(bool): false], "Emergency" = [Variant(bool): false], "Interfaces" = [Variant(QStringList): {}], "Features" = [Variant(QStringList): {}], "Name" = [Variant(QString): "moto g power"], "Type" = [Variant(QString): "hfp"]}]]}]) )

因此,在修剪院子并在谷歌上多花几个小时后,我终于确定“结果”中的唯一论点是键、值、映射。 然后通过更多搜索,我找到了从地图中提取数据的代码。 它返回/hfp/org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX正是我需要的。 工作代码如下。 谢谢大家的回复。

QDBusInterface interface( "org.ofono",
                                    "/",
                                    "org.ofono.Manager",
                                    QDBusConnection::systemBus() );

        QDBusMessage result = interface.call( "GetModems");

        QList<QVariant> args = result.arguments();
               const QDBusArgument &arg = args[0].value<QDBusArgument>();

               arg.beginMap();
               while (!arg.atEnd()) {
                   QString key;
                   QDBusVariant value;
                   arg.beginMapEntry();
                   arg >> key >> value;
                   arg.endMapEntry();

                   qDebug() << key;//could get the value as well with value.variant() 
               }
               arg.endMap();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM