2013-01-20 359 views
2

我有一個QListWidget,其中包含一些內容和活動滾動條。我希望在它之前收到它的輪子事件,以便我可以根據需要做一些事情。我嘗試執行eventFilter並將其安裝在上述QListWidget上,但無濟於事:我只收到期望的事件,如果它沒有被滾動區域消耗,即,如果它已經在鼠標滾輪旋轉的方向上滾動到其極限。使用滾動條攔截QListWidget的鼠標滾輪事件

我做錯了什麼?或者我應該採取其他措施來正確攔截事件?

+1

您可以嘗試重新實現QApplication :: notify方法,因爲在從系統到QObject的任何事件都會實現之前,它會變成這個方法。另外QEvent ::自發地告訴你,這個事件變成了操作系統。 – Milovidov

回答

1

如果我理解正確的,你只需要繼承QListWidget一些類,並實現wheelEvent處理這樣的:

class EListWidget : public QListWidget 
{ 
public: 
    EListWidget(QWidget *parent); 

private: 
    virtual void wheelEvent(QWheelEvent *event); 
}; 

...

void EListWidget::wheelEvent(QWheelEvent *event) 
{ 
    // to do any processing here if you want to do something before scrolling 

    // call base implementation 
    QListWidget::wheelEvent(event); 

    // to do some processing after scrolling. 
} 

小心事件 - > isAccepted( )狀態。

而且可以連接到滾動條(QAbstractSlider)槽:

空隙QAbstractSlider :: sliderMoved(int值)[信號]該信號 當sliderDown爲真並且滑塊移動被髮射。當用戶拖動滑塊時,通常會發生 。該值是新的 滑塊位置。即使關閉跟蹤 ,也會發出此信號。另請參見setTracking(),valueChanged(),isSliderDown(), sliderPressed()和sliderReleased()。