★3.3 事件处理
★3.3.1 ※MouseArea
Item <-- MouseArea | ||
属性 | ||
acceptedButtons : Qt::MouseButtons | ||
containsMouse : bool | 【书】只读属性。表明当前鼠标光标是否在MouseArea上,默认只有鼠标的一个按钮处于按下状态时才可以被检测到。 | |
containsPress : bool | ||
cursorShape : Qt::CursorShape | ||
drag | 下面这些解释都来自书P117 | |
drag.active : bool | 【书】指定目标项目当前是否可以被拖动。值:true 或 false ?好像是个只读属性不能设置。等于说设置了target就等于说是true了? | |
drag.axis : enumeration | 【书】指定可以拖动的方向。值:Drag.XAxis 水平方向 Drag.YAxis 垂直方向 Drag.XAndYAxis 水平和垂直方向 | |
drag.filterChildren : bool | 【书】使子 MouseArea 也启用拖动。值:true 或 false | |
drag.maximumX : real | 【书】最小和最大拖动距离。值是像素,real类型的值。 | |
drag.maximumY : real | ||
drag.minimumX : real | ||
drag.minimumY : real | ||
drag.smoothed : bool | 【书】是否平滑拖动。值:true或false | |
drag.target : Item | 【书】指定要拖动的项目ID。值:对象 | |
drag.threshold : real | 【书】启用拖动的阈值,超过该值才被认为是一次拖动;合理设置阈值可以有效避免用户因抖动等原因造成的拖动误判。 real类型的值,以像素为单位。 | |
enabled : bool | 【书】是否启用鼠标处理,默认为true。如果设置为false则不处理任何鼠标事件。 | |
hoverEnabled : bool | 【书】默认情况下MouseArea项目只报告鼠标单击而不报告鼠标光标的位置改变,这可以通过设置hoverEnabled属性为true来进行更改。这样设置后,onPositionChanged(),onEntered()和onExited()等处理函数才可以使用。而且这时containsMouse属性也可以在没有鼠标按钮按下的情况下检查光标。 | |
mouseX : real | onMouseXChanged: { if (mouseX - recZoom.x >= 0) { xScaleZoom = 1; recZoom.width = mouseX - recZoom.x; } else { xScaleZoom = -1; recZoom.width = recZoom.x - mouseX; } } | |
mouseY : real | onMouseYChanged: { if (mouseY - recZoom.y >= 0) { yScaleZoom = 1; recZoom.height = mouseY - recZoom.y; } else { yScaleZoom = -1; recZoom.height = recZoom.y - mouseY; } } | |
pressAndHoldInterval : int | ||
pressed : bool | 【书】只读属性,表明是否在MouseArea上按住了鼠标按钮,这个属性经常用于属性绑定,可以实现在鼠标按下时执行一些操作。 【补例子】 | |
pressedButtons : MouseButtons | ||
preventStealing : bool | ||
propagateComposedEvents : bool | 【书】属性设置为true来传播clicked,doubleClicked和pressAndHold等事件。但是只有在MouseArea没有接受这些事件的时候,它们才可以继续向下传播。 | |
scrollGestureEnabled : bool | ||
信号 | ||
canceled() | ||
clicked(MouseEvent mouse) | ||
doubleClicked(MouseEvent mouse) | ||
entered() | ||
exited() | ||
positionChanged(MouseEvent mouse) | onPositionChanged() | |
pressAndHold(MouseEvent mouse) | ||
pressed(MouseEvent mouse) | onPressed() | |
released(MouseEvent mouse) | onReleased() | |
wheel(WheelEvent wheel) | ||
Method | ||
为了与不同的元素交互,你通常需要使用 MouseArea(鼠标区域)元素。这是一个矩形的非可视化元素对象,你可以通过它来捕捉鼠标事件。当用户与可视化端口交互时,mouseArea 通常被用来与可视化元素对象一起执行命令。
很多时候,MouseArea 区域会传递一个鼠标事件作为参数,这个参数中包含了很多鼠标事件信息,例如,单击的位置,具体按下的一个鼠标左键还是右键,以及一些键盘按键信息。
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';
}
}
}
在上面的例子中,当 Rectangle 区域被右键单击时会触发改变颜色。
也是继承自Item.
因为它看不到。所以在MouseArea里外面又套了一个Rectangle.下面的例子是在MouseArea里面嵌套一个Rectangle.