QML事件处理之鼠标事件(MouseEvent)和滚轮事件(WheelEvent)

QtQuick的可视项目结合MouseArea获取鼠标相关事件,并通过信号和处理器与鼠标进行交互。大多数MouseArea的信号都包含了一个mouse参数,它是MouseEvent类型的,例如前面使用的mouse.accepted。在MouseEvent对象中,可以设置accepted属性为true来防止鼠标事件传播到下层的项目;通过x和y属性获取鼠标的位置;通过button或buttons属性可以获取按下的按键;通过modifiers属性可以获取按下的键盘修饰符等。这里的button可取的值有Qt.LeftButton左键、Qt.RightButton右键和Qt.MiddleButton中键;而modifiers的值由多个按键进行位组合而成,在使用时需要将modifiers与这些特殊的按键进行按位与来判断按键,常用的按键有:

  • Qt.NoModifier:没有修饰键被按下;
  • Qt.ShiftModifier:Shift键被按下;
  • Qt.ControlModifier:Ctrl键被按下;
  • Qt.AltModifier:Alt键被按下;
  • Qt.MetaModifier:Meta 键被按下;
  • Qt.KeypadModifier:一个小键盘按钮被按下。
    Rectangle {
        width: 100; 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.ShiftModifier))
                    parent.color = "green"
            }
        }
    }

除了使用MouseEvent获取鼠标按键事件,还可以使用WheelEvent获取鼠标滚轮
事件。MouseArea的onWheel处理器有一个wheel参数,就是WheelEvent类型的。
WheelEvent 最重要的一个属性就是 angleDelta,可以用来获取滚轮滚动的距离,它的
x和y坐标分别保存了水平和垂直方向的增量。滚轮向上或向右滚动返回正直,向下或
向左滚动返回负值。对于大多数鼠标,每当滚轮旋转一下,默认是15°,此时angleDelta的
值就是15x8即整数1201。在下面的例子中,当按下Ctrl键的同时,滚轮向上滚动便放大
字号,向下滚动便缩小字号。

    Rectangle {
        width:360; height: 360
        Text {id:myText; anchors.centerIn: parent;text: "QT"}
        MouseArea {
            anchors.fill: parent
            onWheel: {
                if(wheel.modifiers& Qt.ControlModifier){
                    if(wheel.angleDelta.y > 0)
                        myText.font.pointSize += 1
                    else
                        myText.font.pointSize -= 1
                }
            }
        }
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值