博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qml----Model/View入门(三)ListView分组显示
阅读量:5152 次
发布时间:2019-06-13

本文共 4240 字,大约阅读时间需要 14 分钟。

除了动画效果外,还有一个实用的功能就是按条件分组。如同手机里通讯录一般

section,就是实现分组的主角,简略讲讲这个主角的本领

section.property  表明了分组的依据,比如section.property: "cost"

section.criteria 指定了section,property的判断条件,通常有ViewSection.FullString和ViewSection.FirstCharacter两种,全串匹配和首字母匹配。匹配时不区分大小写

section.delegate 通过设置一个component,来显示每个section

还有很多section的属性,具体的可查帮助文档。不过有一点需要注意:listview的分组不会自动排序,也就是说,如果apple和huawei的手机交替出现时,那么listview则可能会显示多个           相同的section.

下面是个具体的实例

import QtQuick 2.2import QtQuick.Controls 1.1import QtQuick.Layouts 1.1Rectangle {    width: 360    height: 400    color: "#EEEEEE"    Component{        id: phoneModel        ListModel{            ListElement{                name: "iphone 5"                cost: "4900"                manufacture: "Apple"            }            ListElement{                name: "iphone 3gs"                cost: "1000"                manufacture: "Apple"            }            ListElement{                name: "iphone 4"                cost: "1800"                manufacture: "Apple"            }            ListElement{                name: "iphone 4s"                cost: "2300"                manufacture: "Apple"            }            ListElement{                name: "B199"                cost: "1590"                manufacture: "HuaWei"            }            ListElement{                name: "c88160"                cost: "590"                manufacture: "HuaWei"            }            ListElement{                name: "galaxy s5"                cost: "2300"                manufacture: "sumsung"            }            ListElement{                name: "galaxy s7"                cost: "4900"                manufacture: "sumsung"            }            ListElement{                name: "galaxy s4"                cost: "1200"                manufacture: "sumsung"            }            ListElement{                name: "MI5"                cost: "2300"                manufacture: "XiaoMi"            }        }    }// phoneModel is end    Component{        id: phoneDelegate        Item {            id: wrapper            width: parent.width            height: 30            ListView.onAdd: console.log("count:", ListView.view.count)            MouseArea{                anchors.fill: parent                onClicked: wrapper.ListView.view.currentIndex = index            }            RowLayout{                anchors.left: parent.left                anchors.verticalCenter: parent.verticalCenter                spacing: 8                Text{                    id: coll                    text: name                    color: wrapper.ListView.isCurrentItem ? "red" : "black"                    font.pixelSize: wrapper.ListView.isCurrentItem ? 22 : 18                    Layout.preferredWidth: 120                }                Text{                    text: cost                    color: wrapper.ListView.isCurrentItem ? "red" : "black"                    font.pixelSize: wrapper.ListView.isCurrentItem ? 22 : 18                    Layout.preferredWidth: 80                }                Text{                    text: manufacture                    color: wrapper.ListView.isCurrentItem ? "red" : "black"                    font.pixelSize: wrapper.ListView.isCurrentItem ? 22 : 18                    Layout.fillWidth: true                }            }        }    }//phoneDelegate is end    Component{        id: sectionHeader        Rectangle{            width: parent.width            height: childrenRect.height            color: "lightsteelblue"            Text{                text: section                font.bold: true                font.pointSize: 20            }        }    }//sectionHeader is end    ListView{        id: listView        anchors.fill: parent        delegate: phoneDelegate        model: phoneModel.createObject(listView)        focus: true        highlight: Rectangle{            color: "lightblue"        }        /*  特别注意的是,listview的分组不会引起listview自动按分组来处理Item的顺序。如果listView的Model         *  内的数据没有按分组顺序编排,比如说samsung和apple的手机在model内交替出现,那么listview则可能会         *  显示多个相同的section         */        section.property: "manufacture"        section.criteria: ViewSection.FullString        section.delegate: sectionHeader    }}

 

转载于:https://www.cnblogs.com/SaveDictator/p/8192623.html

你可能感兴趣的文章
程序代码记Log
查看>>
ORACLE 11G使用用EXPDP导出时,空表不能导出
查看>>
2017-2018-1 20155216 实验三:并发程序
查看>>
图像旋转
查看>>
九宫格抽奖
查看>>
阅读笔记第五章
查看>>
金蝶数据库执行语句
查看>>
前端SEO技巧
查看>>
python+selenium遇到鼠标悬停不成功可以使用js进行操作
查看>>
我的退休程序修正过程
查看>>
Java程序优化细节
查看>>
baihuilong advertising test
查看>>
Maven安装配置
查看>>
ORA-10635: Invalid segment or tablespace type
查看>>
计算机改名导致数据库链接的诡异问题
查看>>
Windows 8 操作系统 购买过程
查看>>
软件工程课程-个人编程作业
查看>>
Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
查看>>
GitLab+Nginx(SSL)+MySQL+Ruby安装部署
查看>>
visualSVN server安装使用
查看>>