QSS美化

article/2025/9/28 22:26:18

摘自:https://qtdebug.com/qtbook-qss/

Qt 提供的 widget 的默认外观很多时候都不符合项目的界面需求,必须要改,修改一个 widget 的外观(Look and Feel)有以下的方法:

  • 继承 Widget,然后在 paintEvent() 里绘制
  • 继承 QStyle
  • 使用 QSS(Qt Style Sheet)
  • 对于 item view 来说还有一种方式,还可以使用 Delegate

这几种方式里最简单灵活的是使用 QSS,虽然有人说 QSS 的效率低,具体有多低没测试过,但是在普通 PC 上从来没感觉出来,再说现在的硬件也不差这么点性能消耗,随便一个写的差点的函数的消耗就比这多的多,作为一个实用主义者,不追求理论上的效率完美,能满足需求的前提下什么好用用什么,QSS 就是修改 widget 外观的首选,什么效果不满意,修改一下 QSS 的文件就可以看到效果,甚至不需要重新编译、打包发布程序(如果把 QSS 放在文件中,并且实现动态加载 QSS)。

我们按下面的章节来介绍 QSS:

  • QSS 基础
  • 加载 QSS
  • 盒子模型
  • QSS 选择器
  • Border-Image
  • QSS Subcontrol
  • QSS CalendarWidget

 

border-image用于给border(边框)贴上背景图像

类似于CSS中的background(背景)属性。 例如:background:url(xx.jpg) 27px no-repeat;指的是图片(url(xx.jpg)),位置(27px),重复性(no-repeat)。

border-image与此类似,border-image包括图片,剪裁位置(与background位置一样,也是数值,也支持百分值),重复性。
例如:border-image:url(border.png) 27 repeat; 指的就是图片(url(border.png)),剪裁位置(27),重复方式(repeat)。
图片描述

  1. 下面我们将border-image的复合写法分解描述,
  2. border-image的主要参数就是上面提到的三个:图片,剪裁位置,重复性。
  3. 其实还有另外两个,文章最后面再讲。更好理解

1、图片(border-image-source)

  • border-image的背景图使用url()调用,图片可以是相对路径或是绝对路径,也可以不使用图片,即border-image:none;

2、图片剪裁位置(border-image-slice)

  • 没有单位,默认单位就是像素(px)。例如:border-image:url(border.png) 27 repeat;这里的27专指27px。

  • 支持百分比值,百分比值大小是相对于边框图片的大小,假设边框图片大小为400px*300px,则20%的实际效果就是剪裁了图片的60px 80px 60px 80px的四边大小。

  • 剪裁特性。类似于CSS中的clip属性。其有1~4个参数,代表上右下左四个方位的剪裁,符合CSS普遍的方位规则(与margin,padding等或border-width一致),举个简单的例子,前面提到,支持百分比宽度,所以这里“30% 35% 40% 30%”的示意可以用下图表示:
    clipboard.png

距离图片上部30%的地方,距离右边35%,距离底部40%,左边30%的地方各剪裁一下。也就是对图片进行了“四刀切”,形成了九个分离的区域,这就是九宫格,这是下面深入讲解border-image的基础。

3、重复性(border-image-repeat)

取值为repeat(重复)只是其中之一,其余两个是round(平铺)和stretch(拉伸)。其中,stretch是默认值。

参数0~2个,0则使用默认值 – stretch,例如:border-image:url(border.png) 30% 40%;就等同于border-image:url(border.png) 30% 40% stretch stretch;;1则表示水平方向及垂直方向均使用此参数;2个参数的话则第一个参数表水平方向,第二个参数表示垂直方向。例如:border-image:url(border.png) 30% 40% round repeat;表示水平方向round(平铺),垂直方向repeat(重复)。

关于round 和repeat 的区别。
round会凑整填充(进行了适度的拉伸)。repeat不进行拉伸,不凑整。 具体效果看文章后边的例子。

4、实际渲染规则

通过裁切属性值,将边框背景图切出了“九宫格”的模型,那这张背景图怎么对应地贴在div的边框上呢?

clipboard.png <————————> 图片描述

图片描述

  • 如图 在border-image中的橙红色的四个边角只会呆在border的四个角,并且水平和垂直方向均被拉伸来填充border的四个角。
  • 如图 上下区域即border-top-image和border-bottom-image受到第一个参数——水平方向效果影响:如果为repeat,则此区域被水平重复(round水平平铺,stretch水平拉伸)来填充对应的上下border【该区域在垂直方向上首先会按所对应的border-image-width的值等比缩放,然后再按参数设置在边框水平方向上进行重复或平铺或拉伸】
  • 左右区域border-left-image和border-right-image 的作用效果亦然【该区域在水平方向上首先会按所对应的border-image-width的值等比缩放,然后再按参数设置在边框垂直方向上进行重复或平铺或拉伸】

图片描述



我们用下图(27×3)px *(27×3)pxpng 做实验,我给不同部位加了一个序号做标志,便于观察。
图片描述

  1. // 加一个蓝色背景的父级,便于我们分析效果。
  2. .border_image {
  3. width: 400px;
  4. height: 115px;
  5. border: 3em double orange;
  6. -webkit-border-image: url(border.png) 27 round;
  7. border-image: url(border.png) 27 round;
  8. }
  9. .box {
  10. background: blue;
  11. }
  12. <div class="box">
  13. <div class="border_image"></div>
  14. </div>

效果如下
clipboard.png


  1. //去掉重复属性,即默认都为stretch
  2. border-image: url(border.png) 27;

效果如下
clipboard.png


  1. //使用repeat
  2. border-image: url(border.png) 27 repeat;

效果如下
clipboard.png



  1. //边框宽度改变
  2. border-image: url(border.png) 27 repeat stretch;
  3. border-width: 3rem 1rem;

效果如下

clipboard.png



5、(边框背景宽度)border-image-width

  1. 这个属性默认是边框的宽度,用来限制相应区域背景图的范围,
  2. 首先相应背景区域的图像会根据这个属性值进行缩放。然后再重复或平铺或拉伸。
  3. 在复合写法中应该位于 slice属性 和repeat属性中间 用“/”间隔
  4. 如:border-image:url(border.png) 27 / 6rem / repeat;

语法:border-image-width: [ <length> | <percentage> | <number> | auto ]{1,4}

  1. length 带 px, em, in … 单位的尺寸值
  2. percentage 百分比
  3. number 不带单位的数字;它表示 border-width 的倍数
  4. auto 使用 auto, border-image-width 将会使用 border-image-slice 的值
  1. border: 3em double orange;
  2. border-image: url(border.png) 27 round;
  3. border-image-width: 6rem;

效果如下
(白框为border)
图片描述

    border-image-width: 1.5rem;

效果如下
(白框为border)
图片描述


  1. border: 3em double orange;
  2. border-image: url(border.png) 27 round;
  3. border-image-width: 6rem 1.5rem;

效果如下
(白框为border)
图片描述

6、(边框背景扩散)border-image-outset

  1. 语法:border-image-outset: [ <length> | <number> ]{1,4}
  2. 相当于把原来的贴图位置向外延伸。不能为负值,试一下就知道。
  3. 在复合写法中应该位于 border-image-width 后面,用“/”间隔
  4. 如:border-image:url(border.png) 27 / 6rem / 1.5rem /repeat;
  5. 向外延伸1.5rem再贴图。。
  1. border: 3em double orange;
  2. border-image: url(border.png) 27 round;
  3. border-image-width: 1.5rem;
  4. border-image-outset: 1.5rem;

效果如下:
(白框为border)
图片描述
ps 部分资料来源网络


http://chatgpt.dhexx.cn/article/Mr3dNZ37.shtml

相关文章

Qss换肤设置

前言&#xff1a;本文大部分的内容来源于同类博客。章节1.1-1.3 摘自参考文档&#xff1a;http://www.th7.cn/web/html-css/201405/37286.shtml。1.4摘自参考文档。https://blog.csdn.net/Staranywhere/article/details/106967756。本文仅用作知识点整理。 目录&#xff1a; 1…

qss之QRadioButton

先来个示例 QRadioButton {font-family: "Microsoft YaHei";font-size: 14px;color: #BDC8E2;background-color: #2E3648; }效果图如下&#xff1a; 上面的例子是基本的样式设置&#xff0c;下面我们将探讨 QRadioButton 各种样式设置&#xff1a; 字体样式 font…

QSS的使用

QSS官方文档&#xff1a;https://doc.qt.io/qt-5/stylesheet-reference.html 图标制作例子: normal hover press disable 图标制作 按钮设计指南 按钮多态的几种方法 一、程序应用qss文件 QString qssPath QString("%1/stylesheet/style.qss").arg(a.applicationD…

QSS属性大全

1、选择器 1.1、通用选择器 /* 格式&#xff1a;* { 属性: 值; } 通用选择器一般用来给应用程序设置统一的字体&#xff0c;大小&#xff0c;颜色等 */ * {font-family: "Microsoft YaHei";outline: 0px;color: #DCDCDC; }1.2、类型选择器 /* 格式&#xff1a; 类…

Qt之QSS使用与基本语法

一、QSS介绍 QSS是一种从CSS借鉴过来的机制&#xff0c;用来实现对控件外观的自定义。但是它比CSS功能要弱化一些&#xff0c;有一些属性和选择器&#xff0c;QSS并没有。 Qt中的各个控件可以使用QSS来实现界面的个性化定制、美化&#xff0c;使用起来也是特别方便的。 二、Q…

QTreeWidget样式qss

文章目录 QTreeWidget/QTreeView样式QHeaderView背景属性alternate-background-color&#xff1a;交替背景色background&#xff1a;背景属性background-color&#xff1a;控件的背景色background-image&#xff1a;用于控件的背景图像。如果图像有透明部分则显示透明部分。bac…

qss文件使用

每个控件提供的样式太少&#xff1f;只能简单的设置颜色、字体颜色、字体大小&#xff1f;每次设置都要输入好长一串好麻烦&#xff1f; 现在你只要写一段qss就能满足你的一切需求&#xff0c;实现效果如下 本文将从下面三个方向慢慢阐述qss的使用 1、如何使用qss 2、如何修…

QSS 基础

如果你会 CSS&#xff0c;那么 QSS 对你来说将会非常简单&#xff0c;QSS 的语法和 CSS 的愈发非常相似&#xff0c;但也有些不同&#xff0c;有些 CSS 的东西在 QSS 里被去掉了&#xff0c;QSS 也加了些自己特有的东西&#xff0c;不过大多数还是差不多的&#xff0c;下面以修…

Qt QSS使用

一、选择器类型 Qt QSS选择器和CSS2、CSS3的选择器类似&#xff0c;建议先学习或者复习一下CSS选择器的语法。QSS虽然和CSS类型&#xff0c;但有也稍许不同&#xff0c;而且支持的语法也没那么多&#xff0c;具体讲解如下。 1.1 类选择器 /* 匹配QPushButton的实例及其子类 …

QSS 介绍

目录 一、自定义 widget 的两种方式二、一个简单示例三、QSS 比 QPalette 强大四、使用 Qt Designer 方便查看 qss 效果 一、自定义 widget 的两种方式 自定义 widget 外观的方式有两种&#xff1a; 子类化 QStyle&#xff1b;使用 Qt Style Sheets 机制&#xff1b; Qt Sty…

学习QSS样式表

文章目录 一、 什么是QSS二、辅助工具三、Qt样式表设置函数&#xff1a;setStyleSheet四、Qss选择器1、通用选择器2、类型选择器3、类选择器4、ID选择器5、后代选择器6、子元素选择器7、属性选择器8、并集选择器9、子控件选择器10、伪类选择器11、选择器的匹配规则 五、QSS常用…

QSS自定义属性

1.基本使用 &#xff08;参见 Qt 文档页章节 Setting QObject Properties&#xff1a;https://doc.qt.io/qt-5/stylesheet-syntax.html&#xff09; 从 Qt 4.3 及更高版本开始&#xff0c;可以使用 qproperty- <属性名称> 语法设置任何 designable 的 Q_PROPERTY &…

QSS

摘自&#xff1a;https://qtdebug.com/qtbook-qss/ Qt 提供的 widget 的默认外观很多时候都不符合项目的界面需求&#xff0c;必须要改&#xff0c;修改一个 widget 的外观&#xff08;Look and Feel&#xff09;有以下的方法&#xff1a; 继承 Widget&#xff0c;然后在 pai…

QSS 语法

目录 1. 基本语法1.1 样式规则1.2 选择器、声明1.3 大小写1.4 多个选择器 2. 选择器2.1 通用选择器&#xff1a;*2.2 类型选择器&#xff1a;QPushButton2.3 属性选择器&#xff1a;QPushButton[flat"false"]2.4 类选择器&#xff1a;.QPushButton2.5 ID 选择器&…

QSS(Qt样式表)概念

Qt样式表是一个可以自定义部件外观的十分强大的机制&#xff0c;除了QStyle更改的样式&#xff0c;其他的都可以由QSS修改。由于受到Html的CSS启发&#xff0c;所以叫QSS。 代码添加样式表ui界面上添加样式表 代码添加样式表&#xff1a; setStyleSheet&#xff08;&#xff0…

【QT】QSS使用总结

文章目录 主要流程&#xff1a;导入QSS文件&#xff1a;1. 添加Qt Resource File文件&#xff0c;输入名称2. 在工程文件目录下先建一个".txt"文件&#xff0c;重新命名后缀为".qss"3. 右键添加现有文件qss.qss4. 完成添加5. 将 qss样式应用到整个工程 QSS…

01_1_Qt工程实践_Qt样式表Qss(什么是QSS;基本语法;setStyleSheet函数;样式表的属性值;利用QtCreate实现样式切换;样式表实现皮肤改变实例)

本篇介绍什么是样式表&#xff0c;讨论如何使用Qt样式表Qss修改应用程序外观&#xff0c;并通过实例进行讲解。 了解HTML的同学都知道&#xff0c;一般在HTML中我们把样式表叫做CSS&#xff0c;在Qt中我们称之为QSS。QSS和CSS并不完全等同&#xff0c;语法完全类似&#xff0c…

【QT】QSS美化——基础知识

目录 一、辅助工具 二、QSS加载方式 三、QSS选择器类型 3.1 通配选择器 3.2 类型选择器 3.3 属性选择器 3.4 类选择器 3.5 ID选择器 3.6 后代选择器 3.7 子选择器 3.8 伪类选择器 四、QSS常用属性 4.1 字体 4.2 颜色 4.3 内边距 4.4 外边距 4.5 背景 4.6 边框…

在没有QQ、微信时局域网共享文件方法

1、首先开启共享 2、将要共享文件的电脑做同样操作 查看局域网下电脑 点击要访问的电脑输入该电脑的账号密码进行登录。 3、选择要共享的文件和访问权限 在要共享文件的电脑选择要共享的文件右键-授予访问权限-家庭组 然后选特定用户-everyone即可。 之后就是在这个文件里面…

分享:我的局域网QQ Bing(必应)1.0 正式发布,包括:聊天、视频、语音、电话、截屏、文件传输 等

分享&#xff1a;我的局域网QQ Bing&#xff08;必应&#xff09;1.0 正式发布,包括&#xff1a;聊天、视频、语音、电话、截屏、文件传输 等 百万商业圈 局域网QQ Bing&#xff08;必应&#xff09;1.0 正式发布 Bing&#xff08;必应&#xff09;是一款优秀的企业局域网即时…