WheelHandler QML Type

鼠标滚轮的处理程序。更多

Import Statement: import QtQuick
Inherits:

SinglePointHandler

属性

信号

  • wheel(WheelEvent event)

详细说明

WheelHandler 是一个处理程序,用于在用户旋转鼠标滚轮时以交互方式操作项目的某些数字属性。与其他输入处理程序一样,默认情况下,它会操作target 。声明property 可控制要操作的目标属性:

import QtQuick

Rectangle {
    width: 170; height: 120
    color: "green"; antialiasing: true

    WheelHandler {
        property: "rotation"
        onWheel: (event)=> console.log("rotation", event.angleDelta.y,
                                       "scaled", rotation, "@", point.position,
                                       "=>", parent.rotation)
    }
}

BoundaryRule 在与 WheelHandler(以及其他输入处理程序)结合使用时,声明目标属性的允许取值范围非常有用。例如,当用户旋转滚轮或在触摸屏上拖动项目时,可以使用 WheelHandler 和 的组合来操作可滚动项的 属性,并使用 来限制从顶部到底部的移动范围,从而实现滚动:DragHandler y BoundaryRule

import QtQuick
import Qt.labs.animation

Item {
    width: 320; height: 480
    Flow {
        id: content
        width: parent.width
        spacing: 2; padding: 2

        WheelHandler {
            orientation: Qt.Vertical
            property: "y"
            rotationScale: 15
            acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
            onActiveChanged: if (!active) ybr.returnToBounds()
        }

        DragHandler {
            xAxis.enabled: false
            onActiveChanged: if (!active) ybr.returnToBounds()
        }

        BoundaryRule on y {
            id: ybr
            minimum: content.parent.height - content.height
            maximum: 0
            minimumOvershoot: 400; maximumOvershoot: 400
            overshootFilter: BoundaryRule.Peak
        }

        Repeater {
            model: 1000
            Rectangle { color: "gray"; width: 10 + Math.random() * 100; height: 15 }
        }
    }
}

另外,如果property 未设置或target为空,WheelHandler 不会自动操作任何内容;但rotation 属性可在绑定中用于操作另一个属性,或者您也可以实现onWheel 并直接处理滚轮事件。

默认情况下,WheelHandler 只处理旋转的鼠标滚轮;可以通过设置acceptedDevices 来更改。

另请参阅 MouseAreaFlickableQt Quick 示例 - 指针处理程序

属性文档

acceptedDevices : flags

可激活此处理程序的指向设备类型。

默认情况下,此属性设置为PointerDevice.Mouse ,以便仅对来自实际鼠标滚轮的事件作出响应。

WheelHandler 通过将 acceptedDevices 设置为 ,可同时对鼠标滚轮和触摸板滚动作出响应。PointerDevice.Mouse | PointerDevice.TouchPad

注意: 某些非鼠标硬件(如触摸敏感的 Wacom 手写板或 Linux 笔记本电脑触摸板)会通过手势产生真正的滚轮事件。即使acceptedDevices 仍设置为默认值,WheelHandler 也会将这些事件作为滚轮事件作出响应。


acceptedModifiers : flags

如果设置了该属性,则需要按下给定的键盘修改器才能对滚轮事件做出反应,否则将忽略这些事件。

如果该属性设置为Qt.KeyboardModifierMask (默认值),则WheelHandler 会忽略修改键。

例如,一个Item 可以有两个处理程序,其中一个仅在按下所需键盘修改器时启用,而另一个则在按下任何修改器时忽略事件:

import QtQuick

Rectangle {
    width: 170; height: 120
    color: "green"; antialiasing: true

    WheelHandler {
        property: "rotation"
        acceptedModifiers: Qt.ControlModifier
    }

    WheelHandler {
        property: "scale"
        acceptedModifiers: Qt.NoModifier
    }
}

可用的修改器如下:

常量说明
NoModifier不允许按任何修改键。
ShiftModifier必须按键盘上的 Shift 键。
ControlModifier必须按键盘上的 Ctrl 键。
AltModifier必须按下键盘上的 Alt 键。
MetaModifier必须按下键盘上的 Meta 键。
KeypadModifier必须按下键盘上的按键。
GroupSwitchModifier仅限 X11(除非在 Windows 上通过命令行参数激活)。必须按下键盘上的模式切换键。
KeyboardModifierMask处理程序并不关心按下的是哪个修饰符。

另请参阅 Qt::KeyboardModifier


active : bool [read-only]

只要WheelHandler 最近查看过QWheelEvent 、正在更新其属性并积极操作其目标(如有),就会保持true

另请参阅 activeTimeout


activeTimeout : real

以秒为单位的时间量,如果不再收到轮子事件,active 属性将恢复为false 。默认值为0.1 (100 毫秒)。

WheelHandler 处理包含scroll phase 信息的事件(例如来自某些触摸板的事件)时,一旦收到相位为Qt::ScrollEnd 的事件,active 属性将立即变为false ;在这种情况下,超时是不必要的。但是,带滚轮的传统鼠标不提供滚动阶段:鼠标无法检测用户何时决定停止滚动,因此active 属性会在经过这么长的时间后过渡到false

另请参阅 QWheelEvent::phase().


blocking : bool [since 6.3]

该处理程序是否阻止其后面的其他项目或处理程序处理同一滚轮事件。该属性默认为true

该属性在 Qt 6.3 中引入。


enabled : bool

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


invertible : bool

如果QWheelEvent::invertedtrue ,是否反转属性变化的方向。默认值为true

如果操作系统有 "自然滚动 "设置,使滚动方向与手指移动方向一致,那么如果此属性设置为true ,且WheelHandler 直接在目标上设置属性,则移动方向将与系统设置一致。如果将此属性设置为false ,则会反转rotation ,使运动方向始终与手指运动方向一致。


margin : real

超出parent 项目边界的余量,在此范围内WheelHandler 可以做出反应。例如,如果margin 设置为10 ,则可以将光标放置在项目可见边缘外 10 像素的范围内,光标仍会对滚轮做出反应:

import QtQuick

Rectangle {
    width: 170; height: 120
    color: "green"; antialiasing: true

    WheelHandler {
        property: "rotation"
        margin: 10
    }
}

默认值为0


orientation : enumeration

对哪个滚轮做出反应。默认值是Qt.Vertical

并非每个鼠标都有Horizontal 滚轮;有时可以通过侧向倾斜滚轮来模拟滚轮。触摸板通常可以同时产生垂直和水平滚轮事件。


parent : Item

Item 是处理程序的作用域;是声明处理程序的项目。处理程序将代表该 Item 处理事件,这意味着如果指针事件中至少有一个eventPoints 出现在该 Item 的内部,那么该指针事件就是相关的。最初target() 是相同的,但可以重新分配。

另请参阅 targetQObject::parent()。


point : handlerPoint [read-only]

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


property : string

当鼠标滚轮旋转时,目标上要修改的属性。

默认值为无属性(空字符串)。当没有目标属性被自动修改时,可以使用绑定以任意方式对鼠标滚轮旋转做出反应。

你可以使用鼠标滚轮来调整任何数值属性。例如,如果property 设置为x目标将随着滚轮的旋转而水平移动。以下属性具有特殊行为:

常量说明
scalescale 将以非线性方式修改,如 中所述。如果 是 ,则 和 属性将同时调整,以便用户有效放大或缩小鼠标光标下的点。targetScaleMultiplier targetTransformAroundCursor true x y
rotationrotation rotation如果 是 ,l{ }{x} 和 属性将同时调整,以便用户有效地围绕鼠标光标下的点旋转项目。targetTransformAroundCursor trueQQuickItem::x y

给定目标属性的调整总是按rotationScale 缩放。


rotation : real

自上次设置此属性以来鼠标滚轮旋转的角度,单位为滚轮度。

正值表示滚轮向上/向右旋转;负值表示滚轮向下/向左旋转。

基本的鼠标点击滚轮以 15 度为单位。

启动时的默认值为0 。可以随时通过编程将其设置为任何值。用户旋转鼠标滚轮时,该值会随之调整。

另请参阅 orientation


rotationScale : real

应用于rotation 属性和目标项目property 的缩放比例(如果有)。默认值为 1,因此rotation 将以旋转度为单位。可以将其设置为负数,以反转鼠标滚轮旋转方向的效果。


target : Item

该处理程序将处理的项目。

默认情况下,它与parent 相同,即处理程序所在的项目。不过,有时也可以将目标设置为不同的项目,以便处理一个项目中的事件,但操作另一个项目;或者将目标设置为null ,禁用默认行为,而执行其他操作。


targetScaleMultiplier : real

每当rotation 变化 15 度时,目标 scale 的乘积。只有当property"scale" 时才与此相关。

scale 将乘以targetScaleMultiplier angleDelta *rotationScale / 15。默认值为2 1/3,这意味着如果rotationScale 保留为默认值,鼠标滚轮旋转一 "次"(15 度)后,目标将缩放约 1.25;旋转三 "次 "后,其大小将翻倍或减半,具体取决于滚轮旋转的方向。如果您想让目标每点击两次滚轮就缩小一倍或一半,请将其设置为2 1/2(1.4142)。如果想让它在滚轮旋转时反向缩放,请将rotationScale 设置为负值。


targetTransformAroundCursor : bool

在调整property 时,目标是否会自动围绕鼠标光标位置变换位置。默认值为true

如果property 设置为"rotation" ,targetTransformAroundCursor 设置为true ,那么当滚轮旋转时,目标项将围绕鼠标光标位置旋转到位。如果targetTransformAroundCursorfalse ,则将围绕其transformOrigin 旋转。


信号文档

wheel(WheelEvent event)

每次处理程序接收到event 类型的QWheelEvent 时,即每次移动滚轮或更新滚动手势时,都会发出该信号。

注: 相应的处理程序是onWheel


© 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.