QWheelEvent 类

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

头文件 #include <QWheelEvent>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += 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())
QPointangleDelta() const
boolinverted() const
Qt::ScrollPhasephase() const
QPointpixelDelta() const

重写的公共函数

virtual boolisBeginEvent() const override
virtual boolisEndEvent() const override
virtual boolisUpdateEvent() const override

详细描述

轮事件发送到鼠标光标下的小部件,如果该小部件没有处理该事件,它们将发送到焦点小部件。鼠标滚轮和触控板滚动手势都会生成轮事件。有两种方法可以读取轮事件增量: angleDelta() 返回以度数为单位的增量。这些值总是提供的。 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 是可选的,可以是 null。

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

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

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

指定产生滚轮事件的设备 device

另请参阅 position(),globalPosition(),angleDelta(),pixelDelta(),phase(),inverted() 以及 device

QPoint QWheelEvent::angleDelta() const

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

大多数鼠标类型以 15 度的步骤工作,在这种情况下,delta 值是 120 的倍数;即,120 个单位 * 1/8 = 15 度。

然而,一些鼠标的轮子分辨率更高,发送的delta值小于120单位(小于15度)。为了支持这种情况,您可以累积添加事件直到值达到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();
}

注意:在支持滚动阶段的平台中,当

  • 即将开始滚动但距离尚未改变(Qt::ScrollBegin),
  • 或者滚动已结束且距离不再改变(Qt::ScrollEnd)时,delta可能为null。

注意:属性angleDelta的获取函数。

另请参阅:pixelDelta

bool QWheelEvent::inverted() const

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

通常,如果滚轮的顶部远离操作该滚轮的手旋转,则垂直滚轮将产生具有正delta值的QWheelEvent。类似地,如果将滚轮顶部向左移动,则水平滚轮运动将产生具有正delta值的QWheelEvent

但是,在某些平台上这是可配置的,因此上面描述的相同操作将产生具有相同幅度的负delta值。使用反转属性,轮事件消费者可以选择始终跟随滚轮的方向,不考虑系统设置,但仅适用于特定的小部件。(一个这样的用例是用户正在以与视觉转盘一致的同一方向旋转滚轮。另一个用例是让滑动条的处理器始终按照触摸板的指尖移动方向滚动,而无论系统配置如何。)

注意:许多平台不提供此类信息。在这种情况下,反转始终返回false。

注意:属性反转的获取函数。

[重写虚函数] bool QWheelEvent::isBeginEvent() const

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

如果此事件的阶段() 是 Qt::ScrollBegin,则返回 true

[重写虚函数] bool QWheelEvent::isEndEvent() const

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

如果此事件的阶段() 是 Qt::ScrollEnd,则返回 true

[重写虚函数] bool QWheelEvent::isUpdateEvent() const

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

如果此事件的阶段() 是 Qt::ScrollUpdateQt::ScrollMomentum,则返回 true

Qt::ScrollPhase QWheelEvent::phase() const

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

注意:Qt::ScrollBeginQt::ScrollEnd 阶段目前仅在macOS上受支持。

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

QPoint QWheelEvent::pixelDelta() const

返回屏幕上的滚动距离(以像素为单位)。此值在支持高分辨率基于像素的增量值的平台上提供,例如 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();
}

注意:在支持滚动阶段的平台中,当

  • 即将开始滚动但距离尚未改变(Qt::ScrollBegin),
  • 或者滚动已结束且距离不再改变(Qt::ScrollEnd)时,delta可能为null。

注意:在 X11 中,此值由驱动程序特定且不可靠,请改用 angleDelta()。

注意:像素增量属性的获取器函数。

© 2024 Qt 公司有限公司。在此处包含的文档贡献是各自所有者的版权。提供的文档受 GNU 自由文档许可证版本 1.3 的许可,该许可证由自由软件基金会发布。Qt 以及相应的商标是芬兰的 Qt 公司以及/或其他国家的商标。所有其他商标均为各自所有者的财产。