QIviZonedFeatureInterface 类

QIviZonedFeatureInterface 定义了功能后端类的基接口。 更多信息...

头文件 #include <QIviZonedFeatureInterface>
qmakeQT += ivicore
继承 QIviFeatureInterface
继承自

QIviClimateControlBackendInterfaceQIviWindowControlBackendInterface

公共函数

QIviZonedFeatureInterface(QObject *parent = nullptr)
virtual QStringListavailableZones() const = 0

信号

voidavailableZonesChanged(const QStringList &zones)

详细描述

车辆功能可以是区域化的或通用的,取决于车辆。例如,一些车辆可能只有一个气候风扇,而另一些车辆可能有一个前排座位风扇和一个后排座位风扇。为了满足这两个要求,后端开发人员可以为每个功能属性指定是通用还是区域特定。如果后端未指定属性的特定区域,则该属性是通用的。可以存在多个区域属性,但只有一个通用属性。通用属性的特定区域是一个空字符串,并且可以从不从信号中省略。下面的代码片段描述了在后台实现区域特定风扇速度级别和通用方向盘加热器支持的方法。

提供可用区域

在向后台做出任何进一步调用之前,VehicleFunctions 将查询可用区域的列表。区域是字符串键,可以由后端开发人员定义的任何内容。在这种情况下,我们有两个区域:“前部”和“后部”。

后台必须通过 availableZones 返回所有可用区域

 QStringList backend::availableZones() const {
     QStringList zones;
     zones << "Front";
     zones << "Rear";
     return zones;
}

初始化属性

VehicleFunctions 通过后台初始化所有属性。后台实现必须发出所有支持的属性信号,传递区域作为参数。如果属性是通用的,则不需要特定区域。

初始化信号是在 initialize 中发出的

 void backend::initialize() {
     emit fanSpeedLevelChanged(2, "Front");
     emit fanSpeedLevelChanged(2, "Rear");
     emit steeringWheelHeaterChanged(0); // Generic, no zone specified
     emit initializationDone();
}

实现特定功能属性

风扇速度是区域化的,验证请求的区域是后台的责任。如果区域有效,则可以调整车辆的实时风扇速度级别。后台必须为更改的区域发出一个信号。

 void backend::setFanSpeedLevel(int value, const QString &zone) {
     if (!m_fanSpeedZones.contains(zone)) {
         emit errorChanged(QIviAbstractFeature::InvalidZone);
     } else {
         // Set specified zone fan to value
         ...
         emit fanSpeedLevelChanged(value, zone);
     }
}

 int backend::fanSpeedLevel(const QString &zone) {
     if (!m_fanSpeedZones.contains(zone)) {
         emit errorChanged(QIviAbstractFeature::InvalidZone);
         return -1;
     } else {
         int value = ... // Get vehicle's zone fan Speed
         return value;
     }
}

方向盘加热器不针对特定区域,因此区域属性应为空。如果区域为空,则可以控制车辆的实际方向盘加热器。后端必须发出信号以更改该值。由于属性是通用的,信号中省略了区域。

 void backend::setSteeringWheelHeater(int value, const QString &zone) {
     if (!zone.isEmpty()) {  // zone must be empty for a generic attribute
         emit errorChanged(QIviAbstractFeature::InvalidZone);
         return;
     } else {
         // Set vehicle's steering wheel heater value
         ...
         emit steeringWheelHeaterChanged(value);
     }
}

 int backend::steeringWheelHeater(const QString &zone) {
     if (!zone.isEmpty()) {  // zone must be empty for a generic attribute
         emit errorChanged(QIviAbstractFeature::InvalidZone);
         return -1;
     } else {
         int value = ... // Get vehicle's steering wheel heater value
         return value;
     }
}

要实现后端插件,还需要从QtIviCore模块实现QIviServiceInterface

请参阅从src/plugins/ivivehiclefunctions/climate_simulator的完整后端实现示例。

另请参阅QIviAbstractZonedFeatureQIviServiceInterface

成员函数文档

QIviZonedFeatureInterface::QIviZonedFeatureInterface(QObject *parent = nullptr)

构造后端基本接口。

parent发送给QObject构造函数。

[信号] void QIviZonedFeatureInterface::availableZonesChanged(const QStringList &zones)

当可用区域发生变化时发出。

当需要首先检索可用区域列表时使用此信号,并且在创建后端实例时不适用。

此函数自Qt 5.13开始引入。

另请参阅 availableZones()和提供可用区域

[纯虚函数] QStringList QIviZonedFeatureInterface::availableZones() const

返回支持的区域名称列表。这是在客户端连接后从客户端调用的。

返回的名称必须是有效的QML属性名称,即[a-z_][A-Za-z0-9_]*

另请参阅 availableZonesChanged()和提供可用区域

©2020 The Qt Company Ltd. 此处包括的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会的版本1.3的GNU自由文档许可协议授予的。Qt及其相关标志是芬兰以及/或其他国家和地区的The Qt Company Ltd.的商标。所有其他商标均为其各自所有者的财产。