IviSimulator QML 类型

全局对象,用于在 QIviSimulationEngine 中解析模拟数据。 更多...

导入声明import

属性

方法

详细介绍

IviSimulator 全局对象提供对 QIviSimulationEngine 模拟数据的访问,并提供了用于解析和检查边界的辅助函数。

注意:此对象仅在 QIviSimulationEngine 内部可用,并且不能从外部访问。

数据格式

IviSimulator 预期其数据已以解析形式提供。通常这是通过 QIviSimulationEngine::loadSimulationData() 函数实现的,它期望文件为 JSON 格式。

接口

由于模拟 QML 文件可以使用多个接口,因此模拟数据也支持多个数据集。这些数据集通过接口名称的反向 DNS 表示来识别

{
  "QIviClimateControl": {
    ...
  },
  "org.qt-project.QIviWindowControl": {
    ...
  }
}

可以使用 findData() 方法查找特定接口的数据。

属性

接口的每个属性的设置(例如界限)定义在数据集中。

{
  "QIviClimateControl": {
    "airConditioningEnabled": {
      "default": true
    },
    "steeringWheelHeater": {
      "minimum": 0,
      "default": 0
    },
    "fanSpeed": {
      "range": [0, 5]
    }
  }
}

对于名为 QIviClimateControl 的接口,为属性 airConditioningEnabledsteeringWheelHeaterfanSpeed 定义了设置。

设置对象可以存储多个称为 的约束。当前支持以下域:

default 包含属性在客户端连接时应具有的默认值。

minimum 每个新设置的值都需要大于此值。

maximum 每个新设置的值都需要小于此值。

range 每个新设置的值都需要在列表中的两个值之间。

注意:range 中的值始终覆盖 minimummaximum 域。

domain 每个新设置的值都需要在此列表中。

unsupported 更改属性是不可能的,并且将显示 "不支持" 错误消息。

可以使用 parseDomainValue() 函数或使用 defaultValue() 来加载特定域的值,当只关注 default 域时。

结构和枚举

因为JSON不是类型安全的,所以结构和枚举需要以特殊格式存储。枚举可以按以下方式存储

{
  "QIviClimateControl": {
    "recirculationMode": {
      "default": {
        "type": "enum",
        "value": "QtIviVehicleFunctionsModule::RecirculationOff"
      }
    }
  }
}

结构可以考虑使用结构的名称作为类型以类似方式存储

{
  "AddressBook": {
    "contactList": {
      "default": [
        {
          "type": "Contact",
          "value": [
            "foo",
            23,
            true
          ]
        },
        {
          "type": "Contact",
          "value": [
            "bar",
            12,
            false
          ]
        }
      ]
    }
  },
  }
}

要正确使用这些值初始化结构,结构需要提供一个以QVariant作为参数的构造函数。对于给定的contact示例,此构造函数可以如下所示

Contact::Contact(const QVariant &variant)
    : Contact()
{
    QVariant value = qtivi_convertFromJSON(variant);
    // First try to convert the values to a Map or a List
    // This is needed as it could also store a QStringList or a Hash
    if (value.canConvert(QVariant::Map))
        value.convert(QVariant::Map);
    if (value.canConvert(QVariant::List))
        value.convert(QVariant::List);

    if (value.type() == QVariant::Map) {
        QVariantMap map = value.toMap();
        if (map.contains(QStringLiteral("name")))
            d->m_name = map.value(QStringLiteral("name")).value<QString>();
        if (map.contains(QStringLiteral("age")))
            d->m_age = map.value(QStringLiteral("age")).value<int>();
        if (map.contains(QStringLiteral("isMarried")))
            d->m_isMarried = map.value(QStringLiteral("isMarried")).value<bool>();
    } else if (value.type() == QVariant::List) {
        QVariantList values = value.toList();
        d->m_name = values.value(0).value<QString>();
        d->m_age = values.value(1).value<int>();
        d->m_isMarried = values.value(2).value<bool>();
    }
}

区域

对于区域接口,支持的区域通常存储在zones属性中的列表中

{
  "QIviClimateControl": {
    "zones": [
      "FrontLeft",
      "FrontRight",
      "Rear"
    ]
  }
}

对于每个支持的区域,也可以提供特定区域的值,例如

{
  "QIviClimateControl": {
    "targetTemperature": {
      "maximum": 30.0,
      "default": {
        "FrontLeft": 21.0,
        "FrontRight": 22.5,
        "=": 0.0
      }
    }
  }
}

这表示targetTemperature属性的最大值是30,默认值是区域特定的,对于FrontLeft区域是21.5,而对于FrontRight区域则是22.5。未指定区域的targetTemperature温度初始化为0.0

属性文档

simulationData : 对象

提供在QIviSimulationEngine::loadSimulationData()中解析的模拟数据


方法文档

checkSettings(对象 data, var value, 字符串 zone)

data中搜索给定的zone的所有边界设置,并返回提供的value是否满足此约束。

要显示当值不在边界内时的有意义错误消息,可以使用constraint()函数。

另请参阅constraint()


constraint(对象 data, 字符串 zone)

data中搜索给定的zone的所有边界设置,并以人类可读的形式返回约束(这是对新设置值实施的约束)。

这对于与checkSettings()相关的错误消息很有用。

另请参阅checkSettings()


defaultValue(对象 data, 字符串 zone)

提供存储在data中给定的zone的默认值。如果zone未定义或数据未为给定的zone提供默认值,则返回可用的未指定区域默认值。

这只是一个方便的函数,它通过使用域default调用parseDomainValue()


findData(对象 data, 字符串 interface)

data中搜索密钥interface,并返回存储的值。如果没有为此interface找到数据,则返回未定义。

如果interface是反向NDS名称,它首先搜索完整的字符串。如果没有找到密钥,它将开始使用简短名称再次搜索,直到找到具有该名称的密钥。

例如,对于接口org.qt-project.ClimateControl,它按以下顺序搜索密钥

  1. org.qt-project.ClimateControl
  2. qt-project.ClimateControl
  3. ClimateControl

initializeDefault(对象 data, QObject*object)

将从data中读取的默认值应用到object上。

如果 对象 支持区域划分,则默认值仅应用于正确的区域。


parseDomainValue('object data', string domain, string zone)

在指定 区域data 中搜索 domain。如果 区域 未定义或数据未为此区域提供此域,如果可用,则返回未区域化的域值。


©2020 The Qt Company Ltd. 本文档中的文档贡献归其各自所有者所有。本文档根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款提供许可。Qt和相应的标志是芬兰及/或全球其他地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。