HoverHandler QML 类型

鼠标和触摸笔悬停的处理程序。更多...

导入语句import QtQuick
继承

SinglePointHandler

属性

信号

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

详细描述

HoverHandler 检测悬停的鼠标或触摸笔。

hovered 属性绑定下来是当光标进入或离开 parent Item 时进行响应的最简单方式。The point 属性提供了更多详细信息,包括光标位置。可以使用 acceptedDevicesacceptedPointerTypesacceptedModifiers 属性来限定行为,只检测特定类型的设备或按住修改键时的悬停。

cursorShape 属性允许在 hovered 改变为 true 时更改光标。

另请参阅MouseAreaPointHandlerQt Quick 示例 - 指针处理器.

属性文档

acceptedDevices : flags

可以激活指针处理程序的指针设备的类型。

默认情况下,此属性设置为PointerDevice.AllDevices。如果将其设置为设备类型的“或”组合,它将忽略来自不匹配设备的指针事件。

例如,一个项目可以有两个处理程序,每个处理程序分别对鼠标悬停和笔式悬停作出响应

import QtQuick

Rectangle {
    width: 150; height: 50; radius: 3
    color: mouse.hovered ? "goldenrod" : stylus.hovered ? "tomato" : "wheat"

    HoverHandler {
        id: stylus
        acceptedDevices: PointerDevice.Stylus
        cursorShape: Qt.CrossCursor
    }

    HoverHandler {
        id: mouse
        acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
        cursorShape: Qt.PointingHandCursor
    }
}

可用的设备类型如下

常数描述
PointerDevice.Mouse鼠标。
PointerDevice.TouchScreen触控屏。
PointerDevice.TouchPad触摸板或轨迹板。
PointerDevice.Stylus图形平板上的笔。
PointerDevice.Airbrush图形平板上的喷笔。
PointerDevice.Puck带有十字准线的图形平板上的数字化仪。
PointerDevice.AllDevices任何类型的指向设备。

注意:并非所有平台都还能够区分鼠标和触摸板;在那些可以区分的平台,您通常希望鼠标和触摸板的行为相同。

另请参阅QInputDevice::DeviceType


acceptedModifiers : flags

如果设置此属性,则仅当按下所指定的键盘修饰符时才处理悬停事件。没有修饰符时忽略事件。

默认情况下,此属性设置为Qt.KeyboardModifierMask,这将导致处理悬停事件不受任何修饰键的影响。

例如,Item可以有两个相同类型的处理程序,其中一个只有在按下所需的修饰键后才会启用

import QtQuick

Rectangle {
    width: 150; height: 50; radius: 3
    color: control.hovered ? "goldenrod" : shift.hovered ? "wheat" : "beige"

    HoverHandler {
        id: control
        acceptedModifiers: Qt.ControlModifier
        cursorShape: Qt.PointingHandCursor
    }

    HoverHandler {
        id: shift
        acceptedModifiers: Qt.ShiftModifier
        cursorShape: Qt.CrossCursor
    }
}

可用的修饰符如下

常数描述
Qt.NoModifier不允许任何修饰键。
Qt.ShiftModifier必须按下键盘上的Shift键。
Qt.ControlModifier必须按下键盘上的Ctrl键。
Qt.AltModifier必须按下键盘上的Alt键。
Qt.MetaModifier必须按下键盘上的Meta键。
Qt.KeypadModifier必须按下键盘上的数字键。
Qt.GroupSwitchModifier必须按下键盘上的Mode_switch键。仅X11平台(除非在Windows上通过命令行参数激活)。
Qt.KeyboardModifierMask处理程序忽略修饰键。

另请参阅Qt::KeyboardModifier


acceptedPointerTypes : flags

可以激活指针处理程序的指向工具类型(通用、笔、橡皮擦等)。

默认情况下,此属性设置为PointerDevice.AllPointerTypes。如果将其设置为设备类型的“或”组合,它将忽略不匹配事件。

例如,您可以根据悬停在图形平板上的是笔还是橡皮擦来改变光标以提供反馈

import QtQuick

Rectangle {
    id: rect
    width: 150; height: 150

    HoverHandler {
        id: stylus
        acceptedPointerTypes: PointerDevice.Pen
        cursorShape: Qt.CrossCursor
    }

    HoverHandler {
        id: eraser
        acceptedPointerTypes: PointerDevice.Eraser
        cursorShape: Qt.BlankCursor
        target: Image {
            parent: rect
            source: "images/cursor-eraser.png"
            visible: eraser.hovered
            x: eraser.point.position.x
            y: eraser.point.position.y - 32
        }
    }
}

可用的指针类型如下

常数描述
PointerDevice.Generic鼠标或模拟鼠标的设备。
PointerDevice.Finger触控屏上的手指(悬停检测不太可能)。
PointerDevice.Pen图形平板上的笔。
PointerDevice.Eraser图形平板上的橡皮擦。
PointerDevice.Cursor带有十字准线的图形平板上的数字化仪。
PointerDevice.AllPointerTypes任何类型的指向设备。

另请参阅QPointingDevice::PointerType


active : bool [只读]

这表明当此输入处理程序独立负责处理一个或多个事件点,并成功独占这些点时,始终为真。这意味着它根据这些事件点的移动情况不断更新其属性,并主动操作其目标(如果有)。


blocking : bool [since 6.3]

是否此处理程序阻止后面的其他项或处理程序同时悬停。该属性默认为false

该属性是在Qt 6.3中引入的。


cursorShape : Qt::CursorShape

该属性用于在hoveredtrue且没有其他处理程序覆盖它时显示光标形状。

可用的光标形状包括:

  • 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

该属性的默认值未设置,这允许同一父项上的任何激活处理程序确定光标形状。可以将该属性重置为初始条件,将其设置为undefined

如果任何定义了cursorShape的处理程序处于活动状态,则显示该光标。否则,如果HoverHandler定义了cursorShape,则显示该光标。否则,将显示父项的光标

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

另请参阅:Qt::CursorShapeQQuickItem::cursor


enabled : bool

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


grabPermissions : flags

此属性指定在处理程序的逻辑决定接管独占抓取,或者当请求批准其他处理程序接管抓取或取消操作时,的权限。

常数描述
PointerHandler.TakeOverForbidden此处理程序不会从任何类型的项或处理程序中获取或授予抓取权限。
PointerHandler.CanTakeOverFromHandlersOfSameType此处理程序可以从同一类别的另一个处理程序那里捕获独占抓取。
PointerHandler.CanTakeOverFromHandlersOfDifferentType此处理程序可以从任何类型的处理程序那里捕获独占抓取。
PointerHandler.CanTakeOverFromItems此处理程序可以从任何类型的项那里捕获独占抓取。
PointerHandler.CanTakeOverFromAnything此处理程序可以从任何类型的项或处理程序那里捕获独占抓取。
PointerHandler.ApprovesTakeOverByHandlersOfSameType此处理程序允许同一类别的另一个处理程序抓取。
PointerHandler.ApprovesTakeOverByHandlersOfDifferentType此处理程序允许任何类型的处理程序抓取。
PointerHandler.ApprovesTakeOverByItems此处理器允许任何种类的项目进行抓取。
PointerHandler.ApprovesCancellation此处理器将允许将抓取设置为null。
PointerHandler.ApprovesTakeOverByAnything此处理器允许任何类型的Item或处理器进行抓取。

默认为PointerHandler.CanTakeOverFromItems | PointerHandler.CanTakeOverFromHandlersOfDifferentType | PointerHandler.ApprovesTakeOverByAnything,允许大多数接管场景但避免例如两个PinchHandlers在相同的触点上互相争斗。


hovered : bool [只读]

当任何指点设备光标(鼠标或平板电脑)在任何给定parent项目界限内,扩展了margin,如果有的话,该值始终为true。


margin : real

在项目的界限之外,一个事件点可以被这个处理器激活的边际。例如,在一个PinchHandler上,其中target也是parent,将其设置为至少是典型用户手指宽度的一半距离是有用的,这样如果parent缩放到一个非常小的尺寸,捏手势仍然可行。或者,如果一个 基于TapHandler的按钮靠近屏幕边缘,它可以用来符合菲茨定律:即使按钮从视觉上距边缘几像素,也要对屏幕边缘的鼠标点击做出反应。

默认值是0。


parent : 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(动词)告诉发生了什么。《i translate="no">point(对象)是已经抓取或未抓取的点。

对于transition的有效值是

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

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


© 2024 Qt公司 Ltd. 本文档的贡献包括各自所有者的版权。本提供的文档是根据由自由软件基金会发布的GNU自由文档许可版本1.3的条款许可的。Qt及其相应的商标是芬兰的Qt公司及其在全世界其他国家的商标。所有其他商标均为各自所有者的财产。