先执行QGraphicsItem鼠标松开事件接着执行QGraphicsView鼠标松开事件 C++
时间: 2023-09-16 07:08:06 浏览: 77
在Qt中,QGraphicsView继承自QWidget,而QGraphicsItem继承自QGraphicsObject。因此,当在QGraphicsView中鼠标松开时,会首先调用QGraphicsView的mouseReleaseEvent(),然后再调用QGraphicsScene的mouseReleaseEvent(),最后才调用QGraphicsItem的mouseReleaseEvent()。
如果你想先执行QGraphicsItem的鼠标松开事件,可以使用eventFilter()函数来拦截QGraphicsView的鼠标松开事件,并在其中调用QGraphicsItem的mouseReleaseEvent()。以下是一个示例:
```cpp
bool MyGraphicsItem::eventFilter(QObject* obj, QEvent* event)
{
if(event->type() == QEvent::MouseButtonRelease)
{
QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
if(mouseEvent->button() == Qt::LeftButton)
{
mouseReleaseEvent(mouseEvent);
return true;
}
}
return QObject::eventFilter(obj, event);
}
void MyGraphicsView::mouseReleaseEvent(QMouseEvent* event)
{
QGraphicsView::mouseReleaseEvent(event);
}
void MyGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
QGraphicsScene::mouseReleaseEvent(event);
}
void MyGraphicsItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
// 处理鼠标松开事件
}
```
在这个示例中,我们重写了QGraphicsItem的eventFilter()函数,在其中拦截QGraphicsView的鼠标松开事件,并调用QGraphicsItem的mouseReleaseEvent()函数处理事件。在QGraphicsView和QGraphicsScene中,我们只需要调用父类的mouseReleaseEvent()函数即可。
阅读全文