Qt样式表

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

         Qt样式表(style sheet)是用于定制用户界面的强有力的机制,其概念、术语是受到HTML中的级联样式表(Cascading Style Sheets,CCS)启发而来,只是Qt样式表是用用于窗体界面,与HTML的CSS类似,Qt的样式表是纯文本的格式定义,在应用程序运行时可以载入和解析这些样式定义。使用样式表可以定义各种界面组件(QWidget类及其子类)的样式,从而使应用程序的界面呈现不同的效果。很多软件具有换肤功能,使用Qt的样式表就可以很容易的实现这样的功能

多多翻看Qt官方文档,所有控件都有案例:在索引栏输入Qt style

1.盒子模型

        默认情况下MARGIN矩形、BORDER矩形、PADDING矩形的宽度都为0,这样在默认情况下,4个矩形就重合为1个CONTENT矩形了。

        同样,默认情况下background-image指定的背景,只在border内的区域绘制。但我们要也可以使用background-clip或background-origin属性来更改这种默认行为。

  • background-image按图片实际尺寸显示图片,超过控件显示区域的部分会被裁剪掉,虽能显示SVG,但无法对SVG进行无损缩放;
  • image按图片原长宽比来缩放图片,保证填充满控件content区域,支持SVG矢量图显示和无损缩放;
  • border-image 按控件border区域的长宽比来缩放图片,保证填充满控件border区域,支持SVG矢量图显示和无损缩放
  •  绘制顺序:如果在一个控件中同时指定background-imageborder-imageimage这三个属性,会按照如下的顺序进行绘制:
先绘制 background-image
然后 border-image
最后 image

2.QSS加载方式

二进制文件的生成:

使用 rcc 工具将 .qrc 文件编译成二进制文件

rcc -binary resources.qrc -o resources.rcc

代码中程序启动时加载注册二进制资源文件:

QResource::registerResource("resources.rcc");

3. QSS选择器类型

4.QSS常用属性

5.QSS伪状态和子控件

6.QSS的级联

7.QSS继承

8.Qt自带样式参考

        Qt中自带了许多样式example可以在Assistant中查找这些样式进行参考,实际项目中对于一些工具类软件,样式要求不高可以参考修改应用;但对于出售的重交互类商业软件样式极为重要,必须严格遵循UI设计的稿子进行样式设置。

9.实际项目中一些问题和解决


9.1QFrame和QWidget的背景问题


    1. QWidget的样式表限制
    QWidget默认不会自动填充背景,即使设置了background-color样式,也可能不生效。这是因为:QWidget的autoFillBackground属性默认为false,不会主动绘制背景。需要显式调用setAutoFillBackground(true)或通过样式表强制启用背景绘制。
    示例代码(解决问题)widget->setAutoFillBackground(true);

    2. QFrame背景生效
    QFrame是QWidget的子类,但默认支持背景绘制:专为样式化设计,内置对边框、背景的处理逻辑。默认autoFillBackground可能为true(依赖具体样式),或通过frameShape等属性触发重绘。
    3. 根本原因
    QWidget的轻量化设计:作为基类,为避免性能开销,默认不处理背景,无边框。
    QFrame的增强功能:通过paintEvent重写等方式确保样式生效。
    4. 使用建议
    若需要定制背景/边框,优先选择QFrame。
    对QWidget使用样式表时,务必确认:设置autoFillBackground(true)
    一般自定义组件可以选择QWidget但如果需要快速应用标准UI边框(如分组框QGroupBox、标签QLabel的基类就是QFrame)或作为其他复杂控件的基础,或单纯作为容器等QFrame更合适。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值