此次讲Qt Style Sheet(QSS),QSS是一种与CSS相似的语言,实际上这二者几乎彻底同样。既然谈到CSS咱们就有必要说一下盒模型。git
在样式中,每个UI控件均可以抽象成一个盒模型:github
盒模型由4个同心矩形组成,从外到内分别是外边距、边界、内衬和内容,大部分UI视觉内容都包含在内容矩形中。默认状况下,前三个矩形的大小属性都是0,所以这四个矩形都重叠成一个了。这里与前三个大小相关的属性有:布局
QSS与CSS类似,所以这里只大概介绍QSS的特色:学习
::
)与Q 的子控件写法冲突,所以改用--
来表示命名空间。这里咱们经过一个示例程序来接触QSS,由于实例程序涉及多个控件但咱们篇幅有限,咱们只介绍菜单相关的样式设置。菜单分为两部分:菜单栏(QMenuBar)、菜单(QMenu)。url
咱们把菜单栏宽度设置成大于等于菜单item的宽度60px(这里的width不指代整个菜单栏的宽度,比较奇怪),防止item的宽度被菜单栏的宽度限制,而且设置灰色点边框。spa
QMenuBar { width:60px; background-color:white; border:1px dotted gray; }
item这里代指菜单栏上的每一项菜单,咱们设置边框位groove以使其看起来有凹凸效果;设置margin-right,这样两个item之间会有合适的间隔;咱们还在不一样的状态下设置不一样的背景颜色,这样交互上比较友好。code
QMenuBar::item { height:15px; width:60px; background:transparent; border:2px groove gray; margin-right:1px; } QMenuBar::item:selected { color:green; background-color:rgb(236, 242, 245); } QMenuBar::item:pressed { color:green; background-color:rgb(233, 227, 227); }
菜单咱们设置成与菜单栏同样;菜单的item指代每个菜单选项,咱们对其设置合适的margin和padding大小,border、item的selected和pressed状态设置成菜单栏的样式,使其看起来布局空间合理且与菜单栏一致:对象
QMenu { background-color:white; border:1px solid rgb(0, 171, 255); padding:1px; } QMenu::item { height:15px; width:60px; background-color:white; margin:1px; padding:2px 2px 2px 20px; border:2px groove gray; } QMenu::item:selected { color:green; background-color:rgb(236, 242, 245); } QMenu::item:pressed { color:green; background-color:rgb(233, 227, 227); }
咱们重绘菜单之间的间隔条(separator),简单的用浅蓝色填充1像素高的背景:blog
QMenu::separator { height:1px; margin:1px; background-color:lightblue; }
菜单的选中指示框和子菜单咱们用图片来显示,图片选用png格式,保持透明通道,使其与背景一致:图片
QMenu::indicator:checked { width:10px; height:10px; margin-left:3px; border:0px solid blue; image:url(:/checked-icon.png); } QMenu::right-arrow { width:15px; height:15px; image:url(:/right-arrow.png); }
程序的完整运行结果以下:
代码见连接。
优势:
缺点: