SearchAndBrowseModel QML 类型

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

导入语句import QtIvi 1.0
实例化 QIviSearchAndBrowseModel
继承

PagingModel

属性

方法

详细描述

SearchAndBrowseModel 应用场景:当需要在ListView中展示大量数据时,可以直接使用该模型或将其作为基类。

模型基于以下基本原理:过滤和排序数据的位置创建而不是检索所有数据并在本地进行排序或过滤。此外,SearchAndBrowseModel 只获取其实际需要的数据,并且可以配置如何获取这些数据。

模型中的所有行都需要从 StandardItem 继承。

该模型中可用以下角色

角色名称类型描述
namestring项目的名称。例如:通讯录中的一个联系人名称,或在艺术家列表中的艺术家名称。
typestring项目的类型。例如:"artist"、"track"、"contact"。)
itemobject项目本身。这提供了对特定类型属性访问的权限。例如:联系人的地址。
canGoForwardbool如果此项目可用于向前进一级并显示下一组项目,则为 true。

设置

SearchAndBrowseModel 使用了 QtIviCore动态后端系统,并继承自 QIviAbstractFeatureListModel。与大多数 "QtIvi 特性类" 不同,SearchAndBrowseModel 不会自动连接到可用的后端。

最简单的方法是连接到另一个特性使用的相同后端。例如,要连接到媒体后端,请使用 mediaplayer 特性的实例

Item {
    MediaPlayer {
        id: player
    }

    SearchAndBrowseModel {
        serviceObject: player.serviceObject
    }
}

内容类型

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

过滤和排序

SearchAndBrowseModel 的主要用途之一是提供一种强大的方式来过滤和排序底层数据模型的内容。如上所述,过滤和排序应该在数据产生的地方发生。为了使这在多个后端之间工作,发明了 Qt IVI 查询语言

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

对于过滤,使用相同的属性但不要使用括号,例如 "name='Example Item'" 只显示将 'name' 属性设置为 'Example Item' 的项。

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

浏览

除了过滤和排序,SearchAndBrowseModel 还支持通过不同内容类型的层次结构进行浏览。解释这最简单的方法就是看看现有的媒体示例。

在实现所有可用媒体文件库视图时,您可能希望提供一种让用户浏览媒体数据库并选择歌曲的方式。您也可能想提供多个起点并从那里限制结果。例如。

  • Artist -> Album -> Track
  • Album -> Track
  • Track

这可以通过定义一个复杂的过滤查询来实现,该查询会将之前选择的项目考虑在内。这是最强大的方法,因为开发者/设计师可以定义浏览顺序,并且可以轻松地更改它。缺点是后端也需要支持这种方式进行过滤和排序,但这并不总是案例。一个很好的例子是一个 DLNA 后端,其中服务器已经定义了一个固定的浏览顺序。

SearchAndBrowseModel 提供以下方法/属性用于浏览

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

StackView {
    id: stack
    initialItem: view

    Component {
        id: view
        ListView {
            model: SearchAndBrowseModel {
                contentType: "artist"
            }
            delegate: MouseArea {
                onClicked: {
                    stack.push({ "item" : view,
                                "properties:" {
                                    "model" : model->goForward(index, SearchAndBrowseModel.OutOfModelNavigation)
                                }});
                }
            }
        }
    }
}

注意: 请参阅PagingModel文档了解数据加载方式,以及模型章节了解QtIvi中所有模型的更多信息。

另请参阅 goForward()

属性文档

可用的内容类型 : 列表<字符串>

包含所有可用的内容类型

另请参阅 contentType


是否可以后退 : 布尔值

表示goBack()函数是否可以用来自上一内容返回。

请参阅浏览以获取更多信息。


内容类型 : 字符串

表示此模型中显示的当前内容类型。

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

另请参阅 SearchAndBrowseModel::availableContentTypes


查询 : 字符串

表示用于筛选和排序模型当前内容的当前查询。

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

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

另请参阅 筛选和排序


方法文档

布尔值 canGoForward(i)

当索引为 i 的项目可以被用来显示下一组元素时返回true。

请参阅浏览以获取更多信息。


void goBack()

在导航历史记录中后退一层。

请参阅浏览以获取更多信息。


SearchAndBrowseModel goForward(i, navigationType)

使用索引为 i 的项目并显示下一组项目。

navigationType 可以是以下值之一:

常量描述
InModelNavigation新内容将被加载到该模型中,现有模型数据将被重置
OutOfModelNavigation将返回一个新的模型,该模型加载新内容。此模型的数据将不会被更改且仍可使用。

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

请参阅浏览以获取更多信息。


indexOf(StandardItem item)

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

结果以PendingReply返回。


insert(整数 index, StandardItem item)

在位置 index 插入 item

如果后端不接受提供的项目,此操作将以无操作结束。

返回的PendingReply会通知操作何时完成或是否失败。


move(int cur_index, int new_index)

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

返回的PendingReply会通知操作何时完成或是否失败。


remove(int index)

移除位置为index的项目。

返回的PendingReply会通知操作何时完成或是否失败。


©2020 The Qt Company Ltd. 本文档的贡献者保留各自的版权。提供的文档根据由自由软件基金会发布、GNU自由文档许可证版本1.3的条款进行许可。Qt及其相关标志是The Qt Company Ltd.在芬兰以及/或其他国家和地区的商标。所有其他商标均为其各自所有者的财产。