我有自己的QGraphicsScene
子类位于QGrapnhicsView
后面(我没有覆盖它)。我的场景处理一些鼠标事件(双击和单击)。但同时我希望我的视图可以通过光标(QtGui.QGraphicsView.ScrollHandDrag
)滚动。如果视图层上的鼠标事件已经导致滚动,我该如何阻止它,以免冒泡到场景中?
您需要从QGraphicsView实现mouseMoveEvent
函数并接受事件。
protected:
virtual void QGraphicsView::mouseMoveEvent(QMouseEvent * event)
{
QPoint mouseLocation = event->pos();
// Do stuff
event->accept();
}
接受鼠标事件会阻止父类处理该事件。
这将阻止鼠标移动事件的传播。根据您想要执行的操作,您还可以重新实现mouseDoubleClickEvent
、mousePressEvent
、mouseReleasEvent
或wheelEvent
函数。它们的所有函数定义都在QGraphicsView文档中。
根据Qt文档,您需要实际对QGraphicsView
进行子类化,并为新的子类重新实现mouseMoveEvent()
方法。
参考:http://doc.qt.io/qt-5/qgraphicsview.html#dragMode-道具