#include "graphicsview.h" // qt #include GraphicsView::GraphicsView(QWidget* parent) : QGraphicsView{parent} { init(); } GraphicsView::GraphicsView(QGraphicsScene* scene, QWidget* parent) : QGraphicsView{scene, parent} { init(); } void GraphicsView::wheelEvent(QWheelEvent* event) { setTransformationAnchor(GraphicsView::AnchorUnderMouse); QPoint pixels = event->pixelDelta(); QPoint degrees = event->angleDelta(); const auto oldScenePos = event->scenePosition(); const auto oldMapped = mapToScene(event->position().toPoint()); if (pixels.isNull() && degrees.isNull()) return; const double scaleMultiplier{1.1}; const auto steps = double(pixels.isNull() ? degrees.y() : pixels.y()); auto actualScale = std::abs(steps) * scaleMultiplier / double(QWheelEvent::DefaultDeltasPerStep); if (steps < 0) actualScale = 1 / actualScale; scale(actualScale, actualScale); event->accept(); } void GraphicsView::init() { setDragMode(QGraphicsView::ScrollHandDrag); setRenderHint(QPainter::Antialiasing, true); }