QIfPagingModelInterface 类

QIfPagingModelInterface 定义了访问 QIfPagingModel 功能类的后端接口。 更多...

头文件 #include <QIfPagingModelInterface>
qmakeQT += interfaceframework
继承 QIfFeatureInterface
继承自

QIfFilterAndBrowseModelInterface

公共函数

QIfPagingModelInterface(QObject *parent = nullptr)
虚函数fetchData(const QUuid &identifier, int start, int count) = 0
虚函数registerInstance(const QUuid &identifier) = 0
虚函数unregisterInstance(const QUuid &identifier) = 0

信号

voidcountChanged(const QUuid &identifier = QUuid(), int count = -1)
voiddataChanged(const QUuid &identifier, const QList<QVariant> &data, int start, int count)
voiddataFetched(const QUuid &identifier, const QList<QVariant> &data, int start, bool moreAvailable)
voidsupportedCapabilitiesChanged(const QUuid &identifier, QtInterfaceFrameworkModule::ModelCapabilities capabilities)

详细描述

QIfPagingModelInterface 是 QIfPagingModel 所使用的接口

该接口由一个 QIfPagingModel 对象发现,与之连接并设置其参数。

QIfPagingModel 记录

每个 QIfPagingModel 都生成其自身的 QUuid,并将此传递给后端接口,用于识别模型实例。通过在信号中使用特定实例的 QUuid,只有此特定实例会收到变更通知。这适用于具有过滤功能的状态后端,例如地址簿。由于过滤,模型中的项数将发生变化。通知和过滤操作仅针对请求它们的特定实例执行。其他实例仍然可以显示模型的全数据集。添加了 QIfFilterAndBrowseModel 以实现过滤。要通知所有功能实例的变更,可以使用默认构造的 QUuid

当新的 QIfPagingModel 实例连接到后端或从中断开时,分别调用 registerInstanceunregisterInstance 函数。

功能

根据模型数据及其来源的基础存储数据,可能支持不同的特性。<a href="qifpagingmodelinterface.html#supportedCapabilitiesChanged" translate="no">supportedCapabilitiesChanged</a>信号通知<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>实例关于当前后端支持的特性。在这个信号中使用的<a href="qtinterfaceframeworkmodule.html#modelcapabilities" translate="no">ModelCapabilities</a>类型包含了<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>和<a href="qiffilterandbrowsemodel.html" translate="no">QIfFilterAndBrowseModel</a>中支持的不同特性。

对于<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>,可以使用<a href="qtinterfaceframeworkmodule.html#modelcapabilities" translate="no">SupportsGetSize</a>特性来表明后端知道模型的总大小,并通过<a href="qifpagingmodelinterface.html#countChanged" translate="no">countChanged()</a>()信号通知它。如果在未报告特性或未设置SupportsGetSize特性的情况下,<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>需要使用<a href="qifpagingmodel.html#LoadingType-enum" translate="no">FetchMore</a>加载类型。

返回模型数据<a class="plink" href="#returning-model-data" title="直接链接到本标题"></a>

除了基于<a href="qiffeatureinterface.html" translate="no">QIfFeatureInterface</a>的后端之外,<a href="qiffeatureinterface.html#initialize" translate="no">initialize()</a>()函数不会发出完整的状态。相反,在实际请求时返回实际的模型数据。这是为了支持大型模型并节省在需要通过IPC传输数据时的带宽。一旦<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>被用于View类中,将通过调用<a href="qifpagingmodelinterface.html#fetchData" translate="no">fetchData</a>()从后端请求模型数据。在一次调用中请求的数据量可以通过<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>实例进行控制。一旦请求数据准备好,后端需要通过<a href="qifpagingmodelinterface.html#dataFetched" translate="no">dataFetched</a>()信号进行通知。要通知<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>关于更新的行,可以使用<a href="qifpagingmodelinterface.html#dataChanged" translate="no">dataChanged</a>()信号。

示例调用顺序<a class="plink" href="#example-call-order" title="直接链接到本标题"></a>

  1. 创建<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>实例并将其连接到该后端
  2. 调用<a href="qiffeatureinterface.html#initialize" translate="no">initialize</a>()
  3. 后端初始化其内部状态并通过发出相应的更改信号通知所有额外属性
  4. 后端发出<a href="qiffeatureinterface.html#initializationDone" translate="no">initializationDone</a>()
  5. <a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>实例通过调用<a href="qifpagingmodelinterface.html#registerInstance" translate="no">registerInstance</a>()使用其自己的<a href="https://doc.qt.ac.cn/qt/quuid.html" translate="no">QUuid</a>进行注册
  6. 后端通过发出<a href="qifpagingmodelinterface.html#supportedCapabilitiesChanged" translate="no">supportedCapabilitiesChanged</a>()和<a href="qifpagingmodelinterface.html#countChanged" translate="no">countChanged</a>()来通知其性能和大小。
  7. <a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>通过调用<a href="qifpagingmodelinterface.html#fetchData" translate="no">fetchData</a>()获取第一行数据
  8. 后端准备好后发出<a href="qifpagingmodelinterface.html#dataFetched" translate="no">dataFetched</a>()
  9. 最后两个步骤可能会根据视图的当前状态而重复

另请参阅<a href="qifpagingmodel.html" translate="no">QIfPagingModel</a>.

成员函数文档

parent</p> = nullptr)</a>

构建后端界面。

将<i i=18 translate="no">parent</i>发送到<a href="https://doc.qt.ac.cn/qt/qobject.html" translate="no">QObject</a>构造函数。

identifier</i> = QUuid(),</p> <p i=19><span class="type">int</span> <span class="type">count</span> = -1</p>)</a>

当使用标识符 identifier 识别的 QIfPagingModel 实例中的项目数量发生变化时,会发出此信号。新项目数量以 count 返回。

此信号预计在模型实例首次通过调用 fetchData() 请求新数据后发出,应在通过发出 dataFetched() 信号返回数据之前发出。

注意:如果使用空 QQuuid 作为标识符,则所有模型实例都会收到通知。

另请参阅fetchData() 和 dataFetched

[信号] void QIfPagingModelInterface::dataChanged(const QUuid &identifier, const QList<QVariant> &data, int start, int count)

每次 QIfPagingModel 实例中标识为 identifier 的数据发生变化且模型需要更新时,都会发出此信号。新数据作为 data 传递。可以使用参数 startcount 来定义应该用新数据替换的项目集合。

要插入新项目,将项目传递到 data 中,并使用 start 来指示插入位置,count 参数需要为 0,因为我们不想替换现有数据

QList<ExampleItem> list;
ExampleItem item = ExampleItem();
list.insert(index, item);
QVariantList items = { QVariant::fromValue(item) };
emit dataChanged(items, index, 0);

删除项与此非常相似,使用 start 来指示要选择哪项,使用 count 来指示数量

list.removeAt(index);
emit dataChanged(identifier, QVariantList(), index, 1);

注意:如果使用空 QQuuid 作为标识符,则所有模型实例都会收到通知。

[信号] void QIfPagingModelInterface::dataFetched(const QUuid &identifier, const QList<QVariant> &data, int start, bool moreAvailable)

当调用 fetchData() 时会发出此信号,并将请求的数据返回给 QIfPagingModel 实例 identifier。参数 start 包含数据开始的位置,而 moreAvailable 指示是否有更多数据可用,可以使用新的 fetchData() 调用来检索此数据。

注意:如果使用空 QQuuid 作为标识符,则所有模型实例都会收到通知。

另请参阅fetchData() 和 dataFetched()。

[纯虚函数] void QIfPagingModelInterface::fetchData(const QUuid &identifier, int start, int count)

当需要通过 QIfPagingModel 实例 identifier 检索新数据时,会调用此函数。

参数 startcount 定义了要获取的数据范围。此方法预期在准备好的新数据上发出 dataFetched() 信号。

另请参阅 dataFetched().

[纯虚函数] void QIfPagingModelInterface::registerInstance(const QUuid &identifier)

将标识为 identifierQIfPagingModel 实例注册到后端。该函数将在 QIfPagingModel 和所有其派生类在调用 initialize() 函数之后但在请求任何数据之前(例如,通过 fetchData())被调用。

另请参阅 unregisterInstance.

[信号] void QIfPagingModelInterface::supportedCapabilitiesChanged(const QUuid &identifier, QtInterfaceFrameworkModule::ModelCapabilities capabilities)

当由 identifier 标识的模型实例的 capabilities 发生变化时发出。

注意:如果使用空 QQuuid 作为标识符,则所有模型实例都会收到通知。

[纯虚函数] void QIfPagingModelInterface::unregisterInstance(const QUuid &identifier)

取消将标识为 identifierQIfPagingModel 实例注册到后端。此函数将由 QIfPagingModel 和所有其派生类在 ServiceObject 分离之前和在通过 identifier 清理所有缓存数据之前调用。

另请参阅 registerInstance.

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