QIfPagingModel 类

QIfPagingModel 是一个通用的模型,用于通过“分页”方法加载数据。 更多...

头文件 #include <QIfPagingModel>
qmakeQT += interfaceframework
由以下类实例化 PagingModel
继承自 QIfAbstractFeatureListModel
由以下类继承

QIfFilterAndBrowseModel

公开类型

枚举LoadingType { FetchMore, DataChanged }
枚举Roles { NameRole, TypeRole, ItemRole }

属性

公开函数

QIfPagingModel(QObject *parent = nullptr)
Tat(int i) const
QtInterfaceFrameworkModule::ModelCapabilitiescapabilities() const
intchunkSize() const
intfetchMoreThreshold() const
QVariantget(int i) const
QIfPagingModel::LoadingTypeloadingType() const
voidreload()
voidsetChunkSize(int chunkSize)
voidsetFetchMoreThreshold(int fetchMoreThreshold)
voidsetLoadingType(QIfPagingModel::LoadingType loadingType)

重新实现公开函数

virtual boolcanFetchMore(const QModelIndex &parent) const override
virtual QVariantdata(const QModelIndex &index, int role) const override
virtual voidfetchMore(const QModelIndex &parent) override
virtual QHash<int, QByteArray>roleNames() const override
virtual introwCount(const QModelIndex &parent = QModelIndex()) const override

信号

voidcapabilitiesChanged(QtInterfaceFrameworkModule::ModelCapabilities capabilities)
voidchunkSizeChanged(int chunkSize)
voidcountChanged()
voidfetchMoreThresholdChanged(int fetchMoreThreshold)
voidfetchMoreThresholdReached()
voidloadingTypeChanged(QIfPagingModel::LoadingType loadingType)

重写受保护的函数

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

详细描述

当需要在ListView中展示大量数据时,应直接或以基类形式使用 QIfPagingModel。

模型仅获取实际需要的数据,并且可以通过 loadingType 属性来配置如何获取这些数据。

填充模型的后端需要实现 QIfPagingModelInterface 类。

设置方法

QIfPagingModel 使用.QtInterfaceFramework 的动态后端系统,并从 QIfAbstractFeatureListModel 派生。与其他大多数 "QtInterfaceFramework 功能类" 不同,QIfPagingModel 不自动连接到可用的后端。

设置方法是连接到另一个功能使用的相同后端。例如,要连接到媒体后端,请使用 mediaplayer 功能的实例

QIfMediaPlayer *player = new QIfMediaPlayer();
player->startAutoDiscovery();
QIfPagingModel *model = new QIfPagingModel();
model->setServiceObject(player->serviceObject());

加载类型

支持多种加载类型,因为 QIfPagingModel 设计用于与异步请求一起获取其数据。默认支持 FetchMore 加载类型,并使用 canFetchMore()/fetchMore() 函数来获取新数据,一旦视图到达当前可用数据的末尾。由于获取数据可能需要一些时间,因此有 fetchMoreThreshold 属性来控制何时开始新的获取。

另一种加载类型是 DataChanged。与 FetchMore 相反,整个模型预填充为空行,并在第一次调用 data() 函数时获取特定行的实际数据。一旦数据可用,将对该行触发 dataChanged() 信号,视图将开始渲染新数据。

请参阅 LoadingType 的文档,了解有关模式下如何工作以及何时适宜使用的更多详细信息。

有关QtInterfaceFramework 中所有模型的信息,请参阅模型部分。

成员类型文档

enum QIfPagingModel::LoadingType

常量描述
QIfPagingModel::FetchMore0这是默认配置,如果不知道列表的最终大小(例如无限列表)可以对此进行使用。列表会检测是否接近末尾(fetchMoreThreshold),然后通过使用canFetchMorefetchMore来获取下一块数据。这种方法的缺点是,你无法显示一个动态滚动条指示器,因为它的大小取决于列表的内容,因为我们不知道数据的最终大小。还可以出现快速滚动的问题,因为数据可能不会按时到达,导致滚动停止。这可以通过fetchMoreThreshold属性进行调整。
QIfPagingModel::DataChanged1对于这种加载类型,你需要知道列表中有多少个项目,因为程序会创建占位符项目,并且用户已经开始滚动,即使数据还没有准备好显示。类似于FetchMore,数据也是分块加载的。你可以在这里安全地使用滚动指示器。代理需要支持这种模式,因为代理在刚创建时并没有内容。

枚举 QIfPagingModel::Roles

常量描述
QIfPagingModel::NameRoleQt::DisplayRole项目的名称。例如,通讯簿中联系人的名称,或者艺术家列表中的艺术家名称。
QIfPagingModel::TypeRoleQt::UserRole项的类型。例如,"artist","track","contact"。)
QIfPagingModel::ItemRoleQt::UserRole + 1项本身。这提供了访问特定类型的属性的方法。例如,联系人的地址。

属性文档

[只读] capabilities : const QtInterfaceFrameworkModule::ModelCapabilities

保存了模型当前内容的后端功能的特性。

特性控制了当前contentType支持什么。例如过滤或排序。

访问函数

QtInterfaceFrameworkModule::ModelCapabilitiescapabilities() const

通知信号

voidcapabilitiesChanged(QtInterfaceFrameworkModule::ModelCapabilities capabilities)

chunkSize : int

保存从后端接口请求的行数。

这个属性可以用来微调加载性能。

较大的块意味着更少的后端调用和潜在的IPC调用,但要传输更多的数据,并且请求完成前的等待时间可能会更长。

访问函数

intchunkSize() const
voidsetChunkSize(int chunkSize)

通知信号

voidchunkSizeChanged(int chunkSize)

[只读] count : const int

保存此模型中的当前行数。

访问函数

virtual introwCount(const QModelIndex &parent = QModelIndex()) const override

通知信号

voidcountChanged()

fetchMoreThreshold : int

保存加载下一个块之前到末尾的行增量

此属性可以用来微调加载性能。当达到阈值时,会从后端请求下一块行。可以定义通过使用chunkSize属性获取多少行。

阈值定义了在缓存行结束之前的行数。

注意:该属性仅在 loadingType 设置为 FetchMore 时使用。

访问函数

intfetchMoreThreshold() const
voidsetFetchMoreThreshold(int fetchMoreThreshold)

通知信号

voidfetchMoreThresholdChanged(int fetchMoreThreshold)

loadingType : QIfPagingModel::LoadingType

保存当前用于加载数据的加载类型。

注意:更改此属性将重置内容。

访问函数

QIfPagingModel::LoadingTypeloadingType() const
voidsetLoadingType(QIfPagingModel::LoadingType loadingType)

通知信号

voidloadingTypeChanged(QIfPagingModel::LoadingType loadingType)

成员函数文档

[明确] QIfPagingModel::QIfPagingModel(QObject *parent = nullptr)

构建一个 QIfPagingModel。

parent 参数被传递给 QIfAbstractFeatureListModel 基类。

template <typename T> T QIfPagingModel::at(int i) const

返回索引 i 转换为模板类型 T 的项目。

[重写虚拟] bool QIfPagingModel::canFetchMore(const QModelIndex &parent) const

重新实现: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.

[重写虚拟受保护] void QIfPagingModel::clearServiceObject()

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

[重写虚拟受保护] void QIfPagingModel::connectToServiceObject(QIfServiceObject *serviceObject)

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

[重写虚拟] QVariant QIfPagingModel::data(const QModelIndex &index, int role) const

重新实现: QAbstractItemModel::data(const QModelIndex &index, int role) const.

[重写虚拟受保护] void QIfPagingModel::disconnectFromServiceObject(QIfServiceObject *serviceObject)

重新实现: QIfAbstractFeatureListModel::disconnectFromServiceObject(QIfServiceObject *serviceObject).

[重写虚拟] void QIfPagingModel::fetchMore(const QModelIndex &parent)

重新实现: QAbstractItemModel::fetchMore(const QModelIndex &parent).

[信号] void QIfPagingModel::fetchMoreThresholdReached()

当达到fetchMoreThreshold并从后端请求新数据时,会发出此信号。

[可调用] QVariant QIfPagingModel::get(int i) const

返回索引i处的元素作为QVariant

此函数旨在从QML中使用。对于C++,请使用at()。

注意:此函数可以通过元对象系统从QML调用。请参阅Q_INVOKABLE

[可调用] void QIfPagingModel::reload()

重置模型并重新开始获取内容。

注意:此函数可以通过元对象系统从QML调用。请参阅Q_INVOKABLE

[覆盖虚函数] QHash<int, QByteArray> QIfPagingModel::roleNames() const

重新实现了:QAbstractItemModel::roleNames() const。

© 2024 The Qt Company Ltd. 本文档中包含的贡献是由各自所有者的版权所有。提供的文档是基于由自由软件基金会发布的GNU自由文档许可第1.3版许可的。Qt和相关标志是The Qt Company Ltd.在芬兰以及全球其他国家和地区的商标。所有其他商标归其所有者所有。