从QScrollArea窃取wheelEvent

时间:2009-06-18 16:20:34

标签: python pyqt

我想将自定义窗口小部件放在QScrollArea中,但在我的自定义窗口小部件中,我重新实现了wheelEvent(e),它永远不会被调用。

我很好用滚动区域没有鼠标滚轮功能。我只需要那些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"

有人可以向我解释在这种情况下如何确定哪个事件处理程序获取事件?

2 个答案:

答案 0 :(得分:0)

我发现它与QObject的installEventFilter方法有关,但是我无法让这个例子工作,所以我对此说了些什么,完全改变了我的计划。

问题解决了

答案 1 :(得分:0)

您可以在自定义类

中安装eventFilter
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)