在使用QGraphicsView时,有时候会遇到鼠标事件被QGraphicsView吃掉的情况。为了避免这种情况发生,可以采取以下几种方法:
void MyGraphicsView::mousePressEvent(QMouseEvent *event)
{
QGraphicsView::mousePressEvent(event);
// 处理自己的鼠标按下事件
}
myGraphicsView->setInteractive(true);
class OverlayWidget : public QWidget
{
protected:
void mousePressEvent(QMouseEvent *event) override
{
// 处理鼠标按下事件
QGraphicsView *view = qobject_cast<QGraphicsView *>(parent());
if (view)
{
QMouseEvent mappedEvent(event->type(), view->mapFromGlobal(event->globalPos()), event->button(), event->buttons(), event->modifiers());
QApplication::sendEvent(view->scene(), &mappedEvent);
}
}
};
然后将OverlayWidget添加到QGraphicsView上:
OverlayWidget *overlay = new OverlayWidget(myGraphicsView);
overlay->setAttribute(Qt::WA_TransparentForMouseEvents);
myGraphicsView->setViewport(overlay);
通过以上方法,可以避免鼠标事件被QGraphicsView吃掉,确保能够正常处理鼠标事件。
领取专属 10元无门槛券
手把手带您无忧上云