diff --git a/src/QImageViewer.cpp b/src/QImageViewer.cpp index 44106e4..717cd85 100644 --- a/src/QImageViewer.cpp +++ b/src/QImageViewer.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -36,6 +37,10 @@ QImageViewer::QImageViewer (QWidget* parent) : QWidget(parent) { _scrollArea->setWidget(_imageLabel); _scrollArea->setWidgetResizable(false); + // The scroll area consumes wheel events for scrolling, so watch its + // viewport to catch Ctrl+wheel for zooming. + _scrollArea->viewport()->installEventFilter(this); + layout->addWidget(_scrollArea); clearImage(); @@ -176,6 +181,29 @@ void QImageViewer::keyPressEvent (QKeyEvent* event) { } } +bool QImageViewer::eventFilter (QObject* object, QEvent* event) { + + // Ctrl+wheel over the image zooms in or out. A plain wheel keeps + // scrolling the image as usual. + if (object == _scrollArea->viewport() && event->type() == QEvent::Wheel) { + + QWheelEvent* wheelEvent = static_cast(event); + + if (wheelEvent->modifiers() & Qt::ControlModifier) { + + if (wheelEvent->angleDelta().y() > 0) { + zoomIn(); + }else if (wheelEvent->angleDelta().y() < 0) { + zoomOut(); + } + + return true; + } + } + + return QWidget::eventFilter(object, event); +} + void QImageViewer::enterEvent (QEnterEvent* event) { Q_UNUSED(event); diff --git a/src/QImageViewer.h b/src/QImageViewer.h index 197cf01..642e291 100644 --- a/src/QImageViewer.h +++ b/src/QImageViewer.h @@ -38,6 +38,7 @@ class QImageViewer : public QWidget { protected slots: void keyPressEvent (QKeyEvent* event); + bool eventFilter (QObject* object, QEvent* event) override; void enterEvent (QEnterEvent* event) override; void leaveEvent (QEvent* event) override; diff --git a/src/resources/help/ImageVisualizer.md b/src/resources/help/ImageVisualizer.md index 182b7b1..d2a4bde 100644 --- a/src/resources/help/ImageVisualizer.md +++ b/src/resources/help/ImageVisualizer.md @@ -78,5 +78,6 @@ Available Quick keys while in the Image Visualizer: '+' zoom in '-' zoom out ESC reset to default zoom level. + Ctrl+mouse wheel zoom in or out. ```