文章插图
文章插图
前言
有时,链表的数据需要分组 。例如使用首字母来划分联系人,或者分类音乐 。使用链表视图可以把平面列表按类别划分 。
如何分组?
为了使用分组,section.property与section.criteria必须设置 。section.property定义了哪些属性用于内容的划分 。在这里,最重要的是知道每一组的元素必须连续,否则相同的属性名可能出现在几个不同的地方 。
section.criteria能够被设置为ViewSection.FullString或者ViewSection.FirstCharacter 。默认下使用第一个值,能够被用于模型中有清晰的分组,例如音乐专辑 。第二个是使用一个属性的首字母来分组,这说明任何属性都可以被使用 。通常的例子是用于联系人名单中的姓 。
当组被定义好后,每个子项能够使用绑定属性ListView.section,ListView.previousSection与ListView.nextSection来访问 。使用这些属性,可以检测组的第一个与最后一个子项 。
使用ListView的section.delegate属性可以给组指定代理组件 。它能够创建段标题,并且可以在任意子项之前插入这个段代理 。使用绑定属性section可以访问当前段的名称 。
下面这个例子使用国际分类展示了分组的一些概念 。国籍作为section.property,组代理组件(section.delegate)使用每个国家作为标题 。在每个组中,spacemen模型中的名字使用spaceManDelegate组件来代理显示 。
import QtQuick 2.3import QtQuick.Window 2.2Window {id: rootvisible: truewidth: 480height: 300color: "white"ListView {anchors.fill: parentanchors.margins: 20clip: truemodel: spaceMendelegate: spaceManDelegatesection.property: "nation"section.delegate: sectionDelegate}Component {id: spaceManDelegateItem {width: 260height: 20Text {anchors.left: parent.leftanchors.verticalCenter: parent.verticalCenteranchors.leftMargin: 10font.pixelSize: 12text: name}}}Component {id: sectionDelegateRectangle {width: 260height: 20color: "lightBlue"Text {anchors.left: parent.leftanchors.verticalCenter: parent.verticalCenteranchors.leftMargin: 10font.pixelSize: 12font.bold: truetext: section}}}ListModel {id: spaceMenListElement { name: "小赵"; nation: "中国" }ListElement { name: "小钱"; nation: "中国" }ListElement { name: "小孙"; nation: "中国" }ListElement { name: "小李"; nation: "中国" }ListElement { name: "Amy"; nation: "美国" }ListElement { name: "David"; nation: "美国" }ListElement { name: "Kim"; nation: "美国" }ListElement { name: "Helen"; nation: "俄罗斯" }ListElement { name: "Kate"; nation: "俄罗斯" }}}
运行效果如下:如果同一组下的内容不联系,如下面的代码所示:
ListModel {id: spaceMenListElement { name: "小赵"; nation: "中国" }ListElement { name: "小钱"; nation: "中国" }ListElement { name: "Amy"; nation: "美国" }ListElement { name: "Kim"; nation: "美国" }ListElement { name: "Helen"; nation: "俄罗斯" }ListElement { name: "Kate"; nation: "俄罗斯" }ListElement { name: "小孙"; nation: "中国" }ListElement { name: "小李"; nation: "中国" }ListElement { name: "David"; nation: "美国" }}
【qt listview控件的用法 qt listview和listwidget】即会出现多个相同的属性名,运行效果如下:- 秦俊杰与杨紫分手的原因 没有背叛没有第三者
- 张萌的老公有多豪 张萌丈夫张海苍照片
- 喜欢的女生分手了怎么安慰她 女生分手安慰法则
- 张碧晨被谁捧红的 张碧晨是怎么火起来的
- 固执的蹶叔
- 城里老鼠乡下猫 乡下的老鼠和城里的猫
- 魔法学校的一天 魔法学院的一天
- 小猴子捞月亮的故事 小猴子捞月亮故事在线听
- 穿过鹤脖子的鱼读后感言 穿过鹤脖子的鱼告诉我们什么道理?
- 白眼狼和红皮靴的读后感 白眼狼和红皮靴告诉我们什么道理