PointerDeviceHandler QML 类型

针对具有专用约束的指针事件的抽象处理程序。 更多信息...

导入语句import QtQuick
继承

PointerHandler

继承自

MultiPointHandlerSinglePointHandler

状态初步

此类处于开发中,并可能发生变化。

属性

信号

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

详细描述

一个中间类(未注册为 QML 类型),用于处理程序,允许基于设备类型、指针类型或键盘修饰符进行筛选。

属性文档

acceptableButtons : 标志位

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

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

例如,可以使用两个处理程序使一个控件以不同的方式响应左键和右键点击

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

注意:在触摸屏上轻触或在图形板上的笔尖轻触模拟点击左鼠标按钮。这种行为可以通过 acceptableDevicesacceptablePointerTypes 进行修改。


acceptableDevices : 标志位

可以激活此指针处理器的指针设备类型。

默认情况下,此属性设置为 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 中通过命令行参数激活)。必须按下键盘上的模式切换键。
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 [只读]

当此输入处理器通过成功获取这些点的独占捕获,独占负责处理一个或多个 事件点 时,此属性将保持为 true。这意味着它正在根据这些事件点的移动维护其属性,并主动操纵其 目标(如果有)。


cursorShape : Qt::CursorShape

当鼠标在 父项 上悬停并且 activetrue 时,此属性将保留要显示的指针形状。

可用的指针形状有

  • Qt.ArrowCursor
  • Qt.UpArrowCursor
  • Qt.CrossCursor
  • Qt.WaitCursor
  • Qt.IBeamCursor
  • Qt.大小垂直光标
  • Qt.大小水平光标
  • Qt.大小对角线光标
  • Qt.方向对角线光标
  • Qt.所有方向光标
  • Qt.空白光标
  • Qt.分割垂直光标
  • Qt.分割水平光标
  • Qt.指向光标
  • Qt.禁止光标
  • Qt.这是什么光标
  • Qt.忙碌光标
  • Qt.开放光标手
  • Qt.闭合光标手
  • Qt.拖动复制光标
  • Qt.拖动移动光标
  • Qt.拖动链接光标

默认值未设置,允许父项的 光标 出现。将此属性重置为未定义可以将其重置到相同的初始状态。

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

请参阅:Qt::CursorShapeQQuickItem::cursor() 以及 HoverHandler::cursorShape


拖动阈值int

用户必须拖动 eventPoint 的像素距离,以将其视为拖动手势。

默认值取决于平台和屏幕分辨率。将其设置为未定义可以将其重置为默认值。不同处理器的拖动手势开始时的行为各不相同。


启用bool

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


抓取权限标志

此属性指定在此处理器逻辑决定接管独占抓取,或当请求批准另一个处理器的抓取接管或取消时,的权限。

常量描述
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,这允许大多数接管场景,但避免了例如两个 PinchH handlers 夺取相同的触摸点等情况。


边缘real

在此父元素边界之外的区域,一个父元素项可以被事件点激活此处理程序。例如,在一个捏合处理程序中,如果目标也是父元素,将其设置为至少半指宽的距离是有用的,这样即使父元素被缩小到非常小的尺寸,捏合手势仍然是可能的。或者,如果基于TapHandler的按钮放置在屏幕边缘附近, nó 可以用来遵守菲茨定律:即使按钮在视觉上离边缘几像素,也要对屏幕边缘的鼠标点击做出反应。

默认值是0。


parent : Item

这是处理程序作用的范围,即在Item中声明的元素。处理程序将代表此项处理事件,这意味着如果至少有一个其事件点发生在项内部,则指针事件相关。最初目标是相同的,但它可以被重新分配。

另请参阅目标QObject::parent


target : Item

处理程序将要操作的元素。

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


信号文档

canceled(eventPoint 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 Qt公司 Ltd。© 本文档中包含的文档贡献归其各自所有者所有。本文档是在自由软件基金会出版的GNU自由文档许可协议版本1.3的条款下提供的。Qt及其相应的标志是芬兰和/或世界各地Qt公司的商标。商标。所有其他商标归其各自所有者所有。