QSS 基础

article/2025/9/28 23:44:31

如果你会 CSS,那么 QSS 对你来说将会非常简单,QSS 的语法和 CSS 的愈发非常相似,但也有些不同,有些 CSS 的东西在 QSS 里被去掉了,QSS 也加了些自己特有的东西,不过大多数还是差不多的,下面以修改 QLabel 的样式为例,学习 QSS 的基础语法。

QLabel
{/* 相当于 font: bold 50px "Snell Roundhand"; */font-size: 50px;font-weight: bold;font-family: "Snell Roundhand";/* 文本的颜色 */color: white;/* 相当于 background: lightgray url(:/resources/horizontal-add-line.png); */background-color: lightgray;background-image: url(:/resources/horizontal-add-line.png);/* 还能使用渐变 */background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #FFFFFF, stop: 1 #BB000000);/* 相当于 border: 5px solid gray; */border-width: 5px;border-color: gray;border-style: solid;/* 边框圆角 */border-radius: 10px;padding: 5px;margin: 10px;
}

下图是上面 QSS 的效果图:
在这里插入图片描述

下面具体介绍一下 QSS 的基础语法:

  • 设置字体用 font, 语法为:
font: [font-style] [font-variant] [font-weight] [font-size] [font-family]/* 按顺序设置,可以忽略其中某些值,例如:*/
font: italic bold 12px arial, sans-serif;

设置字体用 font-style, font-size, font-weight, font-family(和 CSS 一样,如果字体名字有空格则用双引号引起来,多个字体名字间用逗号分隔,如果第一个字体找不到则用第二个,第二个找不到则用第三个,依此类推)

  • 设置文本颜色用 color
  • 设置背景颜色用 background-color
  • 设置背景使用 background,可以设置如下属性:
  • background-color
  • background-position
  • background-size
  • background-repeat
  • background-origin
  • background-clip
  • background-attachment
  • background-image
/* 可以忽略其中某些值,例如:*/background: lightgray url(:/resources/horizontal-add-line.png);
  • url 中的路径可以是:

    • 资源文件的路径
    • 绝对路径
    • 相对于可执行文件的相对路径
  • 设置背景图片用 background-image(先绘制背景色,然后再绘制背景图片,如果背景图片是半透明的就可以看到背景色了),默认水平和垂直重复平铺满整个 widget,同时一起设置的还可以有 background-repeatbackground-positionbackground-attachment

  • background-repeat,可选的值有:

    • repeat-x:水平方向重复
    • epeat-y:垂直方向重复
    • no-repeat:不重复
  • background-position,可选的值有:

    • top left
    • top center
    • top right
    • center left
    • center center
    • center right
    • bottom left
    • bottom center
    • bottom right
    • xpos ypos
  • background-attachment,可选的值有:

    • scroll:背景随滚动条滚动
    • fixed:背景不随滚动条滚动
  • 设置背景还可以用 border-image,请参考 Border Image 一节

  • 设置边框用 border-width, border-style, border-color

  • 设置边框用 border,语法为:

border: border-width border-style border-color/* 例如:*/
border: 1px solid gray;
  • 设置圆角边框用 border-radius但是如果给定的半径大于对应边的一半,圆角就没有效果了,在 CSS 里没有这个问题
  • 支持渐变 gradient: qlineargradientqradialgradientqconicalgradient,渐变的坐标不是用像素表示,而是把渐变的坐标的最小值定义为 0,最大值定义为 1,这种技术又叫 Normalization,通俗点说就是用比例表示,开始处用 0 表示,结束处用 1 表示,不管渐变的范围是 200px 还是 500px,按比例都能计算出实际的像素坐标,这样做的好处是,不需要关心渐变的像素坐标范围的具体数值。如果不用 Normalization 技术,widget 的大小一变化,就需要修改 QSS 里的坐标值。
/*
x1: 0, y1: 0,渐变的开始位置,为 border rectangle 的左上角(请参考盒子模型)
x2: 0, y2: 1,渐变的开始位置,为 border rectangle 的左下角
stop: 0.1 #FF0000,在 0.0 处渐变的颜色为 #FF0000
stop: 0.6 #00FF00,在 0.6 处渐变的颜色为 #00FF00
stop: 1.0 #0000FF,在 1.0 处渐变的颜色为 #0000FF
*/
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0.1 #FF0000,stop: 0.6 #00FF00,stop: 1.0 #0000FF);

渐变效果比较复杂,可以使用 Qt Desginer 的 QSS 编辑器来帮助我们可视化的实现复杂的渐变效果,如下图:
在这里插入图片描述

  • Paddingmargin 参考盒子模型一节
  • 设置图标,如 QToolButton 的图标:
/* 图标大小 */
icon-size: 20px 20px;/* 图标文件 */
qproperty-icon: url(:/resources/tabset-left.png);
  • 设置宽度用 width,高度用 height,设置 subcontrol 的时候比较有用
  • 设置最小宽度用 min-width,最小高度用 min-height(是 content rectangle 的宽和高)
  • 设置最大宽度用 max-width,最大高度用 max-height
  • 遗憾的是,QSS 不支持阴影
  • 使用 qproperty-xxx 进行设置,因为在 QWidget 及其子类中使用宏 Q_PROPERTY 定义的 WRITE 函数可以在 QSS 中访问:
    • text-align 不支持 QLable,但设置 QLabel 的文本居中可以这样:qproperty-alignment: AlignCenter
    • 甚至可以在 QSS 中设置 QLabel,QPushButton 等的文本:qproperty-text: 'It is amazing',太魔性了
    • 设置 QLabel 的 word wrap: qproperty-wordWrap: true
    • 设置对齐方式:
      • qproperty-alignment: 'AlignCenter's
      • qproperty-alignment: 'AlignBottom | AlignRight'
    • 设置按钮:
      • 设置 flat: qproperty-flat: true
      • 设置图标: qproperty-icon: url(:/resources/tabset-left.png)
    • QWidget 及其子类还有很多 Q_PROPERTY 定义的 WRITE 函数,想知道就去查帮助文档吧
    • 我们也可以使用宏 Q_PROPERTY 定义自己的 WRITE 函数,然后在 QSS 中使用
    • 不过 qproperty-xxx 也不是万能的,在 :hover, :pressed 等伪类选择器中不生效

上面的 QSS 的虽然只是基础,但是很重要,大多数的时候都要用到它们,用来修改 QLabel,QPushButton,QFrame,QWidget 等的样式还基本够用了,不过如果要修改复杂一点的 widget 的样式,如 QSpinBox,QScrollBar 等,上面的知识是不够的,要想掌握好 QSS,还必须了解 QSS 的选择器盒子模型Border-ImageSubcontrol 等,这些在后面都有专门的章节介绍。

QWidget 等的样式还基本够用了,不过如果要修改复杂一点的 widget 的样式,如 QSpinBox,QScrollBar 等,上面的知识是不够的,要想掌握好 QSS,还必须了解 QSS 的选择器盒子模型Border-ImageSubcontrol 等,这些在后面都有专门的章节介绍。

原文地址:https://qtdebug.com/qtbook-qss-base/ 博主狗哥的其他博文也写的非常好,从他这里学到了很多,需要的同学可以去看看https://qtdebug.com/qtbook/


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

相关文章

Qt QSS使用

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

QSS 介绍

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

学习QSS样式表

文章目录 一、 什么是QSS二、辅助工具三、Qt样式表设置函数: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;是一款优秀的企业局域网即时…

交换机组建局域网

说来惭愧&#xff0c;今天才搞明白用交换机组建局域网的原理&#xff0c;这里介绍方法&#xff1a; 平时使用的路由器有交换机的功能&#xff0c;单纯使用交换机还是第一次&#xff1a; 1、将所有电bai脑连到同一台交换机上&#xff0c;du即将各台电zhi脑的网线插入同一dao台交…

基于JAVA的局域网聊天软件的设计与实现(仿制QQ)

一、系统分析 1.1 问题描述 客户端 实现简易版的局域网聊天器实现富文本内容聊天智能聊天机器人群发消息传送文件等功能 服务器端 实现群发通知管理聊天线程 1.2 系统功能分析 客户端功能 登陆注册发送表情消息发送文本消息截取图片图片处理震动效果发送文件群发消息设置聊天…

通过交换机组建局域网

实现目标&#xff1a;利用交换机搭建一个局域网&#xff0c;使得该局域网下同一网段的所有机器相互通信 所需设备&#xff1a;电脑一台&#xff0c;树莓派两个&#xff0c;工控机两台&#xff0c;TP-Link交换机一台。 该教程就以一台电脑和一台树莓派搭建局域网为一个demo&am…

PHPstudy配置局域网

PHPstudy配置局域网 1.打开小皮网站&#xff08;https://www.xp.cn/download.html&#xff09;&#xff0c;下载64位PHPstudy到电脑桌面 2.解压zip文件 3.打开解压后的文件夹&#xff0c;找到.exe文件&#xff0c;直接安装 4.安装好之后&#xff0c;开启Apache、FTP和MySQL 5…

局域网传输/共享大文件

局域网传输/共享大文件 前段时间和同学传一个4g的数据。想到如下几个点子 通过qq进行传输&#xff0c;但是要上传&#xff0c;还要下载&#xff0c;还要网速给力才行&#xff0c;而且花费的可是双倍的时间&#xff0c;一个上传一个下载&#xff0c;等的黄花菜都凉了。通过u盘…

局域网网站服务器dns设置,局域网设置dns的方法

DNS域名解析是指通过主机名得到该主机名对应的IP地址。BIND作为局域网上广泛使用的DNS服务器软件,通过对区文件的管理实现对DNS域名的授权和查询使用。下面是学习啦小编为大家整理的关于局域网设置dns怎么设置在哪,一起来看看吧! 局域网设置dns的方法 Windows 7相比于常用的Wi…

局域网传输文件_局域网微信?这是什么神仙玩法

前天我们刚好谈到局域网在观看各类资源时的作用。 那么就接着聊聊局域网的其他妙用。 今天无论在家还是在外&#xff0c;只要连接同一个 WiFi&#xff0c;大家的设备就在一个局域网内。 而相比微信、QQ 等需要中转服务器的聊天/办公工具。 局域网下&#xff0c;多台设备能够点对…

局域网下的两个 QQ 好友进行在线文件传输抓包

局域网下的两个 QQ 好友进行在线文件传输过程抓包 文章目录 局域网下的两个 QQ 好友进行在线文件传输过程抓包介绍细节总结 介绍 由于本人一个作业需要&#xff0c;想要验证内网情况下两个 QQ 好友的文件传输是通过局域网直接传输的。以下是本人的数据抓包结果&#xff0c;具体…