QIviPagingModel 类
QIviPagingModel 是一个通用的模型,使用“分页”方法来加载数据。 更多信息...
头文件 | #include <QIviPagingModel> |
qmake | QT += ivicore |
由下列实例化 | PagingModel |
继承自 | QIviAbstractFeatureListModel |
由下列继承 |
公共类型
枚举 | LoadingType { FetchMore, DataChanged } |
枚举 | Roles { NameRole, TypeRole, ItemRole } |
属性
|
|
公共函数
QIviPagingModel(QObject *parent = nullptr) | |
T | at(int i) const |
QtIviCoreModule::ModelCapabilities | capabilities() const |
int | chunkSize() const |
int | fetchMoreThreshold() const |
QVariant | get(int i) const |
QIviPagingModel::LoadingType | loadingType() const |
void | reload() |
void | setChunkSize(int chunkSize) |
void | setFetchMoreThreshold(int fetchMoreThreshold) |
void | setLoadingType(QIviPagingModel::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(QtIviCoreModule::ModelCapabilities capabilities) |
void | chunkSizeChanged(int chunkSize) |
void | countChanged() |
void | fetchMoreThresholdChanged(int fetchMoreThreshold) |
void | fetchMoreThresholdReached() const |
void | loadingTypeChanged(QIviPagingModel::LoadingType loadingType) |
重新实现受保护的函数
virtual void | clearServiceObject() override |
virtual void | connectToServiceObject(QIviServiceObject *serviceObject) override |
virtual void | disconnectFromServiceObject(QIviServiceObject *serviceObject) override |
详细描述
当需要在ListView中展示大量数据时,可以直接使用QIviPagingModel或将其作为基类。
模型仅获取它真正需要的数据,并且可以通过loadingType属性来配置如何获取这些数据。
为模型填充数据的后端需要实现QIviPagingModelInterface类。
设置配置
QIviPagingModel使用QtIviCore的动态后端系统,并从QIviAbstractFeatureListModel派生。与大多数"QtIvi特性类"不同,QIviPagingModel不会自动连接到可用的后端。
设置它的最简单方法是连接到另一个特性使用的相同后端。例如,要连接到媒体后端,请使用 mediaplayer 特性的实例。
QIviMediaPlayer *player = new QIviMediaPlayer(); player->startAutoDiscovery(); QIviPagingModel *model = new QIviPagingModel(); model->setServiceObject(player->serviceObject());
加载类型
支持多种加载类型,因为QIviPagingModel旨在与异步请求一起使用以获取其数据。默认的FetchMore加载类型,并使用canFetchMore()/fetchMore()函数来获取新的数据,一旦视图到达当前可用数据的末尾。由于获取数据可能需要一些时间,因此有一个fetchMoreThreshold属性,该属性控制提前多少开始新的获取。
另一种加载类型是DataChanged。与FetchMore相比,整个模型预先填充了空行,并在第一次调用data()函数时获取特定行的实际数据。一旦数据可用,就会为该行触发dataChanged()信号,视图将开始渲染新数据。
有关模式的工作方式和何时适合使用的更多详细信息,请参阅LoadingType的文档。
成员类型文档
枚举 QIviPagingModel::LoadingType
常量 | 值 | 描述 |
---|---|---|
QIviPagingModel::FetchMore | 0 | 这是默认的,可以在不知道列表最终大小的情况下使用(例如无限列表)。列表将检测到它接近末尾(fetchMoreThreshold),然后使用canFetchMore和fetchMore获取下一块数据。这种方法的不利之处在于无法显示动态滚动条指示器,因为内容的最终大小未知。另一个问题可能是快速滚动,因为数据可能无法及时到达,滚动会停止。这可以通过fetchMoreThreshold属性进行微调。 |
QIviPagingModel::DataChanged | 1 | 对于此加载类型,您需要知道列表中有多少项,因为会创建虚拟项,并且用户可以在数据尚未准备就绪显示的情况下开始滚动。类似于FetchMore,数据也是分块加载的。在此处可以安全地使用滚动指示器。委托需要支持此方法,因为当它首次创建时没有内容。 |
枚举 QIviPagingModel::Roles
常量 | 值 | 描述 |
---|---|---|
QIviPagingModel::NameRole | Qt::DisplayRole | 项的名称。例如,通讯录中联系人的名称,或者艺术家列表中的艺术家名称。 |
QIviPagingModel::TypeRole | Qt::UserRole | 项的类型。例如,“艺术家”、“曲目”、“联系人”。 |
QIviPagingModel::ItemRole | Qt::UserRole + 1 | 项本身。这提供了访问特定类型的属性。例如,联系人的地址。 |
属性文档
capabilities : const QtIviCoreModule::ModelCapabilities
包含模型当前内容的后端功能的特性。
特性控制当前contentType支持的内容。例如,过滤或排序。
访问函数
QtIviCoreModule::ModelCapabilities | capabilities() const |
通知信号
void | capabilitiesChanged(QtIviCoreModule::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 : QIviPagingModel::LoadingType
包含用于加载数据的当前加载类型。
注意:更改此属性时,内容将被重置。
访问函数
QIviPagingModel::LoadingType | loadingType() const |
void | setLoadingType(QIviPagingModel::LoadingType loadingType) |
通知信号
void | loadingTypeChanged(QIviPagingModel::LoadingType loadingType) |
成员函数文档
QIviPagingModel::QIviPagingModel(QObject *parent = nullptr)
创建一个 QIviPagingModel。
parent 参数传递给 QIviAbstractFeatureListModel 基础类。
[信号]
void QIviPagingModel::fetchMoreThresholdReached() const
每当达到 fetchMoreThreshold 并从后端请求数据时,发出此信号。
template <typename T> T QIviPagingModel::at(int i) const
返回索引 i 的项,并将其转换为模板类型 T。
[重载虚函数]
bool QIviPagingModel::canFetchMore(const QModelIndex &parent) const
重新实现: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.
[重载虚保护函数]
void QIviPagingModel::clearServiceObject()
重新实现:QIviAbstractFeatureListModel::clearServiceObject().
[重载虚保护函数]
void QIviPagingModel::connectToServiceObject(QIviServiceObject *serviceObject)
重新实现:QIviAbstractFeatureListModel::connectToServiceObject(QIviServiceObject *serviceObject).
[重载虚函数]
QVariant QIviPagingModel::data(const QModelIndex &index, int role) const
重新实现:QAbstractItemModel::data(const QModelIndex &index, int role) const.
[重载虚保护函数]
void QIviPagingModel::disconnectFromServiceObject(QIviServiceObject *serviceObject)
重新实现:QIviAbstractFeatureListModel::disconnectFromServiceObject(QIviServiceObject *serviceObject).
[重载虚函数]
void QIviPagingModel::fetchMore(const QModelIndex &parent)
重新实现:QAbstractItemModel::fetchMore(const QModelIndex &parent).
QVariant QIviPagingModel::get(int i) const
返回索引 i 的项作为 QVariant。
此函数旨在从 QML 使用。对于 C++,请使用 at()。
注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE。
void QIviPagingModel::reload()
重置模型并再次开始获取内容。
注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE。
[重写虚函数]
QHash<int, QByteArray> QIviPagingModel::roleNames() const
重新实现: QAbstractItemModel::roleNames() const.
©2020 Qt公司版权所有。本文档中的文档贡献属于各自所有者的版权。本提供的文档根据自由软件基金会发布的GNU自由文档许可证第1.3版许可。Qt及其相关标志是Qt公司(芬兰及其它国家的商标)。所有其他商标均为各自所有者的财产。