qdbus 复杂类型
2019獨角獸企業重金招聘Python工程師標準>>>
openSUSE imagewriter is a GPL licensed project which contains an example of how to do this. (Relevant files: udisks2_interface.*)
a{sv} is a dict of string:variant pairs. QVariantMap would fit this signature.
a{sa{sv}} is a dict of string:a{sv} pairs. QMap<QString, QVariantMap> would fit this signature.
a{oa{sa{sv}}} is a dict of objectpath:a{sa{sv}} pairs. QMap<QDBusObjectPath, QMap<QString, QVariantMap>> would fit this signature.
We should hide those angle-brackets behind some typedefs in a header file:
typedef QMap<QString, QVariantMap> InterfaceList; typedef QMap<QDBusObjectPath, InterfaceList> ManagedObjectList; Then declare their QMetaTypes in the same header file:
Q_DECLARE_METATYPE(InterfaceList) Q_DECLARE_METATYPE(ManagedObjectList) Then register them with the Qt metatype system at runtime:
qDBusRegisterMetaType<InterfaceList>(); qDBusRegisterMetaType<ManagedObjectList>(); Then we can annotate the XML:
<method name="GetManagedObjects"> <arg type="a{oa{sa{sv}}}" name="objects" direction="out"> <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="ManagedObjectList"/> </arg> </method> <signal name="InterfacesAdded"> <arg type="o" name="object"/> <arg type="a{sa{sv}}" name="interfaces"> <annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="InterfaceList"/> </arg> </signal>
轉載于:https://my.oschina.net/u/1176559/blog/1922178
總結
以上是生活随笔為你收集整理的qdbus 复杂类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pointer-events属性
- 下一篇: 【跃迁之路】【545天】程序员高效学习方