Nya*_*uko 4 c++ qt qgraphicsview qgraphicsitem
情况是:
在A面QGraphicsView,我用它的doubleClickEvent功能来制作一个QGraphicsItem。我重写QGraphicsItem的mousePressEvent功能以仅打印qDebug信息。
但是,我发现的是:即使我双击创建它QGraphicsItem,也会调用新创建QGraphicsItem的mousePressEvent。
这将如何发生?我该怎么做才能避免这种情况?
QGraphicsView是一个小部件,因此具有doubleClickEvent。相反,QGraphicsItem不是小部件,但是具有mousePressEvent。
覆盖事件时,如果不希望将事件传播到其他对象,则需要接受事件以告知系统您已处理了该事件。
void MyGraphicsView::mouseDoubleClickEvent(QMouseEvent * event)
{
// Create a graphics item..
...
event->accept(); // tell the system that the event has been handled
}
Run Code Online (Sandbox Code Playgroud)
在不接受事件的情况下,双击将传递给QGraphicsScene,然后传递给QGraphicsItem。
如果您希望能够在单击场景的空白区域时双击以创建一个项目,但是如果双击某个项目使项目具有反应,则可以覆盖场景的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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
643 次 |
| 最近记录: |