Qt样式表(style sheet)是用于定制用户界面的强有力的机制,其概念、术语是受到HTML中的级联样式表(Cascading Style Sheets,CCS)启发而来,只是Qt样式表是用用于窗体界面,与HTML的CSS类似,Qt的样式表是纯文本的格式定义,在应用程序运行时可以载入和解析这些样式定义。使用样式表可以定义各种界面组件(QWidget类及其子类)的样式,从而使应用程序的界面呈现不同的效果。很多软件具有换肤功能,使用Qt的样式表就可以很容易的实现这样的功能
多多翻看Qt官方文档,所有控件都有案例:在索引栏输入Qt style
1.盒子模型


默认情况下MARGIN矩形、BORDER矩形、PADDING矩形的宽度都为0,这样在默认情况下,4个矩形就重合为1个CONTENT矩形了。
同样,默认情况下background-image指定的背景,只在border内的区域绘制。但我们要也可以使用background-clip或background-origin属性来更改这种默认行为。
background-image按图片实际尺寸显示图片,超过控件显示区域的部分会被裁剪掉,虽能显示SVG,但无法对SVG进行无损缩放;- image按图片原长宽比来缩放图片,保证填充满控件content区域,支持SVG矢量图显示和无损缩放;
- border-image 按控件border区域的长宽比来缩放图片,保证填充满控件border区域,支持SVG矢量图显示和无损缩放
- 绘制顺序:如果在一个控件中同时指定
background-image,border-image,image这三个属性,会按照如下的顺序进行绘制:
先绘制 background-image
然后 border-image
最后 image
2.QSS加载方式




二进制文件的生成:
使用
rcc工具将.qrc文件编译成二进制文件rcc -binary resources.qrc -o resources.rcc
代码中程序启动时加载注册二进制资源文件:
QResource::registerResource("resources.rcc");
3. QSS选择器类型




4.QSS常用属性





5.QSS伪状态和子控件

6.QSS的级联

7.QSS继承

8.Qt自带样式参考
Qt中自带了许多样式example可以在Assistant中查找这些样式进行参考,实际项目中对于一些工具类软件,样式要求不高可以参考修改应用;但对于出售的重交互类商业软件样式极为重要,必须严格遵循UI设计的稿子进行样式设置。


9.实际项目中一些问题和解决
9.1QFrame和QWidget的背景问题
1. QWidget的样式表限制
QWidget默认不会自动填充背景,即使设置了background-color样式,也可能不生效。这是因为:QWidget的autoFillBackground属性默认为false,不会主动绘制背景。需要显式调用setAutoFillBackground(true)或通过样式表强制启用背景绘制。
示例代码(解决问题)widget->setAutoFillBackground(true);
2. QFrame背景生效
QFrame是QWidget的子类,但默认支持背景绘制:专为样式化设计,内置对边框、背景的处理逻辑。默认autoFillBackground可能为true(依赖具体样式),或通过frameShape等属性触发重绘。
3. 根本原因
QWidget的轻量化设计:作为基类,为避免性能开销,默认不处理背景,无边框。
QFrame的增强功能:通过paintEvent重写等方式确保样式生效。
4. 使用建议
若需要定制背景/边框,优先选择QFrame。
对QWidget使用样式表时,务必确认:设置autoFillBackground(true)
一般自定义组件可以选择QWidget但如果需要快速应用标准UI边框(如分组框QGroupBox、标签QLabel的基类就是QFrame)或作为其他复杂控件的基础,或单纯作为容器等QFrame更合适。
1103

被折叠的 条评论
为什么被折叠?



