SinglePointHandler QML 类型

用于单点指针事件的抽象处理。 更多...

导入语句import QtQuick
继承自

PointerDeviceHandler

由以下类型继承

HoverHandler, PointHandler, TapHandler, 和 WheelHandler

状态初步

此类型正在开发中,并可能更改。

属性

信号

  • canceled(eventPoint point)
  • grabChanged(PointerDevice::GrabTransition transition, eventPoint point)

详细描述

一个中间类(未注册为 QML 类型),用于最常见的处理:那些仅期望单点的。wantsPointerEvent() 将选择第一个位于 目标 项内的点,并在事件包含该点的情况下返回 true。通过重写 handleEventPoint() 来实现单点处理。

属性文档

acceptedButtons : flags

可以激活此指针处理器的鼠标按钮。

默认情况下,此属性设置为 Qt.LeftButton。它可以设置为一个或多个鼠标按钮的组合,并将忽略其他按钮的事件。

例如,可以通过两个处理程序以不同的方式响应对左右点击的控制

Item {
    TapHandler {
        onTapped: console.log("left clicked")
    }
    TapHandler {
        acceptedButtons: Qt.RightButton
        onTapped: console.log("right clicked")
    }
}

注意:在触摸屏上轻触或用笔触摸绘图板上时,相当于点击鼠标左键。这种操作可以通过 acceptedDevicesacceptedPointerTypes 进行修改。


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 组合,则会忽略来自不匹配的 设备 的事件。

例如,可以使用两个处理器使控件对鼠标、触摸和笔点击做出某种响应,但如果在绘图板上用橡皮擦工具轻触,则删除它。

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.↑箭头光标
  • Qt.交叉光标
  • Qt.等待光标
  • Qt.文字输入光标
  • Qt.垂直尺寸光标
  • Qt.水平尺寸光标
  • Qt.底对角尺寸光标
  • Qt.顶对角尺寸光标
  • Qt.全尺寸光标
  • Qt.空白光标
  • Qt.垂直拆分光标
  • Qt.水平拆分光标
  • Qt.指向光标
  • Qt.禁止光标
  • Qt.问题标记光标
  • Qt.忙碌光标
  • Qt.张开手掌光标
  • Qt.合拢手掌光标
  • Qt.复制拖拽光标
  • Qt.移动拖拽光标
  • Qt.链接拖拽光标

默认值未设置,这将允许父项目中的光标出现。可以将此属性重置为其初始条件,方法是将它设置为undefined。

注意:当此属性未设置或已设置为undefined时,读取值将返回Qt.ArrowCursor

另见:Qt::CursorShapeQQuickItem::cursor()和HoverHandler::cursorShape


dragThreshold : int

用户必须拖动事件点一定的像素距离,将其识别为拖拽动作。

默认值取决于平台和屏幕分辨率。可以通过将其设置为undefined来重置为默认值。不同处理器的拖拽动作开始时的行为可能不同。


enabled : bool

如果禁用PointerHandler,它将拒绝所有事件且不会发出任何信号。


grabPermissions : 标志

此属性指定处理器的逻辑决定接管独占捕获权限,或者当它被其他处理器要求批准接管或取消捕获时,所具有的权限。

常量描述
PointerHandler.TakeOverForbidden此处理器既不向任何类型的Item或处理器取用抓取权限,也不提供。
PointerHandler.CanTakeOverFromHandlersOfSameType此处理器可以从另一个相同类的处理器那里取得独占抓取权限。
PointerHandler.CanTakeOverFromHandlersOfDifferentType此处理器可以从任何类型的处理器那里取得独占抓取权限。
PointerHandler.CanTakeOverFromItems此处理器可以从任何类型的Item那里取得独占抓取权限。
PointerHandler.CanTakeOverFromAnything此处理器可以从任何类型的Item或处理器那里取得独占抓取权限。
PointerHandler.ApprovesTakeOverByHandlersOfSameType此处理器授予同一类别的另一个处理器取得抓取权限。
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType此处理器授予任何类型的处理器取得抓取权限。
PointerHandler.ApprovesTakeOverByItems此处理器授予任何类型的Item取得抓取权限。
PointerHandler.ApprovesCancellation此处理器会允许将其抓取权限设置为null。
PointerHandler.ApprovesTakeOverByAnything此处理器授予任何类型的Item或处理器取得抓取权限。

默认值为PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything,这允许大多数接管场景,但避免例如两个PinchHandler抢夺相同的手势点。


margin : real

被子parent项边缘之外的空白边距。在这个空白边距内,一个eventPoint可以激活处理程序。例如,在PinchHandler中,其中target也是target,将此设置为用户典型手指宽度的一半以上的距离是非常有用的,这样即使target已经缩放到非常小的尺寸,捏合手势仍可能发生。或者,如果基于TapHandler的按钮放置在屏幕边缘附近,它可以用于符合菲茨定律:即使按钮在视觉上距离边缘有几像素,也可以对屏幕边缘的鼠标点击做出反应。

默认值是0。


parent : Item

处理程序的作用域是Item;声明它的Item。处理程序将代表这个Item处理事件,这意味着至少有一个其eventPoints发生在Item内部时,指针事件是相关的。最初target()相同,但可以进行重新分配。

另请参阅targetQObject::parent


point : handlerPoint [只读]

目前正在处理的eventPoint。当没有点正在处理时,该对象将重置为默认值(所有坐标都是0)。


target : Item

此处理程序将要操作的Item。

默认情况下,它与parent相同,即在处理程序声明的Item内部。然而,有时将目标设置为不同的Item是很有用的,以便在其中一个Item内处理事件但操作另一个;或将它设置为null,以禁用默认行为并执行其他操作。


信号文档

canceled(eventPoint point)

如果此处理程序已经抓取了给定的point,当另一个指针处理程序或Item窃取抓取时,将发出此信号。

注意:相应的处理程序是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


© 2024 Qt公司有限公司。本文档中包含的贡献均为各自所有者的版权。本提供的文档许可遵守由自由软件基金会发布的GNU自由文档许可证版本1.3条款。Qt及其相关标识是Qt公司(在芬兰和其他国家/地区)的商标。商标。所有其他商标均为各自所有者的财产。