QWheelEvent Class
QWheelEvent 类包含描述滚轮事件的参数。更多内容...
| 头文件: | #include <QWheelEvent> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 继承自: | QSinglePointEvent |
- 所有成员列表,包括继承的成员
- 已弃用的成员
- 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()) | |
| 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 |
受保护函数
| QWheelEvent(QWheelEvent &&) | |
| QWheelEvent & | operator=(QWheelEvent &&) |
| QWheelEvent & | operator=(const QWheelEvent &other) |
详细说明
滚轮事件会发送至鼠标光标下的控件,但如果该控件未处理该事件,则会将其发送至当前获得焦点的控件。滚轮事件既由鼠标滚轮产生,也由触控板滚动手势触发。读取滚轮事件增量有两种方式:angleDelta() 返回以滚轮度为单位的增量。这些值始终会被提供。pixelDelta() 返回以屏幕像素为单位的增量,该功能在配备高分辨率触控板的平台上可用,例如 macOS。若属此情况,device()->type() 将返回 QInputDevice::DeviceType::Touchpad。
函数position() 和globalPosition() 返回事件发生时鼠标光标的位置。
滚轮事件包含一个特殊的接受标志,用于指示接收方是否需要该事件。如果您不处理该滚轮事件,应调用ignore();这可确保该事件会被发送至父控件。
QWidget::setEnabled() 函数可用于启用或禁用小部件的鼠标和键盘事件。
事件处理程序QWidget::wheelEvent() 用于接收滚轮事件。
另请参阅 QMouseEvent 和QWidget::grabMouse()。
属性文档
[read-only] angleDelta : QPoint
该属性存储了滚轮旋转的相对角度,单位为八分之一度
正值表示滚轮向前旋转(远离用户);负值表示滚轮向后旋转(朝向用户)。angleDelta().y() 返回自上次事件以来标准垂直鼠标滚轮的旋转角度。angleDelta().x() 返回水平鼠标滚轮的旋转角度(如果鼠标配备水平滚轮); 否则该值保持为零。
大多数鼠标类型以 15 度为步长,在这种情况下,delta 值是 120 的倍数;即 120 单位 * 1/8 = 15 度。
注意:在 支持滚动(phases )的平台上,当滚动即将开始(Qt::ScrollBegin )或结束(Qt::ScrollEnd )时,delta 值可能为空。
访问函数:
| QPoint | angleDelta() const |
另请参阅 pixelDelta()。
[read-only] device : const QPointingDevice*
该属性保存了触发滚轮事件的设备
另请参阅 pointingDevice()。
[read-only] inverted : bool
无论事件随附的delta值是否被反转,该属性均成立
通常情况下,对于垂直方向的滚轮,如果滚轮顶部朝远离操作手的一侧旋转,则会产生一个具有正增量值的QWheelEvent 。同样,对于水平方向的滚轮,如果滚轮顶部向左移动,则会产生一个具有正增量值的QWheelEvent 。
然而,在某些平台上此行为可配置,因此上述相同的操作会产生负的delta值(但绝对值相同)。通过inverted属性,滚轮事件消费者可以选择始终遵循滚轮的旋转方向,无论系统设置如何,但仅限于特定的控件。
注意:许多 平台不提供此类信息。在这些平台上,inverted 始终返回 false。
访问函数:
| bool | inverted() const |
[read-only] phase : Qt::ScrollPhase
该属性保存了此滚轮事件的滚动阶段
注意: Qt::ScrollBegin 和Qt::ScrollEnd 阶段目前仅在 macOS 上受支持。
访问函数:
| Qt::ScrollPhase | phase() const |
[read-only] pixelDelta : QPoint
该属性存储屏幕上的滚动距离(以像素为单位)
该值在支持基于像素的高分辨率增量值的平台上提供,例如 macOS。应直接使用该值来滚动屏幕上的内容。
注意:在 支持phases 滚动的平台上 ,当滚动即将开始(Qt::ScrollBegin )或已结束(Qt::ScrollEnd )时,该增量值可能会为空。
注意:在 X11平台上, 该值取决于驱动程序且不可靠,请改用angleDelta()。
访问函数:
| QPoint | pixelDelta() const |
另请参阅 angleDelta()。
成员函数文档
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。
事件发生时的鼠标和键盘状态由 `buttons ` 和 `modifiers` 指定。
事件的滚动阶段由 `phase` 指定,而 `source ` 指示该事件是真实事件还是人工(合成)事件。
如果系统配置为反转事件中传递的增量值(例如 macOS 上触控板的自然滚动),则inverted 应为true 。否则,inverted 应为false
device 指定了产生滚轮事件的设备。
另请参阅 position()、globalPosition()、angleDelta()、pixelDelta()、phase()、inverted() 以及device()。
[protected delete] QWheelEvent::QWheelEvent(QWheelEvent &&)
通过移动构造一个QWheelEvent 实例。该函数已被删除。
QPoint QWheelEvent::angleDelta() const
返回滚轮旋转的相对角度,单位为八分之一度。 正值表示滚轮向前旋转(远离用户);负值表示滚轮向后旋转(朝向用户)。angleDelta().y() 提供自上次事件以来普通垂直鼠标滚轮的旋转角度。angleDelta().x() 提供水平鼠标滚轮的旋转角度(如果鼠标配备水平滚轮); 否则该值保持为零。部分鼠标允许用户通过倾斜滚轮实现水平滚动,部分触控板也支持水平滚动手势;这些操作同样会显示在 `angleDelta().x()` 中。
大多数鼠标以 15 度为步长工作,在这种情况下,增量值是 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 可能为 null:
- 滚动即将开始,但距离尚未发生变化(Qt::ScrollBegin ),
- 或者滚动已结束且距离不再发生变化时(Qt::ScrollEnd )。
注意: 属性 angleDelta 的获取 函数。
另请参阅 pixelDelta()。
bool QWheelEvent::inverted() const
返回事件随附的增量值是否被反转。
通常情况下,如果垂直方向的滚轮顶部远离操作者方向旋转,则会生成一个QWheelEvent ,其增量值为正。同样地,如果水平方向的滚轮顶部向左移动,则会生成一个QWheelEvent ,其增量值为正。
然而,在某些平台上此行为可配置,因此上述相同的操作可能会产生负的delta值(但绝对值相同)。通过inverted属性,滚轮事件处理程序可以选择始终遵循滚轮的旋转方向,无论系统设置如何,但仅限于特定的控件。 (一个典型的用例是:用户旋转滚轮的方向与视觉上的“转盘”旋转方向一致。另一个用例是让滑块手柄始终跟随触摸板上手指的移动方向,而与系统配置无关。)
注意:许多 平台不提供此类信息。在这些平台上,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() const。
如果该事件的phase()返回值为Qt::ScrollUpdate 或Qt::ScrollMomentum ,则返回true 。
Qt::ScrollPhase QWheelEvent::phase() const
返回此滚轮事件的滚动阶段。
注意: Qt::ScrollBegin 和Qt::ScrollEnd 这两个 阶段目前仅在 macOS 上受支持。
注意: 这是属性 phase 的获取器 函数。
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();
}注意:在 支持滚动phases 的平台上,当出现以下情况时,增量值可能为 null:
- 滚动即将开始,但距离尚未发生变化(Qt::ScrollBegin ),
- 或者滚动已结束且距离不再发生变化时(Qt::ScrollEnd )。
注意:在 X11平台上, 该值取决于驱动程序且不可靠,请改用angleDelta()。
注意: 这是属性 pixelDelta 的获取 函数。
[protected delete] QWheelEvent &QWheelEvent::operator=(QWheelEvent &&)
将other 通过“移动赋值”操作赋值给此QWheelEvent 实例。该函数已被删除。
[noexcept protected default] QWheelEvent &QWheelEvent::operator=(const QWheelEvent &other)
将other 复制并赋值给此QWheelEvent 实例。
© 2026 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.