先执行QGraphicsItem鼠标事件再执行QGraphicsView鼠标事件 C++
时间: 2023-09-08 21:17:09 浏览: 104
在Qt中,QGraphicsView和QGraphicsItem都有处理鼠标事件的函数,分别为:
- QGraphicsView::mousePressEvent(QMouseEvent *event)
- QGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
如果你希望先执行QGraphicsItem的鼠标事件,再执行QGraphicsView的鼠标事件,可以在QGraphicsItem的鼠标事件函数中调用QGraphicsView的鼠标事件函数。具体实现可以参考以下代码:
```cpp
void MyGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// 先执行QGraphicsItem的鼠标事件处理代码
// ...
// 再调用QGraphicsView的鼠标事件处理函数
QGraphicsView *view = scene()->views().first(); // 获取第一个视图
if (view) {
// 将当前鼠标事件转换为视图坐标系下的事件
QMouseEvent *viewEvent = new QMouseEvent(event->type(),
view->mapFromScene(event->scenePos()),
event->button(),
event->buttons(),
event->modifiers());
// 调用QGraphicsView的鼠标事件函数
view->mousePressEvent(viewEvent);
delete viewEvent;
}
}
```
在这个例子中,我们先执行了QGraphicsItem的鼠标事件处理代码,然后获取了第一个关联的视图,并将当前鼠标事件转换为视图坐标系下的事件,最后调用了QGraphicsView的鼠标事件处理函数。这样就能够实现先执行QGraphicsItem的鼠标事件,再执行QGraphicsView的鼠标事件的效果了。
阅读全文