From 8d38c58d6ff9ebf4bc1546e4dde0e7604bf94f62 Mon Sep 17 00:00:00 2001 From: Vitali Graf Date: Fri, 2 Jan 2026 21:06:37 +0100 Subject: [PATCH] Feature: Zoom per STRG+Mausrad im PDF-Viewer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue Zoom-Funktion für bessere Bedienung: - STRG+Mausrad rauf: Zoom vergrößern (+10% pro Schritt) - STRG+Mausrad runter: Zoom verkleinern (-10% pro Schritt) - Respektiert Slider-Grenzen (25% bis 300%) - Funktioniert nur wenn PDF geladen ist (Slider aktiviert) Implementierung: - Event-Filter für scrollArea_2 (PDF-Viewer) - eventFilter() Methode fängt Wheel-Events ab - Prüft auf ControlModifier (STRG-Taste) - Aktualisiert Zoom-Slider (triggert automatisch apply_zoom) Technische Details: - _setup_scroll_area_zoom() in __init__ - installEventFilter(self) für scrollArea_2 - QEvent.Type.Wheel mit Qt.KeyboardModifier.ControlModifier - Zoom-Schrittweite: 10% 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- src/ui/MainWindow.py | 56 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/src/ui/MainWindow.py b/src/ui/MainWindow.py index 3d27910..4d2e97e 100644 --- a/src/ui/MainWindow.py +++ b/src/ui/MainWindow.py @@ -5,7 +5,7 @@ import hashlib import logging from typing import List -from PySide6.QtCore import Qt, QSize, QThread, Signal, QUrl +from PySide6.QtCore import Qt, QSize, QThread, Signal, QUrl, QEvent from PySide6.QtGui import QCursor, QPixmap, QPainter, QAction, QIcon, QDragEnterEvent, QDropEvent, QDesktopServices from PySide6.QtWidgets import ( QLabel, @@ -575,6 +575,9 @@ class MainWindow(QMainWindow): # Drag&Drop für TreeWidget aktivieren self._setup_drag_drop() + # Zoom per Mausrad (STRG+Mausrad) für PDF-Viewer aktivieren + self._setup_scroll_area_zoom() + # Gespeicherte UI-Zustände wiederherstellen self._restore_ui_state() @@ -2854,6 +2857,16 @@ class MainWindow(QMainWindow): except Exception as e: logger.error(f"Fehler beim Aktivieren von Drag&Drop: {e}") + def _setup_scroll_area_zoom(self): + """Aktiviert Zoom per STRG+Mausrad für die PDF-ScrollArea.""" + try: + # Installiere Event-Filter für scrollArea_2 (PDF-Viewer) + self.ui.scrollArea_2.installEventFilter(self) + logger.debug("Zoom per STRG+Mausrad für PDF-Viewer aktiviert") + + except Exception as e: + logger.error(f"Fehler beim Aktivieren von Scroll-Area-Zoom: {e}") + def tree_drag_enter_event(self, event: QDragEnterEvent): """ Wird ausgeführt, wenn ein Drag-Vorgang über das TreeWidget beginnt. @@ -4804,6 +4817,47 @@ class MainWindow(QMainWindow): QMessageBox.critical(self, "Fehler", f"Konnte neue PDF nicht öffnen:\n{self.current_new_pdf_path}") logger.error(f"Fehler beim Öffnen der neuen PDF: {self.current_new_pdf_path}") + def eventFilter(self, obj, event): + """ + Event-Filter für Zoom per STRG+Mausrad im PDF-Viewer. + + Args: + obj: Das Objekt, das das Event erhalten hat + event: Das Event + + Returns: + True wenn Event behandelt wurde, sonst False + """ + # Prüfe ob Event von scrollArea_2 kommt und ein Wheel-Event ist + if obj == self.ui.scrollArea_2 and event.type() == QEvent.Type.Wheel: + # Prüfe ob STRG-Taste gedrückt ist + if event.modifiers() & Qt.KeyboardModifier.ControlModifier: + # Zoom-Schritte: 10% pro Mausrad-Klick + zoom_step = 10 + + # Mausrad-Delta (positiv = nach oben, negativ = nach unten) + delta = event.angleDelta().y() + + # Aktuellen Zoom-Wert holen + current_zoom = self.ui.zoom.value() + + # Neuen Zoom-Wert berechnen + if delta > 0: + # Zoom rein (rauf scrollen) + new_zoom = min(current_zoom + zoom_step, self.ui.zoom.maximum()) + else: + # Zoom raus (runter scrollen) + new_zoom = max(current_zoom - zoom_step, self.ui.zoom.minimum()) + + # Zoom-Slider aktualisieren (triggert automatisch apply_zoom) + self.ui.zoom.setValue(new_zoom) + + # Event als behandelt markieren + return True + + # Für alle anderen Events: Standard-Verarbeitung + return super().eventFilter(obj, event) + def closeEvent(self, event): """Wird beim Schließen der Anwendung aufgerufen.""" # UI-Zustände speichern