QIfAbstractFeature 类
QIfAbstractFeature 是所有 QtInterfaceFramework 功能的基础类。 更多...
头文件 | #include <QIfAbstractFeature> |
qmake | QT += interfaceframework |
实例化对象 | AbstractFeature |
继承自 | QObject 和 QQmlParserStatus |
继承自的对象 | QIfAbstractZonedFeature、QIfAmFmTuner、QIfMediaIndexerControl 和 QIfMediaPlayer |
公共类型
枚举 | DiscoveryMode { InvalidAutoDiscovery, NoAutoDiscovery, AutoDiscovery, LoadOnlyProductionBackends, LoadOnlySimulationBackends } |
枚举 | DiscoveryResult { NoResult, ErrorWhileLoading, ProductionBackendLoaded, SimulationBackendLoaded } |
枚举 | Error { NoError, PermissionDenied, InvalidOperation, Timeout, InvalidZone, Unknown } |
属性
|
|
公共函数
QIfAbstractFeature(const QString &interfaceName, QObject *parent = nullptr) | |
QString | configurationId() const |
QIfAbstractFeature::DiscoveryMode | discoveryMode() const |
QIfAbstractFeature::DiscoveryResult | discoveryResult() const |
QIfAbstractFeature::Error | error() const |
QString | errorMessage() const |
bool | isInitialized() const |
bool | isValid() const |
QStringList | preferredBackends() const |
QIfServiceObject * | serviceObject() const |
公共槽
void | setConfigurationId(const QString &configurationId) |
void | setDiscoveryMode(QIfAbstractFeature::DiscoveryMode discoveryMode) |
void | setPreferredBackends(const QStringList &preferredBackends) |
bool | setServiceObject(QIfServiceObject *so) |
QIfAbstractFeature::DiscoveryResult | startAutoDiscovery() |
信号
void | configurationIdChanged(const QString &configurationId) |
void | discoveryModeChanged(QIfAbstractFeature::DiscoveryMode discoveryMode) |
void | discoveryResultChanged(QIfAbstractFeature::DiscoveryResult discoveryResult) |
void | errorChanged(QIfAbstractFeature::Error error, const QString &message) |
void | isInitializedChanged(bool isInitialized) |
void | isValidChanged(bool arg) |
void | preferredBackendsChanged(const QStringList &preferredBackends) |
void | serviceObjectChanged() |
受保护函数
virtual bool | acceptServiceObject(QIfServiceObject *serviceObject) |
virtual void | clearServiceObject() = 0 |
virtual void | connectToServiceObject(QIfServiceObject *serviceObject) |
virtual void | disconnectFromServiceObject(QIfServiceObject *serviceObject) |
QString | errorText() const |
QString | interfaceName() const |
void | setError(QIfAbstractFeature::Error error, const QString &message = QString()) |
重实现的受保护函数
virtual void | componentComplete() override |
受保护槽
virtual void | onErrorChanged(QIfAbstractFeature::Error error, const QString &message = QString()) |
详细描述
QIfAbstractFeature是面向开发者的前端API的基础类。通过继承QIfAbstractFeature创建你自己的功能API。
QIfAbstractFeature为您提供了自动发现功能:一种自动连接实现所需界面后端的方法。要发现后端,使用startAutoDiscovery()函数。一旦自动发现完成,使用isValid()函数检查是否找到了合适的后端。
自动发现功能为您提供了自动连接到正确的后端实现的方法,并且可以通过discoveryMode
属性进行控制。默认情况下,discoveryMode
设置为AutoDiscovery
,表示生产后端始终优于模拟后端。
或者,您也可以使用QIfServiceManager来检索所有后端。然后,手动搜索正确的后端,并调用setServiceObject()将其连接到QIfAbstractFeature。
编写子类
您的QIfAbstractFeature子类必须提供以下函数的实现:
一旦设置了QIfServiceObject,无论是通过startAutoDiscovery()还是setServiceObject(),请调用acceptServiceObject()函数以确保您实现的特性可以与QIfServiceObject协同工作,进而QIfServiceObject提供所需的接口。
如果此接口提供信号,则需要在connectToServiceObject();中进行所有连接语句,然后在disconnectFromServiceObject()中断开它们。
clearServiceObject()在特性不再与服务对象连接并且需要将其状态重置为可行的默认值时调用。
成员类型文档
枚举QIfAbstractFeature::DiscoveryMode
常量 | 值 | 描述 |
---|---|---|
QIfAbstractFeature::InvalidAutoDiscovery | -1 | 一个无效值。当枚举从字符串值(例如从ini文件解析)创建时,并且无法解析字符串时使用此值。 |
QIfAbstractFeature::NoAutoDiscovery | 0 | 不执行自动发现,需要手动设置ServiceObject。 |
QIfAbstractFeature::AutoDiscovery | 1 | 特性首先尝试查找与匹配接口的生产后端。如果不可用,则特性回退到模拟后端。 |
QIfAbstractFeature::LoadOnlyProductionBackends | 2 | 特性仅尝试加载与匹配接口生产后端。 |
QIfAbstractFeature::LoadOnlySimulationBackends | 3 | 特性仅尝试加载与匹配接口模拟后端。 |
枚举QIfAbstractFeature::DiscoveryResult
常量 | 值 | 描述 |
---|---|---|
QIfAbstractFeature::NoResult | 0 | 指示未启动自动发现,因为特性已分配了有效的ServiceObject。 |
QIfAbstractFeature::ErrorWhileLoading | 1 | 在搜索匹配接口的后端时发生错误。 |
QIfAbstractFeature::ProductionBackendLoaded | 2 | 自动发现的结果是已加载生产后端。 |
QIfAbstractFeature::SimulationBackendLoaded | 3 | 自动发现的结果是已加载模拟后端。 |
枚举QIfAbstractFeature::Error
常量 | 值 | 描述 |
---|---|---|
QIfAbstractFeature::NoError | 0 | 没有错误 |
QIfAbstractFeature::PermissionDenied | 1 | 拒绝操作的权限 |
QIfAbstractFeature::InvalidOperation | 2 | 操作无效 |
QIfAbstractFeature::Timeout | 3 | 操作超时 |
QIfAbstractFeature::InvalidZone | 4 | 区域不可用于操作 |
QIfAbstractFeature::Unknown | 5 | 未知错误 |
属性文档
configurationId : QString
包含用于确定此特性属于哪个配置的ID。
设置id后,可以使用QIfConfiguration API更改某些值。
注意:在匹配的QIfConfiguration中设置的值可以覆盖组件创建期间设置的初始值。
访问函数
QString | configurationId() const |
void | setConfigurationId(const QString &configurationId) |
通知信号
void | configurationIdChanged(const QString &configurationId) |
另请参阅QIfConfiguration.
discoveryMode : QIfAbstractFeature::DiscoveryMode
包含用于自动发现的模式
注意:如果在该功能创建后更改此属性,请确保调用 startAutoDiscovery() 以搜索新的服务对象。
访问函数
QIfAbstractFeature::DiscoveryMode | discoveryMode() const |
void | setDiscoveryMode(QIfAbstractFeature::DiscoveryMode discoveryMode) |
通知信号
void | discoveryModeChanged(QIfAbstractFeature::DiscoveryMode discoveryMode) |
[只读]
discoveryResult : const QIfAbstractFeature::DiscoveryResult
此属性包含上次自动发现的结果
访问函数
QIfAbstractFeature::DiscoveryResult | discoveryResult() const |
通知信号
void | discoveryResultChanged(QIfAbstractFeature::DiscoveryResult discoveryResult) |
另请参阅startAutoDiscovery().
[只读]
error : const QString
功能最后一次错误消息。如果没有错误则空白。
访问函数
QString | errorMessage() const |
通知信号
void | errorChanged(QIfAbstractFeature::Error error, const QString &message) |
[只读]
isInitialized : const bool
指示功能是否已使用后端的所有值进行初始化。
当后端发送 QIfFeatureInterface::initializationDone 信号以指示现在已使用后端值初始化所有值时,此属性为 true
。
访问函数
bool | isInitialized() const |
通知信号
void | isInitializedChanged(bool isInitialized) |
另请参阅isValid 和 QIfFeatureInterface::initializationDone.
[只读]
isValid : const bool
指示功能是否准备好使用。
如果功能有一个关联的服务对象,则此属性为 true
;否则为 false
。无效通常表示找不到合适的服务对象,或者尚未触发自动发现。
后端可能尚未发送所有属性,并且尚未完全初始化。请使用 isInitialized 来了解功能何时包含所有正确的值。
访问函数
bool | isValid() const |
通知信号
void | isValidChanged(bool arg) |
另请参阅QIfServiceObject,discoveryMode 和 isInitialized.
preferredBackends : QStringList
包含在自动发现期间加载数据存储的通配符列表。
自动发现机制将自动搜索提供与此功能实现匹配接口的后端。有关更多信息,请参阅 startAutoDiscovery()。
如果在多个后端实现了相同接口的情况下,可以使用通配符列表来确定正确加载的后端。
通配符按顺序应用于找到的后端。如果通配符匹配某些后端,则加载这些后端,否则使用下一个通配符。
例如:给定一个带有两个后端(backend_mqtt.so和backend_qtro.so)的AbstractFeature,可以将该属性设置为"*_mqtt*"
,以始终在可用时选择backend_mqtt.so后端。
访问函数
QStringList | preferredBackends() const |
void | setPreferredBackends(const QStringList &preferredBackends) |
通知信号
void | preferredBackendsChanged(const QStringList &preferredBackends) |
serviceObject : QIfServiceObject*
设置特征的 服务对象。
因为特征仅向开发者公开面向前端的API,需要一个实现实际功能的 服务对象。这通常通过自动发现机制检索。
如果QIfServiceObject
已经设置为此特定实例,或者QIfServiceObject不被特征接受,则设置此属性的设置器返回false。
访问函数
QIfServiceObject * | serviceObject() const |
bool | setServiceObject(QIfServiceObject *so) |
通知信号
void | serviceObjectChanged() |
另请参阅 discoveryMode.
成员函数文档
[显式]
QIfAbstractFeature::QIfAbstractFeature(const QString &interfaceName, QObject *parent = nullptr)
构造一个抽象特征。
将parent参数传递给QObject构造函数。
interfaceName参数用于定位合适的服务对象。
[虚拟受保护]
bool QIfAbstractFeature::acceptServiceObject(QIfServiceObject *serviceObject)
此方法预期将被任何继承自QIfAbstractFeature的类实现。
此方法应返回true
,如果给定的serviceObject被接受并可以使用,否则返回false
。
如果对象被接受,将调用connectToServiceObject来实际连接到服务对象。
默认实现接受serviceObject,如果它实现了由interfaceName()返回的接口;
另请参阅 connectToServiceObject()、disconnectFromServiceObject()和clearServiceObject。
[纯虚受保护]
void QIfAbstractFeature::clearServiceObject()
此方法预期将被任何继承自QIfAbstractFeature的类实现。
当没有服务对象可用时调用。预期实现将所有属性设置为安全默认值,并忘记先前服务对象的全部链接。
注意: 你必须发射这些属性的相应更改信号,以便特征了解状态变化。这使得实现类能够在之后连接到新的服务对象。
不需要与服务对象断开连接。如果它仍然存在,则保证首先调用disconnectFromServiceObject。
另请参阅acceptServiceObject(),connectToServiceObject() 和 disconnectFromServiceObject。
[override virtual protected]
void QIfAbstractFeature::componentComplete()
重写: QQmlParserStatus::componentComplete。
在使用 QML 时自动调用。调用 startAutoDiscovery()。
[virtual protected]
void QIfAbstractFeature::connectToServiceObject(QIfServiceObject *serviceObject)
此方法预期将被任何继承自QIfAbstractFeature的类实现。
实现应该连接到 serviceObject,并设置所有属性以反映服务对象的状态。
没有连接先前服务对象,因为此函数调用始终在调用 disconnectFromServiceObject 或 clearServiceObject 之后。
可以假设在传递给此方法之前,serviceObject 已经通过 acceptServiceObject 方法接受过。
默认实现连接到 QIfFeatureInterface 提供的信号,并在之后调用 QIfFeatureInterface::initialize()。
在重写时请记住在使用此函数之前连接所有信号。例如。
void SimpleFeature::connectToServiceObject(QIfServiceObject *serviceObject) { SimpleFeatureBackendInterface *backend = backend(serviceObject); if (!backend) return; // connect your signals connect(backend, &SimpleFeatureBackendInterface::propertyChanged, this, &SimpleFeature::onPropertyChanged); // connects the base signals and call initialize() QIfAbstractFeature::connectToServiceObject(serviceObject); // Additional initialization functions can be added here }
另请参阅acceptServiceObject(),disconnectFromServiceObject() 和 clearServiceObject。
[virtual protected]
void QIfAbstractFeature::disconnectFromServiceObject(QIfServiceObject *serviceObject)
此方法断开与 serviceObject 的所有连接。
不需要将内部变量重置为安全默认值。对此函数的调用总是紧跟在调用 connectToServiceObject 或 clearServiceObject 之后。
默认实现与此实例断开来自 serviceObject 的所有信号。
大多数情况下,您不需要重写此方法。只有在之前连接了多个接口或断开连接之前需要对其后端执行特殊清理调用时才需要重写。如果您需要重写此函数,请确保使用 interfaceName() 方法获取后端实例,而不是使用特定的 interfaceName 编码它,否则解除连接调用不再适用于派生接口。
另请参阅acceptServiceObject(),connectToServiceObject() 和 clearServiceObject。
QIfAbstractFeature::Error QIfAbstractFeature::error() const
返回最后一个错误代码。
另请参阅setError() 和 QIfAbstractFeature::Error。
[protected]
QString QIfAbstractFeature::errorText() const
将 QIfAbstractFeature::Error 转换为 QString 的当前错误代码
另请参阅 error。
[protected]
QString QIfAbstractFeature::interfaceName() const
返回该功能正在实现的对象名称。
当功能发现匹配的后端时,连接到该功能的对象服务需要支持此接口的名称。
另请参阅 acceptServiceObject。
[virtual protected slot]
void QIfAbstractFeature::onErrorChanged(QIfAbstractFeature::Error error, const QString &message = QString())
从后端更新 error 和 message。
实现新功能时使用此槽位来报告通用的错误。
[protected]
void QIfAbstractFeature::setError(QIfAbstractFeature::Error error, const QString &message = QString())
使用 message 设置 error。
发出 errorChanged() 信号。
另请参阅 error() 和 QIfAbstractZonedFeature::Error。
[slot]
QIfAbstractFeature::DiscoveryResult QIfAbstractFeature::startAutoDiscovery()
执行自动发现尝试。
功能将尝试定位实现所需接口的单个服务对象。
如果没有找到服务对象,功能将保持无效。如果找到多个服务对象,则使用第一个实例。
返回已加载的后端类型或错误。
如果将 discoveryMode 设置为 QIfAbstractFeature::NoAutoDiscovery,则此函数将不执行任何操作并返回 QIfAbstractFeature::NoResult。
另请参阅 discoveryMode() 和 动态后端系统。
© 2024 Qt 公司有限公司。此处包含的文档贡献的版权属于其各自的所有者。本提供的文档根据自由软件基金会发布的 GNU 免费文档许可协议版本 1.3 许可。Qt 及其相关标志是芬兰的 Qt 公司和/或世界其他地区的商标。所有其他商标属于其各自的所有者。