Qt Style Sheets

Qt - 通用实时样式Qss刷新 - 知乎 (zhihu.com)

上面的文章提到的实时刷新很好用!

推荐给大家!


下面是Qt官方文档中Qt Style Sheets的一部分翻译。

因为我最近感觉自己在这方面还需要再补补课,就再研究研究。


 使用样式层叠表定制Qt Widgets

当使用样式层叠表时,每个widget被看成一个带有4个同中心(类似坐标的原点)的矩形的盒子:

margin 矩形 (页边空白)

border 矩形   (边框)

padding 矩形 (内边距)

content 矩形  (内容)

盒子模型更详细地描述了上面的内容。


盒子模型

这4个同中心的矩形从概念上呈现如下:

margin落在border的外边

border在margin和padding之间被绘制

padding落在border内部,在border和实际的contents之间

content就是我们移出(去掉)margin,border和padding后,原始widget或子控件(subcontrol)所剩下的内容。

margin,border-width和padding属性都默认是0。因此,默认情况下,4个矩形(margin,border,padding,content)恰好重叠。

 margin,border-width和padding三者是在一个层次的(你可以看到,它们的定义都差不多),都表示长度(length)。

margin和padding都是无法被看见的(就是没有颜色) 

border不一样,可以通过指定border的width,style,color来可视化。


你可以使用background-image属性为widget指定一个background。

效果图:

我在工作中还没怎么用到过background-image,用border-image比较多。 


 默认地,background-image只在border内部被绘制。

这可以通过background-clip属性被改变。

你可以使用background-repeat和background-origin来控制background-image的重复和原点。


background-image不会随着widget的大小改变而改变。为了提供一个皮肤或随着widget大小改变而改变的background,必须使用border-image。

因为border-image属性提供了一个供选择的background,不需要指定background-image当border-image被指定时。在特定情况下,当它们都被指定时,border-image被画在background-image上面。


此外,image属性可能被使用来绘制图片在border-image更上面一层。

当image的大小与widget的大小不匹配时,被指定的image不会平铺和伸展,它的对齐使用image-position属性来指定。不同于background-image和border-image,我们可以指定一个svg在image属性中,在这种情况下image会随着widget大小自动调整大小。


渲染规则的步骤如下:

为整个渲染操作设置剪辑(border-radius)

绘制background(background-image)

绘制border(border-image, border)

绘制最上层的image(image)


子控件

一个widget被视为子控件的一个层次结构(tree)。(不太好理解)

例如:QComboBox绘制drop-down 子控件,然后绘制down-arrow子控件。

QComboBox区域包含drop-down区域

drop-down区域包含drop-arraw区域

因此,一个QComboBox按如下顺序被渲染:

Render the QComboBox { } rule
Render the QComboBox::drop-down { } rule
Render the QComboBox::down-arrow { } rule

 Sub-controls共享一个parent-child关系,在QComboBox这个例子中,down-arrow的父亲是drop-down,drop-down的父亲是widget本身。

子控件被放置在它们的父亲窗体内,利用subcontrol-position和subcontrol-origin属性。

一旦被放置,子控件可以使用box model来设计。


注意:对于复杂的widgets,比如QComboBox和QScrollBar,如果一个属性或子控件被订制,所有其他属性或子控件也都必须被订制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伸头看云朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值