QIviAbstractFeature 类
QIviAbstractFeature 是所有 QtIvi 特性的基类。 更多...
头文件 | #include <QIviAbstractFeature> |
qmake | QT += ivicore |
实例化自 | AbstractFeature |
继承自 | QObject 和 QQmlParserStatus |
由以下类继承 | QIviAbstractZonedFeature,QIviAmFmTuner,QIviMediaIndexerControl 和 QIviMediaPlayer |
公共类型
枚举 | DiscoveryMode { NoAutoDiscovery, AutoDiscovery, LoadOnlyProductionBackends, LoadOnlySimulationBackends } |
枚举 | DiscoveryResult { NoResult, ErrorWhileLoading, ProductionBackendLoaded, SimulationBackendLoaded } |
枚举 | Error { NoError, PermissionDenied, InvalidOperation, Timeout, InvalidZone, Unknown } |
属性
|
|
公共函数
QIviAbstractFeature(const QString &interfaceName, QObject *parent = nullptr) | |
QIviAbstractFeature::DiscoveryMode | discoveryMode() const |
QIviAbstractFeature::DiscoveryResult | discoveryResult() const |
QIviAbstractFeature::Error | error() const |
QString | errorMessage() const |
bool | isInitialized() const |
bool | isValid() const |
QIviServiceObject * | serviceObject() const |
公共槽
void | setDiscoveryMode(QIviAbstractFeature::DiscoveryMode discoveryMode) |
bool | setServiceObject(QIviServiceObject *so) |
QIviAbstractFeature::DiscoveryResult | startAutoDiscovery() |
信号
void | discoveryModeChanged(QIviAbstractFeature::DiscoveryMode discoveryMode) |
void | discoveryResultChanged(QIviAbstractFeature::DiscoveryResult discoveryResult) |
void | errorChanged(QIviAbstractFeature::Error error, const QString &message) |
void | isInitializedChanged(bool isInitialized) |
void | isValidChanged(bool arg) |
void | serviceObjectChanged() |
受保护的函数
virtual bool | acceptServiceObject(QIviServiceObject *serviceObject) |
virtual void | clearServiceObject() = 0 |
virtual void | connectToServiceObject(QIviServiceObject *serviceObject) |
virtual void | disconnectFromServiceObject(QIviServiceObject *serviceObject) |
QString | errorText() const |
QString | interfaceName() const |
void | setError(QIviAbstractFeature::Error error, const QString &message = QString()) |
重新实现的受保护函数
virtual void | componentComplete() override |
受保护的槽函数
virtual void | onErrorChanged(QIviAbstractFeature::Error error, const QString &message = QString()) |
详细描述
QIviAbstractFeature是面向开发者的前端API的基础类。通过继承QIviAbstractFeature来为您的设计特性创建API。
QIviAbstractFeature提供了自动发现:一种自动连接到实现所需接口的后端的方式。要发现后端,请使用startAutoDiscovery()函数。一旦自动发现完成,请使用isValid()函数检查是否找到了合适的后端。
可以控制要加载的后端类型,通过将discoveryMode
设置为AutoDiscovery
进行设置。此模式默认启用,表示生产后端总是优先于模拟后端。
另外,还可以使用QIviServiceManager来检索所有后端。在手动搜索到正确的后端并调用setServiceObject()以连接它到QIviAbstractFeature。
编写派生类
您的QIviAbstractFeature派生类必须为以下函数提供实现
一旦设置了QIviServiceObject,无论是通过startAutoDiscovery()还是setServiceObject(),请调用acceptServiceObject()函数以确保您实现的功能可以与QIviServiceObject和相关的QIviServiceObject一起工作,而后者提供所需的接口。
如果接口提供信号,您需要按要求中的所有connectToServiceObject()执行连接操作,在disconnectFromServiceObject()中进行断开操作。
clearServiceObject()在特性不再与ServiceObject连接并且需要将状态重置为合理默认值时调用。
成员类型文档
枚举QIviAbstractFeature::DiscoveryMode
常量 | 值 | 描述 |
---|---|---|
QIviAbstractFeature::NoAutoDiscovery | 0 | 不执行自动发现,并需要手动设置ServiceObject。 |
QIviAbstractFeature::AutoDiscovery | 1 | 特性首先尝试找到匹配接口的生产后端。如果没有可用,则功能回退到模拟后端。 |
QIviAbstractFeature::LoadOnlyProductionBackends | 2 | 仅尝试加载匹配接口的生产后端。 |
QIviAbstractFeature::LoadOnlySimulationBackends | 3 | 仅尝试加载匹配接口的模拟后端。 |
枚举 QIviAbstractFeature::DiscoveryResult
常量 | 值 | 描述 |
---|---|---|
QIviAbstractFeature::NoResult | 0 | 表示未启动自动发现,因为该功能已经分配了有效的ServiceObject。 |
QIviAbstractFeature::ErrorWhileLoading | 1 | 寻找示例后端时发生错误。 |
QIviAbstractFeature::ProductionBackendLoaded | 2 | 加载了生产后端,这是自动发现的结果。 |
QIviAbstractFeature::SimulationBackendLoaded | 3 | 加载了模拟后端,这是自动发现的结果。 |
枚举 QIviAbstractFeature::Error
常量 | 值 | 描述 |
---|---|---|
QIviAbstractFeature::NoError | 0 | 无错误 |
QIviAbstractFeature::PermissionDenied | 1 | 拒绝操作权限 |
QIviAbstractFeature::InvalidOperation | 2 | 操作无效 |
QIviAbstractFeature::Timeout | 3 | 操作超时 |
QIviAbstractFeature::InvalidZone | 4 | 区域不可用于操作 |
QIviAbstractFeature::Unknown | 5 | 未知错误 |
属性文档
discoveryMode : QIviAbstractFeature::DiscoveryMode
保持用于自动发现的方式
注意:如果您在特性实例化后更改此属性,确保调用 startAutoDiscovery() 以搜索新的服务对象。
访问函数
QIviAbstractFeature::DiscoveryMode | discoveryMode() const |
void | setDiscoveryMode(QIviAbstractFeature::DiscoveryMode discoveryMode) |
通知信号
void | discoveryModeChanged(QIviAbstractFeature::DiscoveryMode discoveryMode) |
discoveryResult : const QIviAbstractFeature::DiscoveryResult
此属性保存了上次自动发现的结果
访问函数
QIviAbstractFeature::DiscoveryResult | discoveryResult() const |
通知信号
void | discoveryResultChanged(QIviAbstractFeature::DiscoveryResult discoveryResult) |
另请参阅startAutoDiscovery().
error : const QString
特性的最后一条错误信息。如果没有错误则为空。
访问函数
QString | errorMessage() const |
通知信号
void | errorChanged(QIviAbstractFeature::Error error, const QString &message) |
isInitialized : const bool
指示特性是否已使用后端的所有值初始化。
该属性在后端发送 QIviFeatureInterface::initializationDone 信号后变为 true
,表示所有值现在已使用后端值初始化。
访问函数
bool | isInitialized() const |
通知信号
void | isInitializedChanged(bool isInitialized) |
另请参阅isValid 和 QIviFeatureInterface::initializationDone.
isValid : const bool
指示特性是否已准备好使用。
如果特性准备就绪,则此属性为 true
,否则为 false
。未就绪通常指示找不到合适的对象,或者未触发自动发现。
后端可能尚未发送所有属性,且尚未完全初始化。请使用 isInitialized 以了解何时特性包含所有正确的值。
访问函数
bool | isValid() const |
通知信号
void | isValidChanged(bool arg) |
另请参阅 QIviServiceObject、discoveryMode 和 isInitialized。
serviceObject : QIviServiceObject*
设置特征的查找服务对象。
由于特征只暴露给开发者的前署API,因此需要实现实际功能的查找服务对象。这通常是通过自动查找机制检索的。
如果QIviServiceObject已经在该特定实例中设置或特征不接受QIviServiceObject,则该属性的设置器将返回false。
访问函数
QIviServiceObject * | serviceObject() const |
bool | setServiceObject(QIviServiceObject *so) |
通知信号
void | serviceObjectChanged() |
另请参阅 discoveryMode。
成员函数文档
QIviAbstractFeature::QIviAbstractFeature(const QString &interfaceName, QObject *parent = nullptr)
构建一个抽象特征。
将parent参数传递给QObject构造函数。
interfaceName参数用于查找合适的查找服务对象。
[虚拟受保护槽]
void QIviAbstractFeature::onErrorChanged(QIviAbstractFeature::Error error, const QString &message = QString())
从后端更新error和message。
当实现新特征以报告通用错误时,请使用此槽。
[槽]
QIviAbstractFeature::DiscoveryResult QIviAbstractFeature::startAutoDiscovery()
执行自动发现尝试。
功能将尝试查找一个实现所需接口的单一查找服务对象。
如果没有找到查找服务对象,则该功能将保持无效。如果找到多个查找服务对象,则使用第一个实例。
返回已加载的后端类型或错误。
如果discoveryMode设置为QIviAbstractFeature::NoAutoDiscovery,则此函数将不执行任何操作并返回QIviAbstractFeature::NoResult。
另请参阅 discoveryMode()和动态后端系统。
[虚拟受保护]
bool QIviAbstractFeature::acceptServiceObject(QIviServiceObject *serviceObject)
此方法预期由所有继承自QIviAbstractFeature的类实现。
方法应返回true
,如果给定的serviceObject被接受并可用于使用;否则返回false
。
如果对象被接受,则调用connectToServiceObject来实际连接到服务对象。
默认实现接受由interfaceName()返回的接口的serviceObject;
另请参阅 connectToServiceObject、disconnectFromServiceObject和clearServiceObject。
[纯虚拟受保护]
void QIviAbstractFeature::clearServiceObject()
此方法预期由所有继承自QIviAbstractFeature的类实现。
当没有服务对象可用时调用。期望实现将所有属性设置为安全默认值,并忘记与先前服务对象的全部链接。
注意:您必须发出相应属性的更改信号,这样特征就可以得知状态变化。这使得实现类之后能够连接到新的服务对象。
无需从服务对象断开连接。如果它仍然存在,则保证首先调用disconnectFromServiceObject方法。
另请参阅:acceptServiceObject(),connectToServiceObject()和disconnectFromServiceObject。
[覆盖虚拟保护]
void QIviAbstractFeature::componentComplete()
重新实现:QQmlParserStatus::componentComplete。
在从QML使用时自动调用。调用startAutoDiscovery。
[虚拟保护]
void QIviAbstractFeature::connectToServiceObject(QIviServiceObject *serviceObject)
此方法预期由所有继承自QIviAbstractFeature的类实现。
实现应连接到serviceObject,并将所有属性设置为反映服务对象的状态。
因为此函数调用之前总是跟随disconnectFromServiceObject或clearServiceObject调用,所以没有前一个连接的服务对象。
可以安全地假设,在传递给此方法之前,serviceObject已经通过acceptServiceObject方法接受。
默认实现连接到QIviFeatureInterface提供的信号,并在之后调用QIviFeatureInterface::initialize()。
在重新实现时,请注意在调用此函数之前连接所有信号。例如:
/code void SimpleFeature::connectToServiceObject(QIviServiceObject *serviceObject) { SimpleFeatureBackendInterface *backend = backend(serviceObject); if (!backend) return;
// 连接您的信号 connect(backend, &SimpleFeatureBackendInterface::propertyChanged, this, &SimpleFeature::onPropertyChanged);
// 连接基本信号并调用 initialize() QIviAbstractFeature::connectToServiceObject(serviceObject);
// 可在此处添加其他初始化函数 } /endcode
另请参阅:acceptServiceObject,disconnectFromServiceObject和clearServiceObject。
[虚拟保护]
void QIviAbstractFeature::disconnectFromServiceObject(QIviServiceObject *serviceObject)
此方法断开所有对serviceObject的连接。
无需将内部变量重置为安全默认值。调用此函数总是跟随对connectToServiceObject或clearServiceObject的调用。
默认实现从serviceObject到该实例断开所有信号。
大部分情况下,您不需要重新实现此方法。只有在之前已经连接了多个接口或断开连接前后端之前需要进行特殊清理调用时,才需要重新实现。如果您需要重新实现此功能,请确保使用 interfaceName() 方法获取后端实例,而不是将特定的 interfaceName 编入硬代码,否则断开连接的调用不再适用于派生接口。
另请参阅 acceptServiceObject(),connectToServiceObject() 和 clearServiceObject()。
QIviAbstractFeature::Error QIviAbstractFeature::error() const
返回最后一个错误代码。
另请参阅 setError() 和 QIviAbstractFeature::Error。
[protected]
QString QIviAbstractFeature::errorText() const
返回从 QIviAbstractFeature::Error 转换为 QString 的当前错误代码。
另请参阅 error。
[protected]
QString QIviAbstractFeature::interfaceName() const
返回该功能所实现的接口名称。
当功能发现一个匹配的后端时,该接口名称需要由该功能所连接的服务对象支持。
有关更多信息,请参阅 扩展 Qt IVI。
[protected]
void QIviAbstractFeature::setError(QIviAbstractFeature::Error error, const QString &message = QString())
使用 message 设置 error。
触发 errorChanged() 信号。
另请参阅 error() 和 QIviAbstractZonedFeature::Error。
©2020 The Qt Company Ltd. 本文档中包含的贡献的版权属于各自的拥有者。本提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 和相关标志是芬兰和/或其他国家的 The Qt Company Ltd. 的商标。所有其他商标是各自所有者的财产。