fix: step12 图像预览横向滚动条被挤出视口底部

根因: QScrollArea.setWidgetResizable(True) 强制 QLabel 填充视口,
  与缩放后 QLabel 的 pixmap 固有尺寸冲突,滚动条布局异常。

修复:
  1. setWidgetResizable(False) — QLabel 保持 pixmap 自然尺寸
  2. QScrollArea SizePolicy → Expanding×Expanding (受父布局约束)
  3. ScrollBarPolicy → AsNeeded (显式设置)
  4. QLabel SizePolicy → Ignored (按内容自适应大小)

缩放行为:
  - 放大超出视口 → 自动出现滚动条
  - 缩小/适应窗口 → QLabel 自动缩至 pixmap 尺寸, 无滚动条
This commit is contained in:
duxin
2026-07-08 15:24:44 +08:00
parent 757741c6a9
commit 197f58c187

View File

@ -978,12 +978,18 @@ class ImageViewerWidget(QWidget):
layout.addLayout(toolbar)
self.scroll_area = QScrollArea()
self.scroll_area.setWidgetResizable(True)
# setWidgetResizable(False): QLabel 保持自身 pixmap 固有尺寸,
# 放大时自然超出视口触发滚动条,而非被 QScrollArea 强制压缩
self.scroll_area.setWidgetResizable(False)
self.scroll_area.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.scroll_area.setStyleSheet("background-color: white;")
self.image_label = QLabel()
self.image_label.setAlignment(Qt.AlignCenter)
self.image_label.setStyleSheet("background-color: white;")
self.image_label.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
self.image_label.setStyleSheet("background-color: white;")
self.scroll_area.setWidget(self.image_label)