2013-08-02 88 views
0

我有我自己的子类QGraphicsScene,它隐藏在QGrapnhicsView之后(我没有覆盖它)。我的场景处理一些鼠标事件(双击和单击)。但在同一时间,我希望我的视图可以通过光标滚动(QtGui.QGraphicsView.ScrollHandDrag)。如果视图层上的鼠标事件已经导致滚动,不能冒泡到场景,我该如何阻止视图层上的鼠标事件?阻止QGraphicsView的某些鼠标事件

回答

0

您需要实施QGraphicsViewmouseMoveEvent功能并接受该事件。

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,mouseReleasEventwheelEvent函数。它们的所有函数定义均在QGraphicsView文档中。

+0

它不是在PySide的情况下工作。如果我覆盖任何与鼠标有关的方法,并且不显式调用父级的方法,QGraphicsView的滚动功能不起作用。如果我明确地调用它并且调用事件的“接受”方法,它就什么都不做 - 仍然传播到现场。 –

+0

类型“重定义”错误。 –