QIfAbstractZonedFeature 类

QIfAbstractZonedFeature 是所有分区特征的基类。更多...

头文件 #include <QIfAbstractZonedFeature>
qmakeQT += interfaceframework
由以下类实例化 AbstractZonedFeature
继承自 QIfAbstractFeature
继承自

QIfClimateControlQIfWindowControl

属性

公共函数

QIfAbstractZonedFeature(const QString &interface, const QString &zone = QString(), QObject *parent = nullptr)
QStringListavailableZones() const
QStringzone() const
QIfAbstractZonedFeature *zoneAt(const QString &zone) const
QList<QIfAbstractZonedFeature *>zones() const

信号

voidavailableZonesChanged(const QStringList &zones)
voidzoneChanged()
voidzonesChanged()

保护函数

QIfZonedFeatureInterface *backend(const QString &interface = QString()) const
virtual QIfAbstractZonedFeature *createZoneFeature(const QString &zone) = 0

重实现的保护函数

virtual boolacceptServiceObject(QIfServiceObject *serviceObject) override
virtual voidclearServiceObject() override
virtual voidconnectToServiceObject(QIfServiceObject *serviceObject) override

详细描述

通过 subclass QIfAbstractZonedFeature 创建具有多个分区的 API。有关这些概念可用于用例的信息,请参阅 分区特征

实现

派生类需要实现 createZoneFeature 函数,该函数负责实例化用于给定分区的类。在 simplest 的形式中,分配相同的类,将 zone 参数传递给其构造函数。

class QIfClimateControl : public QIfAbstractZonedFeature {

    ...

    explicit QIfClimateControl(const QString &zone = QString(), QObject *parent = nullptr)
        : QIfAbstractZonedFeature(QIfClimateControl_iid, zone, parent)
    {
    }

protected:
    QIfAbstractZonedFeature *createZoneFeature(const QString &zone) override
    {
        new QIfClimateControl(zone, this);
    }
}

对于派生类,后端连接调用按照《QIfAbstractFeature》和《详细连接顺序》指定的方式依次进行。这也适用于区域实例,它们使用传入的区域参数来识别属于此区域的后备接口中的信号。

有关如何实现后端以及如何处理特定于区域的属性,请参阅《QIfZonedFeatureInterface》。

区域特定实例

如上所述的简单形式,加上在后台处理特定于区域的属性,存在一些缺点。因为API既适用于前端API及其所有区域,使用该API的开发者无法识别哪些属性/函数是特定于区域的。

对于这个问题有两个解决方案,最好结合起来使用,以提供最灵活的API。

为每个区域功能实现一个isXAvailable函数

为每个区域功能添加一个额外属性,以指定功能是否可用。开发人员可以在UI中使用这样一个属性动态显示相关的UI元素,而不是根据区域名称硬编码它,或者依赖于《QIfZonedFeatureInterface》中描述的错误机制。

在createZoneFeature中实例化一个自定义类

通过在createZoneFeature中实例化一个自定义类,可以将区域特征和非区域特征的API拆分到两个类中。非区域功能在前端API中实现,所有区域特定函数都在返回的createZoneFeature()区域类中实现。

用法

一旦连接到后端,可以使用availableZones属性获取所有当前可用的区域。可以通过zoneAt()函数访问特定区域,或者使用zones函数,该函数返回区域列表。

属性文档

[只读] availableZones : const QStringList

包含可用的区域列表。

访问函数

QStringListavailableZones() const

通知信号

voidavailableZonesChanged(const QStringList &zones)

zone : const QString

此区域特征的区域名称。

区域可以在功能初始化时提供。使用此属性可以控制单个特定功能区域。

此属性仅在连接到后端之前可写。一旦发现后端且组件经过验证为有效,区域就不再可写。

建议在功能构造函数中初始化区域

QIfClimateControl *climateControl = new QIfClimateControl("FrontLeft", this);
climateControl->startAutoDiscovery();
QString zone = climateControl->zone();

初始化后,建议不要更改区域。

访问函数

QStringzone() const

通知信号

voidzoneChanged()

[只读] zoneAt : const QVariantMap

提供对给定区域的直接功能访问。

通知信号

voidzonesChanged()

[只读] zones : const QVariantList

提供对功能区域模型访问。

通知信号

voidzonesChanged()

成员函数文档

[显式] QIfAbstractZonedFeature::QIfAbstractZonedFeature(const QString &interface, const QString &zone = QString(), QObject *parent = nullptr)

构建具有特定接口区域的分区功能。

如果是QIfAbstractZonedFeature类型,则创建的实例使用父实例进行后端连接。父实例连接到后端,并将子功能与后端之间的更新进行转发。

另见QIfAbstractFeature.

[覆盖虚保护] bool QIfAbstractZonedFeature::acceptServiceObject(QIfServiceObject *serviceObject)

重新实现:QIfAbstractFeature::acceptServiceObject(QIfServiceObject *serviceObject).

[保护] QIfZonedFeatureInterface *QIfAbstractZonedFeature::backend(const QString &interface = QString()) const

返回后端接口的指针。

返回父后端,如果父是QIfAbstractZonedFeature类型。如果没有连接后端,则返回零。

[覆盖虚保护] void QIfAbstractZonedFeature::clearServiceObject()

重新实现:QIfAbstractFeature::clearServiceObject().

[覆盖虚保护] void QIfAbstractZonedFeature::connectToServiceObject(QIfServiceObject *serviceObject)

重新实现:QIfAbstractFeature::connectToServiceObject(QIfServiceObject *serviceObject).

[纯虚保护] QIfAbstractZonedFeature *QIfAbstractZonedFeature::createZoneFeature(const QString &zone)

为给定的区域创建一个新的子功能。

如果使用指定的参数无法创建功能,则返回零。

QIfAbstractZonedFeature *QIfAbstractZonedFeature::zoneAt(const QString &zone) const

返回给定区域的功能实例。

QList<QIfAbstractZonedFeature *> QIfAbstractZonedFeature::zones() const

返回功能的全部区域实例。

© 2024 Qt公司有限公司。本文件中包含的文档贡献权归各自所有者所有。本提供的文档根据自由软件基金会发布的GNU自由文档许可协议版本1.3的条款提供。Qt及其相关标志是芬兰及/或全球其他国家的Qt公司有限公司的商标。所有其他商标均属于其各自所有者。