QIfPagingModel 类
QIfPagingModel 是一个通用的模型,用于通过“分页”方法加载数据。 更多...
头文件 | #include <QIfPagingModel> |
qmake | QT += interfaceframework |
由以下类实例化 | PagingModel |
继承自 | QIfAbstractFeatureListModel |
由以下类继承 |
公开类型
枚举 | LoadingType { FetchMore, DataChanged } |
枚举 | Roles { NameRole, TypeRole, ItemRole } |
属性
|
|
公开函数
QIfPagingModel(QObject *parent = nullptr) | |
T | at(int i) const |
QtInterfaceFrameworkModule::ModelCapabilities | capabilities() const |
int | chunkSize() const |
int | fetchMoreThreshold() const |
QVariant | get(int i) const |
QIfPagingModel::LoadingType | loadingType() const |
void | reload() |
void | setChunkSize(int chunkSize) |
void | setFetchMoreThreshold(int fetchMoreThreshold) |
void | setLoadingType(QIfPagingModel::LoadingType loadingType) |
重新实现公开函数
virtual bool | canFetchMore(const QModelIndex &parent) const override |
virtual QVariant | data(const QModelIndex &index, int role) const override |
virtual void | fetchMore(const QModelIndex &parent) override |
virtual QHash<int, QByteArray> | roleNames() const override |
virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const override |
信号
void | capabilitiesChanged(QtInterfaceFrameworkModule::ModelCapabilities capabilities) |
void | chunkSizeChanged(int chunkSize) |
void | countChanged() |
void | fetchMoreThresholdChanged(int fetchMoreThreshold) |
void | fetchMoreThresholdReached() |
void | loadingTypeChanged(QIfPagingModel::LoadingType loadingType) |
重写受保护的函数
virtual void | clearServiceObject() override |
virtual void | connectToServiceObject(QIfServiceObject *serviceObject) override |
virtual void | disconnectFromServiceObject(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::FetchMore | 0 | 这是默认配置,如果不知道列表的最终大小(例如无限列表)可以对此进行使用。列表会检测是否接近末尾(fetchMoreThreshold),然后通过使用canFetchMore和fetchMore来获取下一块数据。这种方法的缺点是,你无法显示一个动态滚动条指示器,因为它的大小取决于列表的内容,因为我们不知道数据的最终大小。还可以出现快速滚动的问题,因为数据可能不会按时到达,导致滚动停止。这可以通过fetchMoreThreshold属性进行调整。 |
QIfPagingModel::DataChanged | 1 | 对于这种加载类型,你需要知道列表中有多少个项目,因为程序会创建占位符项目,并且用户已经开始滚动,即使数据还没有准备好显示。类似于FetchMore,数据也是分块加载的。你可以在这里安全地使用滚动指示器。代理需要支持这种模式,因为代理在刚创建时并没有内容。 |
枚举 QIfPagingModel::Roles
常量 | 值 | 描述 |
---|---|---|
QIfPagingModel::NameRole | Qt::DisplayRole | 项目的名称。例如,通讯簿中联系人的名称,或者艺术家列表中的艺术家名称。 |
QIfPagingModel::TypeRole | Qt::UserRole | 项的类型。例如,"artist","track","contact"。) |
QIfPagingModel::ItemRole | Qt::UserRole + 1 | 项本身。这提供了访问特定类型的属性的方法。例如,联系人的地址。 |
属性文档
[只读]
capabilities : const QtInterfaceFrameworkModule::ModelCapabilities
保存了模型当前内容的后端功能的特性。
特性控制了当前contentType支持什么。例如过滤或排序。
访问函数
QtInterfaceFrameworkModule::ModelCapabilities | capabilities() const |
通知信号
void | capabilitiesChanged(QtInterfaceFrameworkModule::ModelCapabilities capabilities) |
chunkSize : int
保存从后端接口请求的行数。
这个属性可以用来微调加载性能。
较大的块意味着更少的后端调用和潜在的IPC调用,但要传输更多的数据,并且请求完成前的等待时间可能会更长。
访问函数
int | chunkSize() const |
void | setChunkSize(int chunkSize) |
通知信号
void | chunkSizeChanged(int chunkSize) |
[只读]
count : const int
保存此模型中的当前行数。
访问函数
virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const override |
通知信号
void | countChanged() |
fetchMoreThreshold : int
保存加载下一个块之前到末尾的行增量
此属性可以用来微调加载性能。当达到阈值时,会从后端请求下一块行。可以定义通过使用chunkSize属性获取多少行。
阈值定义了在缓存行结束之前的行数。
注意:该属性仅在 loadingType 设置为 FetchMore 时使用。
访问函数
int | fetchMoreThreshold() const |
void | setFetchMoreThreshold(int fetchMoreThreshold) |
通知信号
void | fetchMoreThresholdChanged(int fetchMoreThreshold) |
loadingType : QIfPagingModel::LoadingType
保存当前用于加载数据的加载类型。
注意:更改此属性将重置内容。
访问函数
QIfPagingModel::LoadingType | loadingType() const |
void | setLoadingType(QIfPagingModel::LoadingType loadingType) |
通知信号
void | loadingTypeChanged(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.在芬兰以及全球其他国家和地区的商标。所有其他商标归其所有者所有。