QIviSearchAndBrowseModel 类

QIviSearchAndBrowseModel 是一个通用模型,可用于搜索、浏览、过滤和排序数据。 更多信息...

头文件 #include <QIviSearchAndBrowseModel>
qmakeQT += ivicore
实现类 SearchAndBrowseModel
继承自 QIviPagingModel

公共类型

枚举NavigationType { InModelNavigation, OutOfModelNavigation }
枚举Roles { CanGoForwardRole }

属性

公共函数

QIviSearchAndBrowseModel(QObject *parent = nullptr)
QStringListavailableContentTypes() const
boolcanGoBack() const
boolcanGoForward(int i) const
QStringcontentType() const
voidgoBack()
QIviSearchAndBrowseModel *goForward(int i, QIviSearchAndBrowseModel::NavigationType navigationType)
QIviPendingReply<int>indexOf(const QVariant &variant)
QIviPendingReply<void>insert(int index, const QVariant &variant)
QIviPendingReply<void>move(int cur_index, int new_index)
QStringquery() const
QIviPendingReply<void>remove(int index)
voidsetContentType(const QString &contentType)
voidsetQuery(const QString &query)

重新实现的公共函数

virtual QVariantdata(const QModelIndex &index, int role) const override
virtual QHash<int, QByteArray>roleNames() const override

信号

voidavailableContentTypesChanged(const QStringList &availableContentTypes)
voidcanGoBackChanged(bool canGoBack)
voidcontentTypeChanged(const QString &contentType)
voidqueryChanged(const QString &query)

重新实现的保护函数

virtual voidclearServiceObject() 覆盖
virtual voidconnectToServiceObject(QIviServiceObject *serviceObject) 覆盖

详细描述

当需要在ListView中直接展示大量数据时,应直接使用QIviSearchAndBrowseModel或将其作为中国类的基类。

模型基于基本原理,在数据处理的地方进行过滤和排序,而不是检索全部数据后再本地进行排序或筛选。此外,QIviSearchAndBrowseModel只请求真正需要的数 mop,并且可以配置如何完成此操作。

填充模型数据的后端需要实现QIviSearchAndBrowseModelInterface类。

设置方式

QIviSearchAndBrowseModel使用QtIviCore的动态后端系统,并从QIviAbstractFeatureListModel派生出来。与大多数 "QtIvi 特征类"不同,QIviSearchAndBrowseModel不会自动连接到可用的后端。

设置的最简单方法是与另一个特性所用的同一后端连接。例如,要连接到媒体后端,可以使用来自 mediaplayer 特性的实例

QIviMediaPlayer *player = new QIviMediaPlayer();
player->startAutoDiscovery();
QIviSearchAndBrowseModel *model = new QIviSearchAndBrowseModel();
model->setServiceObject(player->serviceObject());

内容类型

一旦模型连接到后端,就需要选择contentType。所有可能的内容类型都可以从availableContentTypes属性查询。正如其名称所暗示的,此属性选择模型中应显示的内容类型。对于 mediaplayer 示例,可能的内容类型可以是“track”、“album”和“artist”。

过滤和排序

QIviSearchAndBrowseModel的主要用途之一是提供一个强大的过滤和排序底层数据模型内容的方法。如上所述,过滤和排序应在数据处理的地方进行。为了在多个后端之间实现这一点,发明了Qt IVI 查询语言

使用query属性对模型内容进行排序:例如,通过设置字符串"[/name]",内容将按名称升序排序。

对于筛选,使用同一属性,但不使用括号,例如“name='Example Item'”,仅显示具有“name”属性设置为“Example Item”的项。

过滤和排序也可以合并到一个字符串中,并且筛选部分也可以更复杂。更多关于此的信息可以在详细的Qt IVI 查询语言文档中找到。

浏览

除了过滤和排序之外,QIviSearchAndBrowseModel还支持浏览不同内容类型的层次结构。最简单的方法就是看看现有的媒体示例。

当实现所有可用媒体文件库的视图时,可能希望为用户提供一种浏览媒体数据库并选择歌曲的方式。还可能希望提供多个起点并从中限制结果。例如:

  • 艺术家 -> 专辑 -> 轨道
  • 专辑 -> 轨道
  • 轨道

可以通过定义一个考虑先前选择的复杂过滤查询来实现这一点。这是最强的方法,因为开发人员/设计师可以定义浏览顺序,并且很容易更改。缺点是后端需要同时支持这种过滤和排序方式,而这并不总是可能的。一个好的例子是DLNA后端,其中服务器已经定义了固定的浏览顺序。

QIviSearchAndBrowseModel提供以下方法用于浏览:

在浏览可用数据时,QIviSearchAndBrowseModel支持两种导航类型:对于大多数情况,简单的InModelNavigation类型就足够了。通过使用这种方法,当前模型实例的内容类型会在导航时改变,并重置模型以显示新数据。另一种导航类型是OutOfModelNavigation,保持当前模型实例不变。而是通过goForward()方法返回一个新的模型实例,其中包含新的数据。当需要同时打开多个视图时特别有用。例如在QML StackView内部使用。

QIviSearchAndBrowseModel *artistModel = new QIviSearchAndBrowseModel();
model->setContentType("artist");
//Returns a new instance of QIviSearchAndBrowseModel which contains all albums from the artist at index '0'
QIviSearchAndBrowseModel *albumModel = artistModel->goForward(0, QIviSearchAndBrowseModel::OutOfModelNavigation);

注意:请参阅QIviPagingModel文档了解数据加载工作情况,并参阅模型部分了解有关QtIvi中所有模型的更多信息。

成员类型文档

常数描述
QIviSearchAndBrowseModel::InModelNavigation0新内容将加载到该模型中,并将现有模型数据重置
QIviSearchAndBrowseModel::OutOfModelNavigation1将返回一个新的模型,该模型加载新的内容。该模型的数据将不被更改并且仍可使用。

枚举QIviSearchAndBrowseModel::Roles

常数描述
QIviSearchAndBrowseModel::CanGoForwardRoleQIviPagingModel::LastRole + 1如果此项目可用于前进一个级别并显示下一组项目,则为true。另请参阅goForward()

另请参阅 QIviPagingModel::Roles.

属性文档

availableContentTypes : const QStringList

包含所有可用的内容类型

访问函数

QStringListavailableContentTypes() const

通知信号

voidavailableContentTypesChanged(const QStringList &availableContentTypes)

另请参阅 contentType.

canGoBack : const bool

包含是否可以使用goBack()函数返回到之前的内容。

有关更多信息,请参阅浏览

访问函数

boolcanGoBack() const

通知信号

voidcanGoBackChanged(bool canGoBack)

contentType : QString

包含当前在模型中显示的内容类型。

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

访问函数

QStringcontentType() const
voidsetContentType(const QString &contentType)

通知信号

voidcontentTypeChanged(const QString &contentType)

另请参阅 availableContentTypes.

query : QString

保存用于过滤和排序当前模型内容的当前查询。

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

有关更多信息,请参阅Qt IVI 查询语言

访问函数

QStringquery() const
voidsetQuery(const QString &query)

通知信号

voidqueryChanged(const QString &query)

另请参阅 过滤和排序.

成员函数文档

QIviSearchAndBrowseModel::QIviSearchAndBrowseModel(QObject *parent = nullptr)

构建一个 QIviSearchAndBrowseModel。

parent 参数会传递给 QIviAbstractFeatureListModel 基类。

bool QIviSearchAndBrowseModel::canGoForward(int i) const

当索引 i 的项目可用于显示下一组元素时,返回 true。

有关更多信息,请参阅浏览

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

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

重新实现:QIviPagingModel::clearServiceObject()。

[重写虚受保护]void QIviSearchAndBrowseModel::connectToServiceObject(QIviServiceObject *serviceObject)

重新实现:QIviPagingModel::connectToServiceObject(QIviServiceObject *serviceObject)。

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

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

void QIviSearchAndBrowseModel::goBack()

在导航历史中后退一级。

有关更多信息,请参阅浏览

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

QIviSearchAndBrowseModel *QIviSearchAndBrowseModel::goForward(int i, QIviSearchAndBrowseModel::NavigationType navigationType)

当索引 i 的项目可用于显示下一组元素时,返回 true。

使用索引 i 的项目并显示下一组项目。可以使用 navigationType 来控制是否应该在此模型实例中显示新数据,还是创建并返回一个新实例。如果返回了一个实例,则该实例由调用者拥有。

注意:是否支持 OutOfModelNavigation 导航类型由后端决定。

有关更多信息,请参阅浏览

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

QIviPendingReply<int> QIviSearchAndBrowseModel::indexOf(const QVariant &variant)

确定 variant 在此模型中的索引。

结果以 QIviPendingReply 的形式返回。

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

QIviPendingReply<void> QIviSearchAndBrowseModel::insert(int index, const QVariant &variant)

在索引 index 位置插入 variant

如果后端不接受提供的项目,此操作不会做任何事情。

返回的 QIviPendingReply 会在操作完成或失败时进行通知。

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

QIviPendingReply<void> QIviSearchAndBrowseModel::move(int cur_index, int new_index)

将位置 cur_index 的项目移动到新位置 new_index

返回的 QIviPendingReply 会在操作完成或失败时进行通知。

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

QIviPendingReply<void> QIviSearchAndBrowseModel::remove(int index)

移除位置 index 的项目。

返回的 QIviPendingReply 会在操作完成或失败时进行通知。

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

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

重实:QIviPagingModel::roleNames() const.

©2020 The Qt Company Ltd. 以下文档贡献的版权属于各自的所有者。本提供的文档遵守自由软件基金会发布、经修改的 GNU 自由文档许可版本 1.3 的条款。Qt 以及相关标志是芬兰及/或世界其他地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。