2009-06-18 29 views
1

我想將我的自定義小部件放到QScrollArea中,但在我的自定義小部件中,我重新實現了wheelEvent(e),它永遠不會被調用。從QScrollArea偷輪遊戲

我很好,滾動區域沒有鼠標滾輪滾動功能。我只需要這些wheelEvents來調用我的處理程序。我試圖在主窗口層面處理這些事件,但是當滾動部件處於其中一個極端並且無法進一步移動時,我只能得到它們,我需要所有這些。

繼承人的簡化版本我的代碼:

class custom(QWidget): 
    def __init__(self, parent=None): 
     super(custom, self).__init__(parent) 
     self.parent = parent 

    def wheelEvent(self,event): 
     print "Custom Widget's wheelEvent Handler" 

class mainw(QMainWindow): 
    def __init__(self, parent=None): 
     super(mainw, self).__init__(parent) 
     scroll = QScrollArea() 
     self.tw = thread_widget(scroll) 
     scroll.setWidget(self.tw) 
     self.setCentralWidget(scroll) 

    def wheelEvent(self,event): 
     print "Main Window's wheelEvent Handler" 

有人能就如何確定哪些事件處理程序獲取的事件在這種情況下給我解釋一下?

回答

0

我發現它與QObject的installEventFilter方法有關,但是我無法得到這個例子的工作,所以我說這個地獄,並完全改變了我的計劃。

問題解決

+0

沒有,問題不是在所有解決......我在這裏結束了,有同樣的問題安裝eventFilter,並沒有解決。 – nostradamus 2016-11-10 07:34:31

0

您可以在自定義類

class custom(QWidget): 
    def __init__(self, parent=None): 
     super(custom, self).__init__(parent) 
     self.parent = parent 
     self.installEventFilter(self) 

    def eventFilter(self, qobject, qevent): 
     qtype = qevent.type() 
     if qtype == QEvent.Wheel: 
      ... wheel event logic 
      return True 
     # parents event handler for all other events 
     return super(custom,self).eventFilter(qobject, qevent)