一、样式表存在形式
- qss文件存在,可以通过文件加载进行设置
- 直接写在ui文件或者代码中
二、盒模型
从外到内
- margin rectangle:最外面的矩形,主要是负责与其他窗口部件间的距离
- border rectangle:包围padding rectangle, 为边界预留空间,可认为是窗口的外框线
- padding rectangle: 包围content rectangle,由padding属性指定填充操作,主要是窗口部件内容与边缘线(border)之间的空隙,由top,right,bottom和left设置他的大小;
- 绘制窗口部件的内容的区域,如文字、图片
二、 qss样式语法
- qss样式组成
在qss中,一个样式由选择器(selector)和声明(declaration)组成,其中,选择器确定了样式的作用对象,声明确定了作用于该对象的确切样式,如:
QPushButton
{
color: red
}
可以同时对多个对象进行设置样式,用逗号来分隔选择器
声明部分是由一个或多个<属性:值>键值对组成的列表,由分号相隔
2. qss选择器
3. 子控件
qss为复杂的部件定义了很多子控件,方便对于这些复杂控件的样式进行控制,如QComboBox,形式为选择器::子控件名
example
QComboBox::drop-down
{
image: url(dropdown.png)
}
subcontrol-origin :子控件定位,选择哪个就在哪个的里面
subcontrol-position:子控件的水平和竖直方向设置,如left center,就是水平靠左,竖直中心
position:relative 和position:absolute相对偏移和绝对偏移
以下子控件可用:
4. 伪状态
组成:选择器 : 伪状态名
三、解决冲突
- 具体到某一个对象的比所有类的优先
- 具有伪状态的选择器比不指定伪状态的选择器的更具体
- 当两个选择器具有同样特异性,最后一条优先
- 级联效应,部件自身的样式表的优先级要高于任何由祖先部件继承过来的样式表,同样父部件的样式高于祖先的
- qss中子部件不会自动继承父部件属性,需要父部件进行额外声明
- 命名控件中的部件需要加ns–
- 自从Qt4.3以后,任何可设计的Q_PROPERTY都可以通过qproperty-语法来设置
为了确定规则的特殊性,Qt样式表遵循CSS2规范:
选择器的特异性计算如下:
计算选择器中ID属性的数量(= a)
计算选择器中其他属性和伪类的数量(= b)
计算选择器中元素名称的数量(= c)
忽略伪元素[即,子控件。
连接三个数字abc(在具有大基数的数字系统中)给出了特异性。
一些例子:
* {} / * a = 0 b = 0 c = 0 - >特异性= 0 * /
LI {} / * a = 0 b = 0 c = 1 - >特异性= 1 * /
UL LI {} / * a = 0 b = 0 c = 2 - >特异性= 2 * /
UL OL + LI {} / * a = 0 b = 0 c = 3 - >特异性= 3 * /
H1 + * [ REL = up ] {} / * a = 0 b = 1 c = 1 - >特异性= 11 * /
UL OL LI 。red {} / * a = 0 b = 1 c = 3 - >特异性= 13 * /
LI 。红色。等级 {} / * a = 0 b = 2 c = 1 - >特异性= 21 * /
#x34y {} / * a = 1 b = 0 c = 0 - >特异性= 100 * /
四、项目中需要注意的点
- 设置边框颜色和像素的时候,必须先像素再颜色
- 在QSS中设置宽高必须要使用 min-width和min-height,max-width,max-height来设置,用width和height设置是没有任何效果的