From 8d1de6c752562e631b1da907e2ced06d302d2e5e Mon Sep 17 00:00:00 2001 From: zhangjiarui Date: Mon, 21 Sep 2026 19:25:16 +0800 Subject: [PATCH] fix(reader): fix scrollbar invisible in dark mode by forcing light scrollbar palette MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 移除无效的 ScrollBarActiveStyle(强加 State_Active 不影响 ChameleonStyle 的滑块取色逻辑); 2. 主题更新时强制两个滚动条的 QPalette::Base 为浅色,使滑块恒为深色; 3. 恢复 WA_TranslucentBackground,保持文档视图原有背景行为; 4. 保留 themeTypeChanged 同步,主题切换时重新应用滚动条调色板与视图背景; ===================================== 1. removed the ineffective ScrollBarActiveStyle (forcing State_Active does not affect ChameleonStyle's handle color logic); 2. forced QPalette::Base of both scrollbars to a light color on theme update so the handle is always drawn dark; 3. restored WA_TranslucentBackground to keep the original view background behavior; 4. kept the themeTypeChanged sync to re-apply scrollbar palette and view background on theme switch; Log: 修复深色模式下文档查看器滚动条透明不可见的问题,放大文档后滚动条清晰可辨 PMS: BUG-374553 --- reader/browser/SheetBrowser.cpp | 23 +++++++++++++++++++++++ reader/browser/SheetBrowser.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/reader/browser/SheetBrowser.cpp b/reader/browser/SheetBrowser.cpp index 0623f83f6..eac1725b1 100644 --- a/reader/browser/SheetBrowser.cpp +++ b/reader/browser/SheetBrowser.cpp @@ -45,6 +45,7 @@ DWIDGET_USE_NAMESPACE #define REPEAT_MOVE_DELAY 500 const qreal deltaManhattanLength = 12.0; + SheetBrowser::SheetBrowser(DocSheet *parent) : DGraphicsView(parent), m_sheet(parent) { setMouseTracking(true); @@ -93,6 +94,9 @@ SheetBrowser::SheetBrowser(DocSheet *parent) : DGraphicsView(parent), m_sheet(pa this->horizontalScrollBar()->setProperty("_d_slider_spaceLeft", 8); this->horizontalScrollBar()->setProperty("_d_slider_spaceRight", 8); this->horizontalScrollBar()->setAccessibleName("horizontalScrollBar"); + + connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &SheetBrowser::onUpdateTheme); + onUpdateTheme(); } SheetBrowser::~SheetBrowser() @@ -2060,3 +2064,22 @@ TextEditShadowWidget *SheetBrowser::getNoteEditWidget() const { return m_noteEditWidget; } + +void SheetBrowser::onUpdateTheme() +{ + DPalette plt = DGuiApplicationHelper::instance()->applicationPalette(); + + setPalette(plt); + setBackgroundBrush(QBrush(plt.itemBackground().color())); + + // 文档页面恒为浅色,而 DTK ChameleonStyle 依据滚动条 palette(Base) 的明暗 + // 决定滑块颜色:深色模式下 Base 为深色会绘制白色半透明滑块,在白色页面上 + // 不可见。此处强制 Base 为浅色,使滑块始终为深色,保证滚动条清晰可见。 + auto syncScrollBarPalette = [&plt](QScrollBar *bar) { + DPalette barPalette = plt; + 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 13802b727..66d6cfedf 100644 --- a/reader/browser/SheetBrowser.h +++ b/reader/browser/SheetBrowser.h @@ -550,6 +550,12 @@ private slots: */ void onRemoveIconAnnotSelect(); + /** + * @brief onUpdateTheme + * 主题变化时更新调色板,确保深色模式下滚动条颜色正确 + */ + void onUpdateTheme(); + private: /** * @brief calcIconAnnotRect