先执行QGraphicsItem鼠标事件再执行QGraphicsView鼠标事件 C++
时间: 2023-09-06 20:14:55 浏览: 62
现QGraphicsItem的鼠标事
在 Qt 中,QGraphicsView 和 QGraphicsItem 都有它们自己的鼠标事件处理函数。当一个鼠标事件发生时,它会首先被发送给 QGraphicsItem,如果 QGraphicsItem 没有处理该事件,则该事件会被发送给 QGraphicsView。
如果你想让 QGraphicsItem 先处理鼠标事件,可以在 QGraphicsView 的 mousePressEvent()、mouseMoveEvent() 和 mouseReleaseEvent() 函数中调用 QGraphicsScene::itemAt() 函数,以获取鼠标事件所在的 QGraphicsItem。然后,你可以手动调用该 QGraphicsItem 的 mousePressEvent()、mouseMoveEvent() 和 mouseReleaseEvent() 函数来处理该事件。
下面是一个示例代码:
```cpp
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
// 获取鼠标事件所在的 QGraphicsItem
QGraphicsItem *item = scene()->itemAt(mapToScene(event->pos()), transform());
// 如果 QGraphicsItem 处理了该事件,直接返回
if (item && item->isUnderMouse() && item->isEnabled() && item->scene() == scene()) {
item->mousePressEvent(event);
return;
}
// 否则,交给 QGraphicsView 处理
QGraphicsView::mousePressEvent(event);
}
```
同样的,你也可以在 QGraphicsView 的 mouseMoveEvent() 和 mouseReleaseEvent() 函数中实现相似的逻辑。
阅读全文