Feature: Zoom per STRG+Mausrad im PDF-Viewer

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 <noreply@anthropic.com>
This commit is contained in:
2026-01-02 21:06:37 +01:00
parent c55a628728
commit 8d38c58d6f
+55 -1
View File
@@ -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