可视化面板:全方位事件过滤器劫持,彻底阻断Ctrl+滚轮的滚动穿透
This commit is contained in:
@ -864,13 +864,13 @@ class ImageViewerWidget(QWidget):
|
|||||||
self.original_btn.setToolTip("原始大小")
|
self.original_btn.setToolTip("原始大小")
|
||||||
toolbar.addWidget(self.original_btn)
|
toolbar.addWidget(self.original_btn)
|
||||||
|
|
||||||
self.hint_label = QLabel("💡 提示: Ctrl+滚轮 缩放 | 滚轮 上下移动 | 拖拽 平移")
|
self.hint_label = QLabel("💡 提示: 按住 Ctrl+滚轮 可以实现放大缩小")
|
||||||
self.hint_label.setStyleSheet("""
|
self.hint_label.setStyleSheet("""
|
||||||
QLabel {
|
QLabel {
|
||||||
color: #888888;
|
color: #444444;
|
||||||
font-size: 12px;
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
padding-left: 15px;
|
padding-left: 15px;
|
||||||
font-style: italic;
|
|
||||||
}
|
}
|
||||||
""")
|
""")
|
||||||
toolbar.addWidget(self.hint_label)
|
toolbar.addWidget(self.hint_label)
|
||||||
@ -892,6 +892,13 @@ class ImageViewerWidget(QWidget):
|
|||||||
self.image_label.setStyleSheet("background-color: white;")
|
self.image_label.setStyleSheet("background-color: white;")
|
||||||
|
|
||||||
self.scroll_area.setWidget(self.image_label)
|
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)
|
layout.addWidget(self.scroll_area, 1)
|
||||||
|
|
||||||
status_layout = QHBoxLayout()
|
status_layout = QHBoxLayout()
|
||||||
@ -960,21 +967,24 @@ class ImageViewerWidget(QWidget):
|
|||||||
self.image_label.setPixmap(scaled_pixmap)
|
self.image_label.setPixmap(scaled_pixmap)
|
||||||
self._pending_scale = None
|
self._pending_scale = None
|
||||||
|
|
||||||
def wheelEvent(self, event):
|
def eventFilter(self, obj, event):
|
||||||
"""鼠标滚轮缩放与滚动 - Ctrl+滚轮缩放,纯滚轮上下滚动"""
|
from PyQt5.QtCore import QEvent, Qt
|
||||||
|
|
||||||
|
if event.type() == QEvent.Wheel:
|
||||||
if event.modifiers() == Qt.ControlModifier:
|
if event.modifiers() == Qt.ControlModifier:
|
||||||
|
if obj is self.scroll_area.viewport() or obj is self.image_label:
|
||||||
delta = event.angleDelta().y()
|
delta = event.angleDelta().y()
|
||||||
if delta > 0:
|
if delta > 0:
|
||||||
if self.scale_factor < 5.0:
|
if getattr(self, 'scale_factor', 1.0) < 5.0:
|
||||||
self.scale_factor = min(self.scale_factor * 1.1, 5.0)
|
self.scale_factor = min(self.scale_factor * 1.1, 5.0)
|
||||||
self.update_image_display()
|
self.update_image_display()
|
||||||
else:
|
else:
|
||||||
if self.scale_factor > 0.1:
|
if getattr(self, 'scale_factor', 1.0) > 0.1:
|
||||||
self.scale_factor = max(self.scale_factor / 1.1, 0.1)
|
self.scale_factor = max(self.scale_factor / 1.1, 0.1)
|
||||||
self.update_image_display()
|
self.update_image_display()
|
||||||
event.accept()
|
return True
|
||||||
else:
|
|
||||||
super().wheelEvent(event)
|
return super().eventFilter(obj, event)
|
||||||
|
|
||||||
def zoom_in(self):
|
def zoom_in(self):
|
||||||
"""放大"""
|
"""放大"""
|
||||||
|
|||||||
Reference in New Issue
Block a user