有时,链表的数据需要分组。例如使用首字母来划分联系人,或者分类音乐。使用链表视图可以把平面列表按类别划分。
为了使用分组,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.3 import QtQuick.Window 2.2
Window { id: root visible: true width: 480 height: 300 color: "white"
ListView { anchors.fill: parent anchors.margins: 20 clip: true model: spaceMen delegate: spaceManDelegate section.property: "nation" section.delegate: sectionDelegate }
Component { id: spaceManDelegate Item { width: 260 height: 20 Text { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter anchors.leftMargin: 10 font.pixelSize: 12 text: name } } }
Component { id: sectionDelegate Rectangle { width: 260 height: 20 color: "lightBlue" Text { anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter anchors.leftMargin: 10 font.pixelSize: 12 font.bold: true text: section } } }
ListModel { id: spaceMen ListElement { 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: spaceMen ListElement { 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: "美国" } }
即会出现多个相同的属性名,运行效果如下:
由周四发布的“网络垃圾”(Webspam)报告可知,谷歌搜索在 2021 年过滤的垃圾网站数量、竟是 2020 年的六倍。据悉,作为 Alphabet 旗下子公司,Google 有一套名为 SpamBrian 的人工智能垃圾过滤系统,并且可在超过 99% 情况下实现“不受垃圾所困扰”(spam-fr...
自 Windows 11 系统 2021 年 6 月发布以来,不断有各种活动欺骗用户下载恶意的 Windows 11 安装程序。虽然这种情况在过去一段时间里有所遏制,但现在又卷土重来,而且破坏力明显升级。 网络安全公司 CloudSEK 近日发现了一个新型恶意软件活动,看起来非常像是微软的官方网站...
2018年,英特尔、AMD、ARM曝出CPU安全事件,引起广泛关注,舆论一片哗然。虽然英特尔公司表示此次事件不仅仅是英特尔,还涉及AMD/ARM等厂商,且CPU 漏洞补丁基本不会给普通用户造成任何影响,但这次bug依旧被定为成行业大事件。 时隔几年,CPU又再次曝出一个大bug,有意思的...
为了迎接今年 5 月首个周四的“世界密码日”的到来,USA Today 觉得很有必要继续提醒大家提升安全意识。首先是尽量为工作、娱乐、网银、网购等各种在线活动配备强密码,且需避免使用同一个密码,以免所有账号被攻击者一锅端。 资料图(来自:Bitwarden) 业内知名开源密码器(US News &...
英国政府拟议中的一项措施将迫使科技公司开发工具,让用户过滤掉任何被认为 “合法但有害”的材料。这些新措施被添加到英国即将出台的《网络安全法案》中,该法案将强制要求数字平台承担起保护用户免受有害内容影响的责任。 根据英国政府周五宣布的新计划,Facebook、Google和Twitter等科技平...
东欧国家数字转型部负责人表示,由于大规模分布式拒绝服务(DDoS)攻击,多个乌克兰政府网站于周三下线了。DDoS攻击通过使用大量的请求来提供网页进而使网站陷入瘫痪。Mykhailo Fedorov在Telegram上表示,一些银行网站也被关闭了。 乌克兰外交部、部长内阁和议会网站在周三早些时候仍无...