SinglePointHandler QML Type
单点指针事件的抽象处理程序。更多内容...
| Import Statement: | import QtQuick |
| Inherits: | |
| Inherited By: | |
| Status: | Technology preview |
此类型处于技术预览阶段,可能会有变动。
属性
- acceptedButtons : flags
- acceptedDevices : flags
- acceptedModifiers : flags
- acceptedPointerTypes : flags
- active : bool
- cursorShape : Qt::CursorShape
- dragThreshold : int
- enabled : bool
- grabPermissions : flags
- margin : real
- parent : Item
- point : handlerPoint
- target : Item
信号
- canceled(eventPoint point)
- grabChanged(PointerDevice::GrabTransition transition, eventPoint point)
详细说明
这是一个用于最常见处理程序的中间类(未注册为 QML 类型):这些处理程序仅期望接收单个点。wantsPointerEvent() 会选择位于target 项内的第一个点,只要事件包含该点,该方法就会返回 true。重写 handleEventPoint() 以实现单点处理程序。
属性文档
acceptedButtons : flags
可触发此指针处理程序的鼠标按钮。
默认情况下,此属性设置为Qt.LeftButton 。它可设置为鼠标按钮的“或”组合,并将忽略来自其他按钮的事件。
例如,可以通过两个处理程序使控件对左键和右键点击做出不同的响应:
Item {
TapHandler {
onTapped: console.log("left clicked")
}
TapHandler {
acceptedButtons: Qt.RightButton
onTapped: console.log("right clicked")
}
}注意: 在触摸屏上轻点 或在图形输入板上轻点触控笔,会模拟点击鼠标左键。可通过acceptedDevices 或acceptedPointerTypes 更改此行为。
acceptedDevices : flags
可以触发此指针处理程序的指针设备类型。
默认情况下,此属性设置为PointerDevice.AllDevices 。如果将其设置为设备类型的“或”组合,则会忽略来自不匹配设备的事件。
例如,可以通过两个处理程序使控件对鼠标和手写笔的点击做出一种响应,对触摸屏的轻触做出另一种响应:
Item {
TapHandler {
acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad | PointerDevice.Stylus
onTapped: console.log("clicked")
}
TapHandler {
acceptedDevices: PointerDevice.TouchScreen
onTapped: console.log("tapped")
}
}注意:并非 所有平台目前都能区分鼠标和触摸板;而在能够区分的平台上,您通常希望鼠标和触摸板的行为保持一致。
acceptedModifiers : flags
如果设置了此属性,则必须按下指定的键盘修饰键,指针事件才会被响应;否则将忽略这些修饰键。
如果此属性设置为“Qt.KeyboardModifierMask ”(默认值),则“PointerHandler ”将忽略修饰键。
例如,一个Item 可以包含两个同类型的处理程序,其中一个仅在按下所需的键盘修饰键时才被启用:
Item {
TapHandler {
acceptedModifiers: Qt.ControlModifier
onTapped: console.log("control-tapped")
}
TapHandler {
acceptedModifiers: Qt.NoModifier
onTapped: console.log("tapped")
}
}若将acceptedModifiers 设置为修饰键的“或”组合,则意味着必须按下所有这些修饰键才能激活该处理程序:
Item {
TapHandler {
acceptedModifiers: Qt.ControlModifier | Qt.AltModifier | Qt.ShiftModifier
onTapped: console.log("control-alt-shift-tapped")
}
}可用的修饰键如下:
| 常量 | 描述 |
|---|---|
NoModifier | 不允许使用任何修饰键。 |
ShiftModifier | 必须按下键盘上的 Shift 键。 |
ControlModifier | 必须按下键盘上的 Ctrl 键。 |
AltModifier | 必须按下键盘上的 Alt 键。 |
MetaModifier | 必须按下键盘上的 Meta 键。 |
KeypadModifier | 必须按下数字小键盘上的某个按键。 |
GroupSwitchModifier | 仅限 X11(除非在 Windows 上通过命令行参数激活)。必须按下键盘上的 Mode_switch 键。 |
KeyboardModifierMask | 处理程序不关心按下了哪些修饰键。 |
如果您需要比通过组合多个带有修饰符标志的处理程序所能实现的更复杂的行为,可以在 JavaScript 代码中检查修饰符:
Item {
TapHandler {
onTapped:
switch (point.modifiers) {
case Qt.ControlModifier | Qt.AltModifier:
console.log("CTRL+ALT");
break;
case Qt.ControlModifier | Qt.AltModifier | Qt.MetaModifier:
console.log("CTRL+META+ALT");
break;
default:
console.log("other modifiers", point.modifiers);
break;
}
}
}另请参阅 Qt::KeyboardModifier 。
acceptedPointerTypes : flags
可触发此“指针处理程序”的指针设备类型(手指、触控笔、橡皮擦等)。
默认情况下,此属性设置为PointerDevice.AllPointerTypes 。若将其设置为设备类型的“或”组合,则会忽略来自不匹配devices 的事件。
例如,可以通过两个处理程序使某个控件以某种方式响应鼠标、触摸和触控笔的点击,但若在图形输入板上使用橡皮擦工具轻点该控件,则将其删除:
Rectangle {
id: rect
TapHandler {
acceptedPointerTypes: PointerDevice.Generic | PointerDevice.Finger | PointerDevice.Pen
onTapped: console.log("clicked")
}
TapHandler {
acceptedPointerTypes: PointerDevice.Eraser
onTapped: rect.destroy()
}
}active : bool [read-only]
当该输入处理程序通过成功独占获取一个或多个事件点(eventPoints )而承担起处理这些事件点的全部责任时,此属性将保持为true 。这意味着它会根据这些事件点的移动情况实时更新其属性,并主动操作其target (如有)。
cursorShape : Qt::CursorShape
当鼠标悬停在parent 项上时,如果active 的值为true ,则此属性将确定此时显示的光标形状。
可用的光标形状包括:
- Qt.ArrowCursor
- Qt.UpArrowCursor
- Qt.CrossCursor
- Qt.WaitCursor
- Qt.IBeamCursor
- Qt.SizeVerCursor
- Qt.SizeHorCursor
- Qt.SizeBDiagCursor
- Qt.SizeFDiagCursor
- Qt.SizeAllCursor
- Qt.BlankCursor
- Qt.SplitV光标
- Qt.SplitHCursor
- Qt.指手光标
- Qt.禁止光标
- Qt.什么是这个光标
- Qt.BusyCursor
- Qt.张开手形光标
- Qt.紧握手形光标
- Qt.拖拽复制光标
- Qt.拖动移动光标
- Qt.DragLinkCursor
默认值未设置,这将使parent 项的cursor 显示出来。通过将该属性设置为undefined,可将其重置为初始状态。
注意:当 此属性未被设置,或已被设置为undefined时 ,若读取其值,将返回Qt.ArrowCursor 。
另请参阅 Qt::CursorShape 、QQuickItem::cursor() 和HoverHandler::cursorShape 。
dragThreshold : int
用户必须将eventPoint 拖动多少像素,系统才会将其视为拖动手势。
默认值取决于平台和屏幕分辨率。将其设置为 undefined 可将其重置为默认值。不同处理程序在拖动手势开始时的行为各不相同。
enabled : bool
如果禁用了PointerHandler ,它将拒绝所有事件,且不会发出任何信号。
如果PointerHandler 的parent 属性设置为disabled ,则该处理程序实际上也将被禁用,即使enabled 属性仍保持为true 。
注意: HoverHandler 的行为有所不同:有关更多信息,请参阅其enabled 属性的文档。
grabPermissions : flags
此属性指定了当该处理程序的逻辑决定接管独占抓取时,或当被其他处理程序请求批准接管或取消抓取时,所适用的权限。
| 常量 | 描述 |
|---|---|
PointerHandler.TakeOverForbidden | 该处理程序既不会从任何类型的 Item 或 Handler 处获取抓取权限,也不会向其授予抓取权限。 |
PointerHandler.CanTakeOverFromHandlersOfSameType | 该处理程序可以从同一类的另一个处理程序那里接管独占抓取。 |
PointerHandler.CanTakeOverFromHandlersOfDifferentType | 该处理程序可以从任何类型的处理程序手中接管独占抓取。 |
PointerHandler.CanTakeOverFromItems | 此处理程序可以从任何类型的“项目”中获取排他性抓取权限。 |
PointerHandler.CanTakeOverFromAnything | 此处理程序可以从任何类型的项目或处理程序处获取独占抓取权限。 |
PointerHandler.ApprovesTakeOverByHandlersOfSameType | 此处理程序允许同一类的另一个处理程序获取抓取权限。 |
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType | 此处理程序允许任何类型的处理程序获取抓取。 |
PointerHandler.ApprovesTakeOverByItems | 此处理程序允许任何类型的 Item 获取该抓取。 |
PointerHandler.ApprovesCancellation | 该处理程序允许将其抓取对象设置为 null。 |
PointerHandler.ApprovesTakeOverByAnything | 此处理程序允许任何类型的“项目”或“处理程序”接管抓取操作。 |
默认值为PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything ,这允许大多数接管场景,但可避免例如两个 PinchHandler 争夺同一触点的情况。
margin : real
这是超出parent 控件边界范围的余量,eventPoint 可以在该范围内触发此处理程序。例如,在PinchHandler 中,当target 同时也是parent 时,将此值设置为至少相当于普通用户手指宽度一半的距离会很有用,这样即使parent 被缩放至非常小的尺寸,仍可执行捏合手势。 或者,如果将基于TapHandler 的按钮放置在屏幕边缘附近,则可以利用这一点来符合菲茨定律:即使按钮在视觉上距离屏幕边缘有几像素的间距,也能对屏幕边缘的鼠标点击做出响应。
默认值为 0。

parent : Item
Item ,即处理程序的作用域;即声明该处理程序的 Item。处理程序将代表该 Item 处理事件,这意味着如果指针事件的至少一个eventPoints 发生在该 Item 的内部,则该事件与该 Item 相关。初始时,target() 与该 Item 相同,但可以被重新赋值。
另请参阅 target 和QObject::parent()。
point : handlerPoint [read-only]
当前正在处理的eventPoint 。当没有点正在被处理时,该对象将重置为默认值(所有坐标均为0)。
target : Item
该处理程序将操作的 Item。
默认情况下,它与parent 相同,即声明该处理程序的那个Item。不过,有时将目标设置为另一个Item会很有用,例如为了在某个Item中处理事件但操作另一个Item;或者设置为null ,以禁用默认行为并执行其他操作。
Signal 文档
canceled(eventPoint point)
如果该处理程序已经获取了给定的point ,当该获取被另一个指针处理程序或项目抢走时,将触发此信号。
注意: 对应的处理程序 是onCanceled 。
grabChanged(PointerDevice::GrabTransition transition, eventPoint point)
当抓取状态发生与该处理程序相关的某种变化时,会发出此信号。
transition (动词)说明发生了什么。point (对象)是被抓取或释放的点。
transition 的有效值包括:
| 常量 | 描述 |
|---|---|
PointerDevice.GrabExclusive | 该处理程序已承担处理point 的主要责任。 |
PointerDevice.UngrabExclusive | 该处理程序已放弃其先前的独占占用。 |
PointerDevice.CancelGrabExclusive | 该处理程序的独占控制权已被接管或取消。 |
PointerDevice.GrabPassive | 该处理程序已获得被动抓取,用于监视point 。 |
PointerDevice.UngrabPassive | 该处理程序已放弃其先前的被动抓取。 |
PointerDevice.CancelGrabPassive | 该处理程序之前的被动抓取已异常终止。 |
注: 相应的处理程序 为onGrabChanged 。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.