为什么我们不能以正常方式安装事件过滤器QAbstractScrollArea
:
obj->installEventFilter(this)
相反,我们应该在 QAbstractScrollArea::viewport()
上安装事件过滤器。为什么会导致这种方式?
为什么您认为不能在QAbstractScrollArea
上安装事件过滤器?可以,但这取决于您要获取的事件,视口或QAbstractScrolArea
的事件。
例如,有关void QAbstractScrollArea::contextMenuEvent(QContextMenuEvent *e)
的文档说:
contextMenuEvent
事件处理程序可以在子类中重新实现,以接收 viewport(( 小部件的上下文菜单事件。
因此,通过在QAbstractScrollArea
中安装事件过滤器,您应该会收到此事件。但是,当您想在视口小部件中接收鼠标按下或鼠标移动事件时,您应该在视口小部件中安装事件过滤器。