阻止 QGraphicsView 的一些鼠标事件
Posted
技术标签:
【中文标题】阻止 QGraphicsView 的一些鼠标事件【英文标题】:Block some mouse event of QGraphicsView 【发布时间】:2013-08-02 16:19:20 【问题描述】:我有自己的QGraphicsScene
子类位于QGrapnhicsView
后面(我没有覆盖它)。我的场景处理一些鼠标事件(双击和单击)。但同时我希望我的视图可以通过光标滚动(QtGui.QGraphicsView.ScrollHandDrag
)。如果它已经导致滚动,我怎么能阻止视图层上的鼠标事件,而不是冒泡到场景中?
【问题讨论】:
【参考方案1】:您需要从QGraphicsView 实现mouseMoveEvent
函数并接受该事件。
protected:
virtual void QGraphicsView::mouseMoveEvent(QMouseEvent * event)
QPoint mouseLocation = event->pos();
// Do stuff
event->accept();
接受鼠标事件prevents a parent class from handling that event。
这将防止鼠标移动事件被传播。根据您想要执行的操作,您还可以重新实现 mouseDoubleClickEvent
、mousePressEvent
、mouseReleasEvent
或 wheelEvent
函数。他们所有的函数定义都在QGraphicsView 文档中。
【讨论】:
在 PySide 的情况下它不起作用。如果我覆盖任何与鼠标相关的方法并且不显式调用父方法,则 QGraphicsView 的滚动功能不起作用。如果我明确调用它并调用accept
事件方法,它什么也不做 - 仍然传播到场景。【参考方案2】:
根据 Qt 文档,您需要实际子类化 QGraphicsView
并为您的新子类重新实现 mouseMoveEvent()
方法。
参考:http://doc.qt.io/qt-5/qgraphicsview.html#dragMode-prop
【讨论】:
以上是关于阻止 QGraphicsView 的一些鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章
重新实现鼠标事件时对 QGraphicsView 的奇怪影响