FilterAndBrowseModel QML 类型

FilterAndBrowseModel 是一种泛型模型,可用于搜索、浏览、过滤和排序数据。 更多...

导入声明import QtInterfaceFramework
实例化 QIfFilterAndBrowseModel
继承

PagingModel

属性

方法

详细描述

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

该模型建立在基本的过滤和排序数据的原则之上,这些数据是在它们创建的地方进行过滤和排序的,而不是检索所有数据并在本地进行排序或过滤。另外,FilterAndBrowseModel 仅获取它真正需要的那些数据,并且可以配置如何实现这一功能。

该模型中的所有行都需要从 StandardItem 派生。

此模型中可用以下角色

角色名称类型描述
namestring项目的名称。例如,地址簿中的联系人名称,或艺术家列表中的艺术家名称。
typestring项目的类型。例如,"artist"(艺术家),"track"(曲目),"contact"(联系人)。
itemobject项目本身。这提供了访问特定于类型的属性。例如,联系人的地址。
canGoForwardbool如果此项目可以用来前进一个层级并显示下一组项目,则为 True。

设置

FilterAndBrowseModel 正在使用 QtInterfaceFramework动态后端系统,并且派生自 QIfAbstractFeatureListModel。与其他大多数 "QtInterfaceFramework 功能类" 不同,FilterAndBrowseModel 不会自动连接到可用的后端。

设置它最容易的方法是连接到另一个功能使用的相同后端。例如,要连接到媒体后端,请使用 mediaplayer 功能的实例

Item {
    MediaPlayer {
        id: player
    }

    FilterAndBrowseModel {
        serviceObject: player.serviceObject
    }
}

内容类型

将模型连接到后端后,需要选择 contentType。所有可能的内容类型都可以从 availableContentTypes 属性中查询。正如其名所暗示的那样,该属性选择应显示在模型中的内容类型。对于 mediaplayer 示例,可用的内容类型可能是 "track","album" 和 "artist"。

过滤和排序

FilterAndBrowseModel 的主要用途之一是提供对底层数据模型内容进行过滤和排序的强大方式。如上所述,过滤和排序应在数据生成的地方进行。为了在不同后端之间使其工作,发明了 Qt 接口框架查询语言

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

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

过滤和排序也可以组合为单个字符串,并且过滤器部分也可以更复杂。更多详情可以在详细的 Qt 接口框架查询语言 文档中找到。

浏览

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

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

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

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

FilterAndBrowseModel 提供以下方法/属性进行浏览

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

StackView {
    id: stack
    initialItem: view

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

注意:请参阅有关数据加载的PagingModel文档以及有关模型的信息,可从QtInterfaceFramework模型部分获取更多信息。

另请参阅goForward()。

属性文档

availableContentTypes : 列表<字符串> [只读]

包含所有可用内容类型

另请参阅contentType


canGoBack : 布尔型 [只读]

包含是否可以使用goBack()函数返回到上一个内容。

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


contentType : 字符串

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

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

另请参阅FilterAndBrowseModel::availableContentTypes


query : 字符串

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

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

请参阅有关Qt Interface Framework Query Language的更多信息。

另请参阅FilteringAndSorting


方法文档

布尔型 canGoForward(索引 i)

当索引 idol 的项可用以显示下一组元素时返回 true。

请参阅有关浏览的更多信息。


void goBack()

在导航历史中退回一个级别。

请参阅有关浏览的更多信息。


FilterAndBrowseModel goForward(索引 i, 导航类型 navigationType)

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

导航类型 navigationType 可以是以下值之一:

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

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

请参阅有关浏览的更多信息。


indexOf(StandardItem item)

确定此模型中 item 的索引。

结果以 PendingReply 的形式返回。


insert(int index, StandardItem item)

item 插入到位置 index

如果后端不接受提供的项目,此操作将没有效果。

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


move(int cur_index, int new_index)

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

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


remove(int index)

删除位置 index 的项目。

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


© 2024 Qt 公司有限公司。此处包含的文档贡献归各自的版权所有者所有。此处提供的文档根据 Free Software Foundation 发布的 GNU Free Documentation License 版本 1.3 的条款进行许可。Qt 及其 respective 标志是芬兰的 Qt 公司及其在全世界其他国家的商标。所有其他商标均为各自所有者的财产。