使用Qt样式表
Qt的样式表主要是受到了CSS的启发。因为样式表是一种在运行时解释的普通文本文件,使用它们不需要具备任何编程知识。样式表作用于上层的当前激活的QStyle上(例如QWindowsVistaStyle)。因为创建样式表不引入任何子类,所以它们适合对现有窗口部件做微小的定制。
与调色板相比
使用样式表比修改窗口部件的调色板更可靠性。这是因为QPalette中的实体(Base、Button、Highlight,等等)在不同样式中的用法不一样的。例如,QWindowsStyle用Base调色板实体填充只读组合框的背景,然而,QPlastqueStyle使用Button实体完成这一功能。此外,有些样式使用硬编码的图像呈现某个元素,从而跳过了调色板。相反,样式表则保证了无论激活的是哪种样式,都可以使用指定的颜色。
基本语法
1、样式表单由一系列样式规则组成。如下图所示:
QLineEdit称为选择器(selector),background-color是属性,yellow是属性值。
注意:Qt的样式表语法不区分大小写,所以color,Color,coLor,coloR都表示同样的颜色属性。但是指代类的类名的时候,是区分大小写的。
2、多个选择器可以并列使用,之间用逗号隔开。如下图所示:
3、前面的选择器都是类的名字,还有其他的一些可以使用的选择器。样式表选择器如下图所示:
例如,为了选择所有称作“okButton”的QPushButton,它们的x和y属性为0,名为“frame”的QFrame直接对象,可以这样写:
4、可以通过辅助控制器(subcontrol)控制外观,最常见的自定义辅助控制器如下图所示:
例如:复选框和单选按钮的状态指示器的大小为20*20像素:
5、除了辅助控制器,样式表还可以用来指定窗口部件的各个状态。窗口部件中一些可以访问样式表的状态如下图所示:
例如:当鼠标在复选框的文本上悬停时,用白色指定它的:hover状态:
6、大多数的Qt窗口部件都可以支持如下图所示的盒子模型。此模型可以指定4个影响布局的矩形,从而绘制一个自定义的窗口。
- contents rectangle是最里面的矩形。它是绘制窗口部件内容(例如文字或图片)的地方。
- padding 包围contents rectangle。它负责由padding属性指定填充操作。
- border rectangle 包围 padding rectangle。它为边界预留空间。
- margin rectangle是最外边的矩形。它包围border rectangle,负责任何指定的边缘空白区域。
对于没有padding、border和margin的普通窗口部件,这四个矩形重合在一起。
例如:padding属性允许我们指定窗口部件的上边、右边、下边和左边的填充空间。
7、如果想窗口部件可以缩放,背景使用CSS的边界图(border image)机制定义。
与使用background-image定义的背景图像不同,边界图被分隔成3*3的小格,如下图所示。当填充窗口部件背景时,四个角(图中的格子A、C、G和I)保持不变,其他五个格子被拉伸或平铺,填充可用空间。
使用border-image属性可以指定各个边界面,它要求指定一个图像文件名和定义九个格子的四条“切线”。切线用其到上、右、下和左边缘的距离定义。border.png作为边界图,距离上、右、下和左边缘的切线为4、8、12和16,应该这样定义:
border-image: url(border.png) 4 8 12 16;
当使用边界面时,必须显式地设置border-width属性。一般情况下,border-width应该与切线的位置一致;否则,为了与border-width相符合,角上的格子将被拉伸或缩短。对于border.png的例子,应该这样指定边框宽度:
border-width: 4px 8px 12px 16px;