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