Qt中修改滚轮事件:表格显示内容滚动

鼠标滚轮触发后执行的事件为:QEvent::QWheel, 这个类为QWheelEvent

对于应用调用来说,关注的点为:是否和其他按钮一起触发、滚动的距离等。观察其构造函数:

  QWheelEvent(const QPointF & pos, const QPointF & globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers)
  QWheelEvent(const QPointF & pos, const QPointF & globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase)
  QWheelEvent(const QPointF & pos, const QPointF & globalPos, QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source)
发现比较关键的变量有: pixelDelta , angleDelta , qt4Delta , buttons

由于目标是让表格滚动减速,考虑修改qt4Delta的值,让软件识别的滚动减少,从而实现减速。实现代码:

如此改动能够在全局修改滚轮的速度。但是如果涉及到非表格控件,可能会因为重新构造的Event非法报错。

其实Qt留给了开发者一个使用接口:

使用setWheelScorllLines() 即可设置, 需要给QApplication设置,通常在Main函数里执行。