2009-06-18 28 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)