QML之MouseArea

来源:互联网 发布:淘宝中差评怎么改好评 编辑:程序博客网 时间:2024/06/03 17:39

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.2Rectangle{    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分组属性。

原创粉丝点击