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()的值来判断。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SOC罗三炮

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

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

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

打赏作者

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

抵扣说明:

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

余额充值