IviSimulator QML 类型
全局对象,用于在 QIviSimulationEngine 中解析模拟数据。 更多...
导入声明 | import |
属性
- simulationData : object
方法
- checkSettings(object data, var value, string zone)
- constraint(object data, string zone)
- defaultValue(object data, string zone)
- findData(object data, string interface)
- initializeDefault(object data, QObject*object)
- parseDomainValue(object data, string domain, string zone)
详细介绍
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
的接口,为属性 airConditioningEnabled
、steeringWheelHeater
和 fanSpeed
定义了设置。
设置对象可以存储多个称为 域 的约束。当前支持以下域:
default 包含属性在客户端连接时应具有的默认值。
minimum 每个新设置的值都需要大于此值。
maximum 每个新设置的值都需要小于此值。
range 每个新设置的值都需要在列表中的两个值之间。
注意:在 range
中的值始终覆盖 minimum
和 maximum
域。
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。
属性文档
提供在QIviSimulationEngine::loadSimulationData()中解析的模拟数据
方法文档
在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,它按以下顺序搜索密钥
- org.qt-project.ClimateControl
- qt-project.ClimateControl
- ClimateControl
在指定 区域 中 data 中搜索 domain。如果 区域 未定义或数据未为此区域提供此域,如果可用,则返回未区域化的域值。
©2020 The Qt Company Ltd. 本文档中的文档贡献归其各自所有者所有。本文档根据自由软件基金会发布的 GNU自由文档许可证版本1.3 的条款提供许可。Qt和相应的标志是芬兰及/或全球其他地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。