Qml:鼠标事件

import QtQuick
import QtQuick.Window

Window {
    width: 640
    height: 480
    visible: true
    title: qsTr("Test Mouse")


    Rectangle
    {
        width: 100
        height: 100
        color:"green"
        Text
        {
            text:"测试鼠标点击事件"
        }

        //鼠标响应区域
        MouseArea
        {
            anchors.fill: parent
            设置响应按键,默认是左键,多个按键用|连接
            //Qt.AllButtons
            //Qt.LeftButton
            //Qt.RightButton
            //Qt.MiddleButton
            acceptedButtons: Qt.AllButtons //Qt.LeftButton|Qt.MiddleButton
            /*
            clicked(MouseEvent mouse)
            doubleClicked(MouseEvent mouse)
            pressed(MouseEvent mouse)
            released(MouseEvent mouse)
            */
            onClicked:(mouse)=>
            {

              /*    Qt.LeftButton     0x00000001     0001
                    Qt.RightButton    0x00000002     0010
                    Qt.MiddleButton   0x00000004     0100
              */
                //左键按下事件
                if(mouse.button === Qt.LeftButton)
                {
                    print("LeftButton")
                    //按下左键时右键按住
                    if(mouse.buttons & Qt.RightButton)
                        print("RightButton")
                    //按下左键时右键和中键按住
                    if((mouse.buttons & Qt.RightButton )&&
                       (mouse.buttons & Qt.MiddleButton )
                       )
                    print("RightButton&MiddleButton")
                }
                //当鼠标事件进入时,键盘Ctrl Shift Alt是否按住
                //modifiers : int 同时按下的键盘功能键
                //    Qt.ShiftModifier - A Shift key on the keyboard is pressed.
                //    Qt.ControlModifier - A Ctrl key on the keyboard is pressed.
                //    Qt.AltModifier - An Alt key on the keyboard is pressed.
                //Ctrl+ Alt
                if( (mouse.modifiers & Qt.ControlModifier) &&
                    (mouse.modifiers & Qt.AltModifier)
                   )
                    print("Ctrl + Alt")

                print("onClicked" +
                      " button:" + mouse.button +
                      " buttons:"+ mouse.buttons
                      )
            }
            onDoubleClicked:(mouse)=>
            {
                print("onDoubleClicked")
            }
            onPressed:(mouse)=>
            {
                print("onPressed")
            }
            onReleased:(mouse)=>
            {
                print("onReleased")
            }
            /*onClicked:
            {
                print("MouseArea onClicked")
            }*/
        }
    }

    //测试鼠标移动事件

    Rectangle
    {
        x:120
        width:100
        height:100
        color:"#003300"
        Text {
           text: qsTr("测试鼠标移动事件")
        }

        MouseArea
        {
            hoverEnabled: true //鼠标未按键直接移入
            anchors.fill: parent
            acceptedButtons: Qt.AllButtons
            onEntered:
            {
                //containsMouse 鼠标在MouseArea区域内
                //containsPress 鼠标是否在区域内按下并按住

                print("onEntered "
                      +" containsMouse:" +containsMouse
                      +" containsPress:"+containsPress
                      )
                parent.color = "#00FF00"
            }
            onExited: parent.color = "#003300"

            //鼠标移动 移动就调用
            onPositionChanged:(mouse) =>
            {
                print(containsPress + " " +containsMouse+" "+ mouse.x+":"+mouse.y  )
                //判断按键按下
            }
            onPressAndHold: (mouse) => //按下鼠标按键进入一次
            {
                print("Hold "+mouse.x+":"+mouse.y)
            }

        }
    }

    //鼠标拖动事件
    Rectangle
    {
        id:container
        y:120
        width:  600
        height: 100
        color: "#999999"
        Rectangle
        {
            id:dragrect
            y:25
            width:50
            height:50
            color:"red"

            MouseArea
            {
                anchors.fill: parent
                drag.target: dragrect
                //限制在X轴拖动
                drag.axis: Drag.XAxis

                //限制拖动位置
                drag.minimumX: 0
                drag.maximumX:container.width - parent.width

            }
        }
    }


}


推荐一个零声学院项目课,个人觉得老师讲得不错,分享给大家:
零声白金学习卡(含基础架构/高性能存储/golang云原生/音视频/Linux内核)
https://xxetb.xet.tech/s/3Zqhgt

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值