SinglePointHandler QML Type
单点指针事件的抽象处理程序。更多
Import Statement: | import QtQuick |
Inherits: | |
Inherited By: | |
Status: | Preliminary |
此类型正在开发中,可能会有更改。
属性
- 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() 将选择目标项内的第一个点,只要事件包含该点,就返回 true。重载 handleEventPoint() 可实现单点处理程序。
属性文档
acceptedButtons : flags |
可激活此指针处理程序的鼠标按钮。
默认情况下,该属性设置为Qt.LeftButton 。可以将其设置为鼠标按钮的 OR 组合,并忽略来自其他按钮的事件。
例如,一个控件可以用两种处理程序以不同方式对左右点击做出响应:
Item { TapHandler { onTapped: console.log("left clicked") } TapHandler { acceptedButtons: Qt.RightButton onTapped: console.log("right clicked") } }
注: 点击触摸屏或点击绘图板上的触控笔可模拟点击鼠标左键。这一行为可通过acceptedDevices 或acceptedPointerTypes 进行更改。
acceptedDevices : flags |
可激活该指针处理程序的指向设备类型。
默认情况下,该属性设置为PointerDevice.AllDevices 。如果将其设置为设备类型的 OR 组合,则会忽略来自非匹配设备的事件。
例如,可以使用两个处理程序,以一种方式响应鼠标和手写笔点击,以另一种方式响应触摸屏轻触:
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
设置为修改器按键的 OR 组合,则表示必须按下所有这些修改器才能激活处理程序:
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 上通过命令行参数激活)。必须按下键盘上的模式切换键。 |
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 。如果将其设置为设备类型的 OR 组合,则会忽略来自非匹配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 |
每当该输入处理程序独自负责处理一个或多个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.SplitVCursor
- Qt.SplitHCursor
- Qt.PointingHandCursor
- Qt.ForbiddenCursor
- Qt.WhatsThisCursor
- Qt.BusyCursor
- Qt.OpenHandCursor
- Qt.ClosedHandCursor
- Qt.DragCopyCursor
- Qt.DragMoveCursor
- Qt.DragLinkCursor
默认值未设置,允许cursor 的parent 项目出现。可通过将该属性设置为未定义来将其重置为相同的初始状态。
注: 当该属性未设置或已设置为undefined
时,如果读取该值,将返回Qt.ArrowCursor
。
另请参阅 Qt::CursorShape 、QQuickItem::cursor() 和HoverHandler::cursorShape 。
dragThreshold : int |
用户必须拖动eventPoint 才能被视为拖动手势的距离(以像素为单位)。
默认值取决于平台和屏幕分辨率。可以通过将其设置为未定义来将其重置为默认值。拖动手势开始时的行为在不同的处理程序中有所不同。
enabled : bool |
如果PointerHandler 被禁用,它将拒绝所有事件,也不会发出任何信号。
grabPermissions : flags |
当处理程序的逻辑决定接管独占抓取时,或者当处理程序被其他处理程序要求批准接管或取消抓取时,该属性会指定权限。
常数 | 说明 |
---|---|
PointerHandler.TakeOverForbidden | 此处理程序既不从任何类型的项目或处理程序获取抓取权限,也不向其提供抓取权限。 |
PointerHandler.CanTakeOverFromHandlersOfSameType | 该处理程序可以从另一个同类处理程序处获取独家抓取权限。 |
PointerHandler.CanTakeOverFromHandlersOfDifferentType | 此处理程序可以从任何类型的处理程序获取独占抓取权限。 |
PointerHandler.CanTakeOverFromItems | 该处理程序可以从任何类型的项目中获取独占抓取权。 |
PointerHandler.CanTakeOverFromAnything | 该处理程序可以从任何类型的项目或处理程序中获取独占抓取权。 |
PointerHandler.ApprovesTakeOverByHandlersOfSameType | 该处理程序允许其他同类处理程序使用抓取。 |
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType | 该处理程序允许任何类型的处理程序抓取。 |
PointerHandler.ApprovesTakeOverByItems | 该处理程序允许任何类型的物品抓取。 |
PointerHandler.ApprovesCancellation | 此处理程序允许其抓取设置为空。 |
PointerHandler.ApprovesTakeOverByAnything | 该处理程序允许任何类型的项目或处理程序抓取。 |
默认值为PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything
,允许大多数抓取场景,但也避免了两个 PinchHandler 争夺同一接触点的情况。
margin : real |
parent 项目边界以外的余量,在此范围内eventPoint 可以激活此处理程序。例如,在PinchHandler 上,如果target 也是parent
,那么将其设置为至少相当于一般用户手指宽度一半的距离是非常有用的,这样,如果parent
被缩小到非常小的尺寸,仍然可以使用捏合手势。或者,如果基于TapHandler 的按钮放置在屏幕边缘附近,则可用于遵守菲茨定律:即使按钮与屏幕边缘在视觉上相差几个像素,也会对屏幕边缘的鼠标点击做出反应。
默认值为 0。
parent : Item |
Item 是处理程序的作用域;也就是在其中声明的项目。处理程序将代表该 Item 处理事件,这意味着如果指针事件中至少有一个eventPoints 出现在该 Item 的内部,那么该指针事件就是相关的。最初target() 是相同的,但可以重新分配。
另请参阅 target 和QObject::parent()。
point : handlerPoint |
当前正在处理的eventPoint 。如果当前没有正在处理的点,该对象将重置为默认值(所有坐标均为 0)。
target : Item |
该处理程序将处理的项目。
默认情况下,它与parent 相同,即处理程序所声明的 Item。不过,有时也可以将目标设置为不同的项目,以便处理一个项目中的事件,但同时操作另一个项目;或者将目标设置为null
,禁用默认行为并执行其他操作。
信号文档
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
。
© 2025 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.