diff --git a/include/ui/graphicsview.h b/include/ui/graphicsview.h index fc4baaad..d4fef2ec 100644 --- a/include/ui/graphicsview.h +++ b/include/ui/graphicsview.h @@ -22,6 +22,20 @@ public: } bool eventFilter(QObject *obj, QEvent *event) { + auto createLeftButtonMouseEvent = [](const QMouseEvent *srcEvent) { +// Some of QMouseEvent's position functions / constructors changed between Qt5 and Qt6. +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + return new QMouseEvent(srcEvent->type(), srcEvent->pos(), + Qt::MouseButton::LeftButton, + Qt::MouseButton::LeftButton, + Qt::KeyboardModifier::NoModifier); +#else + return new QMouseEvent(srcEvent->type(), srcEvent->position(), srcEvent->globalPosition(), + Qt::MouseButton::LeftButton, + Qt::MouseButton::LeftButton, + Qt::KeyboardModifier::NoModifier); +#endif + }; // The goal here is to enable pressing the middle mouse button to pan around the graphics view. // In Qt, the normal way to do this is via setDragMode(). However, that dragging mechanism only // works via the LEFT mouse button. To support middle mouse button, we have to hijack the middle @@ -33,26 +47,18 @@ public: if (obj == viewport()) { if (enableMiddleMouseButtonScroll) { if (event->type() == QEvent::MouseButtonPress) { - QMouseEvent *mouseEvent = static_cast(event); + auto mouseEvent = static_cast(event); if (mouseEvent->button() == Qt::MiddleButton) { this->setDragMode(QGraphicsView::DragMode::ScrollHandDrag); - QMouseEvent* pressEvent = new QMouseEvent( - QEvent::GraphicsSceneMousePress, - mouseEvent->pos(), Qt::MouseButton::LeftButton, - Qt::MouseButton::LeftButton, Qt::KeyboardModifier::NoModifier); - this->isMiddleButtonScrollInProgress = true; + QMouseEvent* pressEvent = createLeftButtonMouseEvent(mouseEvent); this->mousePressEvent(pressEvent); } - return false; } else if (event->type() == QEvent::MouseButtonRelease) { - QMouseEvent *mouseEvent = static_cast(event); - QMouseEvent* releaseEvent = new QMouseEvent( - QEvent::GraphicsSceneMouseRelease, - mouseEvent->pos(), Qt::MouseButton::LeftButton, - Qt::MouseButton::LeftButton, Qt::KeyboardModifier::NoModifier); + auto mouseEvent = static_cast(event); + QMouseEvent* releaseEvent = createLeftButtonMouseEvent(mouseEvent); this->mouseReleaseEvent(releaseEvent); this->setDragMode(desiredDragMode); this->isMiddleButtonScrollInProgress = false; @@ -73,11 +79,11 @@ public: } protected: - bool enableMiddleMouseButtonScroll; + bool enableMiddleMouseButtonScroll = false; private: - bool isMiddleButtonScrollInProgress; - DragMode desiredDragMode; + bool isMiddleButtonScrollInProgress = false; + DragMode desiredDragMode = DragMode::NoDrag; }; class NoScrollGraphicsView : public GraphicsView