如果模拟器 QML 类型

用于在 QIfSimulationEngine 内部解析模拟数据的全局对象。 更多...

属性

方法

详细描述

如果模拟器全局对象提供对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的接口,为属性airConditioningEnabledsteeringWheelHeaterfanSpeed定义了设置。

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

默认值:在客户端连接时属性应有的默认值

最小值:每个新设置的值都需要大于此值

最大值:每个新设置的值都需要小于此值

范围:每个新设置的值都需要在这两个值之间

注意:范围中的值始终会覆盖最小值最大值域。

域 每个新设置的值都需要是这个列表的一部分。

不支持 改变属性是不可能的,将会显示“不支持”的错误消息。

可以使用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()中解析的模拟数据。


方法文档

bool checkSettings(对象 data, var value, string zone)

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

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

另请参阅constraint()。


string constraint(对象 data, string zone)

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

这有助于与checkSettings()相关的错误消息。

另请参阅checkSettings()。


var defaultValue(对象 data, string zone)

为给定的zone提供存储在data中的默认值。如果zone未定义或数据未为给定的zone提供默认值,如果有的话,它将返回未分区默认值。

这只是一个方便的函数,用default域调用parseDomainValue()。


var findData(object data, string interface)

data中搜索键interface并返回存储的值。如果没有找到此interface的数据,则返回undefined。

如果interface是一个反向NDS名称,它首先搜索完整字符串。如果找不到键,它将再次以缩短的名称开始搜索,直到找到具有该名称的键。

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

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

void initializeDefault(object data, QObject*object)

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

如果object支持分区,则默认值只能应用到正确的分区。


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

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


© 2024 The Qt Company Ltd. 文档贡献的版权属于其各自所有者。此处提供的文档根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款进行许可。Qt和相应的标志是芬兰及其它国家和地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。