先执行QGraphicsItem鼠标事件再执行QGraphicsView鼠标事件 C++
时间: 2023-09-11 19:08:11 浏览: 79
在Qt中,QGraphicsView是QGraphicsItem的视图,因此QGraphicsView和QGraphicsItem都可以接收鼠标事件,但是它们的事件处理顺序不同。
默认情况下,QGraphicsItem会首先接收到鼠标事件,然后将其传递给QGraphicsView。如果您需要先处理QGraphicsView的鼠标事件,可以通过以下方式实现:
1. 重写QGraphicsView的mousePressEvent、mouseMoveEvent、mouseReleaseEvent函数,并在其中调用QGraphicsScene的对应事件处理函数,如:
```
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
QGraphicsView::mousePressEvent(event);
scene()->mousePressEvent(event);
}
```
2. 将QGraphicsItem的setAcceptedMouseButtons函数设置为Qt::NoButton,这将使QGraphicsItem忽略所有鼠标事件,并将其传递给QGraphicsView。例如:
```
MyGraphicsItem::MyGraphicsItem()
{
setAcceptedMouseButtons(Qt::NoButton);
}
```
这样,当鼠标事件发生时,QGraphicsView会首先接收到它们,并且可以在其事件处理函数中进行处理。然后,它将事件传递给QGraphicsScene,以便QGraphicsItem也可以处理它们。
阅读全文