QT中滾輪事件QWheelEvent實例


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 4int 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  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM