QWheelEvent Class

QWheelEvent 类包含描述车轮事件的参数。更多

头文件: #include <QWheelEvent>
CMake.QWheelEvent find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承: QSinglePointEvent

公共函数

QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice())
QPoint angleDelta() const
bool inverted() const
Qt::ScrollPhase phase() const
QPoint pixelDelta() const

重新实现的公共函数

virtual bool isBeginEvent() const override
virtual bool isEndEvent() const override
virtual bool isUpdateEvent() const override

详细说明

滚轮事件会发送至鼠标光标下的部件,但如果该部件未处理该事件,则会发送至焦点部件。鼠标滚轮和触控板滚动手势都会产生滚轮事件。读取滚轮事件 delta 值有两种方法:angleDelta() 返回以滚轮度数为单位的 delta 值。始终提供这些值。pixelDelta() 以屏幕像素为单位返回分度值,适用于具有高分辨率触控板的平台,如 macOS。如果是这种情况,device()->type() 将返回 QInputDevice::DeviceType::Touchpad。

函数position() 和globalPosition() 将返回事件发生时鼠标光标的位置。

滚轮事件包含一个特殊的接受标志,表示接收方是否需要该事件。如果您不处理滚轮事件,则应调用ignore() 函数,以确保该事件将被发送到父部件。

QWidget::setEnabled() 函数可用于启用或禁用部件的鼠标和键盘事件。

事件处理程序QWidget::wheelEvent() 会接收滚轮事件。

另请参阅 QMouseEventQWidget::grabMouse()。

成员函数文档

QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized, const QPointingDevice *device = QPointingDevice::primaryPointingDevice())

构造一个滚轮事件对象。

pos 提供了鼠标指针在窗口中的位置。全局坐标中的位置由globalPos 指定。

pixelDelta angleDelta pixelDelta 是可选项,可以为空。

事件发生时的鼠标和键盘状态由buttonsmodifiers 指定。

事件的滚动阶段由phase 指定,而source 则表示这是真实事件还是人工(合成)事件。

如果系统配置为反转与事件一起传送的 delta 值(例如 macOS 上触摸板的自然滚动),则inverted 应为true 。否则,invertedfalse

滚轮事件发生的设备由device 指定。

另请参阅 position()、globalPosition()、angleDelta()、pixelDelta()、phase()、inverted() 和device()。

QPoint QWheelEvent::angleDelta() const

返回滚轮旋转的相对角度,单位为八分之一度。正值表示滚轮向前旋转,远离用户;负值表示滚轮向后旋转,朝向用户。angleDelta().y() 提供自上次事件后普通垂直鼠标滚轮旋转的角度。angleDelta().x() 提供水平鼠标滚轮旋转的角度(如果鼠标有水平滚轮),否则保持为 0。有些鼠标允许用户倾斜滚轮来执行水平滚动,有些触摸板支持水平滚动手势;这也会出现在angleDelta().x() 中。

大多数鼠标以 15 度为单位进行操作,在这种情况下,delta 值是 120 的倍数,即 120 单位 * 1/8 = 15 度。

不过,有些鼠标的滚轮分辨率较高,发送的 delta 值小于 120 单位(小于 15 度)。为了支持这种可能性,可以将来自事件的 delta 值累加,直到达到 120 值为止,然后滚动部件,或者可以在响应每个滚轮事件时部分滚动部件。但是,为了提供更原生的感觉,在可用的平台上,您应该首选pixelDelta() 。

举例说明:

void MyWidget::wheelEvent(QWheelEvent *event)
{
    QPoint numPixels = event->pixelDelta();
    QPoint numDegrees = event->angleDelta() / 8;

    if (!numPixels.isNull()) {
        scrollWithPixels(numPixels);
    } else if (!numDegrees.isNull()) {
        QPoint numSteps = numDegrees / 15;
        scrollWithDegrees(numSteps);
    }

    event->accept();
}

注意: 在支持滚动的平台上,phases ,当滚动即将开始,但滚动时间还未结束时,delta 值可能为空:

注: 属性 angleDelta 的获取函数。

另请参见 pixelDelta()。

bool QWheelEvent::inverted() const

返回事件传递的 delta 值是否反转。

通常情况下,如果垂直滚轮的顶部远离操作滚轮的手旋转,则会产生具有正 delta 值的QWheelEvent 。同样,如果滚轮顶部向左移动,水平滚轮移动将产生带有正 delta 值的QWheelEvent

不过,在某些平台上这是可以配置的,因此上述相同的操作将产生负 delta 值(但幅度相同)。使用反转属性,滚轮事件消费者可以选择始终跟随滚轮的方向,而不管系统设置如何,但仅限于特定的部件。(其中一个用例可能是用户旋转滚轮的方向与视觉滚轮旋转的方向一致。另一个用例是让滑块手柄跟随手指在触摸板上的移动方向,而与系统配置无关)。

注意: 许多平台不提供此类信息。在这些平台上,inverted 总是返回 false。

注: 属性 inverted 的获取函数。

[override virtual] bool QWheelEvent::isBeginEvent() const

重实现:QSinglePointEvent::isBeginEvent() const.

如果该事件的phase() 是Qt::ScrollBegin ,则返回true

[override virtual] bool QWheelEvent::isEndEvent() const

重实现:QSinglePointEvent::isEndEvent() const.

如果该事件的phase() 是Qt::ScrollEnd ,则返回true

[override virtual] bool QWheelEvent::isUpdateEvent() const

重实现:QSinglePointEvent::isUpdateEvent() 常量。

如果该事件的phase() 是Qt::ScrollUpdateQt::ScrollMomentum ,则返回true

Qt::ScrollPhase QWheelEvent::phase() const

返回此滚轮事件的滚动阶段。

注: 目前仅 macOS 支持Qt::ScrollBeginQt::ScrollEnd 阶段。

注: 属性阶段的获取函数。

QPoint QWheelEvent::pixelDelta() const

以像素为单位返回屏幕上的滚动距离。该值在支持基于高分辨率像素的 delta 值的平台(如 macOS)上提供。该值应直接用于滚动屏幕上的内容。

示例

void MyWidget::wheelEvent(QWheelEvent *event)
{
    QPoint numPixels = event->pixelDelta();
    QPoint numDegrees = event->angleDelta() / 8;

    if (!numPixels.isNull()) {
        scrollWithPixels(numPixels);
    } else if (!numDegrees.isNull()) {
        QPoint numSteps = numDegrees / 15;
        scrollWithDegrees(numSteps);
    }

    event->accept();
}

注意: 在支持滚动phases 的平台上,当出现以下情况时,delta 值可能为空:

注: 在 X11 上,该值是特定于驱动程序的,不可靠,请使用angleDelta() 代替。

注: pixelDelta 属性的获取函数。

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