From 04b3a3176a6b753b8d65820a3a738b01501a6d50 Mon Sep 17 00:00:00 2001 From: Wuzzy Date: Thu, 8 Oct 2015 23:20:42 +0200 Subject: [PATCH] Implement zooming with menu and mouse wheel --- mainwindow.cpp | 2 ++ svgviewer.cpp | 18 ++++++++++++++++++ svgviewer.h | 12 ++++++++++++ 3 files changed, 32 insertions(+) diff --git a/mainwindow.cpp b/mainwindow.cpp index 00aeff5..103ae61 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -47,6 +47,8 @@ MainWindow::MainWindow(QWidget *parent) /* Signals and slots */ connect(actionQuit, SIGNAL(triggered()), this, SLOT(close())); connect(actionOpen, SIGNAL(triggered()), this, SLOT(openFileDialog())); + connect(actionZoomIn, SIGNAL(triggered()), svgViewer, SLOT(zoomIn())); + connect(actionZoomOut, SIGNAL(triggered()), svgViewer, SLOT(zoomOut())); } void MainWindow::openFileDialog() { diff --git a/svgviewer.cpp b/svgviewer.cpp index c3b26c3..f9e0dc2 100644 --- a/svgviewer.cpp +++ b/svgviewer.cpp @@ -30,3 +30,21 @@ void SVGViewer::openFile(QString fileName) { gScene->addItem(svgItem); } + +void SVGViewer::zoomIn() { + zoomChange(2); +} +void SVGViewer::zoomOut() { + zoomChange(0.5); +} + +void SVGViewer::zoomChange(qreal factor) { + scale(factor, factor); +} + +void SVGViewer::wheelEvent(QWheelEvent *event) +{ + qreal factor = qPow(1.2, event->delta() / 240.0); + zoomChange(factor); + event->accept(); +} diff --git a/svgviewer.h b/svgviewer.h index b2fe16c..c6fb8ee 100644 --- a/svgviewer.h +++ b/svgviewer.h @@ -4,15 +4,27 @@ #include #include #include +#include +#include class SVGViewer : public QGraphicsView { + Q_OBJECT + public: SVGViewer(QWidget *parent = 0); void openFile(QString fileName); +public slots: + void zoomIn(); + void zoomOut(); + protected: void paintEvent(QPaintEvent* event); + void wheelEvent(QWheelEvent* event); + +private slots: + void zoomChange(qreal factor); private: QGraphicsSvgItem* svgItem; -- 2.11.4.GIT