• qml----Model/View入门(三)ListView分组显示


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

    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.2
    import QtQuick.Controls 1.1
    import QtQuick.Layouts 1.1
    
    Rectangle {
         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
                 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{
                 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
        }
    }
  • 相关阅读:
    bzoj 2618: [Cqoi2006]凸多边形
    BZOJ 4556 [Tjoi2016&Heoi2016]字符串
    BZOJ 4850 [Jsoi2016]灯塔
    BZOJ 2956: 模积和
    PHP 正则表达式
    Linux Centos6.5安装redis3.0 和phpredis
    linux 删除过期文件
    THINKPHP报错 _STORAGE_WRITE_ERROR
    THINKPHP 部署nginx上URL 构造错误
    Linux 修改mysql密码
  • 原文地址:https://www.cnblogs.com/SaveDictator/p/8192623.html
Copyright © 2020-2023  润新知