Qt 在DTD-BUS对象内省中注释复杂类型的正确方法是什么?
我正在使用qtd-Bus库与BlueZ服务交互。平台是Linux操作系统 我已经导出了/org/bluez/hci0对象的DTD D-BUS对象内省,并添加了所需的注释(请参见:) 考虑以下XML片段:Qt 在DTD-BUS对象内省中注释复杂类型的正确方法是什么?,qt,dbus,bluez,Qt,Dbus,Bluez,我正在使用qtd-Bus库与BlueZ服务交互。平台是Linux操作系统 我已经导出了/org/bluez/hci0对象的DTD D-BUS对象内省,并添加了所需的注释(请参见:) 考虑以下XML片段: <method name="SetDiscoveryFilter"> <arg name="properties" type="a{sv}" direction="in" /> <annotation name="org.qtproject.
<method name="SetDiscoveryFilter">
<arg name="properties" type="a{sv}" direction="in" />
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="ProperyList"/>
</method>
<signal name="PropertiesChanged">
<arg name="interface" type="s" direction="in" />
<arg name="changed_properties" type="a{sv}" direction="in" />
<arg name="invalidated_properties" type="as" direction="in" />
<annotation name="org.qtproject.QtDBus.QtTypeName.In1" value="InvalidatedProperties"/>
</signal>
编译时,我遇到了一个与Q_DECLARE_元类型相关的“重新定义”错误。实际上,两种类型的“QVariantMap”的注册都存在问题
处理这种情况的正确方法是什么?我必须用相同的值注释DTD-BUS对象内省中的所有“a{sv}”类型吗
考虑到上面的代码只是一个示例。我的Qt代码需要处理几个接口,其中“a{sv}”类型的参数在几个不同的上下文中使用
“a{sv}”类型的抽象可以是一种解决方案吗
考虑以下注释:
<annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="DbusQVariantMap"/>
注释是可访问的还是可以采用不同的解决方案?我找到的解决方案是使用一个QVariantMap typedef并定义两个附加结构来包装此对象
typedef QVariantMap DBusQVariantMap;
Q_DECLARE_METATYPE(DBusQVariantMap)
struct PropertyList
{
DBusQVariantMap propertyListMap;
};
Q_DECLARE_METATYPE(PropertyList)
struct ChangedProperties
{
DBusQVariantMap changedPropertiesMap;
};
Q_DECLARE_METATYPE(ChangedProperties)
该结构用作QVariantMap(QMap)的容器。有关DBusQVariantMap内容的信息在结构名称中有详细说明
typedef QVariantMap DBusQVariantMap;
Q_DECLARE_METATYPE(DBusQVariantMap)
struct PropertyList
{
DBusQVariantMap propertyListMap;
};
Q_DECLARE_METATYPE(PropertyList)
struct ChangedProperties
{
DBusQVariantMap changedPropertiesMap;
};
Q_DECLARE_METATYPE(ChangedProperties)