diff --git a/scribus/scribusview.cpp b/scribus/scribusview.cpp
index 70c93cbd25..3398b5764e 100644
--- a/scribus/scribusview.cpp
+++ b/scribus/scribusview.cpp
@@ -3158,7 +3158,12 @@ void ScribusView::wheelEvent(QWheelEvent *w)
 	if (w->modifiers() == Qt::ControlModifier)
 	{
 		FPoint mp = m_canvas->globalToCanvas(w->globalPos());
-		w->delta() > 0 ? slotZoomIn(mp.x(), mp.y() , true) : slotZoomOut(mp.x(), mp.y(), true);
+		wheelAccumulatedDelta += w->delta();
+		if (abs(wheelAccumulatedDelta) >= QWheelEvent::DefaultDeltasPerStep)
+		{
+			wheelAccumulatedDelta > 0 ? slotZoomIn(mp.x(), mp.y() , true) : slotZoomOut(mp.x(), mp.y(), true);
+			wheelAccumulatedDelta = 0;
+		}
 	}
 	else
 	{
diff --git a/scribus/scribusview.h b/scribus/scribusview.h
index a3bbc46ab9..512e06f87f 100644
--- a/scribus/scribusview.h
+++ b/scribus/scribusview.h
@@ -298,6 +298,7 @@ public slots: // Public slots
 	bool linkAfterDraw { false };
 	bool ImageAfterDraw { false };
 	QStack<ViewState> m_viewStates;
+	int wheelAccumulatedDelta { 0 };
 
 private slots:
 	void setZoom();
