From b56d2c203e81fa82668d4db7ceb8b25cea14fd28 Mon Sep 17 00:00:00 2001 From: KenanZhu <3471685733@qq.com> Date: Sun, 31 May 2026 18:57:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(theme):=20=E4=BF=AE=E5=A4=8D=20QSS=20?= =?UTF-8?q?=E4=B8=BB=E9=A2=98=E6=A0=B7=E5=BC=8F=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 QSpinBox/QDateEdit/QTimeEdit 的 ::up-button/::down-button/::up-arrow/::down-arrow 子控件样式,修复 spin button 箭头在 QSS 部分覆盖后退化渲染的问题 - 新增 QTreeWidget::indicator / QListWidget::indicator / QTableWidget::indicator 全状态样式,修复树控件中 CheckState 复选框因缺失 ::indicator 子控件而无法区分勾选状态的视觉 bug - 指示器勾选态颜色与主题色保持一致(BlueForest: #2dd4bf, LightLake: #0ea58a) - 同步深浅主题差异:移除 :hover:!selected 规则、统一 HeaderView padding、spin button 宽度及属性顺序 - up-arrow 注释 image:none 以还原原生箭头渲染 Co-Authored-By: Claude Opus 4.8 --- src/gui/resources/themes/BlueForest.qss | 152 ++++++++++++++++++++++-- src/gui/resources/themes/LightLake.qss | 148 ++++++++++++++++++++++- 2 files changed, 284 insertions(+), 16 deletions(-) diff --git a/src/gui/resources/themes/BlueForest.qss b/src/gui/resources/themes/BlueForest.qss index f6e10f1..0dfcaa3 100644 --- a/src/gui/resources/themes/BlueForest.qss +++ b/src/gui/resources/themes/BlueForest.qss @@ -7,7 +7,7 @@ * See the LICENSE file for details. * * - * AutoLibrary Official Style Theme : BlueForest + * AutoLibrary Official Theme : BlueForest */ /* ---- Global ---- */ @@ -116,6 +116,94 @@ QPlainTextEdit, QTextEdit { background-color: #0a1020; } +QLineEdit:disabled, +QPlainTextEdit:disabled, +QTextEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QDateEdit:disabled, +QTimeEdit:disabled { + background-color: #162038; + color: #5568a0; + border-color: #1c2840; +} + +/* ---- Spin Button Arrows ---- */ +QSpinBox::up-button, +QDoubleSpinBox::up-button, +QDateEdit::up-button, +QTimeEdit::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 10px; + border-left: 1px solid #253250; + border-bottom: 1px solid #253250; + border-top-right-radius: 4px; +} +QSpinBox::up-button:hover, +QDoubleSpinBox::up-button:hover, +QDateEdit::up-button:hover, +QTimeEdit::up-button:hover { + background-color: #1c2840; +} +QSpinBox::up-arrow, +QDoubleSpinBox::up-arrow, +QDateEdit::up-arrow, +QTimeEdit::up-arrow { + /* image: none; */ + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 5px solid #7888b8; + margin-top: 2px; +} +QSpinBox::down-button, +QDoubleSpinBox::down-button, +QDateEdit::down-button, +QTimeEdit::down-button { + width: 10px; + subcontrol-origin: border; + subcontrol-position: bottom right; + border-left: 1px solid #253250; + border-bottom-right-radius: 4px; +} +QSpinBox::down-button:hover, +QDoubleSpinBox::down-button:hover, +QDateEdit::down-button:hover, +QTimeEdit::down-button:hover { + background-color: #1c2840; +} +QSpinBox::down-arrow, +QDoubleSpinBox::down-arrow, +QDateEdit::down-arrow, +QTimeEdit::down-arrow { + image: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid #7888b8; + margin-bottom: 2px; +} +QSpinBox::up-button:disabled, +QDoubleSpinBox::up-button:disabled, +QDateEdit::up-button:disabled, +QTimeEdit::up-button:disabled, +QSpinBox::down-button:disabled, +QDoubleSpinBox::down-button:disabled, +QDateEdit::down-button:disabled, +QTimeEdit::down-button:disabled { + background-color: #162038; +} +QSpinBox::up-arrow:disabled, +QDoubleSpinBox::up-arrow:disabled, +QDateEdit::up-arrow:disabled, +QTimeEdit::up-arrow:disabled { + border-bottom-color: #5568a0; +} +QSpinBox::down-arrow:disabled, +QDoubleSpinBox::down-arrow:disabled, +QDateEdit::down-arrow:disabled, +QTimeEdit::down-arrow:disabled { + border-top-color: #5568a0; +} /* ---- Combo Box ---- */ QComboBox { @@ -158,6 +246,11 @@ QComboBox QAbstractItemView { selection-color: #0f1119; outline: none; } +QComboBox:disabled { + background-color: #162038; + color: #5568a0; + border-color: #1c2840; +} /* ---- Check Box / Radio Button ---- */ QCheckBox, @@ -193,6 +286,47 @@ QRadioButton::indicator:disabled { border-color: #253250; background-color: #162038; } +QCheckBox::indicator:checked:hover, +QRadioButton::indicator:checked:hover { + border-color: #a0f0e8; +} + +/* Tree / List / Table Widget CheckBox Indicator */ +QTreeWidget::indicator, +QListWidget::indicator, +QTableWidget::indicator { + border: 2px solid #5568a0; + border-radius: 3px; + background-color: #162038; +} +QTreeWidget::indicator:hover, +QListWidget::indicator:hover, +QTableWidget::indicator:hover { + border-color: #a0f0e8; +} +QTreeWidget::indicator:checked, +QListWidget::indicator:checked, +QTableWidget::indicator:checked { + background-color: #2dd4bf; + border-color: #2dd4bf; +} +QTreeWidget::indicator:checked:hover, +QListWidget::indicator:checked:hover, +QTableWidget::indicator:checked:hover { + border-color: #a0f0e8; +} +QTreeWidget::indicator:disabled, +QListWidget::indicator:disabled, +QTableWidget::indicator:disabled { + background-color: #1c2840; + border-color: #334478; +} +QTreeWidget::indicator:indeterminate, +QListWidget::indicator:indeterminate, +QTableWidget::indicator:indeterminate { + background-color: #2dd4bf; + border-color: #a0f0e8; +} /* ---- Group Box ---- */ QGroupBox { @@ -238,10 +372,6 @@ QTabBar::tab:selected { color: #2dd4bf; border-bottom: 2px solid #2dd4bf; } -QTabBar::tab:hover:!selected { - background-color: #1c2840; - color: #d0daf0; -} /* ---- List / Tree ---- */ QListWidget, @@ -268,16 +398,12 @@ QTableWidget::item:selected { background-color: #2dd4bf; color: #0f1119; } -QListWidget::item:hover:!selected, -QTreeWidget::item:hover:!selected { - background-color: #1c2840; -} QHeaderView::section { background-color: #0f1628; border: none; border-right: 1px solid #253250; border-bottom: 1px solid #253250; - padding: 6px 10px; + padding: 5px 10px; color: #8b9ad0; font-weight: bold; } @@ -351,6 +477,12 @@ QSlider::sub-page:horizontal { background-color: #2dd4bf; border-radius: 3px; } +QSlider::handle:horizontal:disabled { + background-color: #5568a0; +} +QSlider::sub-page:horizontal:disabled { + background-color: #5568a0; +} /* ---- Tool Tip ---- */ QToolTip { diff --git a/src/gui/resources/themes/LightLake.qss b/src/gui/resources/themes/LightLake.qss index beb3f3a..b5e0bc2 100644 --- a/src/gui/resources/themes/LightLake.qss +++ b/src/gui/resources/themes/LightLake.qss @@ -7,7 +7,7 @@ * See the LICENSE file for details. * * - * AutoLibrary Official Style Theme : LightLake + * AutoLibrary Official Theme : LightLake */ /* ---- Global ---- */ @@ -116,6 +116,94 @@ QPlainTextEdit, QTextEdit { background-color: #ffffff; } +QLineEdit:disabled, +QPlainTextEdit:disabled, +QTextEdit:disabled, +QSpinBox:disabled, +QDoubleSpinBox:disabled, +QDateEdit:disabled, +QTimeEdit:disabled { + background-color: #e8ecf2; + color: #98a8c0; + border-color: #d5dde8; +} + +/* ---- Spin Button Arrows ---- */ +QSpinBox::up-button, +QDoubleSpinBox::up-button, +QDateEdit::up-button, +QTimeEdit::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 10px; + border-left: 1px solid #c0cdda; + border-bottom: 1px solid #c0cdda; + border-top-right-radius: 4px; +} +QSpinBox::up-button:hover, +QDoubleSpinBox::up-button:hover, +QDateEdit::up-button:hover, +QTimeEdit::up-button:hover { + background-color: #d5dde8; +} +QSpinBox::up-arrow, +QDoubleSpinBox::up-arrow, +QDateEdit::up-arrow, +QTimeEdit::up-arrow { + /* image: none; */ + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-bottom: 5px solid #6a7898; + margin-top: 2px; +} +QSpinBox::down-button, +QDoubleSpinBox::down-button, +QDateEdit::down-button, +QTimeEdit::down-button { + width: 10px; + subcontrol-origin: border; + subcontrol-position: bottom right; + border-left: 1px solid #c0cdda; + border-bottom-right-radius: 4px; +} +QSpinBox::down-button:hover, +QDoubleSpinBox::down-button:hover, +QDateEdit::down-button:hover, +QTimeEdit::down-button:hover { + background-color: #d5dde8; +} +QSpinBox::down-arrow, +QDoubleSpinBox::down-arrow, +QDateEdit::down-arrow, +QTimeEdit::down-arrow { + image: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid #6a7898; + margin-bottom: 2px; +} +QSpinBox::up-button:disabled, +QDoubleSpinBox::up-button:disabled, +QDateEdit::up-button:disabled, +QTimeEdit::up-button:disabled, +QSpinBox::down-button:disabled, +QDoubleSpinBox::down-button:disabled, +QDateEdit::down-button:disabled, +QTimeEdit::down-button:disabled { + background-color: #e8ecf2; +} +QSpinBox::up-arrow:disabled, +QDoubleSpinBox::up-arrow:disabled, +QDateEdit::up-arrow:disabled, +QTimeEdit::up-arrow:disabled { + border-bottom-color: #98a8c0; +} +QSpinBox::down-arrow:disabled, +QDoubleSpinBox::down-arrow:disabled, +QDateEdit::down-arrow:disabled, +QTimeEdit::down-arrow:disabled { + border-top-color: #98a8c0; +} /* ---- Combo Box ---- */ QComboBox { @@ -158,6 +246,11 @@ QComboBox QAbstractItemView { selection-color: #ffffff; outline: none; } +QComboBox:disabled { + background-color: #e8ecf2; + color: #98a8c0; + border-color: #d5dde8; +} /* ---- Check Box / Radio Button ---- */ QCheckBox, @@ -193,6 +286,47 @@ QRadioButton::indicator:disabled { border-color: #c0cdda; background-color: #e8ecf2; } +QCheckBox::indicator:checked:hover, +QRadioButton::indicator:checked:hover { + border-color: #14c7a4; +} + +/* Tree / List / Table Widget CheckBox Indicator */ +QTreeWidget::indicator, +QListWidget::indicator, +QTableWidget::indicator { + border: 2px solid #a0b4cc; + border-radius: 3px; + background-color: #e8ecf2; +} +QTreeWidget::indicator:hover, +QListWidget::indicator:hover, +QTableWidget::indicator:hover { + border-color: #14c7a4; +} +QTreeWidget::indicator:checked, +QListWidget::indicator:checked, +QTableWidget::indicator:checked { + background-color: #0ea58a; + border-color: #0ea58a; +} +QTreeWidget::indicator:checked:hover, +QListWidget::indicator:checked:hover, +QTableWidget::indicator:checked:hover { + border-color: #14c7a4; +} +QTreeWidget::indicator:disabled, +QListWidget::indicator:disabled, +QTableWidget::indicator:disabled { + background-color: #d5dde8; + border-color: #c0cdda; +} +QTreeWidget::indicator:indeterminate, +QListWidget::indicator:indeterminate, +QTableWidget::indicator:indeterminate { + background-color: #0ea58a; + border-color: #14c7a4; +} /* ---- Group Box ---- */ QGroupBox { @@ -268,16 +402,12 @@ QTableWidget::item:selected { background-color: #0ea58a; color: #ffffff; } -QListWidget::item:hover:!selected, -QTreeWidget::item:hover:!selected { - background-color: #e2e8f0; -} QHeaderView::section { background-color: #dce4ee; border: none; border-right: 1px solid #c0cdda; border-bottom: 1px solid #c0cdda; - padding: 6px 10px; + padding: 5px 10px; color: #4a6080; font-weight: bold; } @@ -351,6 +481,12 @@ QSlider::sub-page:horizontal { background-color: #0ea58a; border-radius: 3px; } +QSlider::handle:horizontal:disabled { + background-color: #98a8c0; +} +QSlider::sub-page:horizontal:disabled { + background-color: #98a8c0; +} /* ---- Tool Tip ---- */ QToolTip {