QWheelEvent類包含用於描述鼠標滑輪事件的相關參數。
頭函數:#include<QWheelEvent>,繼承至:QInputEvent
公有函數:
1 1)QWheelEvent::QWheelEvent ( const QPoint & pos, int delta, Qt::MouseButtons buttons,Qt::KeyboardModifiers modifiers, Qt::Orientation orient = Qt::Vertical ) 2 功能與參數: 3 4 創建一個wheelEvent對象,
(1)參數pos代表鼠標指針在窗口中的當前位置,通常用globalPos()初始化QCursor::pos(),但並不總是正確的。如果需要顯示指定一個全局位置,可以用其他的構造函數。 (2)參數button用於描述在鼠標事件過程中鼠標按鍵的狀態(state), (3)delta()可以返回滑動的距離, (4)參數modifiers用於描述在鼠標事件中鼠標狀態位改變時的參數值(比如鼠標的左中右按鍵的切換), (5)參數orient用於指示鼠標滑輪滾動的方向(水平或者垂直)。
1 2)QWheelEvent::QWheelEvent ( const QPoint & pos, const QPoint & globalPos, int delta, Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers,Qt::Orientation orient= Qt::Vertical ) 2 功能與參數:
創建一個wheelEvent對象, (1)參數pos代表鼠標指針在窗口中的當前位置,通常用globalPos()初始化QCursor::pos(),但並不總是正確的。如果需要顯示指定一個全局位置,可以用其他的構造函數。 (2)參數button用於描述在鼠標事件過程中鼠標按鍵的狀態(state), (3)delta()可以返回滑動的距離, (4)參數modifiers用於描述在鼠標事件中鼠標狀態位改變時的參數值(比如鼠標的左中右按鍵的切換) (5)參數orient用於指示鼠標滑輪滾動的方向(水平或者垂直)。
1 3)Qt::MouseButtons QWheelEvent::buttons () const 2 當事件發生時,返回鼠標狀態。 3 4)int QWheelEvent::delta () const 4 當鼠標滑輪在滾動時用於返回滑動的距離,該值等於鼠標旋轉角度的8倍。正數值表示滑輪相對於用戶在向前滑動,相反,負數值表示滑輪相對於用戶是向后滑動的。
1 5)const QPoint & QWheelEvent::globalPos () const 2 返回鼠標指針的全局位置,這個特性對於異步窗口系統很重要譬如X11,然后當你滑動窗口作為鼠標響應事件時,可以用globalPos()函數與QCursor::pos()函數進行區分當前鼠標指針所在的位置。 3 6)int QWheelEvent::globalX () const 4 返回鼠標指針全局坐標中X軸所對應的坐標值。 5 7)int QWheelEvent::globalY () const 6 返回鼠標指針全局坐標中Y軸所對應的坐標值。 7 8)Qt::Orientation QWheelEvent::orientation () const 8 返回鼠標轉輪滾動的方向,水平 Horizontal = 0x1或者垂直Vertical = 0x2。
1 9)const QPoint & QWheelEvent::pos () const 2 返回鼠標指針相對於窗口的坐標值QPoint(x,y),如果滾動窗口可以用globalPos()替換本函數從而返回全局坐標值。 3 10)int QWheelEvent::x () const 4 返回鼠標指針相對於窗口的相對位置值的X坐標值。 5 11)int QWheelEvent::y () const
返回鼠標指針相對於窗口的相對位置值的Y坐標值。
*******************************************************************************
注意:
大多數鼠標工作在單步15度的情況下。此時鼠標轉輪滑動一圈是360度,鼠標滾輪轉動一圈是24步,計算后就是15度一步。
你可以滾動一下自己的鼠標滾輪,感受一下滾動過程中的停頓,24個停頓就是24步,一般的鼠標都是24步的。
而鼠標轉輪滑動的角度對應於窗口界面單位尺度的8倍,也就是滾動一度,鼠標滾輪在界面上滑動的距離(比如滾動條等)是8個unit單位,在這種情況下,delta的返回值是120(8*15)的倍數。 但是,有些鼠標有更好的解決方案,而且對頂單步值小於15度即delta()的返回值比120要小, 為了支持這種可能性,在鼠標事件中既可以累積該返回值,直到該返回值累加到120為止,然后滾動窗口到下一個屏幕(實現換頁功能);或者可以小幅度的滾動窗口(實現換行功能)作為對每一次鼠標滾動事件的響應,從而計算該返回值。
*************************************************** *******************************
例如:
1 void MyWidget::wheelEvent(QWheelEvent *event) 2 { 3 int numDegrees = event->delta() / 8;//滾動的角度,*8就是鼠標滾動的距離 4 int numSteps = numDegrees / 15;//滾動的步數,*15就是鼠標滾動的角度 5 if (event->orientation() == Qt::Horizontal) { 6 scrollHorizontally(numSteps); //水平滾動 7 } else { 8 scrollVertically(numSteps); //垂直滾動 9 } 10 event->accept(); //接收該事件 11 }
