quick-qml ListView实现(鼠标,键盘)选中和高亮操作

listview定义了一个要显示的数据模型和一个数据显示方式的委托。listview中的项是水平或垂直布局的。listview本质上是可flickable的,因为列表视图继承自flickable。

直接上代码:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    visible: true
    width: 960
    height: 720
    title: qsTr("Hello World")

    ListView {
        id : listView

        width: parent.width * 0.5
        height: parent.height
        anchors.margins: 20
        clip: true
        model: 100
        delegate: numberDelegate
        spacing: 5
        focus: true
        currentIndex: -1

        property var lastCurrentIndex: -1
    }

    Component {
        id: numberDelegate
        Rectangle {
            width: ListView.view.width
            height: 40

            border.color: Qt.lighter(color, 1.1)
            color: listView.currentIndex == index ? "red" :"green"

            Text {
                anchors.centerIn: parent
                font.pixelSize: 10
                text: index
            }

            MouseArea {
                anchors.fill: parent
                hoverEnabled: true

                onPressed: {
                    if (listView.lastCurrentIndex != -1) {
                        if(listView.itemAtIndex(listView.lastCurrentIndex)){
                            listView.itemAtIndex(listView.lastCurrentIndex).color = "green"
                        }
                    }

                    listView.currentIndex = index
                    color = "red"

                    listView.lastCurrentIndex = index
                  }

                onEntered: {

                    if (listView.currentIndex == index) {
                        return
                    }
                    color = "blue"
                }
                onExited: {

                     if (listView.currentIndex == index) return
                     color = "green"
                }

            }
        }
    }

}

代码效果如下:

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值