QML之MouseArea

MouseArea

MouseArea是一个不可见的项目,通常用来和一个可见项目配合使用。

enabled属性

默认为true;
如果为false,那么MouseArea对于鼠标将会变得透明,不处理任何鼠标事件。

pressed属性

只读的pressed属性表明,用户是否在MouseArea上按住了鼠标按钮。这个属性经常用于属性绑定,可以实现在鼠标按下时执行一些操作。

containsMouse属性

只读的containsMouse属性表明,当前鼠标光标是否在MouseArea上。默认只有鼠标的一个按钮处于按下状态时,才可以被检测到。

hoverEnabled属性

默认MouseArea项目只报告鼠标单击而不报告鼠标光标的位置改变。可以设置hoverEnabled属性为true来更改。
这样设置之后,onPositionChanged()和onEntered()和onExited()等函数才可以使用。
而且这时候containsMouse属性也可以在没有鼠标按钮按下的情况下 检查光标。

propagateComposedEvents属性

当MouseArea与其他的MouseArea项目重叠时候,可以设置propagateComposedEvents属性为true来传播clicked、doubleClicked和pressAndHold等事件。但是只有在MouseArea没有接受这些事件的时候,它们才可以继续向下传播。

即当事件已经在一个MouseArea中进行处理,则需要在其事件处理器中设置MouseEvent.accepted为false,这样事件才能继续向下传播。

Rectangle {
        color: "yellow"
        width: 100;
        height: 100
        MouseArea{
            anchors.fill: parent
            onClicked: console.log("Clicked yellow")
            onDoubleClicked: {
                console.log("double clicked yellow")
                mouse.accepted=false
            }
        }
        Rectangle{
            color:"blue"
            width: 50
            height: 50
            MouseArea{
                anchors.fill: parent
                propagateComposedEvents: true
                onClicked: {
                    console.log("clicked blue")
                    mouse.accepted=false
                }
                onDoubleClicked: {
                    console.log("double clicked")
                    mouse.accepted=false
                }
            }
        }
    }

这里写图片描述

因为蓝色的矩形的MouseArea设置了propagateComposedEvents为true,且clicked和doubleClicked事件的MouseEvent.accept设置设置为false,所有蓝色矩形的 所有单击和双击事件都会传播到黄色矩形。

鼠标事件:MouseEvent

mouse.accepted属性

通过设置accepted为true防止鼠标事件传播到下一层项目。

mouse.x属性

通过x和y来获取鼠标位置。

mouse.button属性

通过button或buttons可以获取按下的按键;
Qt.LeftButton、Qt.RightButton、Qt.MiddleButton、

modifiers

通过modifiers属性可以设置获取按下的键盘修饰符
常用按键有:
Qt.NoModifiers:没有修饰符被按下
Qt.ShiftModifiers:Shift被按下
Qt.ControlModifiers:Ctrl被按下
Qt.AltModifiers:Alt被按下
Qt.MetaModifiers:Meta键被按下
Qt.KeypadModifiers:小键盘按钮被按下

Rectangle{
    width:!00;
    height:100;
    color:"green"
    MouseArea{
        anchors.fill:parent;
        acceptedButtons:Qt.LeftButton|Qt.rightButton
        onClicked:{
            if(mouse.button==Qt.RightButton)
                parent.color="blue"
            else
                parent.color="red"

        }
        onDoubleClicked:{
            if(mouse.button==Qt.LeftButton)
                &&(mouse.modifiers&Qt.ShiftModifiers)
                    parent.color="green"
        }
    }
}

鼠标滚动:WheelEvent

使用鼠标滚轮事件。
onWheel处理器有一个wheel参数,就是WheelEvent类型的。
最重要的一个属性是angleDelta,可以用来获取滚轮滚动的距离,它的x,y坐标分别保存了水平和垂直方向的增量。
向上或者向右返回正值,向下或者向左返回负值。
大多数鼠标,每当滚轮旋转一下是15°,此时angleDelta的值就是15*8=120。

滚轮向上滚动放大字号,向下缩小字号。

import QtQuick 2.2
Rectangle{
    width:360;
    height:360
    Text{
        id:myText;
        anchors.centerIn:parent;
        text:"Qt"

    }
    MouseArea{
        anchors.fill:parent;
        onWheel:{
            if(wheel.modifiers & Qt.ControlModifier){
                myText.font.pointSize+=1;
            }else{
                myText.font.pointSize-=1;
            }
        }
    }
}

拖放事件

MouseArea中的drag分组属性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值