91 lines
4.9 KiB
C++
91 lines
4.9 KiB
C++
#pragma once
|
||
|
||
// 全局视觉主题(浅色专业方向):Fusion 风格 + 浅色 QPalette + 结构化 QSS。
|
||
// 仅外观——不改任何信号槽 / 渲染 / 数据逻辑。在 QApplication 构造后、弹登录窗前调用一次。
|
||
//
|
||
// 设计令牌(与登录窗、视图详情浮层共享,保证全项目一脉相承):
|
||
// 外壳底 #F4F6FA 面板白 #FFFFFF 抬升/表头 #EDF1F7
|
||
// 强调 #2D6CB5 悬停 #2862A6 按下 #234F87 选中行 #DCE9F8
|
||
// 文字 #1F2A3D 次要文字 #5A6B85 边框 #D5DBE5 强边框 #C2CCDA
|
||
// 危险 #C0392B
|
||
|
||
class QApplication;
|
||
|
||
namespace geopro::app {
|
||
|
||
// ── 排版令牌(全项目唯一字号阶 + 字重角色)──────────────────────────
|
||
// 各处 QSS 的 font-size / font-weight 一律引用这些值,不再散落硬编码 px。
|
||
// 阶比 ~1.18(body→title→heading),刻意拉开层级——避免 11/12/13/14
|
||
// 这类只差 1px 的"糊层级",让标题/正文/说明三档一眼可分。
|
||
// 单位:px(与全局 px 化的 QSS、固定像素行高对齐;后续若做无障碍字号
|
||
// 缩放再统一切 pt)。字重:400 正文 / 500 可交互激活 /
|
||
// 600 标签·标题 / 700 仅展示性大标题。
|
||
namespace type {
|
||
|
||
inline constexpr int kCaption = 12; // 徽标·提示·角色名·错误·副标题·字段标签
|
||
inline constexpr int kBody = 13; // 树/列表/菜单/正文(= 全局基准字号)
|
||
inline constexpr int kLabel = 13; // 表头·用户名等需加粗的同级标签(配 600)
|
||
inline constexpr int kTitle = 15; // 面板/停靠区/区段标题·主操作按钮
|
||
inline constexpr int kHeading = 18; // 视图/对话框级标题(预留)
|
||
inline constexpr int kDisplay = 24; // 登录品牌名(唯一展示性大字)
|
||
|
||
inline constexpr int kWeightRegular = 400;
|
||
inline constexpr int kWeightMedium = 500;
|
||
inline constexpr int kWeightSemibold = 600;
|
||
inline constexpr int kWeightBold = 700;
|
||
|
||
} // namespace type
|
||
|
||
// ── 间距令牌(全项目唯一间距阶)──────────────────────────────────
|
||
// 取代散落的 5/7/9/11/13/15/26 等任意值。这是密集专业工具的实际节奏
|
||
// (非外加的 8pt 网格):相邻档 2px 粒度,足够紧凑又不糊成一片。
|
||
// 用法:布局 setContentsMargins/setSpacing/addSpacing 与 QSS padding/margin
|
||
// 一律引用这些档;明显的奇数值就近归档(13/15→lg, 11→ml, 26→xxl)。
|
||
namespace space {
|
||
|
||
inline constexpr int kXxs = 2; // 发丝级:下划线偏移、滚动条边距
|
||
inline constexpr int kXs = 4; // 紧凑内边距、最小间隙
|
||
inline constexpr int kSm = 6; // 行内紧凑(控件竖向 padding)
|
||
inline constexpr int kMd = 8; // 标准间隔(最常用)
|
||
inline constexpr int kMl = 10; // 偏大行距(密集行/验证码行)
|
||
inline constexpr int kLg = 12; // 分组间隔、面板内左右边距
|
||
inline constexpr int kXl = 16; // 区块内边距
|
||
inline constexpr int kXxl = 24; // 区块间距、表单纵向边距
|
||
inline constexpr int kXxxl = 32; // 页面级留白(登录窗左右边距)
|
||
|
||
} // namespace space
|
||
|
||
// ── 圆角令牌(统一原先 4/5/6/7/8/9 共 6 档为 3 档)────────────────
|
||
// 圆形元素(头像等)用 直径/2 单独写字面量,不入档。
|
||
namespace radius {
|
||
|
||
inline constexpr int kSm = 6; // 按钮·输入·菜单项·滚动条·进度条
|
||
inline constexpr int kMd = 8; // 卡片·面板·对话框·菜单·分组框
|
||
inline constexpr int kPill = 9; // 数量徽标胶囊
|
||
|
||
} // namespace radius
|
||
|
||
// ── 语义色令牌(状态/反馈,产品语境:只在承载含义处用,不作装饰)──────────
|
||
// 文字值均针对白底面板(#FFFFFF)选深色,对比度 ≥4.5:1(正文级);与冷调中性
|
||
// 调色板调和。danger 沿用既有红,避免引入第二种红。
|
||
namespace semantic {
|
||
|
||
inline constexpr const char* kInfo = "#2D6CB5"; // 信息·进行中(= 品牌蓝)
|
||
inline constexpr const char* kSuccess = "#15803D"; // 成功·已完成(深绿)
|
||
inline constexpr const char* kWarning = "#B45309"; // 警告·需注意(深琥珀)
|
||
inline constexpr const char* kDanger = "#C0392B"; // 危险·错误(沿用既有红)
|
||
|
||
// 浅色填充(徽标/标签底色,配同族深色文字使用)。
|
||
inline constexpr const char* kWarningFill = "#FBEAD2"; // 警告底纹(配 kWarning 文字)
|
||
|
||
} // namespace semantic
|
||
|
||
// 应用专业主题(Fusion + 调色板 + 全局样式表)。dark=true 走暗色(P2 主题桥用)。
|
||
// 暗色复用同一 QSS 结构,仅按 kDarkMap 换色;幂等,可随主题切换重复调用。
|
||
void applyThemeMode(QApplication& app, bool dark);
|
||
|
||
// 浅色主题快捷入口(= applyThemeMode(app,false))。经典壳启动调用一次。
|
||
void applyTheme(QApplication& app);
|
||
|
||
} // namespace geopro::app
|