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
}
}
}