diff --git a/reader/browser/SheetBrowser.cpp b/reader/browser/SheetBrowser.cpp index 8a7703425..9a30f1550 100644 --- a/reader/browser/SheetBrowser.cpp +++ b/reader/browser/SheetBrowser.cpp @@ -118,7 +118,11 @@ SheetBrowser::SheetBrowser(DocSheet *parent) : DGraphicsView(parent), m_sheet(pa QPalette pal = viewport()->palette(); pal.setColor(viewport()->backgroundRole(), EyeProtectionManager::instance()->viewportBackgroundColor()); viewport()->setPalette(pal); - + + // 主题切换时同步滚动条调色板,保证深色模式下滑块可见 + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &SheetBrowser::onUpdateTheme); + onUpdateTheme(); + qCDebug(appLog) << "SheetBrowser constructor completed"; } @@ -2474,3 +2478,18 @@ void SheetBrowser::restoreScrollPosition(float position) vBar->setValue(value); qCDebug(appLog) << "restoreScrollPosition set value=" << value << "-> after val=" << vBar->value(); } + +void SheetBrowser::onUpdateTheme() +{ + // 文档页面与视口背景恒为浅色,而 DTK ChameleonStyle 依据滚动条 palette(Base) + // 的明暗决定滑块颜色:深色模式下 Base 为深色会绘制白色半透明滑块,在浅色 + // 背景上不可见。此处强制 Base 为浅色,使滑块始终为深色,保证滚动条清晰可见。 + const QPalette appPalette = DGuiApplicationHelper::instance()->applicationPalette(); + auto syncScrollBarPalette = [&appPalette](QScrollBar *bar) { + QPalette barPalette = appPalette; + barPalette.setColor(QPalette::Base, Qt::white); + bar->setPalette(barPalette); + }; + syncScrollBarPalette(verticalScrollBar()); + syncScrollBarPalette(horizontalScrollBar()); +} diff --git a/reader/browser/SheetBrowser.h b/reader/browser/SheetBrowser.h index f8de05115..f1ffe99dc 100644 --- a/reader/browser/SheetBrowser.h +++ b/reader/browser/SheetBrowser.h @@ -579,6 +579,12 @@ private slots: */ void onRemoveIconAnnotSelect(); + /** + * @brief onUpdateTheme + * 主题变化时更新滚动条调色板,确保深色模式下滚动条颜色正确 + */ + void onUpdateTheme(); + private: /** * @brief calcIconAnnotRect