如果模拟器 QML 类型
用于在 QIfSimulationEngine 内部解析模拟数据的全局对象。 更多...
属性
- simulationData : object
方法
- bool checkSettings(object data, var value, string zone)
- string constraint(object data, string zone)
- var defaultValue(object data, string zone)
- var findData(object data, string interface)
- void initializeDefault(object data, QObject*object)
- var parseDomainValue(object data, string domain, string zone)
详细描述
如果模拟器全局对象提供对QIfSimulationEngine的模拟数据的访问,并提供解析和检查边界的辅助函数。
注意:该对象仅在QIfSimulationEngine内部可用,不能从外部访问。
数据格式
如果模拟器期望其数据已解析形式存在。通常这是通过QIfSimulationEngine::loadSimulationData()函数完成的,该函数期望文件以JSON格式。
接口
因为模拟 QML 文件可以使用多个接口,所以模拟数据支持多个数据集。这些数据集通过接口名称以反向DNS表示法进行标识。
{ "QIfClimateControl": { ... }, "org.qt-project.QIfWindowControl": { ... } }
可以使用findData()方法找到特定接口的数据。
属性
每个接口属性的设置(例如边界)在数据集中定义。
{ "QIfClimateControl": { "airConditioningEnabled": { "default": true }, "steeringWheelHeater": { "minimum": 0, "default": 0 }, "fanSpeed": { "range": [0, 5] } } }
对于名为QIfClimateControl
的接口,为属性airConditioningEnabled
、steeringWheelHeater
和fanSpeed
定义了设置。
设置对象可以存储多个称为“域”的约束。以下是目前支持的域:
默认值:在客户端连接时属性应有的默认值
最小值:每个新设置的值都需要大于此值
最大值:每个新设置的值都需要小于此值
范围:每个新设置的值都需要在这两个值之间
注意:在范围
中的值始终会覆盖最小值
和最大值
域。
域 每个新设置的值都需要是这个列表的一部分。
不支持 改变属性是不可能的,将会显示“不支持”的错误消息。
可以使用parseDomainValue()函数或者在只有默认域感兴趣时使用defaultValue()函数来加载特定域的值。
结构和枚举
由于JSON不是强类型,结构和枚举需要以特殊的格式存储。枚举可以存储如下:
{ "QIfClimateControl": { "recirculationMode": { "default": { "type": "enum", "value": "QtIfVehicleFunctionsModule::RecirculationOff" } } } }
可以使用类似的方式存储结构,使用结构的名称作为类型。
{ "AddressBook": { "contactList": { "default": [ { "type": "Contact", "value": [ "foo", 23, true ] }, { "type": "Contact", "value": [ "bar", 12, false ] } ] } }, } }
为了正确使用这些值初始化结构,结构需要提供一个接受QVariant作为参数的构造函数。对于给定的联系人示例,此构造函数可以如下所示:
Contact::Contact(const QVariant &variant) : Contact() { QVariant value = qtif_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(QMetaType::fromType<QVariantMap>())) value.convert(QMetaType::fromType<QVariantMap>()); if (value.canConvert(QMetaType::fromType<QVariantList>())) value.convert(QMetaType::fromType<QVariantList>()); if (value.type() == QVariant::Map) { QVariantMap map = value.toMap(); if (map.contains(u"name"_s)) d->m_name = map.value(u"name"_s).value<QString>(); if (map.contains(u"age"_s)) d->m_age = map.value(u"age"_s).value<int>(); if (map.contains(u"isMarried"_s)) d->m_isMarried = map.value(u"isMarried"_s).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属性中。
{ "QIfClimateControl": { "zones": [ "FrontLeft", "FrontRight", "Rear" ] } }
对于每个支持的域,也提供针对特定区域的值,例如:
{ "QIfClimateControl": { "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 : 对象 |
提供在QIfSimulationEngine::loadSimulationData()中解析的模拟数据。
方法文档
在data中搜索给定zone的所有边界设置,并返回提供的value是否符合此约束。
为了在值不在边界内时显示有意义的错误消息,可以使用constraint()函数。
另请参阅constraint()。
为给定的zone提供存储在data中的默认值。如果zone未定义或数据未为给定的zone提供默认值,如果有的话,它将返回未分区默认值。
这只是一个方便的函数,用default域调用parseDomainValue()。
在data中搜索键interface并返回存储的值。如果没有找到此interface的数据,则返回undefined。
如果interface是一个反向NDS名称,它首先搜索完整字符串。如果找不到键,它将再次以缩短的名称开始搜索,直到找到具有该名称的键。
例如,对于接口org.qt-project.ClimateControl,它按以下顺序搜索键
- org.qt-project.ClimateControl
- qt-project.ClimateControl
- ClimateControl
void initializeDefault(object data, QObject*object) |
将从中读取的默认值应用到object。
如果object支持分区,则默认值只能应用到正确的分区。
在给定的zone中搜索data中的domain。如果zone未定义或数据未提供给定zone的此域,则如果可用,返回未分区的域值。
© 2024 The Qt Company Ltd. 文档贡献的版权属于其各自所有者。此处提供的文档根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款进行许可。Qt和相应的标志是芬兰及其它国家和地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。