情况是:
在QGraphicsView
旁边,我使用其doubleClickEvent
函数创建了QGraphicsItem
。
我重写了QGraphicsItem
mousePressEvent
函数,只需打印qDebug
信息。
但是,我发现:即使我只是双击创建QGraphicsItem
,也会调用新创建的QGraphicsItem
mousePressEvent
。
这会怎么样?我该怎么做才能防止这种情况发生?
答案 0 :(得分:4)
QGraphicsView是一个小部件,因此它有一个doubleClickEvent。相比之下,QGraphicsItem不是一个小部件,但有一个mousePressEvent。
当您覆盖事件时,如果您不希望它们传播到其他对象,则需要accept该事件告诉系统您已经处理过它。
void MyGraphicsView::mouseDoubleClickEvent(QMouseEvent * event)
{
// Create a graphics item..
...
event->accept(); // tell the system that the event has been handled
}
不接受该事件,双击将传递给QGraphicsScene,然后传递给QGraphicsItem。
如果您希望能够在单击场景的空白区域时双击以创建项目,但是如果双击某个项目,则会有项目作出反应,您可以覆盖该场景' s在决定是否创建项目或传递事件之前,mouseDoubleClickEvent代替视图并检查光标位置是否有项目。
void QGraphicsScene::mouseDoubleClickEvent( QGraphicsSceneMouseEvent * mouseEvent )
{
if(items(mouseEvent->scenePos()).isEmpty()) // if no items are at this position
{
// create new graphics item
...
mouseEvent->accept(); // don't propagate the event
}
// no items, so allow the event to propagate by doing nothing
}