Merge pull request #521 from tiresiasfromthebai/imageviewer-wheel-zoom

Add Ctrl+wheel zoom to the Image Visualizer
This commit is contained in:
Ernie Pasveer
2026-08-14 17:12:48 -05:00
committed by GitHub
3 changed files with 30 additions and 0 deletions
+28
View File
@@ -9,6 +9,7 @@
#include <QtGui/QImageReader>
#include <QtGui/QImageWriter>
#include <QtGui/QPainter>
#include <QtGui/QWheelEvent>
#include <QtCore/QDebug>
#include <QtPrintSupport/QPrintDialog>
@@ -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<QWheelEvent*>(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);
+1
View File
@@ -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;
+1
View File
@@ -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.
```