From ca12517d41c8deb22a659c0111343774319c2bcc Mon Sep 17 00:00:00 2001 From: DXC Date: Fri, 8 May 2026 16:42:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96=E9=9D=A2=E6=9D=BF?= =?UTF-8?q?=EF=BC=9A=E5=85=A8=E6=96=B9=E4=BD=8D=E4=BA=8B=E4=BB=B6=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E5=99=A8=E5=8A=AB=E6=8C=81=EF=BC=8C=E5=BD=BB=E5=BA=95?= =?UTF-8?q?=E9=98=BB=E6=96=ADCtrl+=E6=BB=9A=E8=BD=AE=E7=9A=84=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E7=A9=BF=E9=80=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gui/panels/visualization_panel.py | 48 ++++++++++++++++----------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/gui/panels/visualization_panel.py b/src/gui/panels/visualization_panel.py index 601b5da..0c5300a 100644 --- a/src/gui/panels/visualization_panel.py +++ b/src/gui/panels/visualization_panel.py @@ -864,13 +864,13 @@ class ImageViewerWidget(QWidget): self.original_btn.setToolTip("原始大小") toolbar.addWidget(self.original_btn) - self.hint_label = QLabel("💡 提示: Ctrl+滚轮 缩放 | 滚轮 上下移动 | 拖拽 平移") + self.hint_label = QLabel("💡 提示: 按住 Ctrl+滚轮 可以实现放大缩小") self.hint_label.setStyleSheet(""" QLabel { - color: #888888; - font-size: 12px; + color: #444444; + font-size: 14px; + font-weight: bold; padding-left: 15px; - font-style: italic; } """) toolbar.addWidget(self.hint_label) @@ -892,6 +892,13 @@ class ImageViewerWidget(QWidget): self.image_label.setStyleSheet("background-color: white;") self.scroll_area.setWidget(self.image_label) + + # 全方位事件拦截:给所有可能触发滚轮的子组件全部挂载过滤器 + self.image_label.installEventFilter(self) + self.scroll_area.viewport().installEventFilter(self) + self.scroll_area.installEventFilter(self) + self.scroll_area.verticalScrollBar().installEventFilter(self) + self.scroll_area.horizontalScrollBar().installEventFilter(self) layout.addWidget(self.scroll_area, 1) status_layout = QHBoxLayout() @@ -960,21 +967,24 @@ class ImageViewerWidget(QWidget): self.image_label.setPixmap(scaled_pixmap) self._pending_scale = None - def wheelEvent(self, event): - """鼠标滚轮缩放与滚动 - Ctrl+滚轮缩放,纯滚轮上下滚动""" - if event.modifiers() == Qt.ControlModifier: - delta = event.angleDelta().y() - if delta > 0: - if self.scale_factor < 5.0: - self.scale_factor = min(self.scale_factor * 1.1, 5.0) - self.update_image_display() - else: - if self.scale_factor > 0.1: - self.scale_factor = max(self.scale_factor / 1.1, 0.1) - self.update_image_display() - event.accept() - else: - super().wheelEvent(event) + def eventFilter(self, obj, event): + from PyQt5.QtCore import QEvent, Qt + + if event.type() == QEvent.Wheel: + if event.modifiers() == Qt.ControlModifier: + if obj is self.scroll_area.viewport() or obj is self.image_label: + delta = event.angleDelta().y() + if delta > 0: + if getattr(self, 'scale_factor', 1.0) < 5.0: + self.scale_factor = min(self.scale_factor * 1.1, 5.0) + self.update_image_display() + else: + if getattr(self, 'scale_factor', 1.0) > 0.1: + self.scale_factor = max(self.scale_factor / 1.1, 0.1) + self.update_image_display() + return True + + return super().eventFilter(obj, event) def zoom_in(self): """放大"""