从QScrollArea获取wheelEvents
我想把自定义的小部件放进一个QScrollArea里,但在我的自定义小部件中,我重写了wheelEvent(e)这个方法,但它从来没有被调用过。
我并不在乎滚动区域没有鼠标滚轮滚动的功能。我只需要这些滚轮事件能调用我的处理函数。我试着在主窗口的层面上处理这些事件,但只有在滚动小部件到达某个极限的时候才会收到事件,那时候它也不能再移动了,我需要的是所有的事件。
这是我代码的一个简化版本:
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
你可以在自己的自定义类里安装一个事件过滤器。
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)
0
我发现这个问题和QObject的installEventFilter方法有关,但我没能让示例代码正常运行,所以我决定不再纠结,彻底改变了我的计划。
问题解决了。