Qt 界面美化指南:从零掌握 QSS 核心机制与工程实践
个人主页Cx330❄️个人专栏《C语言》《LeetCode刷题集》《数据结构-初阶》《C知识分享》《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔《Git深度解析》:版本管理实战全解 《Qt 极境架构》MySQL 核心技术与实战心向往之行必能Cx330的简介目录前言一、为什么需要 QSS1.1 界面美化的重要性“看脸”的时代1.2 QSS 与 CSS 的关系1.3 QSS 与 C 代码样式的优先级二、QSS 基本语法2.1 核心语法结构2.2 最简实战给按钮设置红色文本三、QSS 的样式设置方式与代码组织3.1 单个控件设置局部样式3.2 父控件设置批量样式3.3 全局样式应用级统一3.4 独立 .qss 文件管理工程化推荐方案四、样式的生效机制层叠性与优先级4.1 层叠性Cascading4.2 冲突解决与优先级规则五、深入选择器Selector分类5.1 核心选择器介绍5.2 实战试用几种类选择器5.3 实战选择器优先级验证六、 子控件选择器美化控件内部元素6.1 核心语法 高频常用子控件6.2 实战 1简单美化下拉框QComboBox6.3 美化进度条QProgressBar七、 伪类选择器实现控件的交互状态7.1 核心语法 高频常用伪类7.2 美化按钮QPushButton的交互状态八、 盒模型理解控件的布局逻辑8.1 盒模型核心结构8.2 常用盒模型属性8.3 实战设置边框和内边距8.4 实战设置外边距九、总结前言在 Qt 开发中实现功能逻辑只是第一步如何打造一个视觉体验优秀、风格统一的界面同样至关重要。Qt 提供了类似于 Web 前端 CSS 的强大样式表机制——QSSQt Style Sheets。本文将基于 QSS 的核心概念从底层机制到工程实践全面解析如何高效使用 QSS 进行界面美化。一、为什么需要 QSS1.1 界面美化的重要性“看脸”的时代程序的界面是否好看取决于它的应用场景专业/工业领域软件界面的好看与否通常不是核心更关键的是功能的稳定与实际执行效果。5通用/大众用户领域软件好看、现代化的 UI 是极大的加分项。优秀的界面不仅提升用户体验还能增加产品的专业度与吸引力。1.2 QSS 与 CSS 的关系QSSQt Style Sheets是 Qt 借鉴 Web 前端CSS机制推出的一套样式表语言。功能对比虽然 CSS 的功能更为丰富强大QSS 相对裁剪了一些复杂特性但它依然足以完成绝大多数桌面 UI 的美化工作。学习门槛即便没有 CSS 基础学习 QSS 也非常简单直观。1.3 QSS 与 C 代码样式的优先级在 Qt 中样式的设置可以通过 C 代码如设置QFont、QPalette等属性或 QSS 来完成。重要规则当 QSS 与 C 代码设置的样式发生冲突时QSS 的优先级更高会覆盖 C 代码设置的对应属性。二、QSS 基本语法2.1 核心语法结构QSS 的语法结构与 CSS 保持一致由选择器和声明块键值对组成选择器 { 属性名1: 属性值1; 属性名2: 属性值2; }选择器Selector指定要设置样式的目标控件或控件类型。键值对Declarations具体设置的样式属性如color、background-color、font-size等。基本示例QPushButton { color: #ffaa00; font-size: 14px; background-color: #333333; }2.2 最简实战给按钮设置红色文本#include widget.h #include ui_widget.h Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui-setupUi(this); // 给单个按钮设置QSS样式 // ui-pushButton-setStyleSheet(QPushButton { color: red; }); // 给 Widget父控件设置样式所有子按钮都会生效 this-setStyleSheet(QPushButton { color: red; }); } Widget::~Widget() { delete ui; }三、QSS 的样式设置方式与代码组织在实际开发中有多种方式可以将 QSS 嵌入到 Qt 项目中。3.1 单个控件设置局部样式通过控件的setStyleSheet方法设置仅对当前控件生效适合个性化样式调整#include widget.h #include ui_widget.h Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui-setupUi(this); ui-pushButton-setStyleSheet(QPushButton { font-size: 50px; }); ui-pushButton_2-setStyleSheet(QPushButton { color: green; }); } Widget::~Widget() { delete ui; }3.2 父控件设置批量样式给父控件设置 QSS其所有子控件都会继承样式前提是选择器匹配适合统一子控件风格Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui-setupUi(this); // 给 Widget父控件设置样式所有子按钮都会生效 this-setStyleSheet(QPushButton { color: red; }); }3.3 全局样式应用级统一通过QApplication的setStyleSheet方法设置对整个应用的所有控件生效适合全局统一风格#include widget.h #include QApplication int main(int argc, char *argv[]) { QApplication a(argc, argv); // 设置全局样式 a.setStyleSheet(QPushButton { color: red; }); Widget w; w.show(); return a.exec(); }全局和局部之间的问题3.4 独立.qss文件管理工程化推荐方案如果 QSS 代码非常复杂写在 C 字符串中会导致代码臃肿、难以维护。最佳实践是将样式提取到独立的.qss文件中。实现步骤创建 Qt 资源文件.qrc。创建独立的.qss文件如style.qss并将其添加到.qrc中。QPushButton { color: red; }在 C 中读取文件内容并加载为全局样式#include widget.h #include QApplication #include QFile QString loadQss() { QFile file(:/style.qss); file.open(QFile::ReadOnly); QString style file.readAll(); file.close(); return style; } int main(int argc, char *argv[]) { QApplication a(argc, argv); // 设置全局样式 a.setStyleSheet(loadQss()); Widget w; w.show(); return a.exec(); }四、样式的生效机制层叠性与优先级当项目中多个地方都设置了样式时Qt 如何决定最终的显示效果4.1 层叠性CascadingQSS 继承了 CSS 的层叠特性。如果全局设置了部分样式局部控件又设置了其他不冲突的样式两者的样式会叠加合并生效。4.2 冲突解决与优先级规则当全局样式与局部样式发生冲突时规则如下局部优先原则局部样式指定控件/子控件的优先级高于全局样式QApplication。选择器优先级ID 选择器#objectName类/类型选择器QPushButton样式表叠加性若属性不冲突两者均生效若属性冲突高优先级覆盖低优先级。工程建议由于可以在全局QApplication、.ui文件、.qss文件或特定控件代码中多处设置 QSS容易导致排查样式失效时困难。建议项目统一采用一种管理方式如全局.qss文件统一管理 个别控件 ID 微调。五、深入选择器Selector分类5.1 核心选择器介绍选择器是 QSS 的核心用于指定样式作用的控件常用选择器如下重点掌握加粗部分选择器类型示例说明全局选择器*匹配所有控件类型选择器QPushButton匹配所有 QPushButton 及其子类控件类选择器.QPushButton仅匹配 QPushButton 控件不包含子类ID 选择器#pushButton_2匹配 objectName 为 pushButton_2 的控件后代选择器QWidget QPushButton匹配 QWidget 所有后代中的 QPushButton子选择器QWidget QPushButton匹配 QWidget 直接子控件中的 QPushButton并集选择器QPushButton, QLineEdit同时匹配 QPushButton 和 QLineEdit属性选择器QPushButton[flatfalse]选择所有 QPushButton 中flat 属性为 false 的控件.5.2 实战试用几种类选择器#include widget.h #include QApplication int main(int argc, char *argv[]) { QApplication a(argc, argv); // 类型选择器对QWidget和它的子类都生效 // a.setStyleSheet(QWidget { color: red; }); // 类选择器只对QWidget生效 // a.setStyleSheet(.QWidget { color: red; }); // QString style QPushButton { color: red; }; // // 利用ID选择器给这两个按钮单独设置 // style #pushButton_2 { color: blue; }; // style #pushButton_3 { color: green; }; // 并集选择器, 可以选择组合使用 // QString style QPushButton, QLabel, QLineEdit { color: red; }; QString style #pushButton_2, QLabel, QLineEdit { color: red; }; a.setStyleSheet(style); Widget w; w.show(); return a.exec(); }5.3 实战选择器优先级验证int main(int argc, char *argv[]) { QApplication a(argc, argv); // 全局样式所有按钮为黄色 QString style QPushButton { color: yellow; } // 类型选择器 #pushButton { color: red; } // ID选择器优先级更高 .QPushButton { color: blue; }; // 类选择器 a.setStyleSheet(style); Widget w; w.show(); return a.exec(); }⭐结论objectName为pushButton的控件文本为红色ID 选择器优先级最高其他按钮为蓝色类选择器优先级高于类型选择器。实践中我们可以简单的认为, 选择器描述的范围越精准, 则优先级越高。⼀般来说, ID 选择器优先级是最高的。六、 子控件选择器美化控件内部元素Qt 部分复杂控件如下拉框QComboBox、进度条QProgressBar、滑动条QSlider内部包含多个子元素如下拉箭头、进度条填充块这些子元素无法直接通过基础选择器定位需要使用子控件选择器语法::子控件名称。大家也可以直接去查阅文档补充学习。6.1 核心语法 高频常用子控件/* 基础控件选择器 :: 子控件名称 */ 控件类型 { /* 控件本身的样式 */ } 控件类型::子控件名称 { /* 控件内部子元素的样式 */ }控件类型子控件名称说明QComboBox::down-arrow下拉框右侧的下拉箭头QComboBox::drop-down下拉框右侧的箭头容器包含箭头QProgressBar::chunk进度条的进度填充块已完成部分QSlider::handle滑动条的拖动滑块QCheckBox::indicator复选框的勾选框勾选图标容器6.2 实战 1简单美化下拉框QComboBox#include widget.h #include QApplication int main(int argc, char *argv[]) { QApplication a(argc, argv); // 用到qrc QString style QComboBox::down-arrow { image: url(:/down.png); }; a.setStyleSheet(style); Widget w; w.show(); return a.exec(); }更复杂的美化方案/* 美化下拉框 QComboBox */ QComboBox { /* 下拉框本身样式圆角、边框、内边距 */ border: 1px solid #dcdcdc; border-radius: 6px; padding: 4px 8px; padding-right: 25px; /* 给右侧箭头预留空间 */ color: #333; background-color: #ffffff; } /* 下拉箭头容器 */ QComboBox::drop-down { /* 取消容器默认边框设置右侧对齐 */ border: none; width: 20px; /* 容器宽度 */ right: 5px; top: 2px; bottom: 2px; } /* 下拉箭头图标 */ QComboBox::down-arrow { /* 自定义箭头样式颜色、大小也可使用图片替换 */ image: none; /* 取消默认箭头图片 */ border: 5px solid transparent; /* 用边框实现简易箭头 */ border-top-color: #666; /* 上边框变色形成向下箭头 */ width: 0; height: 0; margin-right: 5px; } /* 下拉框展开时的样式 */ QComboBox:on { border-color: #1ab394; /* 展开时边框变主题色 */ }6.3 美化进度条QProgressBar我们之前在学习进度条的时候其实就有使用过它的子控件了这里就直接给大家补充一个复杂点的美化方案。实现圆角进度条、自定义进度填充色、隐藏默认文本核心是美化::chunk子控件。/* 美化进度条 QProgressBar */ QProgressBar { /* 进度条本身样式圆角、边框、无文本 */ border: 1px solid #e6e6e6; border-radius: 10px; /* 进度条整体圆角 */ height: 12px; /* 进度条高度 */ text-align: center; /* 文本居中隐藏后无效 */ color: transparent; /* 隐藏默认进度文本 */ background-color: #f5f5f5; /* 进度条背景色未完成部分 */ } /* 进度填充块已完成部分 */ QProgressBar::chunk { border-radius: 9px; /* 填充块圆角略小于整体避免溢出 */ background-color: #1ab394; /* 主题色填充 */ width: 1px; /* 进度条步进宽度平滑过渡 */ }关键注意点子控件选择器必须搭配基础控件选择器使用不能单独使用如::down-arrow无效QComboBox::down-arrow有效部分子控件支持image属性可使用url(:/images/arrow.png)加载自定义图片替换默认样式子控件的位置可通过right、left、top、bottom调整尺寸可通过width、height设置。七、 伪类选择器实现控件的交互状态Qt 控件有多种交互状态如鼠标悬停、按下、禁用、选中伪类选择器语法: 伪类名称用于定位这些状态的控件实现交互感十足的样式效果。大家也可以直接去查阅文档补充学习Qt Style Sheets Reference 的 Pseudo-States 章节。7.1 核心语法 高频常用伪类/* 基础控件选择器 : 伪类名称 */ 控件类型:伪类名称 { /* 控件对应状态的样式 */ } /* 组合使用伪类 子控件实现更细腻的交互 */ 控件类型:伪类名称::子控件名称 { /* 控件对应状态下子元素的样式 */ }伪类名称适用控件说明:hover所有可交互控件鼠标悬停在控件上时:pressed按钮、滑块等鼠标按下控件未松开时:disabled所有控件控件被禁用setEnabled(false)时:checked复选框、单选框控件被选中时:focus输入框、按钮等控件获得焦点如输入框被激活时:on下拉框、开关等控件处于“打开 / 展开”状态时7.2 美化按钮QPushButton的交互状态实现按钮的默认、悬停、按下三种状态是项目中最常用的按钮样式模板。#include widget.h #include QApplication int main(int argc, char *argv[]) { QApplication a(argc, argv); QString style QPushButton { color: red; }; style QPushButton:hover { color: blue; }; style QPushButton:pressed { color: green; }; a.setStyleSheet(style); Widget w; w.show(); return a.exec(); }关键注意点伪类选择器支持组合使用如QPushButton:hover:pressed表示 “鼠标悬停且按下” 的状态伪类与子控件选择器组合时顺序固定控件::子控件:伪类无效控件:伪类::子控件有效:disabled状态的样式会覆盖其他状态需单独定义确保禁用时样式统一可通过cursor属性设置鼠标指针样式增强交互体验如pointer、not-allowed。注意事件机制也可以做到我们上面示例中的事情但是实现同样的功能,伪类选择器要比事件的方式简单很多.不过也不能就说事件机制就不好。事件可以完成的功能很多, 不仅仅是样式的改变, 还可以包含其他业务逻辑. 这⼀点是伪类选择器无法替代的。八、 盒模型理解控件的布局逻辑8.1 盒模型核心结构Qt 控件遵循 “盒模型” 设计从外到内分为 4 个部分直接影响控件的大小和间距----------------------------------- | MARGIN | - 外边距 (Margin Rectangle) | ----------------------------- | | | BORDER | | - 边框 (Border Rectangle) | | ----------------------- | | | | | PADDING | | | - 内边距 (Padding Rectangle) | | | ----------------- | | | | | | | CONTENT | | | | - 内容区 (Content Rectangle) | | | ----------------- | | | | | ----------------------- | | | ----------------------------- | -----------------------------------Content内容控件显示文本或图像的核心区域。Padding内边距内容区域与边框之间的空白距离。Border边框围绕在内边距和内容外的网格线条。Margin外边距控件边框与相邻其他控件/容器边界之间的距离。8.2 常用盒模型属性属性名说明示例margin四个方向外边距复合属性margin: 10px;上下左右均 10pxmargin-left左外边距margin-left: 5px;border边框复合属性宽度 样式 颜色border: 2px solid #666;border-radius边框圆角常用属性border-radius: 8px;padding四个方向内边距复合属性padding: 6px 12px;上下 6px左右 12px8.3 实战设置边框和内边距#include widget.h #include QApplication int main(int argc, char *argv[]) { QApplication a(argc, argv); QString style QLabel { border: 20px dashed red; padding-left: 50px;}; a.setStyleSheet(style); Widget w; w.show(); return a.exec(); }8.4 实战设置外边距#include widget.h #include ui_widget.h #include QPushButton #include QDebug Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui-setupUi(this); QPushButton* button new QPushButton(this); button-setGeometry(0,0,100,100); button-setText(按钮); button-setStyleSheet(QPushButton { border: 5px solid red; margin: 20px;}); qDebug()button-geometry(); } Widget::~Widget() { delete ui; }更复杂的美化方案ui-pushButton-setStyleSheet(R( QPushButton { /* 边框2px 实线 深灰色 */ border: 2px solid #333; /* 圆角8px数值越大越圆 */ border-radius: 8px; /* 内边距上下8px左右16px扩大点击区域 */ padding: 8px 16px; /* 外边距上下5px左右10px与其他控件保持间距 */ margin: 5px 10px; /* 文本颜色和背景色 */ color: #fff; background-color: #2f4050; } ));九、总结基本理念QSS 是 Qt 中强大且易用的 UI 美化工具借鉴了 Web 的 CSS 语法。样式控制通过选择器确定目标通过键值对设置属性优先执行局部和高权重样式如 ID 选择器。工程维护优先使用独立.qss文件管理全局样式避免硬编码和样式冲突。精细化控制结合伪类控制状态、子控件微调复杂部件利用盒子模型精确控制边距与布局。

相关新闻

Milvus介绍和使用

Milvus介绍和使用

1、什么是Milvus? Milvus 由 Zilliz 开发,并即将捐赠给 Linux 基金会旗下的 LF AI & Data Foundation,现已成为全球领先的开源向量数据库项目之一。 海量规模:单集合支持百亿级向量,水平扩展丰富索引&#xff1…

2026/10/13 9:49:58 阅读更多 →
AI自动修Bug实战:从一句Bug描述到复现、根因定位、最小修复与回归验证

AI自动修Bug实战:从一句Bug描述到复现、根因定位、最小修复与回归验证

AI自动修Bug实战:从一句Bug描述到复现、根因定位、最小修复与回归验证AI编程 Agent 智能体 Bug修复 软件测试 自动化测试 Python 代码审查 软件工程 持续集成一个 Bug 只有一句自然语言描述时,AI 能不能真正完成“复现—定位—修复—验证”&…

2026/10/13 9:49:58 阅读更多 →
具身智能创新原理(2):揭开具身智能本质区别于大模型的残酷真相

具身智能创新原理(2):揭开具身智能本质区别于大模型的残酷真相

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

2026/10/13 9:48:56 阅读更多 →

最新新闻

VS Code中高效读取HDF5文件:从插件预览到h5py实战

VS Code中高效读取HDF5文件:从插件预览到h5py实战

你有没有遇到过这种场面:同事或者对接方丢给你一个.h5文件,说是训练好的模型权重,或者某次实验的全部原始数据,你兴冲冲地在 VS Code 里双击打开,结果满屏都是二进制乱码。这个画面我见过太多次了,包括我自…

2026/10/13 10:37:18 阅读更多 →
数组类型与底层原理:从静态到动态、从同构到异构的全解析

数组类型与底层原理:从静态到动态、从同构到异构的全解析

数组这名字,表面上看人人都懂,可真到写代码的时候,你会发现不同语言里的“数组”完全是几个物种。拿一个 int[10] 丢给 C 程序员,他脑子里是 10 个连续排列的整数;递给 Python 程序员,他大概率会反问一句…

2026/10/13 10:37:18 阅读更多 →
LeetCode链表题全攻略:从虚拟头结点到快慢指针的通用解法

LeetCode链表题全攻略:从虚拟头结点到快慢指针的通用解法

最近在整理自己的LeetCode刷题笔记,链表这一章给了我不少感触。很多人刚开始刷题时,把链表当成“送分题”,结果一到手写环节就翻车——不是空指针异常,就是链表被改成了环,甚至在一个反转操作上卡了半小时。链表确实是…

2026/10/13 10:37:18 阅读更多 →
端侧AI密度定律:硬件、模型与工程的三重优化

端侧AI密度定律:硬件、模型与工程的三重优化

1. 这不是概念炒作,是芯片、模型、场景三股力量在端侧突然“对齐”了“端侧智能规模化元年”这八个字,最近在技术会议、投资人briefing和芯片厂商白皮书里高频出现,但很多人听完只留下一个模糊印象:好像AI要下到手机、摄像头、家电…

2026/10/13 10:37:18 阅读更多 →
x86实操操作系统:从实模式到保护模式的真机启动内核

x86实操操作系统:从实模式到保护模式的真机启动内核

简介:本资源是经典操作系统实践教程《自己动手写操作系统》(于渊著)配套源码与开发环境的完整压缩包,面向计算机专业本科生、嵌入式开发者及系统编程爱好者,解决操作系统原理难理解、内核开发无从下手的核心痛点。压缩…

2026/10/13 10:37:18 阅读更多 →
企业采购智能体选型:为什么原生嵌入业务流程更适合核心采购场景?

企业采购智能体选型:为什么原生嵌入业务流程更适合核心采购场景?

随着大模型和Agent进入企业采购,采购智能体正在从简单的问答、文本生成,逐步进入供应商推荐、询价比价、价格分析、合同审查、订单处理、履约分析等真实业务场景。企业在进行采购智能体选型时,也开始面对不同的建设模式。 一种是通用桌面智能…

2026/10/13 10:36:15 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →