# QSS 界面美化 —— 教学补充示例 > 对应方案书「C++方向 Day2」:"基础 UI 控件、布局管理与 QSS 界面美化"。 > 仓库 `p03/` 的 wiki 抓取内容里没有 QSS 相关代码,本示例是手工补写的教学补充, > **不属于** `tools/gen_part3.py` 的生成产物,重新生成 `p01`/`p03` 不会影响它。 ## 概念 QSS(Qt Style Sheets)是 Qt 提供的类 CSS 样式语言,用来把"控件长什么样"和"控件 做什么"分离开: - 类型选择器:`QPushButton { ... }` —— 命中所有该类型控件; - ID 选择器:`QPushButton#okButton { ... }` —— 通过 `setObjectName()` 精确命中 某一个控件; - 伪状态:`:hover`、`:pressed`、`:disabled` 等 —— 不用手写事件处理就能做交互反馈; - 既可以调用 `qApp->setStyleSheet(...)` 全局生效,也可以 `widget->setStyleSheet(...)` 只作用于这个控件和它的子控件。 ## 代码走读 见 [`qt_qss_styling.cpp`](qt_qss_styling.cpp): 1. 三个控件(标题 `QLabel`、确定/取消两个 `QPushButton`)分别设置 `objectName`; 2. 整个窗口调一次 `setStyleSheet()`,用 ID 选择器分别美化每个控件, `okButton`/`cancelButton` 还各自定义了 `:hover`/`:pressed` 效果; 3. 不改变任何业务逻辑(没有新增信号槽),只改变外观——这正是 QSS 的定位: 与逻辑正交。 ## 验证方式 ```bash QT_QPA_PLATFORM=offscreen tools/run_qt.sh qt_qss_styling # 离屏跑通,200ms 自动退出 tools/run_qt.sh qt_qss_styling # 有 X 环境可直接看窗口 ``` ## 练习方向(供任务卡引用) - 把 `okButton`/`cancelButton` 换成类型选择器 `QPushButton { ... }` 一次性美化, 对比 ID 选择器和类型选择器的适用场景差异; - 给 `title` 加一个 `:hover` 伪状态(`QLabel` 默认不接收鼠标事件,需要先 `setAttribute(Qt::WA_Hover)` 之类的前置条件——留给学员自己踩一次坑)。 ## 参考 - 本仓库对照:[`p03/ch08/custom_widget.cpp`](../../../../p03/ch08/custom_widget.cpp) (展示了 `QHBoxLayout` 布局管理,可与本示例的样式部分组合练习) - Qt 官方文档:*Qt Style Sheets Reference*(doc.qt.io,选读·需联网)