fix: 独立窗口及任务栏图标适配深色模式

4 个独立窗口(AboutWindow/SettingsWindow/TextColorPicker/TrafficChartWindow)
新增 isDarkMode 属性,由 networkview.qml 检测后注入,各窗口定义深/浅双色方案。

深色模式检测从 DockPalette.iconTextPalette 改为 DTK.palette.window.hslLightness,
因 DockPalette 不随系统深色主题变化。

同时将 networkview.qml 任务栏图标和 NetworkPopup 弹窗的颜色基从
DockPalette.iconTextPalette 改为 DTK.palette.windowText,修复深色模式
下黑底黑字、浅色模式下白底白字的问题。
This commit is contained in:
2026-07-24 09:30:18 +08:00
parent 42028d93bd
commit c614df5fbe
7 changed files with 219 additions and 116 deletions
+30 -14
View File
@@ -3,9 +3,10 @@
// SPDX-License-Identifier: LGPL-3.0-or-later
// 字体颜色选择器:用于设置窗口,提供预设色板与"跟随系统"选项
// 设计要点:白色圆角卡片与设置窗口其他分区视觉一致;圆形色块 22x22,
// 当前选中色加 2px 深色边框高亮;点击只发射 colorSelected 信号,
// 由父层(networkview.qml)回写 currentColor 并同步到 C++ 后端持久化
// 设计要点:圆角卡片与设置窗口其他分区视觉一致;圆形色块 22x22,
// 当前选中色加 2px 边框高亮(颜色随主题切换);点击只发射 colorSelected 信号,
// 由父层(SettingsWindow)回写 currentColor 并同步到 C++ 后端持久化
// 深/浅主题由 isDarkMode 切换(SettingsWindow 传入),默认浅色保证独立预览可用
// 属性语义:
// currentColor - 当前选中颜色字符串,空串表示"跟随系统"(默认)
// colorSelected(string) - 用户点击色块时发射,参数为空串或 #RRGGBB
@@ -27,12 +28,25 @@ Rectangle {
"#16A34A", "#1450A0", "#7C3AED", "#0891B2"
]
// 深色模式标记:由 SettingsWindow 传入;默认 false(浅色)保证独立预览可用
property bool isDarkMode: false
// ---- 主题感知颜色:isDarkMode 为 false 时取值与原浅色硬编码完全一致 ----
readonly property color cardBg: isDarkMode ? "#2A2A2A" : "#FFFFFF"
readonly property color lineColor: isDarkMode ? "#383838" : "#E0E0E0"
readonly property color ringColor: isDarkMode ? "#E0E0E0" : "#333333"
// "跟随系统"色块底色:深色模式下用比卡片更深的灰保持可辨识
readonly property color systemSwatchBg: isDarkMode ? "#202020" : "#F5F5F5"
Layout.fillWidth: true
Layout.preferredHeight: 52
color: "#ffffff"
color: root.cardBg
radius: 10
border.width: 1
border.color: "#e0e0e0"
border.color: root.lineColor
// Canvas 不随属性绑定自动重绘,主题切换时主动触发"跟随系统"斜线重绘
onIsDarkModeChanged: slashCanvas.requestPaint()
RowLayout {
anchors.fill: parent
@@ -47,19 +61,20 @@ Rectangle {
height: 26
radius: 13
color: "transparent"
// 当前选中态:2px 深色边框
// 当前选中态:2px 边框高亮(颜色随主题切换)
border.width: root.currentColor === modelData ? 2 : 0
border.color: "#333333"
border.color: root.ringColor
Rectangle {
anchors.centerIn: parent
width: 22
height: 22
radius: 11
// 白色色块在白卡上需细边框可见
// 白色色块在白卡上需细边框可见;深色模式下深色卡片上的黑色色块同理
color: modelData
border.width: modelData === "#FFFFFF" ? 1 : 0
border.color: "#e0e0e0"
border.width: (modelData === "#FFFFFF"
|| (root.isDarkMode && modelData === "#000000")) ? 1 : 0
border.color: root.lineColor
}
MouseArea {
@@ -78,24 +93,25 @@ Rectangle {
color: "transparent"
// currentColor 为空串时高亮(跟随系统选中态)
border.width: root.currentColor === "" ? 2 : 0
border.color: "#333333"
border.color: root.ringColor
Rectangle {
anchors.centerIn: parent
width: 22
height: 22
radius: 11
color: "#f5f5f5"
color: root.systemSwatchBg
border.width: 1
border.color: "#e0e0e0"
border.color: root.lineColor
// 斜线:表示"无自定义色/跟随系统"
Canvas {
id: slashCanvas
anchors.fill: parent
onPaint: {
var ctx = getContext("2d")
ctx.reset()
ctx.strokeStyle = "#999999"
ctx.strokeStyle = root.isDarkMode ? "#888888" : "#999999"
ctx.lineWidth = 2
ctx.beginPath()
ctx.moveTo(2, height - 2)