NetworkManagerのorg.freedesktop.NetworkManager.Settings.Connection
インターフェイスに「GetSettings」を呼び出してクエリを実行しています。 Dbusタイプの用語でDict of {String, Dict of {String, Variant}}
またはa{sa{sv}}
を返します。私はアプリケーションを構築するためにQt4でQtCreatorを使用しています。{String、{String、Variant}}のDictをQDBusで構文解析するにはどうすればよいですか?
私はこの辞書から有用な情報を得ることができません。 NetworkManagerとDBusとQt4が他のシステムにインストールされている場合、MVEを大きく依存しているため、MVEを提供することはできません。
ここでは、このストリングの辞書とストリングとバリアントの辞書から情報を得るために開発している方法を示します。私はそれを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の知識が不足しているかもしれませんが、私は困惑しています。
また、私はこの優れた答えをチェックアウトしました:How do I extract the returned data from QDBusMessage in a Qt DBus call?しかし、私はdictを解析するためにそれを適応させることができませんでした。
最後にネストされたQVariantに到達する方法を知っていますか?
あなたを助けるためにMCVを持っている方が良いだろう...非常に単純な環境qdbus上でDictを送受信すると、あなたの作業が大幅にエスカレートします。 Btw xmlの "GetSettings"メソッドの定義は何ですか? – miradham