QML事件处理--MouseArea

MouseArea:不可见项目,通常和一个课件项目配合使用来为其提供鼠标处理。鼠标处理的逻辑可以包含在一个MouseArea中

enabled属性:true/false 设置是否启用鼠标处理,默认为true

pressed属性:只读,用户是否按住了鼠标

containsMouse属性:当前是否有鼠标在MouseArea上,默认的只有鼠标的一个按键处于按下状态才可以被检测到

事件处理器:onClicked(), onDoubleClicked(), onPressed(), onReleased()和onPressAndHold()等。

鼠标位置改变:hoverEnabled属性。

默认情况下,MouseArea项目只报告鼠标单击而不报告鼠标光标的位置改变,可以通过该属性修改

这样onPositionChanged()、onEntered()和onExited()等处理函数都可以使用了

这时containMouse属性也可以在没有鼠标按键按下的情况下进行检查了

1. MouseEvent

很多MouseArea的信号都包含了一个鼠标事件参数,例如MouseArea::onClicked(MouseEvent mouse),在MouseEvent对象中,可以通过x和y属性获取鼠标的位置;通过button属性可以获取按下的按键;通过modifiers属性可以获取按下的键盘修饰符等等。button可获取的值:Qt.LeftButton,Qt.RightButton和Qt.MiddleButton;而modifiers的值由多个按键进行组合而成,在使用时需要modifiers与这些特殊的按键进行按位与来判断按键,通常的按键有Qt.NoModifier没有修饰键、Qt.ShiftModifier一个Shift按键、Qt.ControlModifier一个Ctrl按键、Qt.AltModifier一个Alt按键。

import QtQuick 2.0

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"
            //左键 + shift键
            else if((mouse.button == Qt.LeftButton) && (mouse.modifiers & Qt.ShiftModifier))
                parent.color = "green"
            else
                parent.color = "red"
        }
    }
}
2. 拖拽

MouseArea中的drag分组属性提供了一个使项目可以拖动的简单方法。

drag.target属性来指定拖动的项目的id;

drag.active属性获取项目当前是否正在被拖动的信息;

trag.axis属性用来指定属性拖动的方向,可以是水平方向(Drag.XandYAxis),垂直方向(Drag.YAxis),或者两个方向都可以(Drag.XandYAxis)

drag.minimum和drag.maximum限制了项目在指定方向拖动的距离。

import QtQuick 2.4

Rectangle {
    id: container
    width: 600; height: 200
    Rectangle {
        id: rect
        width: 50; height: 50
        color: "red"
        opacity: (600.0 - rect.x) / 600
        MouseArea {
            anchors.fill: parent
            drag.target: rect
            drag.axis: Drag.XAxis
            drag.minimumX: 0
            drag.maximumX: container.width - rect.width
        }
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值