【Qt学习笔记】14.界面的样式 (Qt Stylesheet)
一、StyleSheet的基本用法
StyleSheet : 样式单
Qt中支持StyleSheet技术,将界面的样式定义分离开来。采用和HTML/CSS类似的形式,使用一个文本文件来单独定义样式。
通常,用于定义界面样式的StyleSheet称为“皮肤”
StyleSheet的定义:
定义一个StyleSheet,前面是类名(称为Selector),大括号内是属性定义,支持/**/注释语法
例如:
/*以GBK保存*/QLineEdit{background:yello;}//注意末尾没有分号QPushButon,QLineEdit{color:blue;}//注意末尾没有分号
StyleSheet的使用:
1、设置全局样式:
可以在main函数中,直接给QApplication设置样式,此样式为全局样式
QStringstyle="QPushbutton{color:blud;}";a.setStyleSheet(style);//a是QApplication类型的对象
2、设置窗口样式:
可以给某个窗口对象设置样式
QStringstyle="QPushbutton{color:blue;}";w.setStyleSheet(style);//w是窗体
样式的重复定义:
1、对同一个对象调用多次setStyleSheet,则后设置的生效,先前的设置全部丢弃。(替换)
2、下层的样式覆盖上层(叠加)
全局样式(上层) >>> 窗口样式 >>> 子窗口样式(下层)
结果:相同的属性发生覆盖,其他部分保留
皮肤文件:
通常,把样式的内容存放到一个文本文件里,然后在程序打开时加载,此文本称为皮肤文件
//在main中读取皮肤文件的内容QStringstyle=readfile("skin.css");a.setStyleSheet(style);
要注意文件的编码,在中文的Windows上编辑文本文件时,默认的是GBK编码
二、StyleSheet的语法——Selector
Selector:主体是类名
1、属性的叠加:在一个stylesheet里,后写的定义会覆盖先写的定义
2、包含本类和子类的定义
3、同一行中,可以写多个类型,以逗号分隔
QPushButton,QLineEdit,QCheckBox{background:color:black;}
按属性区分:
假如有8个QPushButton,但想将它们 分成2组,分别有不同的样式,怎么实现呢?
一种办法是写一个子类继承QPushButton,然后对这个子类单独设置样式,
但这种场景,Qt已经为我们提供了一种处理方式
之前或许我们就注意到,每个控件都有一个属性: whatsThis
该属性就是用来处理这种场景的。
使用:
QPushButton[whatsThis="classic"]{color:green;}QPushButton[whatsThis="modern"]{color:red;}
此外,还有一种区分方法:按ID区分(即object name,变量名)
QPushButton#btnSearch{color:green;}
但这种方法有缺陷,通常还是按属性分比较好
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。