先执行QGraphicsItem鼠标事件接着执行QGraphicsView鼠标事件 C++
时间: 2023-09-16 08:13:22 浏览: 79
在Qt中,QGraphicsItem和QGraphicsView都有自己的鼠标事件处理函数。如果你想先处理QGraphicsItem的鼠标事件,然后再处理QGraphicsView的鼠标事件,可以使用以下几种方法:
1. 重载QGraphicsView的mousePressEvent、mouseReleaseEvent、mouseMoveEvent等事件处理函数,在这些函数中,首先调用QGraphicsScene::itemAt()方法来获取当前鼠标所在的QGraphicsItem对象,然后再根据需要进行处理。
2. 在QGraphicsItem的mousePressEvent、mouseReleaseEvent、mouseMoveEvent等事件处理函数中,调用QGraphicsView::viewport()方法获取QGraphicsView的视口对象,然后通过QMouseEvent::ignore()函数来告诉QGraphicsView不要处理这个事件。
3. 通过QCoreApplication::sendEvent()函数来手动发送鼠标事件。首先在QGraphicsItem的事件处理函数中调用QCoreApplication::sendEvent()函数向QGraphicsView发送一个QMouseEvent对象,然后在QGraphicsView的事件处理函数中再处理这个事件。
需要注意的是,在以上三种方法中,如果QGraphicsItem处理了鼠标事件并且将事件标记为已处理,则QGraphicsView将不会再收到这个事件。如果你需要在QGraphicsView中也处理这个事件,可以在QGraphicsItem的事件处理函数中调用QMouseEvent::accept()函数,告诉QGraphicsView这个事件已经被处理过了,但是还需要继续传递给其他对象处理。
阅读全文