1

我想将我的自定义小部件放在 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"

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

4

2 回答 2

0

我发现它与 QObject 的 installEventFilter 方法有关,但我无法让示例工作,所以我对这个说地狱并完全改变了我的计划。

问题解决了

于 2009-06-18T20:06:22.147 回答
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)
于 2013-11-11T23:09:18.000 回答