From 0867636ea4b610292b9522375f7bf7f96b00a4da Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 10 Jun 2026 11:05:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(ela):=20=E7=BB=9F=E4=B8=80=E5=93=81?= =?UTF-8?q?=E7=89=8C=E5=BC=BA=E8=B0=83=E8=89=B2=20+=20=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E5=99=A8=E7=AE=AD=E5=A4=B4=E4=BF=AE=E5=A4=8D=20+=20=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=B8=AD=E6=80=A7=E5=8C=96=20+=20=E6=A0=91=E7=BC=A9?= =?UTF-8?q?=E8=BF=9B=E6=94=B6=E7=B4=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 配色根因: Ela 默认主色(#0067C0亮/#4CC2FF暗)与项目品牌蓝 #2D6CB5 是两种蓝, 互相打架。 - applyBrandAccent(): 用 ElaTheme::setThemeColor 把 Primary 设成品牌蓝(亮 #2D6CB5/暗 #5E9BD6, 含 Hover/Press 三态) → 所有 Ela 原生控件选中/激活/标题栏强调 + 本项目 QSS 共用一套蓝 - 切换器图标: #2D6CB5 → setThemedGlyph 中性主题色(蓝只留给选中/激活), 与面板图标一致 - 切换器箭头: 成员 QToolButton* → ElaToolButton*, setMenu 走 Ela 重载 → Ela 自绘清晰展开箭头 (之前去掉手加的▾后没箭头, 是因为基类 setMenu 不触发自绘) - 对象树缩进 20→14, 更紧凑 --- src/app/Theme.cpp | 12 ++++++++++++ src/app/Theme.hpp | 4 ++++ src/app/TopBar.cpp | 4 ++-- src/app/TopBar.hpp | 6 +++--- src/app/main.cpp | 1 + src/app/panels/ObjectTreePanel.cpp | 1 + 6 files changed, 23 insertions(+), 5 deletions(-) diff --git a/src/app/Theme.cpp b/src/app/Theme.cpp index b4da13f..f059bae 100644 --- a/src/app/Theme.cpp +++ b/src/app/Theme.cpp @@ -456,6 +456,18 @@ void applyTheme(QApplication& app) applyThemeMode(app, false); } +void applyBrandAccent() +{ + // 品牌蓝强调色。亮色用主色 #2D6CB5;暗色用同色相提亮版 #5E9BD6(深底上对比足够)。 + // Hover 略亮、Press 略深,三态成体系。设给 Ela 的 Primary,全 UI 选中/激活统一这一套。 + eTheme->setThemeColor(ElaThemeType::Light, ElaThemeType::PrimaryNormal, QColor(0x2D, 0x6C, 0xB5)); + eTheme->setThemeColor(ElaThemeType::Light, ElaThemeType::PrimaryHover, QColor(0x3E, 0x7B, 0xC0)); + eTheme->setThemeColor(ElaThemeType::Light, ElaThemeType::PrimaryPress, QColor(0x24, 0x5A, 0x9B)); + eTheme->setThemeColor(ElaThemeType::Dark, ElaThemeType::PrimaryNormal, QColor(0x5E, 0x9B, 0xD6)); + eTheme->setThemeColor(ElaThemeType::Dark, ElaThemeType::PrimaryHover, QColor(0x71, 0xA9, 0xDE)); + eTheme->setThemeColor(ElaThemeType::Dark, ElaThemeType::PrimaryPress, QColor(0x4E, 0x89, 0xC4)); +} + bool isDarkTheme() { return eTheme->getThemeMode() == ElaThemeType::Dark; diff --git a/src/app/Theme.hpp b/src/app/Theme.hpp index a4c4e08..b80f69e 100644 --- a/src/app/Theme.hpp +++ b/src/app/Theme.hpp @@ -90,6 +90,10 @@ void applyThemeMode(QApplication& app, bool dark); // 浅色主题快捷入口(= applyThemeMode(app,false))。经典壳启动调用一次。 void applyTheme(QApplication& app); +// 统一强调色:把 ElaTheme 主色(Primary)设为本项目品牌蓝(亮/暗各一档),让所有 Ela 原生控件 +// (选中/激活/标题栏强调) 与本项目 QSS 共用同一套蓝,消除"多种蓝打架"。在 eApp->init() 后调一次。 +void applyBrandAccent(); + // 当前 ElaTheme 是否暗色(供内联样式判断)。 bool isDarkTheme(); diff --git a/src/app/TopBar.cpp b/src/app/TopBar.cpp index 9903acf..12dcf77 100644 --- a/src/app/TopBar.cpp +++ b/src/app/TopBar.cpp @@ -155,7 +155,7 @@ TopBar::TopBar(QWidget* parent) : QWidget(parent) { // 工作空间切换器(Fluent ElaToolButton;数据驱动,初始占位文本待 setWorkspaces 填充)。 wsBtn_ = new ElaToolButton(this); wsBtn_->setObjectName(QStringLiteral("wsSwitcher")); - wsBtn_->setIcon(makeGlyph(Glyph::Workspace, QColor("#2D6CB5"), kWorkspaceIcon)); + setThemedGlyph(wsBtn_, Glyph::Workspace, kWorkspaceIcon); // 中性主题色(蓝只留给选中/激活) wsBtn_->setIconSize(QSize(kWorkspaceIcon, kWorkspaceIcon)); wsBtn_->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); wsBtn_->setPopupMode(QToolButton::InstantPopup); @@ -171,7 +171,7 @@ TopBar::TopBar(QWidget* parent) : QWidget(parent) { // 项目切换器(Fluent ElaToolButton;数据驱动)。 projBtn_ = new ElaToolButton(this); projBtn_->setObjectName(QStringLiteral("wsSwitcher")); - projBtn_->setIcon(makeGlyph(Glyph::Folder, QColor("#2D6CB5"), kWorkspaceIcon)); + setThemedGlyph(projBtn_, Glyph::Folder, kWorkspaceIcon); // 中性主题色 projBtn_->setIconSize(QSize(kWorkspaceIcon, kWorkspaceIcon)); projBtn_->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); projBtn_->setPopupMode(QToolButton::InstantPopup); diff --git a/src/app/TopBar.hpp b/src/app/TopBar.hpp index 662bed6..84dc25d 100644 --- a/src/app/TopBar.hpp +++ b/src/app/TopBar.hpp @@ -3,7 +3,7 @@ #include #include "repo/RepoTypes.hpp" -class QToolButton; +class ElaToolButton; namespace geopro::app { @@ -28,8 +28,8 @@ signals: void logoutRequested(); // 头像菜单「退出登录」 private: - QToolButton* wsBtn_ = nullptr; - QToolButton* projBtn_ = nullptr; + ElaToolButton* wsBtn_ = nullptr; + ElaToolButton* projBtn_ = nullptr; }; } // namespace geopro::app diff --git a/src/app/main.cpp b/src/app/main.cpp index 7b3dd98..11d02a5 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1032,6 +1032,7 @@ int main(int argc, char* argv[]) // ElaApplication:Fluent 主题/字体/动画基建。无条件初始化——登录窗与各面板已 Ela 化, // 两种壳都需要它(登录发生在选壳之前)。Ela 控件跟随 ElaTheme;标准控件仍由下面 QSS 接管。 eApp->init(); + geopro::app::applyBrandAccent(); // 统一品牌强调色(Ela Primary),全 UI 选中/激活一套蓝 // 专业主题(Fusion + 调色板 + 全局样式表):标准控件外观,登录窗与工作台共用。 // 跟随 ElaTheme 初始模式(可能随系统为暗),使登录窗与标准控件明暗一致(review M2)。 diff --git a/src/app/panels/ObjectTreePanel.cpp b/src/app/panels/ObjectTreePanel.cpp index a550089..8afce22 100644 --- a/src/app/panels/ObjectTreePanel.cpp +++ b/src/app/panels/ObjectTreePanel.cpp @@ -41,6 +41,7 @@ ObjectTreePanel::ObjectTreePanel(QWidget* parent) : QWidget(parent) { tree_ = new ElaTreeView(this); // Fluent 树视图(自绘展开/折叠指示,随主题) tree_->setHeaderHidden(true); + tree_->setIndentation(14); // 默认缩进偏大,收紧更紧凑协调 model_ = new QStandardItemModel(tree_); tree_->setModel(model_); lay->addWidget(tree_, 1);