【问题标题】:Stealing wheelEvents from a QScrollArea从 QScrollArea 中窃取 wheelEvents
【发布时间】:2010-11-04 01:28:45
【问题描述】:

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

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

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

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

    问题解决了

    【讨论】:

    • 不,问题根本没有解决……我到了这里,遇到同样的问题,但没有解决方案。
    【解决方案2】:

    您可以在自定义类中安装 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 2013-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多