我正在查询 NetworkManager 的org.freedesktop.NetworkManager.Settings.Connection
接口,在上面调用“GetSettings”。它返回一个Dict of {String, Dict of {String, Variant}}
或a{sa{sv}}
Dbus 类型术语。我正在使用 QtCreator 和 Qt4 来构建我的应用程序。
我似乎无法从这本词典中得到一条有用的信息。我无法提供 MVE,因为如果 NetworkManager 和 DBus 以及 Qt4 安装在某人的系统上,它会严重依赖。
这是我正在开发的从字符串字典和字符串和变体字典中获取信息的方法。将它输送到 qDebug(): 时,我可以看到我想要的所有好数据qDebug()<<reply
。
void GetInfo()
{
//sysbus just means the system DBus.
QDBusInterface connSettings("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings/1", "org.freedesktop.NetworkManager.Settings.Connection", sysbus);
QDBusMessage reply = connections.call("GetSettings");
if(reply.type() == QDBusMessage::ReplyMessage)
{
//I have tried everything I can imagine here,
//QVariant g = reply.arguments().at(0).value<QVariant>(); did not work
//g.canConvert<QMap>(); returns false, in contrast to what KDE says.
//QDbusArgument g = query.arguments().at(0).value<QDBusArgument>();
//g.beginMap(); and such don't work
}
}
很难找到解析 Dict 类型的信息。我发现提供一些信息的唯一来源是KDE。它说“DBus Dict 类型应该映射到 QMap,要遵循的示例..”并且 Google 上没有其他点击或示例存在。也许我缺少一些基本的 DBus 知识,但我很难过。
我还查看了这个出色的答案:如何在 Qt DBus 调用中从 QDBusMessage 中提取返回的数据?但我无法调整它来解析字典。
有人知道如何到达最后一个嵌套的 QVariant 吗?