鼠标区域 QML 类型
启用简单的鼠标处理。 更多...
导入声明 | import QtQuick |
继承 |
属性
- acceptedButtons : Qt::MouseButtons
- containsMouse : bool
- containsPress : bool
- cursorShape : Qt::CursorShape
- 拖动
- drag.active : bool
- drag.axis : 枚举
- drag.filterChildren : bool
- drag.maximumX : double
- drag.maximumY : double
- drag.minimumX : double
- drag.minimumY : double
- drag.smoothed : bool
- drag.target : Item
- drag.threshold : double
- enabled : bool
- hoverEnabled : bool
- mouseX : double
- mouseY : double
- pressAndHoldInterval : int
- pressed : bool
- pressedButtons : MouseButtons
- preventStealing : bool
- propagateComposedEvents : bool
- scrollGestureEnabled : bool
信号
- 已取消()
- clicked(MouseEvent mouse)
- doubleClicked(MouseEvent mouse)
- 进入()
- 退出()
- positionChanged(MouseEvent mouse)
- pressAndHold(MouseEvent mouse)
- pressed(MouseEvent mouse)
- released(MouseEvent mouse)
- wheel(WheelEvent wheel)
详细描述
MouseArea是一种不可见项,通常与可见项一起使用,以便为该项提供鼠标处理。通过有效地充当代理,鼠标处理逻辑可以包含在MouseArea项内。
该enabled属性用于启用和禁用代理项的鼠标处理。当禁用时,鼠标区域对鼠标事件变得透明。
MouseArea是不可见项,但它有可见属性。当设置为false时,鼠标区域对鼠标事件变得透明。
pressed只读属性表示用户是否在鼠标区域上按下了鼠标按钮。该属性常用于用户界面中属性之间的绑定。该containsMouse只读属性表示鼠标光标是否在鼠标区域内,但默认情况下,仅在鼠标按钮按下时;有关详细信息,请参阅containsMouse文档。
通过定义事件处理程序属性提供的信号提供了有关鼠标位置和按钮点击的信息。最常用的是处理鼠标按下和点击:onClicked、onDoubleClicked、onPressed、onReleased和onPressAndHold。还可能通过onWheel信号处理鼠标滚轮事件。
如果一个MouseArea与其他MouseArea项的重叠区域,可以通过将propagateComposedEvents设置为true并拒绝要传递的事件,将这些事件的clicked
、doubleClicked
和pressAndHold
传递给这些其他项。有关详细信息,请参阅propagateComposedEvents文档。
默认情况下,MouseArea项只报告鼠标点击,而不报告鼠标光标位置的变化。设置hoverEnabled属性确保使用onPositionChanged、onEntered和onExited定义的处理程序,并且即使在没有鼠标按钮按下时,也会更新containsMouse属性。
示例用法
以下示例使用Rectange中的MouseArea,在点击时将Rectange颜色更改为红色
import QtQuick Rectangle { width: 100; height: 100 color: "green" MouseArea { anchors.fill: parent onClicked: { parent.color = 'red' } } }
许多MouseArea信号包含一个含mouseover参数,该参数包含有关鼠标事件的附加信息,例如位置、按钮和任何键修饰符。
以下是对上一例的扩展,当区域被右键点击时产生不同的颜色
Rectangle { width: 100; height: 100 color: "green" MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: (mouse)=> { if (mouse.button == Qt.RightButton) parent.color = 'blue'; else parent.color = 'red'; } } }
也请参阅MouseEvent、MouseArea示例和Qt Quick中用户输入的重要概念。
属性文档
这些属性保存鼠标光标的坐标。
如果hoverEnabled属性为false,则这些属性只有在按钮按下时才有效,并且即使鼠标移出区域,按钮按下的状态也会保持。
默认情况下,此属性为false。
如果hoverEnabled为true,则这些属性在以下情况下有效
- 没有按钮按下,但鼠标在MouseArea内(containsMouse为true)。
- 即使按钮已经移出该区域,按下并持有按钮仍然有效。
坐标相对于MouseArea。
acceptedButtons : Qt::MouseButtons |
此属性包含鼠标区域对哪些鼠标按钮做出响应。
要指定MouseArea将对多个按钮做出响应,请使用“|” (或)运算符组合Qt::MouseButtons的标志值
MouseArea { acceptedButtons: Qt.LeftButton | Qt.RightButton }
要指示接受所有可能设置的鼠标按钮,可以使用特殊值'Qt.AllButtons'
MouseArea { acceptedButtons: Qt.AllButtons }
默认值是Qt.LeftButton
。
containsMouse : bool |
此属性指示鼠标是否当前位于鼠标区域内部。
注意: 如果hoverEnabled设置为false
,当鼠标键在MouseArea以内被按下时,containsMouse
将为true
。但是,如果您在onPressed
处理程序中将mouse.accepted = false
设置为,由于按下了拒绝,containsMouse
将保持false
。
containsPress : bool |
这是一个方便属性,等价于pressed && containsMouse
,即它表示是否按下acceptedButtons中的任何一个按钮,并且鼠标当前在MouseArea内部。
该属性在鼠标在项目边界内按下时突出显示项目特别有用。
另请参阅 pressed和containsMouse。
cursorShape : Qt::CursorShape |
此属性包含此鼠标区域的指针形状。注意,在那些不显示鼠标光标的平台上,这可能没有效果。
可用的指针形状有
- Qt.ArrowCursor
- Qt.UpArrowCursor
- Qt.CrossCursor
- Qt.WaitCursor
- Qt.IBeamCursor
- Qt.SizeVerCursor
- Qt.SizeHorCursor
- Qt.SizeBDiagCursor
- Qt.SizeFDiagCursor
- Qt.SizeAllCursor
- Qt.BlankCursor
- Qt.SplitVCursor
- Qt.SplitHCursor
- Qt.PointingHandCursor
- Qt.ForbiddenCursor
- Qt.WhatsThisCursor
- Qt.BusyCursor
- Qt.OpenHandCursor
- Qt.ClosedHandCursor
- Qt.DragCopyCursor
- Qt.DragMoveCursor
- Qt.DragLinkCursor
要仅在某个区域设置鼠标指针形状而不应对鼠标事件做出响应,请将acceptedButtons设置为无
MouseArea { cursorShape: Qt.IBeamCursor; acceptedButtons: Qt.NoButton }
默认值是Qt.ArrowCursor
。
另请参阅 Qt::CursorShape。
drag
提供了一种方便的方式来使项目可拖动。
drag.target
指定要拖动的项目的 id。drag.active
指定目标项目是否正在被拖动。drag.axis
指定是否可以进行水平 (Drag.XAxis
)、垂直 (Drag.YAxis
) 或两者都 (Drag.XAndYAxis
) 拖动。drag.minimum
和drag.maximum
限制了目标可以沿相应轴移动的最大距离。
以下示例显示了一个可以沿 X 轴拖动的 矩形。当矩形被拖动到右侧时,其不透明度会降低。
Rectangle { id: container width: 600; height: 200 Rectangle { id: rect width: 50; height: 50 color: "red" opacity: (600.0 - rect.x) / 600 MouseArea { anchors.fill: parent drag.target: rect drag.axis: Drag.XAxis drag.minimumX: 0 drag.maximumX: container.width - rect.width } } }
注意:如果项目为请求的 drag.axis
锚定,则无法进行拖动。例如,如果在上面的示例中将 rect
的 anchors.left
或 anchors.right
设置为,则不能沿 X 轴拖动。可以在 onPressed 处理器中设置锚点值为 undefined
来避免这种情况。
如果将 drag.filterChildren
设置为 true,则拖动可以覆盖子 MouseArea。这可以使父 MouseArea 处理拖动,例如,当子项处理点击时。
import QtQuick Rectangle { width: 480 height: 320 Rectangle { x: 30; y: 30 width: 300; height: 240 color: "lightsteelblue" MouseArea { anchors.fill: parent drag.target: parent; drag.axis: "XAxis" drag.minimumX: 30 drag.maximumX: 150 drag.filterChildren: true Rectangle { color: "yellow" x: 50; y : 50 width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: console.log("Clicked") } } } } }
drag.threshold
确定拖动操作开始时的像素阈值。默认情况下,它与平台相关的值绑定。此属性是在 Qt Quick 2.2 中添加的。
如果 drag.smoothed
设置为 true
,则在拖动操作开始后才会移动目标。如果设置为 false
,则目标将直接移动到当前鼠标位置。默认情况下,此属性为 true
。此属性是在 Qt Quick 2.4 中添加的。
enabled : 布尔型 |
此属性保存是否接受鼠标事件。
注意:由于历史原因,此属性不等于 Item.enabled。它仅影响鼠标事件,并且其影响不会传播到子项。
默认情况下,此属性为 true。
hoverEnabled : 布尔型 |
此属性保存是否处理悬停事件。
默认情况下,只有在按钮事件响应或按按钮时才会处理鼠标事件。悬停启用在没按任何鼠标按钮的情况下也能处理所有鼠标事件。
此属性影响 containsMouse 属性以及 onEntered、onExited 和 onPositionChanged 信号。
pressAndHoldInterval : 整型 |
此属性覆盖在发出 pressAndHold
之前毫秒级的已过时间。
如果没有显式设置 – 或在重置后 – 则值遵循 QStyleHints::mousePressAndHoldInterval
。
通常,可以通过使用应用程序样式提示全局设置此属性就足够了。应在需要为某些 MouseArea 修改间隔时使用此属性。
另请参阅pressAndHold。
pressed : 布尔型 |
此属性保存是否按下了 acceptedButtons 中的任何按钮。
pressedButtons : MouseButtons |
该属性包含当前按下的鼠标按钮。
它包含以下位运算组合
- Qt.LeftButton
- Qt.RightButton
- Qt.MiddleButton
以下代码在右键被按下时显示“right”
Text { text: mouseArea.pressedButtons & Qt.RightButton ? "right" : "" horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter MouseArea { id: mouseArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton } }
注意:此属性仅处理在acceptedButtons中指定的按钮。
另请参阅:acceptedButtons。
preventStealing : bool |
propagateComposedEvents : bool |
该属性表示组合鼠标事件是否将自动传播到与该 MouseArea 在同一位置但不在其视觉堆叠顺序中较低的“MouseArea”中。默认情况下,此属性为 false。
MouseArea 包含几个组合事件:clicked
、doubleClicked
和 pressAndHold
。这些事件由基本鼠标事件(如 pressed
)组合而成,与基本事件相比,其传播方式可能不同。
将 propagateComposedEvents 设置为 true 后,组合事件将自动传播到同一场景中同一位置的其它 MouseArea 中。每个事件都将传播到其下视觉堆叠顺序中下一个 enabled 的 MouseArea 中,直到 MouseArea 接受事件。与 pressed
事件不同,如果没有处理器,则组合事件不会自动接受。
例如,以下是一个包含蓝色 Rectangle 的黄色 Rectangle。蓝色矩形是视觉堆叠顺序中层次结构中的最顶层项;它将视觉上渲染在黄色矩形上方。由于蓝色矩形将 propagateComposedEvents 设置为 true,并将所有接收到的 clicked
事件MouseEvent::accepted 设置为 false,因此它收到的任何 clicked
事件都会传播到其下方的黄色矩形的 MouseArea。
import QtQuick 2.0 Rectangle { color: "yellow" width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: console.log("clicked yellow") } Rectangle { color: "blue" width: 50; height: 50 MouseArea { anchors.fill: parent propagateComposedEvents: true onClicked: (mouse)=> { console.log("clicked blue") mouse.accepted = false } } } }
在蓝色矩形上单击将调用其子 MouseArea 的 onClicked
处理器;然后事件将传播到 MouseArea,引起其自己的 onClicked
处理器的调用。
此属性大大简化了您想要重叠的鼠标区域处理组合事件时的使用场景。例如:如果您想一个 MouseArea 处理 clicked
信号,而另一个处理 pressAndHold
,或者如果想让一个 MouseArea 在大多数情况下处理 clicked
,但在满足某些条件时将其传递。
scrollGestureEnabled : bool |
信号文档
已取消() |
clicked(MouseEvent mouse) |
当有单击时,发出此信号。单击是指按下然后释放,两个动作都在MouseArea内部(在MouseArea内按下,移动到外面,然后返回并释放,也视为单击)。
mouse参数提供了有关单击的信息,包括单击释放时的x和y位置以及是否按下。
处理此信号时,更改mouse参数的accepted属性没有效果,除非propagateComposedEvents属性设置为true
。
注意:相应的处理器是onClicked
。
doubleClicked(MouseEvent mouse) |
进入() |
当鼠标进入鼠标区域时,发出此信号。
默认情况下,此信号仅在当前有按钮按下时发出。将hoverEnabled设置为true,即使没有鼠标按钮按下,也会发出此信号。
注意:相应的处理器是onEntered
。
另请参阅:hoverEnabled。
退出() |
当鼠标退出鼠标区域时,发出此信号。
默认情况下,此信号仅在当前有按钮按下时发出。将hoverEnabled设置为true,即使没有鼠标按钮按下,也会发出此信号。
以下示例展示了两个MouseArea之间的典型关系,其中mouseArea2
位于mouseArea1
的上方。将鼠标从mouseArea1
移动到mouseArea2
将导致mouseArea1
发出exited
信号。
Rectangle { width: 400; height: 400 MouseArea { id: mouseArea1 anchors.fill: parent hoverEnabled: true } MouseArea { id: mouseArea2 width: 100; height: 100 anchors.centerIn: parent hoverEnabled: true } }
如果您给这两个MouseArea赋予父子关系,则将鼠标从mouseArea1
移动到mouseArea2
不会导致mouseArea1
发出exited
信号。相反,它们将被视为同时悬停。
注意:相应的事件处理器为onExited
。
另请参阅:hoverEnabled。
positionChanged(MouseEvent mouse) |
当鼠标位置发生变化时,将发出此信号。
mouse参数提供了有关鼠标的信息,包括x和y位置,以及当前按下的任何按钮。
默认情况下,此信号仅在当前有按钮按下时发出。将hoverEnabled设置为true,即使没有鼠标按钮按下,也会发出此信号。
处理此信号时,更改accepted属性对mouse参数没有影响。
注意:相应的事件处理器为onPositionChanged
。
pressAndHold(MouseEvent mouse) |
在持续按下(目前为800ms)时,将发出此信号。mouse参数提供了有关按下的信息,包括按下的x和y位置以及按下的哪个按钮。
处理此信号时,更改mouse参数的accepted属性没有效果,除非propagateComposedEvents属性设置为true
。
注意:相应的事件处理器为onPressAndHold
。
pressed(MouseEvent mouse) |
released(MouseEvent mouse) |
wheel(WheelEvent wheel) |
当响应鼠标滚轮和_trackpad_滚动手势时将发出此信号。
wheel参数提供了有关事件的信息,包括x和y位置,当前按下的任何按钮,以及有关滚轮移动的信息,包括angleDelta和pixelDelta。
注意:相应的事件处理器为onWheel
。
© 2024 Qt公司有限公司。本文件中包含的文档贡献的版权属于各自的所有者。提供的文档在自由软件基金会的公布下,根据GNU自由文档许可证版本1.3的条款进行许可。Qt及其相关标志是芬兰以及全球其他地区的Qt公司有限公司的商标。所有其他商标均属于各自的所有者。