Qt5.13监听鼠标滚轮的上下滚动事件QWheelEvent的angleDelta().y()

There are two ways to read the wheel event delta: angleDelta() returns the delta in wheel degrees. This value is always provided. pixelDelta() returns the delta in screen pixels and is available on platforms that have high-resolution trackpads, such as macOS. If that is the case, source() will return Qt::MouseEventSynthesizedBySystem.

在Qt5中有两种读取鼠标滚轮事件滚动增量的方法:

  • angleDelta()返回滚轮度数的增量, 始终提供此值
  • pixelDelta()返回屏幕像素的增量,可以在具有高分辨率触摸板的平台上使用,比如macOS 如果是这样,source()将返回Qt::MouseEventSynthesizedBySystem,但在普通设备中source()将返回Qt::MouseEventNotSynthesized,并且pixelDelta()返回的是QPoint(0,0)
  • delta(),新版的Qt已经将其废除,它的返回值相当于angleDelta()的返回值的y点坐标

利用QWheelEvent的delta()函数获得滚轮滚动的距离值,通过此值判断滚轮滚动的方向。若delta大于0,则表示滚轮向前(远离用户的方向),小于零则表明向后,(靠近用户的方向)。
鼠标的滚动事件,滚轮每滚动1度,相当于移动了8度,而常见的滚轮鼠标拨动一下的滚动角度为15度,因此滚轮拨动一下相当于移动了120度。

void MainWindow::wheelEvent(QWheelEvent *event){
QPoint numPixels = event->pixelDelta();
    QPoint numDegrees = event->angleDelta();
    int delta = event->delta ();
    qDebug() << "numPixels:"<<numPixels;
    qDebug() << "numDegrees:"<<numDegrees;
    qDebug() << "delta:"<<delta;
    qDebug() << "the wheel event source: "<<event->source ();
    if(numDegrees.y()>0){
        qDebug() << "向前滚动"<<numDegrees.y();
    }else{
        qDebug() << "向后滚动"<<numDegrees.y();
    }
}

当上下滚动滑轮时,有如下显示:

numPixels: QPoint(0,0)
numDegrees: QPoint(0,120)
delta: 120
the wheel event source:  Qt::MouseEventNotSynthesized
向前滚动 120
numPixels: QPoint(0,0)
numDegrees: QPoint(0,-120)
delta: -120
the wheel event source:  Qt::MouseEventNotSynthesized
向后滚动 -120

综上所述,要判断鼠标滚轮滚动方向,可以使用QWheelEvent的delta()和angleDelta()函数,但是delta()函数在新版Qt中已被废除,所以最好使用angleDelta().y()的值来判断。

  • 17
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Qt中的鼠标中键滚动事件可以通过重写QWidget的wheelEvent()函数来处理。当鼠标滚轮滚动时,会触发QWheelEvent事件QWheelEvent类用于表示鼠标滚轮事件,包含了滚动位置、滚动方向以及鼠标按键等相关信息。可以通过获取这些信息来对鼠标滚轮事件进行响应。 要处理鼠标中键滚动事件,可以在QWidget的子类中重写wheelEvent()函数,并在函数体内实现自定义的操作逻辑。在重写的函数中,可以通过QWheelEvent对象的delta()方法获取滚轮滚动的距离,正值表示向前滚动,负值表示向后滚动。通过判断delta的值,可以根据需要进行相应的处理。 以下是处理鼠标中键滚动事件的示例代码: ```cpp #include <QApplication> #include <QMouseEvent> class MyWidget : public QWidget { protected: void wheelEvent(QWheelEvent *event) override { int delta = event->delta(); if (delta > 0) { // 向前滚动 // 执行你的逻辑 } else { // 向后滚动 // 执行你的逻辑 } } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget widget; widget.show(); return a.exec(); } ``` 在上述示例中,我们创建了一个自定义的QWidget子类MyWidget,并在该类中重写了wheelEvent()函数。在函数体内,我们通过判断delta的值来执行相应的逻辑。 请注意,在使用该功能之前,需要确保你已经添加了包含QWheelEvent的头文件,如<QWheelEvent><span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Qt事件系统:鼠标事件滚轮事件](https://blog.csdn.net/QtCompany/article/details/131743487)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值