QML—MouseArea


前言

MouseArea 是一个不可见项,通常与可见项结合使用,以便为该项提供鼠标处理。通过有效地充当代理,鼠标处理的逻辑可以包含在 MouseArea 项中。


一、属性成员

1、mouseX : real

mouseY : real

光标的坐标。坐标是相对于 MouseArea 的。

如果 hoverEnabled 属性为false:这两个属性仅在按下鼠标按键时有效,并且只要按住鼠标按键,即使光标移出区域外也将保持有效。

如果 hoverEnabled 为 true,则这两个属性在以下情况下有效:

未按下任何鼠标按键,但光标位于 MouseArea 内(containsMouse 为 true)。
一个鼠标按键被按住,即使光标已经移出该区域

2、acceptedButtons : Qt::MouseButtons

此属性保存鼠标区域响应的鼠标按键。默认值:Qt.LeftButton

左键和右键:acceptedButtons: Qt.LeftButton | Qt.RightButton

所有按键:acceptedButtons: Qt.AllButtons

3、containsMouse : bool

光标当前是否在鼠标区域内。

如果 hoverEnabled 为 false,则此属性仅在光标位于 MouseArea 内时按下鼠标时为true。

4、containsPress : bool

这是一个等同于 press && containsMouse 的便利属性,即当前是否按下了任何接受的按钮且光标当前是否在 MouseArea 内。

此属性对于在其边界内按下鼠标时突出显示项目特别有用。

5、cursorShape : Qt::CursorShape

此鼠标区域的光标形状。默认值:Qt.ArrowCursor

6、拖动组

drag.active : bool — 当前是否正在拖动目标项目。

drag.axis : enumeration — 拖动类型:

水平 (Drag.XAxis)
垂直 (Drag.YAxis)
两者皆可 (Drag.XAndYAxis)
drag.filterChildren : bool — 如果为 true,则拖动可以覆盖子项 MouseAreas。

限制目标可以沿相应轴拖动的距离:

drag.maximumX : real
drag.maximumY : real
drag.minimumX : real
drag.minimumY : real
drag.smoothed : bool :默认为 true。

为 true,则在拖动操作开始后才会移动目标。
为 false,则目标将直接移动到当前鼠标位置。
drag.target : Item — 指定要拖动的项目的 id。

drag.threshold : real — 拖动操作开始时的阈值(以像素为单位)。 默认情况下,这绑定到依赖于平台的值。

以下示例显示可沿 X 轴拖动的 Rectangle。 当矩形向右拖动时,它的不透明度会降低。

 Rectangle 
 {
     id: container
     width: root.width;
     height: root.height;

     Rectangle 
     {
         id: rect
         width: 50; height: 50
         color: "red"
         opacity: (root.width - rect.x) / root.width

         MouseArea 
         {
             anchors.fill: parent
             drag.target: rect
             drag.axis: Drag.XAxis
             drag.minimumX: 0
             drag.maximumX: container.width - rect.width
         }
     }
 }

7、enabled : bool

此属性保存项目是否接受鼠标事件。默认为 true。

注意:由于历史原因,该属性不等同于 Item.enabled。它只影响鼠标事件,它的影响不会传播到子项。

8、hoverEnabled : bool

此属性保存是否处理悬停事件。默认为false。

此属性影响 containsMouse 属性以及 onEntered、onExited 和 onPositionChanged 信号。

9、pressAndHoldInterval : int

此属性会覆盖发出 pressAndHold()(长按) 之前经过的时间(以毫秒为单位)

10、pressed : bool

此属性保存当前是否按下了任何已接受的按钮。

11、pressedButtons : MouseButtons

此属性保存当前按下的鼠标按钮。此属性只处理acceptedButtons 中指定的按钮 它包含以下按位组合:

  • Qt.LeftButton
  • Qt.RightButton
  • Qt.MiddleButton

12、preventStealing : bool

鼠标事件是否被过滤。如果设置为 true,则没有项目会过滤鼠标事件。默认为 false

13、propagateComposedEvents : bool

此属性保存组合鼠标事件是否会自动传播到与此 MouseArea 重叠但在视觉堆叠顺序中较低的其他 MouseAreas。默认为 false。

MouseArea 包含多个组合事件:clicked(单击)、doubleClicked(双击) 和 pressAndHold。这些组合事件由基本鼠标事件(如鼠标按下事件)组成,并且与基本事件相比可以以不同的方式传播。

如果设置为true,则组合事件将自动传播到场景中相同位置的其他MouseAreas。每个事件都按堆叠顺序传播到它下面的下一个启用的 MouseArea,直到 MouseArea 接受该事件。与基本事件不同,如果不存在处理程序,则不会自动接受组合事件

14、scrollGestureEnabled : bool

控制此是否响应来自非鼠标设备的滚动手势,如触控板上的 2 指轻拂手势。默认为 true。

如果设置为 false,则仅当滚轮事件来自带滚轮的实际鼠标时才会发出滚轮信号,而滚动手势事件将传递到将处理它们的其他项目。

二、信号成员

1、canceled()

当鼠标事件被取消时会发出这个信号,因为另一个项目过滤了鼠标事件处理

2、clicked(MouseEvent mouse)

单击时发出此信号。

单击定义为按下后释放,两者均在 MouseArea 内(按下、移出 MouseArea,然后移回内部并释放也被视为单击)。

鼠标参数提供有关单击的信息,包括释放单击的 x 和 y 位置,以及单击是否被按住。

3、doubleClicked(MouseEvent mouse)

当双击时发出此信号。

处理该信号时,如果参数 mouse 的 accepted 属性设置为false(默认为 true),则第二次点击会发出按下/松开/点击信号。

4、entered()

当鼠标进入鼠标区域时发出此信号。默认情况下,此信号仅在当前按下按钮时发出。

hoverEnabled 设置为 true 则即使没有按下鼠标按键也会发出此信号。

5、exited()

当鼠标离开鼠标区域时发出此信号。默认情况下,此信号仅在当前按下按钮时发出。

hoverEnabled 设置为 true 则即使没有按下鼠标按键也会发出此信号。

6、positionChanged(MouseEvent mouse)

当鼠标位置改变时发出这个信号。

默认情况下,此信号仅在当前按下按钮时发出。

hoverEnabled 设置为 true 则即使没有按下鼠标按键也会发出此信号。

7、pressAndHold(MouseEvent mouse)

长按(默认800毫秒,可通过 pressAndHoldInterval 设置)时会发出此信号。

8、pressed(MouseEvent mouse)

按下时发出此信号。

9、released(MouseEvent mouse)

当有释放时发出这个信号。

10、wheel(WheelEvent wheel)

该信号是响应鼠标滚轮和触控板滚动手势发出的。

总结

详细请参考官方文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值