Qt 滚轮事件学习

鼠标滚轮事件的处理方法稍微不同于左键或者右键:因为滚轮有滚动方向和滚动距离,有些程序中我们可以发现有配合SHIFT或者CTRL使用的组合滚轮事件,都会最终影响到事件结果。所以使用的关键点在于获取到时间和相应的参数。

事件类:QWheelEvent
方法细节参见:Qt Assist Qt 5.5 Qt GUI C++ Classes QWheelEvent

创建wheelEvent需要参数:position pixelDelta angleDelta(QPoint)
Orientation Qt::MouseButtons Qt::KeyBoardModifiers
同时,也可以直接获取到相关的位置。方向。delta等参数
**************************************************************************************************************************************
1)QWheelEvent::QWheelEvent ( const QPoint & pos, int delta, Qt::MouseButtons buttons,Qt::KeyboardModifiers modifiers, Qt::Orientation orient = Qt::Vertical )
功能与参数:
创建一个wheelEvent对象,
(1)参数pos代表鼠标指针在窗口中的当前位置,通常用globalPos()初始化QCursor::pos(),但并不总是正确的。如果需要显示指定一个全局位置,可以用其他的构造函数。
(2)参数button用于描述在鼠标事件过程中鼠标按键的状态(state),
(3)delta()可以返回滑动的距离,
(4)参数modifiers用于描述在鼠标事件中鼠标状态位改变时的参数值 (比如鼠标的左中右按键的切换),
(5)参数orient用于指示鼠标滑轮滚动的方向(水平或者垂直)。

2)QWheelEvent::QWheelEvent ( const QPoint & pos, const QPoint & globalPos, int delta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers,Qt::Orientation orient= Qt::Vertical )
功能与参数:
创建一个wheelEvent对象,
(1)参数pos代表鼠标指针在窗口中的当前位置,通常用globalPos()初始化QCursor::pos(),但并不总是正确的。如果需要显示指定一个全局位置,可以用其他的构造函数。
(2)参数button用于描述在鼠标事件过程中鼠标按键的状态(state),
(3)delta()可以返回滑动的距离,
(4)参数modifiers用于描述在鼠标事件中鼠标状态位改变时的参数值 (比如鼠标的左中右按键的切换)
(5)参数orient用于指示鼠标滑轮滚动的方向(水平或者垂直)。

3)Qt::MouseButtons QWheelEvent::buttons () const
当事件发生时,返回鼠标状态。
4)int QWheelEvent::delta () const
当鼠标滑轮在滚动时用于返回滑动的距离,该值等于鼠标旋转角度的8倍。正数值表示滑轮相对于用户在向前滑动,相反,负数值表示滑轮相对于用户是向后滑动的。

5)const QPoint & QWheelEvent::globalPos () const
返回鼠标指针的全局位置,这个特性对于异步窗口系统很重要譬如X11,然后当你滑动窗口作为鼠标响应事件时,可以用globalPos()函数与QCursor::pos()函数进行区分当前鼠标指针所在的位置。
6)int QWheelEvent::globalX () const
返回鼠标指针全局坐标中X轴所对应的坐标值。
7)int QWheelEvent::globalY () const
返回鼠标指针全局坐标中Y轴所对应的坐标值。
8)Qt::Orientation QWheelEvent::orientation () const
返回鼠标转轮滚动的方向,水平Horizontal = 0x1或者垂直Vertical= 0x2。

9)const QPoint & QWheelEvent::pos () const
返回鼠标指针相对于窗口的坐标值QPoint(x,y),如果滚动窗口可以用globalPos()替换本函数从而返回全局坐标值。
10)int QWheelEvent::x () const
返回鼠标指针相对于窗口的相对位置值的X坐标值。
11)int QWheelEvent::y () const
返回鼠标指针相对于窗口的相对位置值的Y坐标值。
***********************************************************************************************************************************
void MyWidget::wheelEvent(QWheelEvent *event)
{
int numDegrees = event->delta() / 8;//滚动的角度,*8就是鼠标滚动的距离
int numSteps = numDegrees / 15;//滚动的步数,*15就是鼠标滚动的角度
if (event->orientation() == Qt::Horizontal) {
scrollHorizontally(numSteps); //水平滚动
} else {
scrollVertically(numSteps); //垂直滚动
}
event->accept(); //接收该事件
}

(部分内容来自互联网)
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页