Files
HIS-GUI/gui/template/style_manager.h
2026-04-07 21:30:39 +08:00

676 lines
31 KiB
C++

/**
* HIS-GUI 样式管理器
* 负责加载和应用Qt样式表(QSS)
*/
#ifndef HIS_STYLE_MANAGER_H
#define HIS_STYLE_MANAGER_H
#include <QObject>
#include <QString>
#include <QFile>
#include <QTextStream>
#include <QApplication>
#include <QDebug>
class HisStyleManager {
public:
// 加载并应用QSS样式
static void applyStyle(const QString& qssPath) {
QFile file(qssPath);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
qWarning() << "无法打开样式文件:" << qssPath;
return;
}
QTextStream stream(&file);
QString stylesheet = stream.readAll();
file.close();
qApp->setStyleSheet(stylesheet);
qDebug() << "成功加载样式文件:" << qssPath;
}
// 从资源或文件加载默认主题
static void applyDefaultStyle() {
// 尝试从template目录加载
QStringList possiblePaths = {
"gui/template/his_theme.qss",
"../gui/template/his_theme.qss",
"./gui/template/his_theme.qss",
"/home/e2hang/code/HIS-GUI/gui/template/his_theme.qss"
};
for (const QString& path : possiblePaths) {
QFile file(path);
if (file.open(QFile::ReadOnly | QFile::Text)) {
QTextStream stream(&file);
QString stylesheet = stream.readAll();
file.close();
qApp->setStyleSheet(stylesheet);
qDebug() << "成功加载默认样式:" << path;
return;
}
}
qWarning() << "未找到默认样式文件,使用系统样式";
}
// 应用预设颜色主题
enum class ThemeType {
MedicalBlue, // 医疗蓝色主题
ModernDark, // 现代深色主题
LightClean, // 简洁浅色主题
HealthcareGreen, // 医疗绿色主题
Premium, // 精致医疗主题(推荐)
PremiumDark // 精致深色主题
};
static void applyTheme(ThemeType type) {
QString qss;
switch (type) {
case ThemeType::MedicalBlue:
qss = getMedicalBlueTheme();
break;
case ThemeType::ModernDark:
qss = getModernDarkTheme();
break;
case ThemeType::LightClean:
qss = getLightCleanTheme();
break;
case ThemeType::HealthcareGreen:
qss = getHealthcareGreenTheme();
break;
case ThemeType::Premium:
qss = getPremiumTheme();
break;
case ThemeType::PremiumDark:
qss = getPremiumDarkTheme();
break;
}
qApp->setStyleSheet(qss);
}
// 从QSS文件加载主题(支持premium_theme.qss)
static void applyThemeFromFile(const QString& themeFileName = "premium_theme.qss") {
QStringList possiblePaths = {
QString("gui/template/%1").arg(themeFileName),
QString("../gui/template/%1").arg(themeFileName),
QString("./gui/template/%1").arg(themeFileName),
QString("/home/e2hang/code/HIS-GUI/gui/template/%1").arg(themeFileName)
};
for (const QString& path : possiblePaths) {
QFile file(path);
if (file.open(QFile::ReadOnly | QFile::Text)) {
QTextStream stream(&file);
QString stylesheet = stream.readAll();
file.close();
qApp->setStyleSheet(stylesheet);
qDebug() << "成功加载主题文件:" << path;
return;
}
}
qWarning() << "未找到主题文件:" << themeFileName << ",使用系统样式";
}
private:
// 医疗蓝色主题
static QString getMedicalBlueTheme() {
return R"(
QMainWindow, QWidget {
background-color: #f5f7fa;
font-family: "Microsoft YaHei", "Segoe UI", sans-serif;
font-size: 14px;
color: #333333;
}
QListWidget {
background-color: #1e3a5f;
border: none;
border-right: 3px solid #2980b9;
padding: 10px 0;
}
QListWidget::item {
color: #b8c9db;
padding: 14px 25px;
margin: 3px 10px;
border-radius: 8px;
font-size: 15px;
}
QListWidget::item:selected {
background-color: #2980b9;
color: #ffffff;
}
QListWidget::item:hover:!selected {
background-color: #2c5282;
color: #ffffff;
}
QPushButton {
background-color: #3498db;
color: #ffffff;
border: none;
border-radius: 6px;
padding: 10px 20px;
font-weight: 500;
}
QPushButton:hover {
background-color: #2980b9;
}
QPushButton:pressed {
background-color: #1a5276;
}
QTableWidget, QTableView {
background-color: #ffffff;
border: 1px solid #d1d8e0;
border-radius: 8px;
}
QHeaderView::section {
background-color: #1e3a5f;
color: #ffffff;
padding: 12px 8px;
border: none;
font-weight: 600;
}
QLineEdit, QTextEdit, QPlainTextEdit {
background-color: #ffffff;
border: 2px solid #d1d8e0;
border-radius: 6px;
padding: 10px 12px;
}
QLineEdit:focus, QTextEdit:focus {
border-color: #3498db;
}
QMenuBar {
background-color: #1e3a5f;
color: #ffffff;
padding: 6px 10px;
}
QMenuBar::item:selected {
background-color: #2980b9;
}
)";
}
// 现代深色主题
static QString getModernDarkTheme() {
return R"(
QMainWindow, QWidget {
background-color: #2b2b2b;
font-family: "Segoe UI", sans-serif;
font-size: 14px;
color: #e0e0e0;
}
QListWidget {
background-color: #1e1e1e;
border: none;
border-right: 3px solid #007acc;
padding: 10px 0;
}
QListWidget::item {
color: #cccccc;
padding: 12px 20px;
margin: 2px 8px;
border-radius: 6px;
}
QListWidget::item:selected {
background-color: #007acc;
color: #ffffff;
}
QPushButton {
background-color: #007acc;
color: #ffffff;
border: none;
border-radius: 4px;
padding: 8px 16px;
}
QPushButton:hover {
background-color: #005a9e;
}
QTableWidget, QTableView {
background-color: #252525;
border: 1px solid #3c3c3c;
color: #e0e0e0;
}
QHeaderView::section {
background-color: #1e1e1e;
color: #ffffff;
padding: 10px;
border: none;
}
QLineEdit, QTextEdit {
background-color: #333333;
border: 1px solid #555555;
border-radius: 4px;
padding: 8px;
color: #e0e0e0;
}
)";
}
// 简洁浅色主题
static QString getLightCleanTheme() {
return R"(
QMainWindow, QWidget {
background-color: #fafafa;
font-family: "PingFang SC", "Microsoft YaHei", sans-serif;
font-size: 14px;
color: #333333;
}
QListWidget {
background-color: #ffffff;
border: 1px solid #e0e0e0;
border-radius: 8px;
padding: 8px;
}
QListWidget::item {
color: #555555;
padding: 10px 15px;
margin: 2px;
border-radius: 6px;
}
QListWidget::item:selected {
background-color: #4a90e2;
color: #ffffff;
}
QPushButton {
background-color: #4a90e2;
color: #ffffff;
border: none;
border-radius: 6px;
padding: 10px 20px;
}
QPushButton:hover {
background-color: #357abd;
}
QTableWidget, QTableView {
background-color: #ffffff;
border: 1px solid #e8e8e8;
border-radius: 8px;
}
QHeaderView::section {
background-color: #f5f5f5;
color: #333333;
padding: 12px;
border: none;
border-bottom: 2px solid #4a90e2;
}
)";
}
// 医疗绿色主题
static QString getHealthcareGreenTheme() {
return R"(
QMainWindow, QWidget {
background-color: #f0f7f4;
font-family: "Microsoft YaHei", sans-serif;
font-size: 14px;
color: #2d4a3e;
}
QListWidget {
background-color: #2d5a4a;
border: none;
border-right: 3px solid #4caf50;
padding: 10px 0;
}
QListWidget::item {
color: #a8d5c2;
padding: 14px 25px;
margin: 3px 10px;
border-radius: 8px;
font-size: 15px;
}
QListWidget::item:selected {
background-color: #4caf50;
color: #ffffff;
}
QPushButton {
background-color: #4caf50;
color: #ffffff;
border: none;
border-radius: 6px;
padding: 10px 20px;
}
QPushButton:hover {
background-color: #43a047;
}
QTableWidget, QTableView {
background-color: #ffffff;
border: 1px solid #c8e6c9;
border-radius: 8px;
}
QHeaderView::section {
background-color: #2d5a4a;
color: #ffffff;
padding: 12px;
border: none;
}
QLineEdit, QTextEdit {
background-color: #ffffff;
border: 2px solid #a5d6a7;
border-radius: 6px;
padding: 10px;
}
QLineEdit:focus, QTextEdit:focus {
border-color: #4caf50;
}
)";
}
// 精致医疗主题 - 完整实现
static QString getPremiumTheme() {
return R"(
* { outline: none; }
QMainWindow, QWidget, QDialog, QFrame {
background-color: #f8fafc;
font-family: "Inter", "Microsoft YaHei", "PingFang SC", -apple-system, sans-serif;
font-size: 14px;
color: #1a202c;
letter-spacing: 0.01em;
}
QMainWindow {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #f8fafc 0%, stop:1 #edf2f7 100%);
}
QMenuBar {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #2d3748 0%, stop:1 #1a202c 100%);
color: #f7fafc;
padding: 8px 12px;
border-bottom: 1px solid #4a5568;
}
QMenuBar::item { background: transparent; padding: 8px 16px; margin: 0 4px; border-radius: 6px; color: #e2e8f0; }
QMenuBar::item:selected { background: rgba(255, 255, 255, 0.1); color: #ffffff; }
QMenu { background: rgba(255, 255, 255, 0.98); border: 1px solid rgba(226, 232, 240, 0.8); border-radius: 10px; padding: 8px 4px; }
QMenu::item { padding: 10px 32px 10px 20px; border-radius: 6px; margin: 2px 6px; color: #2d3748; }
QMenu::item:selected { background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #ebf8ff 0%, stop:1 #e6fffa 100%); color: #234e52; }
QToolBar { background: rgba(255, 255, 255, 0.9); border: none; border-bottom: 1px solid #e2e8f0; padding: 10px 16px; spacing: 12px; }
QListWidget {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1a365d 0%, stop:0.5 #2c5282 50%, stop:1 #2b6cb0 100%);
border: none;
border-right: 1px solid #2c5282;
padding: 16px 0;
}
QListWidget::item { color: #bee3f8; padding: 14px 28px; margin: 4px 12px; border-radius: 10px; font-size: 15px; font-weight: 500; }
QListWidget::item:selected { background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 rgba(255,255,255,0.15) 0%, stop:1 rgba(255,255,255,0.25) 100%); color: #ffffff; border: 1px solid rgba(255, 255, 255, 0.2); }
QListWidget::item:hover:!selected { background: rgba(255, 255, 255, 0.08); color: #e2e8f0; }
QPushButton {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #4299e1 0%, stop:1 #3182ce 100%);
color: #ffffff;
border: none;
border-radius: 8px;
padding: 10px 22px;
font-size: 14px;
font-weight: 500;
min-width: 85px;
border: 1px solid rgba(66, 153, 225, 0.5);
}
QPushButton:hover { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #3182ce 0%, stop:1 #2b6cb0 100%); border: 1px solid rgba(66, 153, 225, 0.8); }
QPushButton:pressed { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #2b6cb0 0%, stop:1 #2c5282 100%); }
QPushButton:disabled { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #cbd5e0 0%, stop:1 #a0aec0 100%); color: #718096; border-color: transparent; }
QLineEdit, QTextEdit, QPlainTextEdit {
background-color: #ffffff;
border: 2px solid #e2e8f0;
border-radius: 10px;
padding: 12px 16px;
color: #1a202c;
selection-background-color: #4299e1;
selection-color: #ffffff;
font-size: 14px;
}
QLineEdit:hover, QTextEdit:hover { border-color: #cbd5e0; }
QLineEdit:focus, QTextEdit:focus { border: 2px solid #4299e1; background-color: #f7fafc; border-shadow: 0 0 0 3px rgba(66, 153, 225, 0.15); }
QLineEdit:disabled, QTextEdit:disabled { background-color: #f7fafc; color: #a0aec0; border-color: #e2e8f0; }
QComboBox {
background-color: #ffffff;
border: 2px solid #e2e8f0;
border-radius: 10px;
padding: 12px 16px;
color: #1a202c;
min-width: 110px;
font-size: 14px;
}
QComboBox:hover { border-color: #cbd5e0; }
QComboBox:focus, QComboBox:on { border: 2px solid #4299e1; border-shadow: 0 0 0 3px rgba(66, 153, 225, 0.15); }
QComboBox QAbstractItemView { background-color: #ffffff; border: 1px solid #e2e8f0; border-radius: 10px; selection-background-color: #ebf8ff; selection-color: #2b6cb0; padding: 8px; }
QTableWidget, QTableView {
background-color: #ffffff;
border: 1px solid #e2e8f0;
border-radius: 12px;
gridline-color: #f1f5f9;
selection-background-color: #ebf8ff;
selection-color: #2b6cb0;
outline: 0;
}
QTableWidget::item, QTableView::item { padding: 14px 12px; border-bottom: 1px solid #f1f5f9; color: #2d3748; }
QTableWidget::item:selected, QTableView::item:selected { background-color: #ebf8ff; color: #2b6cb0; }
QTableWidget::item:hover, QTableView::item:hover { background-color: #f7fafc; }
QHeaderView::section {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #2d3748 0%, stop:1 #1a202c 100%);
color: #ffffff;
padding: 14px 12px;
border: none;
border-right: 1px solid #4a5568;
font-weight: 600;
text-align: left;
}
QHeaderView::section:last { border-right: none; border-top-right-radius: 12px; }
QHeaderView::section:first { border-top-left-radius: 12px; }
QHeaderView::section:hover { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #4a5568 0%, stop:1 #2d3748 100%); }
QTreeWidget, QTreeView { background-color: #ffffff; border: 1px solid #e2e8f0; border-radius: 12px; padding: 12px; outline: 0; }
QTreeWidget::item, QTreeView::item { padding: 10px 8px; border-bottom: 1px solid #f1f5f9; color: #2d3748; }
QTreeWidget::item:hover, QTreeView::item:hover { background-color: #f7fafc; }
QTreeWidget::item:selected, QTreeView::item:selected { background-color: #ebf8ff; color: #2b6cb0; }
QTabWidget::pane { border: 1px solid #e2e8f0; border-radius: 12px; background-color: #ffffff; margin-top: -1px; }
QTabBar::tab { background-color: #f7fafc; color: #718096; padding: 12px 28px; margin-right: 4px; border-top-left-radius: 10px; border-top-right-radius: 10px; font-weight: 500; font-size: 14px; border: 1px solid #e2e8f0; border-bottom: none; }
QTabBar::tab:selected { background-color: #ffffff; color: #2b6cb0; border: 1px solid #e2e8f0; border-bottom: 2px solid #ffffff; margin-bottom: -1px; }
QTabBar::tab:hover:!selected { background-color: #edf2f7; color: #4a5568; }
QGroupBox { background-color: #ffffff; border: 1px solid #e2e8f0; border-radius: 12px; margin-top: 18px; padding: 20px; padding-top: 30px; font-weight: 600; color: #2d3748; }
QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; left: 20px; padding: 0 14px; background-color: #ffffff; color: #2b6cb0; }
QLabel { color: #2d3748; background-color: transparent; }
QLabel[heading="true"] { font-size: 20px; font-weight: 700; color: #1a202c; padding: 4px 0; }
QLabel[subheading="true"] { font-size: 16px; font-weight: 600; color: #4a5568; padding: 2px 0; }
QScrollBar:vertical { background-color: transparent; width: 10px; margin: 8px 4px; border-radius: 5px; }
QScrollBar::handle:vertical { background-color: #cbd5e0; border-radius: 5px; min-height: 40px; margin: 0 2px; }
QScrollBar::handle:vertical:hover { background-color: #a0aec0; }
QScrollBar:horizontal { background-color: transparent; height: 10px; margin: 4px 8px; border-radius: 5px; }
QScrollBar::handle:horizontal { background-color: #cbd5e0; border-radius: 5px; min-width: 40px; margin: 2px 0; }
QScrollBar::handle:horizontal:hover { background-color: #a0aec0; }
QProgressBar { background-color: #edf2f7; border: none; border-radius: 8px; height: 12px; text-align: center; color: #4a5568; font-weight: 600; font-size: 12px; }
QProgressBar::chunk { background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #4299e1 0%, stop:1 #48bb78 100%); border-radius: 8px; }
QCheckBox { spacing: 12px; color: #2d3748; font-size: 14px; }
QCheckBox::indicator { width: 20px; height: 20px; border: 2px solid #cbd5e0; border-radius: 5px; background-color: #ffffff; }
QCheckBox::indicator:checked { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #4299e1 0%, stop:1 #3182ce 100%); border-color: #4299e1; }
QCheckBox::indicator:hover { border-color: #4299e1; }
QRadioButton { spacing: 12px; color: #2d3748; font-size: 14px; }
QRadioButton::indicator { width: 20px; height: 20px; border: 2px solid #cbd5e0; border-radius: 10px; background-color: #ffffff; }
QRadioButton::indicator:checked { background-color: #ffffff; border-color: #4299e1; border-width: 4px; }
QToolTip { background-color: #1a202c; color: #ffffff; border: none; border-radius: 6px; padding: 8px 14px; font-size: 13px; font-weight: 500; }
QStatusBar { background-color: #ffffff; border-top: 1px solid #e2e8f0; color: #718096; padding: 8px 12px; font-size: 13px; }
QDateEdit, QDateTimeEdit { background-color: #ffffff; border: 2px solid #e2e8f0; border-radius: 10px; padding: 10px 14px; color: #1a202c; font-size: 14px; }
QDateEdit:focus, QDateTimeEdit:focus { border: 2px solid #4299e1; border-shadow: 0 0 0 3px rgba(66, 153, 225, 0.15); }
QMessageBox { background-color: #ffffff; border-radius: 12px; }
QMessageBox QLabel { color: #2d3748; padding: 12px; font-size: 14px; }
)";
}
// 精致深色主题
static QString getPremiumDarkTheme() {
return R"(
* { outline: none; }
QMainWindow, QWidget, QDialog, QFrame {
background-color: #1a202c;
font-family: "Inter", "Microsoft YaHei", "PingFang SC", -apple-system, sans-serif;
font-size: 14px;
color: #e2e8f0;
letter-spacing: 0.01em;
}
QMenuBar { background: #171923; color: #f7fafc; padding: 8px 12px; border-bottom: 1px solid #2d3748; }
QMenuBar::item { background: transparent; padding: 8px 16px; margin: 0 4px; border-radius: 6px; color: #e2e8f0; }
QMenuBar::item:selected { background: #2d3748; }
QMenu { background: #1a202c; border: 1px solid #2d3748; border-radius: 10px; padding: 8px 4px; }
QMenu::item { padding: 10px 32px 10px 20px; border-radius: 6px; margin: 2px 6px; color: #e2e8f0; }
QMenu::item:selected { background: #2d3748; color: #4299e1; }
QToolBar { background: #1a202c; border: none; border-bottom: 1px solid #2d3748; padding: 10px 16px; spacing: 12px; }
QListWidget { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #0f172a 0%, stop:1 #1e293b 100%); border: none; border-right: 1px solid #334155; padding: 16px 0; }
QListWidget::item { color: #94a3b8; padding: 14px 28px; margin: 4px 12px; border-radius: 10px; font-size: 15px; font-weight: 500; }
QListWidget::item:selected { background: #3b82f6; color: #ffffff; border: none; }
QListWidget::item:hover:!selected { background: rgba(255, 255, 255, 0.08); color: #cbd5e1; }
QPushButton {
background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #3b82f6 0%, stop:1 #2563eb 100%);
color: #ffffff;
border: none;
border-radius: 8px;
padding: 10px 22px;
font-size: 14px;
font-weight: 500;
min-width: 85px;
border: 1px solid rgba(59, 130, 246, 0.5);
}
QPushButton:hover { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #2563eb 0%, stop:1 #1d4ed8 100%); }
QPushButton:pressed { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #1d4ed8 0%, stop:1 #1e40af 100%); }
QPushButton:disabled { background: #374151; color: #6b7280; border-color: transparent; }
QLineEdit, QTextEdit, QPlainTextEdit { background-color: #1f2937; border: 2px solid #374151; border-radius: 10px; padding: 12px 16px; color: #f3f4f6; selection-background-color: #3b82f6; selection-color: #ffffff; font-size: 14px; }
QLineEdit:hover, QTextEdit:hover { border-color: #4b5563; }
QLineEdit:focus, QTextEdit:focus { border: 2px solid #3b82f6; background-color: #111827; border-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); }
QLineEdit:disabled, QTextEdit:disabled { background-color: #1f2937; color: #6b7280; border-color: #374151; }
QComboBox { background-color: #1f2937; border: 2px solid #374151; border-radius: 10px; padding: 12px 16px; color: #f3f4f6; min-width: 110px; font-size: 14px; }
QComboBox:hover { border-color: #4b5563; }
QComboBox:focus, QComboBox:on { border: 2px solid #3b82f6; border-shadow: 0 0 0 3px rgba(59, 130, 246, 0.2); }
QComboBox QAbstractItemView { background-color: #1f2937; border: 1px solid #374151; border-radius: 10px; selection-background-color: #3b82f6; selection-color: #ffffff; padding: 8px; }
QTableWidget, QTableView { background-color: #1f2937; border: 1px solid #374151; border-radius: 12px; gridline-color: #374151; selection-background-color: #3b82f6; selection-color: #ffffff; outline: 0; }
QTableWidget::item, QTableView::item { padding: 14px 12px; border-bottom: 1px solid #374151; color: #e5e7eb; }
QTableWidget::item:selected, QTableView::item:selected { background-color: #3b82f6; color: #ffffff; }
QTableWidget::item:hover, QTableView::item:hover { background-color: #374151; }
QHeaderView::section { background: #111827; color: #f9fafb; padding: 14px 12px; border: none; border-right: 1px solid #374151; font-weight: 600; text-align: left; }
QHeaderView::section:last { border-right: none; border-top-right-radius: 12px; }
QHeaderView::section:first { border-top-left-radius: 12px; }
QHeaderView::section:hover { background: #1f2937; }
QTreeWidget, QTreeView { background-color: #1f2937; border: 1px solid #374151; border-radius: 12px; padding: 12px; outline: 0; }
QTreeWidget::item, QTreeView::item { padding: 10px 8px; border-bottom: 1px solid #374151; color: #e5e7eb; }
QTreeWidget::item:hover, QTreeView::item:hover { background-color: #374151; }
QTreeWidget::item:selected, QTreeView::item:selected { background-color: #3b82f6; color: #ffffff; }
QTabWidget::pane { border: 1px solid #374151; border-radius: 12px; background-color: #1f2937; margin-top: -1px; }
QTabBar::tab { background-color: #111827; color: #9ca3af; padding: 12px 28px; margin-right: 4px; border-top-left-radius: 10px; border-top-right-radius: 10px; font-weight: 500; font-size: 14px; border: 1px solid #374151; border-bottom: none; }
QTabBar::tab:selected { background-color: #1f2937; color: #3b82f6; border: 1px solid #374151; border-bottom: 2px solid #1f2937; margin-bottom: -1px; }
QTabBar::tab:hover:!selected { background-color: #374151; color: #d1d5db; }
QGroupBox { background-color: #1f2937; border: 1px solid #374151; border-radius: 12px; margin-top: 18px; padding: 20px; padding-top: 30px; font-weight: 600; color: #e5e7eb; }
QGroupBox::title { subcontrol-origin: margin; subcontrol-position: top left; left: 20px; padding: 0 14px; background-color: #1f2937; color: #3b82f6; }
QLabel { color: #e5e7eb; background-color: transparent; }
QLabel[heading="true"] { font-size: 20px; font-weight: 700; color: #f9fafb; padding: 4px 0; }
QLabel[subheading="true"] { font-size: 16px; font-weight: 600; color: #d1d5db; padding: 2px 0; }
QScrollBar:vertical { background-color: transparent; width: 10px; margin: 8px 4px; border-radius: 5px; }
QScrollBar::handle:vertical { background-color: #4b5563; border-radius: 5px; min-height: 40px; margin: 0 2px; }
QScrollBar::handle:vertical:hover { background-color: #6b7280; }
QScrollBar:horizontal { background-color: transparent; height: 10px; margin: 4px 8px; border-radius: 5px; }
QScrollBar::handle:horizontal { background-color: #4b5563; border-radius: 5px; min-width: 40px; margin: 2px 0; }
QScrollBar::handle:horizontal:hover { background-color: #6b7280; }
QProgressBar { background-color: #374151; border: none; border-radius: 8px; height: 12px; text-align: center; color: #e5e7eb; font-weight: 600; font-size: 12px; }
QProgressBar::chunk { background: qlineargradient(x1:0, y1:0, x2:1, y2:0, stop:0 #3b82f6 0%, stop:1 #8b5cf6 100%); border-radius: 8px; }
QCheckBox { spacing: 12px; color: #e5e7eb; font-size: 14px; }
QCheckBox::indicator { width: 20px; height: 20px; border: 2px solid #4b5563; border-radius: 5px; background-color: #1f2937; }
QCheckBox::indicator:checked { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #3b82f6 0%, stop:1 #2563eb 100%); border-color: #3b82f6; }
QRadioButton { spacing: 12px; color: #e5e7eb; font-size: 14px; }
QRadioButton::indicator { width: 20px; height: 20px; border: 2px solid #4b5563; border-radius: 10px; background-color: #1f2937; }
QRadioButton::indicator:checked { background-color: #1f2937; border-color: #3b82f6; border-width: 4px; }
QToolTip { background-color: #111827; color: #f9fafb; border: 1px solid #374151; border-radius: 6px; padding: 8px 14px; font-size: 13px; }
QStatusBar { background-color: #111827; border-top: 1px solid #374151; color: #9ca3af; padding: 8px 12px; font-size: 13px; }
QMessageBox { background-color: #1f2937; border-radius: 12px; }
QMessageBox QLabel { color: #e5e7eb; padding: 12px; font-size: 14px; }
)";
}
};
#endif // HIS_STYLE_MANAGER_H