T-573 修复封面画廊候选图宽度

This commit is contained in:
chengma
2026-07-09 15:51:48 +08:00
parent 065ad349de
commit c3c79b63d4
3 changed files with 109 additions and 12 deletions
+45 -10
View File
@@ -2,7 +2,7 @@
from __future__ import annotations
from PySide6.QtCore import QEvent
from PySide6.QtCore import QEvent, QSize
from ..models import GenerateTaskTableModel
from ..widgets import *
@@ -188,13 +188,14 @@ class CoverGalleryDialog(QDialog):
self.status_label.setWordWrap(True)
layout.addWidget(self.status_label)
scroll = QScrollArea()
scroll.setObjectName("coverGalleryScrollArea")
scroll.setWidgetResizable(False)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
content = QWidget()
self.candidate_layout = QHBoxLayout(content)
self.candidate_scroll = QScrollArea()
self.candidate_scroll.setObjectName("coverGalleryScrollArea")
self.candidate_scroll.setWidgetResizable(False)
self.candidate_scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)
self.candidate_scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.candidate_content = QWidget()
self.candidate_content.setObjectName("coverGalleryCandidateContent")
self.candidate_layout = QHBoxLayout(self.candidate_content)
self.candidate_layout.setContentsMargins(0, 0, 0, 0)
self.candidate_layout.setSpacing(12)
if self.candidates:
@@ -207,8 +208,9 @@ class CoverGalleryDialog(QDialog):
empty_label.setMinimumSize(320, self.THUMBNAIL_SIZE)
empty_label.setAlignment(Qt.AlignCenter)
self.candidate_layout.addWidget(empty_label)
scroll.setWidget(content)
layout.addWidget(scroll, 1)
self._sync_candidate_content_size()
self.candidate_scroll.setWidget(self.candidate_content)
layout.addWidget(self.candidate_scroll, 1)
return panel
def _candidate_item(self, candidate_path, index):
@@ -252,6 +254,38 @@ class CoverGalleryDialog(QDialog):
layout.addStretch(1)
return item
def _sync_candidate_content_size(self):
layout = getattr(self, "candidate_layout", None)
content = getattr(self, "candidate_content", None)
if layout is None or content is None:
return
layout.activate()
margins = layout.contentsMargins()
spacing = max(0, layout.spacing())
hint = layout.sizeHint()
if self.candidates:
candidate_count = len(self.candidates)
min_width = (
margins.left()
+ margins.right()
+ candidate_count * (self.THUMBNAIL_SIZE + 16)
+ max(0, candidate_count - 1) * spacing
)
else:
min_width = margins.left() + margins.right() + 320
min_height = max(
self.THUMBNAIL_SIZE,
hint.height(),
content.minimumHeight(),
)
size = QSize(max(min_width, hint.width()), min_height)
content.setMinimumSize(size)
content.resize(size)
content.updateGeometry()
scroll = getattr(self, "candidate_scroll", None)
if scroll is not None:
scroll.updateGeometry()
def _sync_initial_selection(self):
for candidate_path, radio in self.candidate_buttons.items():
if _same_file(candidate_path, self.current_path):
@@ -560,6 +594,7 @@ class CoverGalleryDialog(QDialog):
empty_label.setMinimumSize(320, self.THUMBNAIL_SIZE)
empty_label.setAlignment(Qt.AlignCenter)
self.candidate_layout.addWidget(empty_label)
self._sync_candidate_content_size()
self._install_navigation_event_filters()
def _on_regenerate_progress(self, payload):