★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 | 【书】最小和最大拖动距离。值是像素,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.

相关推荐
梦起丶9 小时前
Qml 中实现时间轴组件
qt·ui·时间轴·控件·qml
梦起丶1 天前
Qml 中实现任意角为圆角的矩形
qt·ui·控件·qml
码农客栈1 天前
qml XmlListModel详解
qml
小灰灰搞电子4 天前
QML states和transitions的使用
qt·qml
码农客栈5 天前
qml SpringAnimation详解
qml
人才程序员14 天前
Windows11 安卓子系统存储位置更改
android·c语言·c++·qt·qml·界面
瀛洲客15 天前
Qt6 QML RegularExpressionValidator 输入中文的坑
qt·qml·中文·汉字输入
梦起丶16 天前
Qml 中实现毛玻璃效果
qt·ui·qml·毛玻璃