前言
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)
该信号是响应鼠标滚轮和触控板滚动手势发出的。
总结
详细请参考官方文档