★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 | 【书】最小和最大拖动距离。值是像素,real类型的值。 |
| 属性 | drag.minimumX : real | 【书】最小和最大拖动距离。值是像素,real类型的值。 |
| 属性 | drag.minimumY : real | 【书】最小和最大拖动距离。值是像素,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 | | |
| Method | | |
为了与不同的元素交互,你通常需要使用 MouseArea(鼠标区域)元素。这是一个矩形的非可视化元素对象,你可以通过它来捕捉鼠标事件。当用户与可视化端口交互时,mouseArea 通常被用来与可视化元素对象一起执行命令。
很多时候,MouseArea 区域会传递一个鼠标事件作为参数,这个参数中包含了很多鼠标事件信息,例如,单击的位置,具体按下的一个鼠标左键还是右键,以及一些键盘按键信息。
javascript
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.