阻止 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。

这将防止鼠标移动事件被传播。根据您想要执行的操作,您还可以重新实现 mouseDoubleClickEventmousePressEventmouseReleasEventwheelEvent 函数。他们所有的函数定义都在QGraphicsView 文档中。

【讨论】:

在 PySide 的情况下它不起作用。如果我覆盖任何与鼠标相关的方法并且不显式调用父方法,则 QGraphicsView 的滚动功能不起作用。如果我明确调用它并调用 accept 事件方法,它什么也不做 - 仍然传播到场景。【参考方案2】:

根据 Qt 文档,您需要实际子类化 QGraphicsView 并为您的新子类重新实现 mouseMoveEvent() 方法。

参考:http://doc.qt.io/qt-5/qgraphicsview.html#dragMode-prop

【讨论】:

以上是关于阻止 QGraphicsView 的一些鼠标事件的主要内容,如果未能解决你的问题,请参考以下文章

重新实现鼠标事件时对 QGraphicsView 的奇怪影响

怎么在QGraphicsView上实现鼠标移动事件

QGraphicsView右键鼠标按下事件问题

QgraphicsView 橡皮筋拖动效果缩放行为

QGraphicsView 中的 MouseMoveEvent

如何在 QGraphicsView 中启用平移和缩放