Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在DTD-BUS对象内省中注释复杂类型的正确方法是什么?_Qt_Dbus_Bluez - Fatal编程技术网

Qt 在DTD-BUS对象内省中注释复杂类型的正确方法是什么?

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.

我正在使用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.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)