QGraphicsItem QGraphicsView共同执行鼠标事件 C++
时间: 2023-09-16 21:06:41 浏览: 109
在 Qt 中,QGraphicsItem 和 QGraphicsView 都有处理鼠标事件的成员函数。为了让它们共同处理鼠标事件,你可以使用 QGraphicsView 的 viewport() 函数来获取它的视图窗口,然后将视图窗口的鼠标事件转发给场景中的 QGraphicsItem。
以下是一个示例代码:
```cpp
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
QGraphicsView::mousePressEvent(event);
// 将鼠标事件转发给场景中的所有项
QPointF scenePos = mapToScene(event->pos());
QList<QGraphicsItem*> items = scene()->items(scenePos);
for (QGraphicsItem* item : items) {
QGraphicsSceneMouseEvent sceneEvent(QEvent::GraphicsSceneMousePress);
sceneEvent.setScenePos(scenePos);
sceneEvent.setScreenPos(event->globalPos());
sceneEvent.setButton(event->button());
sceneEvent.setButtons(event->buttons());
sceneEvent.setModifiers(event->modifiers());
item->sceneEvent(&sceneEvent);
}
}
```
在这个示例代码中,我们重载了 QGraphicsView 的 mousePressEvent() 函数,并将它的事件转发给场景中的所有项。我们首先调用 QGraphicsView 的 mousePressEvent() 函数,以便处理视图中的其他逻辑。然后,我们使用 mapToScene() 函数将视图坐标转换为场景坐标,并获取该位置上的所有项。接着,我们创建了一个 QGraphicsSceneMouseEvent 对象,设置了它的参数,并将它发送给每个场景项的 sceneEvent() 函数。
请注意,这只是一个示例代码,你可能需要根据你的应用程序的需求进行调整。
阅读全文