MultiPointHandler QML 类型

多点指针事件处理的抽象处理类。 更多...

导入语句import QtQuick
继承

PointerDeviceHandler

继承自

DragHandlerPinchHandler

状态初步

此类型处于开发中,可能进行更改。

属性

信号

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

详细描述

任何类型需要并针对特定多个触摸点进行处理的处理类的中间类(未注册为 QML 类型)。

属性文档

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。如果您将其设置为由设备类型构成的或运算组合,它将忽略来自不匹配设备的事件。

例如,可以使用两个处理器,使控件以某种方式响应鼠标和笔触点击,并以另一种方式响应触摸屏点击。

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。如果您将其设置为由设备类型构成的或运算组合,它将忽略来自不匹配 设备 的事件。

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

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。这意味着它将根据这些事件点的移动保持其属性的更新,并积极地操作其 目标(如果有的话)。


centroid : QtQuick::handlerPoint [只读]

目前按下的触摸点的中心点位置。如果只有一点被按下,它与该点相同。具有 目标 的处理器通常将变换应用于此点。


cursorShape : Qt::CursorShape

此属性保存了当鼠标悬停在项目上且激活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.CloseHandCursor
  • Qt.DragCopyCursor
  • Qt.DragMoveCursor
  • Qt.DragLinkCursor

默认值未设置,这允许光标显示项目的形状。可以通过将其设置为 undefined 来将此属性重置到相同的初始状态。

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

另请参阅 Qt::CursorShapeQQuickItem::cursor() 和 HoverHandler::cursorShape


dragThreshold : int

用户必须拖动eventPoint像素的距离才能将其视为拖动操作。

默认值取决于平台和屏幕分辨率。可以通过将其设置为 undefined 来将其重置回默认值。拖动操作的起始行为在不同处理程序中有所不同。


enabled : bool

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


grabPermissions : flags

此属性指定处理程序逻辑决定接管独占捕获时的权限,或者当被要求批准另一个处理程序接管或取消捕获时。

常量描述
PointerHandler.TakeOverForbidden此处理程序不会从任何类型的 Item 或 Handler 中夺取或给予抓取权限。
PointerHandler.CanTakeOverFromHandlersOfSameType此处理程序可以接管同一类的另一个处理程序的独占抓取。
PointerHandler.CanTakeOverFromHandlersOfDifferentType此处理程序可以接管任何类型的处理程序的独占抓取。
PointerHandler.CanTakeOverFromItems此处理程序可以从任何类型的 Item 中接管独占抓取。
PointerHandler.CanTakeOverFromAnything此处理程序可以从任何类型的 Item 或 Handler 中接管独占抓取。
PointerHandler.ApprovesTakeOverByHandlersOfSameType此处理程序允许同一类的另一个处理程序接管抓取。
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType此处理程序允许任何类型的处理程序接管抓取。
PointerHandler.ApprovesTakeOverByItems此处理程序允许任何类型的 Item 接管抓取。
PointerHandler.ApprovesCancellation此处理程序将允许将其抓取设置为 null。
PointerHandler.ApprovesTakeOverByAnything此处理程序允许任何类型的 Item 或 Handler 接管抓取。

默认是 PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything,这允许大多数接管场景,但避免了例如两个 PinchHandlers 为相同的触摸点争夺的情况。


margin : real

触发此处理器的范围超出了 parent 元素的边界,在该范围内一个 eventPoint 可以激活此处理器。例如,在 PinchHandler 中,当 target 也是 parent 时,将其设置为至少为典型用户手指宽度一半的距离是有用的,这样即使 parent 被缩小到非常小的尺寸,捏合手势仍然可以进行。或者,如果 TapHandler 基于的按钮放置在屏幕边缘附近,它可以用来符合费茨定律:即使按钮在视觉上距离边缘几像素,也能响应屏幕边缘的鼠标点击。

默认值为 0。


maximumPointCount : int

此处理器可以使用的最大触摸点数。

如果与 parent 接触的触摸点数量更多,将按照触摸顺序选择所需点数,剩余的点数将被忽略。

任何被忽略的点都符合在其他项目或同一项目上激活具有不同约束条件的其他输入处理器的资格。

默认值与 minimumPointCount 相同。


minimumPointCount : int

激活此处理器所需的最低触摸点数。

如果与 parent 接触的触摸点数量更少,则将被忽略。

任何被忽略的点都符合在其他项目或同一项目上激活具有不同约束条件的其他输入处理器的资格。

默认值为 2。


parent : Item

Item 是处理器的范围;在声明它的项中定义。处理器将为这个项处理事件,这意味着如果它的至少一个 eventPoints 发生在项的内部,则指针事件是相关的。最初 target() 是相同的,但可以重新分配。

另请参阅targetQObject::parent


target : Item

此处理器将要操作的项目。

默认情况下,它与 parent 相同,即在其中声明处理器的项。但是,有时将目标设置为不同的项目可能有用,以便在不同的项内处理事件并操作其他项;或将 null,以禁用默认行为并以其他方式执行操作。


信号文档

canceled(eventPoint point)

如果此处理器已选中了给定的 point,则当由不同的指针处理器或项目抢占悬停时发出此信号。

注意:相应的处理器是 onCanceled


grabChanged(PointerDevice::GrabTransition transition, eventPoint point)

当抓取以某种与该处理器相关的方面发生变化时,发出此信号。

transition(动词)说明了发生了什么。point(对象)是被 захват或取消悬停的点。

transition 的有效值有

常量描述
PointerDevice.GrabExclusive此处理程序已承担主责任处理
PointerDevice.UngrabExclusive此处理程序放弃之前的独占捕获。
PointerDevice.CancelGrabExclusive此处理程序的独占捕获已被接管或取消。
PointerDevice.GrabPassive此处理程序获得了一个被动捕获,用于监控
PointerDevice.UngrabPassive此处理程序放弃了之前的被动捕获。
PointerDevice.CancelGrabPassive此处理程序的先前被动捕获异常终止。

注意:相应的处理程序是onGrabChanged


© 2024 The Qt Company Ltd. 本文档 inclus FileUtils.Com中包含的文档贡献是各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款授权的。Qt和相应的商标是芬兰和/或全世界The Qt Company Ltd的商标。所有其他商标均为其各自所有者的财产。