当前位置: 首页 > news >正文

QDarkStyleSheet: 一个Qt应用的暗色主题解决方案

目录

1.简介

2.安装与使用

2.1.Python Qt(PyQt/PySide)集成

2.2.C++ Qt 集成

3.配置与自定义

4.官方样例

5.总结


1.简介

        QDarkStyleSheet 是一套专为 Qt 框架(包括 C++ Qt 和 Python Qt 绑定如 PyQt、PySide)设计的 暗色风格样式表(Qt Style Sheet, QSS)集合,旨在为 Qt 应用快速提供美观、统一的暗色主题,解决 Qt 默认样式单一、视觉体验不足的问题,尤其适合需要长时间使用的应用(如 IDE、数据可视化工具、桌面客户端)。

        Qt Style Sheet(QSS)是 Qt 模仿 CSS 语法的界面样式定义语言,可自定义控件(如按钮、菜单、表格、对话框)的颜色、字体、布局、状态( hover / 点击 )等视觉属性。

        QDarkStyleSheet 并非独立库,而是预编写好的 QSS 规则集合,封装了对 Qt 原生控件的暗色样式适配,开发者无需手动编写复杂的 QSS,只需简单集成即可让整个应用切换为暗色主题。

        它的特点有:

1.跨平台兼容性

        完全继承 Qt 的跨平台特性,支持 Windows(32/64 位)、macOS、Linux 等主流桌面系统,且在不同系统下保持视觉一致性。

2.广泛的 Qt 版本支持

    兼容 Qt 5.x、Qt 6.x 系列,同时适配 Python Qt 绑定:

  • PyQt5 / PyQt6
  • PySide2 / PySide6
  • C++ Qt 5 / Qt 6

3.美观且统一的设计

  • 采用现代暗色设计,主色调以深灰 / 黑色为底,搭配高对比度的文字和控件(如蓝色按钮、浅灰文本),降低视觉疲劳。
  • 覆盖 Qt 几乎所有原生控件:窗口、按钮、输入框、下拉菜单、表格、树控件、进度条、滑块等,避免 “局部亮色、局部暗色” 的割裂感。
  • 支持 高 DPI 显示,自动适配高分屏,避免样式模糊。

4.极低的集成成本

   无需修改应用核心逻辑,仅需 2-3 行代码即可加载样式表,新手也能快速上手。

5.开源免费

    基于 MIT 许可证开源,源码托管于 GitHub,可自由使用、修改和二次分发。

2.安装与使用

QDarkStyleSheet 的使用流程简单,核心是 “加载预定义的 QSS 文件 / 字符串”,不同开发语言(Python/C++)的集成方式略有差异。

2.1.Python Qt(PyQt/PySide)集成

步骤 1:安装 QDarkStyleSheet

通过 pip 直接安装(Python 3.6+ 支持):

pip install qdarkstyle

步骤 2:在代码中加载样式表

根据使用的 Qt 绑定(PyQt5/PyQt6/PySide2/PySide6),调用对应的加载函数即可。

示例 1:PyQt5

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton# 导入 QDarkStyleSheet
import qdarkstyleclass MyWindow(QMainWindow):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setWindowTitle("QDarkStyleSheet 示例(PyQt5)")self.resize(400, 300)# 添加一个测试按钮btn = QPushButton("测试按钮", self)btn.move(150, 150)if __name__ == "__main__":app = QApplication(sys.argv)# 加载 PyQt5 对应的暗色样式表app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())window = MyWindow()window.show()sys.exit(app.exec_())

示例 2:PyQt6

PyQt6 需使用 load_stylesheet_pyqt6() 函数:

# 替换加载样式表的代码
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt6())

示例 3:PySide2/PySide6

对应函数为 load_stylesheet_pyside2() / load_stylesheet_pyside6()

# PySide6 示例
app.setStyleSheet(qdarkstyle.load_stylesheet_pyside6())

2.2.C++ Qt 集成

C++ 环境需手动获取 QSS 文件,再通过代码读取并应用。

步骤 1:获取 QSS 文件

1.从 GitHub 下载源码:

https://github.com/ColinDuquesnoy/QDarkStyleSheet

2.在源码的 qdarkstyle 目录中找到 qdarkstyle.qss(核心样式文件)。

步骤 2:将 QSS 文件加入项目资源

如果是QtCreator中,则是将  darkstyle.qrc 添加到项目的 .pro 文件中:

RESOURCES += darkstyle.qrc

如果是vs中,则是直接将 darkstyle.qrc导入到工程中

步骤 3:在代码中加载样式表

#include <QApplication>
#include <QFile>
#include <QLatin1String>int main(int argc, char *argv[])
{QApplication a(argc, argv);// 读取 QSS 文件QFile qssFile(":/qdarkstyle.qss");  // 路径对应资源文件中的前缀+文件名if (qssFile.open(QFile::ReadOnly)) {// 将 QSS 内容设置为应用全局样式QString styleSheet = QLatin1String(qssFile.readAll());a.setStyleSheet(styleSheet);qssFile.close();}// 后续创建窗口并显示MainWindow w;w.show();return a.exec();
}

3.配置与自定义

QDarkStyleSheet 支持灵活的样式调整,满足个性化需求,主要有两种方式:

1.直接修改 QSS 文件

打开 qdarkstyle.qss,找到对应控件的样式规则,修改颜色、字体等属性:

例如,修改按钮的默认背景色:

/* 原规则 */
QPushButton {background-color: #2a2a2a;color: #ffffff;border: 1px solid #444444;padding: 5px 10px;
}/* 修改后(将背景色改为深蓝色) */
QPushButton {background-color: #1a365d;color: #ffffff;border: 1px solid #2a5082;padding: 5px 10px;
}

2.代码中动态覆盖样式

加载 QDarkStyleSheet 后,通过额外的 QSS 字符串覆盖原有规则,无需修改原文件:

# 先加载默认暗色样式
app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5())# 再添加自定义样式(覆盖按钮背景色和窗口标题栏颜色)
custom_style = """
QPushButton {background-color: #ff4444;  /* 红色按钮 */border-radius: 4px;         /* 圆角 */
}
QMainWindow::titleBar {background-color: #333333;  /* 标题栏深灰 */
}
"""
# 合并样式(后加载的规则优先级更高)
app.setStyleSheet(app.styleSheet() + custom_style)

4.官方样例

容器(无选项卡)和按钮

容器(选项卡)和显示

小部件和输入(字段)

视图和输入(无字段)

5.总结

  • GitHub 仓库:ColinDuquesnoy/QDarkStyleSheet(获取最新源码、文档、示例)
  • 官方文档:仓库的 README.md 包含详细的版本说明、集成教程和常见问题(FAQ)。

通过 QDarkStyleSheet,开发者可快速为 Qt 应用赋予专业的暗色主题,大幅提升用户体验,尤其适合需要 “暗色模式” 的工具类或专业级应用。

http://www.dtcms.com/a/504389.html

相关文章:

  • 各种网站app长沙人才市场招聘
  • 从零开始的C++学习生活 10:继承和多态
  • 记事本怎么做网站一人办厂千元投资
  • Java代码之gradle(1)
  • 卖印花图案设计网站网站建设实验小结
  • 织梦网站如何做seowordpress类
  • C# 数据加载专题 之泛型序列化
  • 帮网站做代理青岛网页设计 学校
  • 【2026计算机毕业设计】基于Springboot的校园电动车短租平台
  • Java基础语法—输入输出
  • 南京网站建设培训wordpress免费下主题Modown
  • 临时邮箱系统实战:解决AI网站注册验证难题的技术方案
  • K8s 安全机制全解析
  • 备案的网站名称湖南众诚建设 官方网站
  • 从0死磕全栈之使用 VS Code 调试 Next.js 应用完整指南
  • 换空间对网站排名的影响吗信息技术做网站
  • 做网站赚钱流程松江集团网站建设
  • NVIDIA大模型推理框架:TensorRT-LLM软件流程(一)
  • Altium Designer(AD24)Design设计功能总结
  • html 网站源码 卖手机推广网络怎么做
  • 吐鲁番好网站建设设计步骤的英文
  • C++如何实现小程序BUG自动给修复
  • Redis字符串编码
  • React中的事件绑定
  • [嵌入式系统-152]:CAN总线最大数据只有8个字节,CAN FD最大才64个字节,这么小的数据量,如何进行稍大一点的数据传输?
  • 个人网站做论坛还是博客好广州网站备案公司
  • 仓颉 Markdown 解析库在 HarmonyOS 应用中的实践
  • 肇庆 网站建设ci设计
  • 小九源码-springboot089-在线学习平台
  • 申请域名就可以做网站了吗网站如何做的有气质