QIfFilterAndBrowseModel 类
QIfFilterAndBrowseModel 是一个通用的模型,可用于搜索、浏览、过滤和排序数据。更多信息...
头文件 | #include <QIfFilterAndBrowseModel> |
qmake | QT += interfaceframework |
实例化自 | FilterAndBrowseModel |
继承自 | QIfPagingModel |
公共类型
枚举 | NavigationType { InModelNavigation, OutOfModelNavigation } |
枚举 | Roles { CanGoForwardRole } |
属性
- availableContentTypes : const QStringList
- canGoBack : const bool
- contentType : QString
- query : QString
公共函数
QIfFilterAndBrowseModel(QObject *parent = nullptr) | |
QStringList | availableContentTypes() const |
bool | canGoBack() const |
bool | canGoForward(int i) const |
QString | contentType() const |
void | goBack() |
QIfFilterAndBrowseModel * | goForward(int i, QIfFilterAndBrowseModel::NavigationType navigationType) |
QIfPendingReply<int> | indexOf(const QVariant &variant) |
QIfPendingReply<void> | insert(int index, const QVariant &variant) |
QIfPendingReply<void> | move(int cur_index, int new_index) |
QString | query() const |
QIfPendingReply<void> | remove(int index) |
void | setContentType(const QString &contentType) |
void | setQuery(const QString &query) |
重写的公共函数
virtual QVariant | data(const QModelIndex &index, int role) const override |
virtual QHash<int, QByteArray> | roleNames() const override |
信号
void | availableContentTypesChanged(const QStringList &availableContentTypes) |
void | canGoBackChanged(bool canGoBack) |
void | contentTypeChanged(const QString &contentType) |
void | queryChanged(const QString &查询) |
重写受保护函数
虚拟 void | clearServiceObject() 覆盖 |
虚拟 void | connectToServiceObject(QIfServiceObject *serviceObject) 覆盖 |
详细描述
当需要在ListView中显示大量数据时,应直接使用 QIfFilterAndBrowseModel 或者将其作为基类。
该模型基于基本原理,在数据创建时即可进行过滤和排序,而不是检索所有数据并在本地排序或过滤。此外,QIfFilterAndBrowseModel 只获取所需的实际数据,并可配置如何进行此操作。
填充模型的后端需要实现 QIfFilterAndBrowseModelInterface 类。
设置
QIfFilterAndBrowseModel 使用了 QtInterfaceFramework 的 动态后端系统,并派生自 QIfAbstractFeatureListModel。与其他大多数 "QtInterfaceFramework 功能类" 不同,QIfFilterAndBrowseModel 并不会自动连接到可用的后端。
设置它的最简单方法是与另一个功能使用相同的后端。例如,对于连接到媒体后端,请使用媒体播放器功能的实例。
QIfMediaPlayer *player = new QIfMediaPlayer(); player->startAutoDiscovery(); QIfFilterAndBrowseModel *model = new QIfFilterAndBrowseModel(); model->setServiceObject(player->serviceObject());
内容类型
一旦模型连接到后端,就需要选择 contentType。所有可能的内容类型都可以从 availableContentTypes 属性查询。如名称所暗示的那样,此属性选择在模型中显示的内容类型。对于媒体播放器示例,可能的内容类型可能是“track”(轨道)、“album”(专辑)和“artist”(艺术家)。
过滤和排序
QIfFilterAndBrowseModel 的重要用途之一是提供一种强大的方式来过滤和排序底层数据模型的内容。如上所述,过滤和排序应在数据生产的地方进行。为了在多个后端之间使这成为可能,发明了 Qt 接口框架查询语言。
使用 query 属性来排序模型的内容:例如,通过设置字符串 “[/name]”,内容将按名称升序排序。
对于过滤,使用相同的属性,但不需要括号,例如 “name='Example Item'” 只显示具有 'name' 属性设置为 'Example Item' 的项目。
过滤和排序也可以组合在一个字符串中,过滤器部分也可以更复杂。更多内容可以在详细 Qt 接口框架查询语言 文档中找到。
浏览
除了过滤和排序外,QIfFilterAndBrowseModel 还支持浏览不同内容类型的层次结构。最容易解释的方法是查看现有的媒体示例。
在实现所有可用媒体文件的库视图时,您可能希望为用户提供一种浏览媒体数据库和选择歌曲的方法。您还可能希望提供几个起点,并从那里限制结果。例如。
- 艺术家 -> 专辑 -> 轨道
- 专辑 -> 轨道
- 轨道
可以通过定义一个复杂的过滤查询来实现,该查询考虑了之前选择的项。这是最强大的方法,因为开发人员/设计师可以定义浏览顺序,并且可以轻松地更改。缺点是后端也需要支持这种过滤和排序的方式,但这并不总是可能的。这里的一个好例子是DLNA后端,服务器已经定义了固定的浏览顺序。
QIfFilterAndBrowseModel提供以下浏览方法
- canGoForward()
- goForward()
- canGoBack()
- goBack()
导航类型
QIfFilterAndBrowseModel在浏览可用数据时支持两种导航类型:对于大多数用例,简单的InModelNavigation类型就足够了。通过使用它,当前模型实例的内容类型在导航时会改变,并且模型会被重置以显示新数据。另一种导航类型是OutOfModelNavigation,它将当前模型实例保持不变。相反,goForward()方法返回一个包含新数据的新模型实例。这对于需要同时打开多个视图的情况非常有用。例如,在使用QML StackView时。
QIfFilterAndBrowseModel *artistModel = new QIfFilterAndBrowseModel(); model->setContentType("artist"); //Returns a new instance of QIfFilterAndBrowseModel which contains all albums from the artist at index '0' QIfFilterAndBrowseModel *albumModel = artistModel->goForward(0, QIfFilterAndBrowseModel::OutOfModelNavigation);
注意:有关数据加载方式,请参阅QIfPagingModel文档,以及有关模型的更多信息,请参阅QtInterfaceFramework的模型部分。
成员类型文档
enum QIfFilterAndBrowseModel::NavigationType
常量 | 值 | 描述 |
---|---|---|
QIfFilterAndBrowseModel::InModelNavigation | 0 | 新内容将被加载到这个模型中,并重置现有模型数据 |
QIfFilterAndBrowseModel::OutOfModelNavigation | 1 | 将返回一个新的模型,该模型将加载新内容。此模型的数据将不会被更改,仍然可以使用。 |
enum QIfFilterAndBrowseModel::Roles
常量 | 值 | 描述 |
---|---|---|
QIfFilterAndBrowseModel::CanGoForwardRole | QIfPagingModel::LastRole + 1 | 如果此项目可以用于前进一个层级并显示下一组项目,则为true。另请参阅goForward() |
另请参阅:QIfPagingModel::Roles.
属性文档
[只读]
availableContentTypes : const QStringList
包含所有可用的内容类型
访问函数
QStringList | availableContentTypes() const |
通知信号
void | availableContentTypesChanged(const QStringList &availableContentTypes) |
另请参阅:contentType.
[只读]
canGoBack : const bool
包含是否可以使用goBack()函数返回上一个内容
有关更多信息,请参阅浏览。
访问函数
bool | canGoBack() const |
通知信号
void | canGoBackChanged(bool canGoBack) |
contentType : QString
包含此模型中显示的当前内容类型。
注意:更改此属性时,内容将被重置。
访问函数
QString | contentType() const |
void | setContentType(const QString &contentType) |
通知信号
void | contentTypeChanged(const QString &contentType) |
查询 : QString
用于过滤和排序当前模型内容的当前查询。
注意:更改此属性时,内容将被重置。
有关更多信息,请参见 Qt 接口框架查询语言。
访问函数
QString | query() const |
void | setQuery(const QString &query) |
通知信号
void | queryChanged(const QString &query) |
参见 过滤和排序.
成员函数文档
[显式]
QIfFilterAndBrowseModel::QIfFilterAndBrowseModel(QObject *parent = nullptr)
构造一个QIfFilterAndBrowseModel。
parent 参数传递给 QIfAbstractFeatureListModel 基类。
[调用的]
bool QIfFilterAndBrowseModel::canGoForward(int i) const
当索引 i 的项可以用于显示下一组元素时返回 true。
有关更多信息,请参见 浏览。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[覆盖虚受保护]
void QIfFilterAndBrowseModel::clearServiceObject()
重新实现了: QIfPagingModel::clearServiceObject。
[覆盖虚受保护]
void QIfFilterAndBrowseModel::connectToServiceObject(QIfServiceObject *serviceObject)
重新实现了: QIfPagingModel::connectToServiceObject(QIfServiceObject *serviceObject).
[调用的]
QVariant QIfFilterAndBrowseModel::data(const QModelIndex &index, int role) const
重新实现了: QIfPagingModel::data(const QModelIndex &index, int role) const.
[调用的]
void QIfFilterAndBrowseModel::goBack()
在导航历史中后退一个级别。
有关更多信息,请参见 浏览。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[调用的]
QIfFilterAndBrowseModel *QIfFilterAndBrowseModel::goForward(int i, QIfFilterAndBrowseModel::NavigationType navigationType)
当索引 i 的项可以用于显示下一组元素时返回 true。
使用索引 i 的项并显示下一组项。可以使用 navigationType 来控制新数据是否应在此模型实例中显示,或者是否应创建新实例并返回。如果返回实例,则调用者拥有此实例。
注意:是否支持OutOfModelNavigation导航类型由后端决定。
有关更多信息,请参见 浏览。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[可调用]
QIfPendingReply<int> QIfFilterAndBrowseModel::indexOf(const QVariant &variant)
确定variant在此模型中的索引。
结果以QIfPendingReply返回。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[可调用]
QIfPendingReply<void> QIfFilterAndBrowseModel::insert(int index, const QVariant &variant)
在位置index插入variant。
如果后端不接受提供的项目,则此操作将为空操作。
返回的QIfPendingReply通知操作何时完成或是否失败。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[可调用]
QIfPendingReply<void> QIfFilterAndBrowseModel::move(int cur_index, int new_index)
将位置为cur_index的项目移动到新位置new_index。
返回的QIfPendingReply通知操作何时完成或是否失败。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[可调用]
QIfPendingReply<void> QIfFilterAndBrowseModel::remove(int index)
删除位置为index的项目。
返回的QIfPendingReply通知操作何时完成或是否失败。
注意:此函数可以通过元对象系统从 QML 中调用。请参见 Q_INVOKABLE。
[覆盖虚函数]
QHash<int, QByteArray> QIfFilterAndBrowseModel::roleNames() const
重新实现:QIfPagingModel::roleNames() const.
© 2024 Qt公司。本文件中所包含的文档贡献是各自所有者的版权。本文件中的文档按GNU自由文档许可协议版本1.3发布,由自由软件基金会出版。Qt和相应的标志是芬兰及其它国家Qt公司的商标。所有其他商标归其各自所有者所有。