Qt之QSS样式表

news2025/6/17 14:39:31

QSS简介

QSS(Qt Style Sheet)样式表是一种用于描述图形用户界面(GUI)样式的语言。它允许开发者为应用程序的控件定义视觉外观,例如颜色、字体、尺寸和布局等。

QSS 样式表的主要目的是提供一种简洁而灵活的方式来美化应用程序的界面,使其具有一致的外观和风格。通过使用 QSS,开发者可以分离界面的样式和功能代码,从而更容易维护和定制界面的外观。

QSS 样式表通常以.qss文件的形式保存,其中包含了一系列的样式规则。这些规则使用选择器来指定要应用样式的控件,以及对应的样式属性和值。例如,可以使用类似于 CSS 的选择器来定义按钮的颜色、文本框的字体大小或窗口的背景颜色。

QSS 还支持继承和层次结构,这使得样式可以在控件之间传递和复用。例如,可以定义一个基本的样式,然后在特定的控件上覆盖或修改这些样式,以实现个性化的效果。

除了基本的样式属性,QSS 还提供了一些高级特性,如动画效果、状态变化和伪类等。这使得开发者能够创建更具交互性和动态的界面,例如在鼠标悬停时改变按钮的颜色,或在控件获得焦点时显示边框。

使用 QSS 样式表有许多好处。它可以提高应用程序的用户体验,使界面看起来更加专业和吸引人。此外,样式表的可维护性使得在不同平台上保持一致的外观变得更加容易,同时也减少了与界面外观相关的代码复杂性。

1.1 盒子模型

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):

不同部分的说明:

Margin(外边距) - 清除边框外的区域,外边距是透明的。 Border(边框) - 围绕在内边距和内容外的边框。 Padding(内边距) - 清除内容周围的区域,内边距是透明的。 Content(内容) - 盒子的内容,显示文本和图像。 为了正确设置元素在所有浏览器中的宽度和高度,你需要知道的盒模型是如何工作的。

2. QSS加载方式

方式一:在代码中加载

myDialog->setStyleSheet("QLineEdit { background-color: yellow }");
nameEdit->setStyleSheet("background-color: yellow");

方式二:读文件的方式加载

    QFile file("://qss/styles.css");
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        qWarning("styles.css open falied");
    }
    this->setStyleSheet(file.readAll());

3.QSS选择器类型

3.1 通配选择器

 *  

匹配所有的控件

3.2 类型选择器

QPushButton

匹配所有QPushButton和其子类的实例

QPushButton {background: gray;}

3.3 属性选择器

QPushButton[flat="false"]

匹配所有flat属性是false的QPushButton实例,注意该属性可以是自定义的属性,不一定非要是类本身具有的属性

QPushButton[STYLE_KEY='dangerous'] { background: magenta; }
/*openButton->setProperty("STYLE_KEY",  "dangerous");*/

3.4 类选择器

.QPushButton

匹配所有QPushButton的实例,但是并不匹配其子类。这是与CSS中的类选择器不一样的地方,注意前面有一个点号

.RedButton { background: magenta; }
 
/*
openButton->setProperty("class",  "RedButton");
closeButton->setProperty("class", "RedButton");
*/

3.5 ID选择器

#myButton

匹配所有id为myButton的控件实例,这里的id实际上就是objectName指定的值

#openButton, #closeButton { background: magenta; }

3.6 后代选择器

QDialog QPushButton

所有QDialog容器中包含的QPushButton,不管是直接的还是间接的

QDialog {background: gray;}
/* 设置 QDialog中的 QPushButton 的 QSS */
QDialog QPushButton 
{
    border: 2px solid magenta;
    border-radius: 10px;
    background: white;
    padding: 2px 15px;
}

3.7 子选择器

QFrame> QPushButton

所有QFrame容器下面的QPushButton,其中要求QPushButton的直接父容器是QFrame,注意和后代选择器的区别

QFrame {background: gray;}
QFrame > QPushButton 
{
    border: 2px solid magenta;
    border-radius: 10px;
    background: white;
    padding: 2px 15px;
}

3.8 伪类选择器

选择器:状态 作为选择器,支持 ! 操作符,表示 非。

QPushButton:hover { color: white }
QCheckBox:checked { color: white }
QCheckBox:!checked { color: red }

所有的这些选择器可以联合使用,并且支持一次设置多个选择器类型,用逗号隔开,这点与CSS一样,例如:

#frameCut,#frameInterrupt,#frameJoin 表示所有这些id使用一个规则。

#mytable QPushButton 表示选择所有id为mytable的容器下面

4. QSS常用属性

4.1 字体

大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX、PD
 
样式 {font-style: oblique;}(偏斜体) italic;(斜体) normal;(正常)
 
行高 {line-height: normal;}(正常) 单位:PX、PD、EM
 
粗细 {font-weight: bold;}(粗体) lighter;(细体) normal;(正常)
 
变体 {font-variant: small-caps;}(小型大写字母) normal;(正常)
 
大小写 {text-transform: capitalize;}(首字母大写) uppercase;(大写) lowercase;(小写) none;(无)
 
修饰 {text-decoration: underline;}(下划线) overline;(上划线) line-through;(删除线) blink;(闪烁)

4.2 颜色

17种标准色:aqua, black, blue, fuchsia, gray, green, lime, maroon, navy,olive, orange, purple, red, silver, teal, white, yellow

colo:rgb(255,255,255);   
 
color: #F5F5F5;               /* 前景(文本)颜色 */  
 
color: qlineargradient();     /* 前景(文本)颜色:线性渐变*/  
 
color: qradialgradient();     /* 前景(文本)颜色:辐射渐变*/  
 
color: qconicalgradient();    /* 前景(文本)颜色:梯形渐变*/ 

4.3 内边距

padding: 14px 18px 20px 18px;              /*内边距 顺序上右下左 */
 
padding-left: 5px;                 /* 文字左边距 */  
 
padding-right: 10px;               /* 文字右边距 */  
 
padding-top: 3px;                  /* 文字顶边距 */  
 
padding-bottom: 3px;               /* 文字底边距 */

4.4 外边距

margin: 14px 18px 20px 18px; /*外边距 顺序上右下左 */
 
margin-top: 14px;
 
margin-right: 18px;
 
margin-bottom: 20px;
 
margin-left: 18px;

4.5 背景

background-color: #202122;               /* 背景颜色 */  
 
background-color: qlineargradient();    /* 背景颜色:线性渐变*/  
 
background-color: qradialgradient();    /* 背景颜色:辐射渐变*/  
 
background-color: qconicalgradient();   /* 背景颜色:梯形渐变*/  
 
background-image:url(boder.png);        /* 背景图片 */  
 
background-position: ;                 /* 背景图片对齐方式 */  
 
background-repeat: ;                   /* 背景图片平铺方式 */  

4.6 边框

border-style: solid;/*边框类型*/
/*===============================*/
dotted - 定义点线边框
dashed - 定义虚线边框
solid - 定义实线边框
double - 定义双边框
groove - 定义 3D 坡口边框。效果取决于 border-color 值
ridge - 定义 3D 脊线边框。效果取决于 border-color 值
inset - 定义 3D inset 边框。效果取决于 border-color 值
outset - 定义 3D outset 边框。效果取决于 border-color 值
none - 定义无边框
hidden - 定义隐藏边框
/*===============================*/
 
border-width: 2px;                     /*边框宽度*/
 
border-color: #FDBC03;                 /*边框颜色*/
 
border: 1px solid #FDBC03;             /* 边框:宽度 类型 颜色*/  
 
border-image:url(boder.png) 4 8 12 16; /* 边界图 切线 */  
 
border-radius: 4px;                    /* 角弧度 */  
 
border-top-left-radius: 4px;           /* 角弧度:左上角*/  
 
border-top-right-radius: 4px;          /* 角弧度:右上角*/  
 
border-bottom-left-radius: 4px;      /* 角弧度:左下角*/  
 
border-bottom-right-radius: 4px;     /* 角弧度:右下角*/

4.7 宽高

width:12px;           /*设置宽度*/
 
height:40px;          /*设置高度*/
 
min-width:65px;       /*最小宽度*/
 
min-height:12px;      /*最小高度*/
 
max-width:12px;       /*最大宽度*/
 
max-height:12px;      /*最大高度*/

5. QSS伪状态与子控件

5.1 伪状态列表

:checked                        /*button部件被选中*/ 
:unchecked                      /*button部件未被选中*/ 
:disabled                       /*部件被禁用*/ 
:enabled                        /*部件被启用*/ 
:focus                          /*部件获得焦点*/ 
:hover                          /*鼠标位于部件上*/ 
:indeterminate                  /*checkbox或radiobutton被部分选中*/ 
:off                            /*部件可以切换,且处于off状态*/ 
:on                             /*部件可以切换,且处于on状态*/ 
:pressed                        /*部件被鼠标按下*/

5.2 子部件列表

::down-arrow        /*combo box或spin box的下拉箭头*/ 
::drop-down         /*combo box的下拉箭头*/ 
 
::indicator              /*checkbox、radio button或可选择group box的指示器*/ 
::item               /*menu、menu bar或status bar的子项目*/ 
::menu-indicator          /*push button的菜单指示器*/ 
::title              /*group box的标题*/ 
 
::down-button         /*spin box的向下按钮*/
::up-arrow           /*spin box的向上箭头*/ 
::up-button          /*spin box的向上按钮*/

6 以下是一个简单的 QSS 样式表示例:

QPushButton {
    font: bold 16px Arial;
    background-color: lightblue;
    color: black;
}

QLineEdit {
    font: 12px Arial;
    border: 1px solid gray;
    padding: 2px;
}

在上述示例中,我们定义了两个控件的样式:QPushButtonQLineEdit

对于 QPushButton,我们设置了字体为加粗的 16 像素Arial 字体,背景颜色为浅蓝色,文本颜色为黑色。

对于 QLineEdit,我们设置了字体为 12 像素的 Arial 字体,边框为 1 像素的实线灰色,内边距为 2 像素。

要应用这些样式,你可以将样式表文件保存为 .qss 格式(例如 style.qss),然后在你的 Qt 应用程序中使用 QApplication::setStyleSheet() 方法加载样式表:

#include <QApplication>
#include <QPushButton>
#include <QLineEdit>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 加载样式表
    app.setStyleSheet("style.qss");

    // 创建控件并显示
    QPushButton button("Click Me");
    button.show();

    QLineEdit edit;
    edit.show();

    return app.exec();
}

码字不易,欢迎点赞支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1585412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NzN的数据结构--栈的实现

在前面我们已经学习了哪些线性数据结构呢&#xff1f;大家一起来回顾一下&#xff1a;C语言学过的数组&#xff0c;数据结构中的线性表和顺序表和链表。那我们今天再来介绍数据结构里的两个线性结构--栈和队列。 目录 一、栈的概念及结构 二、用数组实现栈 1. 栈的初始化和…

Linux内核中常用的C语言技巧

Linux内核采用的是GCC编译器&#xff0c;GCC编译器除了支持ANSI C&#xff0c;还支持GNU C。在Linux内核中&#xff0c;许多地方都使用了GNU C语言的扩展特性&#xff0c;如typeof、__attribute__、__aligned、__builtin_等&#xff0c;这些都是GNU C语言的特性。 typeof 下面…

Web 前端性能优化之七:数据存储与缓存技术

7、数据存储 在开发Web应用的过程中&#xff0c;会涉及一些数据的存储需求&#xff0c;常见的存储方式可能有&#xff1a; 保存登录态的Cookie&#xff1b; 使用浏览器本地存储进行保存的Local Storage和Session Storage&#xff1b; 客户端数据持久化存储方案涉及的Web SQ…

Redis Cluster集群模式

目录 一、理论 1.1 概念 1.2 集群的作用 1.3 redis集群的数据分片 1.4 Redis集群的主从复制模型 二、实践 2.1 Redis集群模式的搭建 2.1.1 cluster集群前期工作 2.1.2 开启群集功能 2.1.3 启动redis节点 2.1.4 启动集群 2.2 测试集群 总结 一、理论 1.1 概念 集群&a…

pyside6的QSpinBox自定义特性初步研究(二)

当前的需求是&#xff0c;蓝色背景的画面&#xff0c;需要一个相对应色系的QSpinBox部件。已有的部件风格是这样的&#xff0c;需要新的部件与之般配。 首先新建一个QDoubleSpinBox&#xff0c;并定义其背景色和边框&#xff1a; QDoubleSpinBox { color: white; border:1px…

光学雨量计红外雨量传感器应用于小型气象站

光学雨量计红外雨量传感器应用于小型气象站 随着气候变化对人类生活和农业生产的影响越来越大&#xff0c;气象观测设备的需求也逐渐增加。其中一种常见的气象观测设备是雨量计&#xff0c;用于监测降水量。在小型气象站中&#xff0c;光学雨量计红外雨量传感器被广泛应用。 …

数据库知识点汇总(最全!,2024年最新大佬分享开发经验

十九、删除数据 DELETE 语句 使用 DELETE 语句从表中删除数据。 DELETE FROM table [WHERE condition]; 删除数据 使用 WHERE 子句删除指定的记录 DELETE FROM departments WHERE department_name ‘Finance’; 如果省略 WHERE 子句&#xff0c;则表中的全部数据将被删除 DELE…

ai智能问答免费API接口

智能对话API接口&#xff0c;可以为网站或其他产品提供强大的智能交互功能&#xff0c;无需自行开发复杂的语义分析和自然语言处理算法。这使得开发者能够更专注于产品的核心功能和用户体验&#xff0c;加速产品上线速度并降低开发成本。 智能对话API接口的功能还包括对话内容…

CentOS安装MeterSphere并实现无公网IP远程访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

VS运行.netcore项目,一般情况下都是用localhost访问,怎么做到用IP地址访问,步骤详解

一、问题描述 通常情况下运行起来都是这样 运行后效果 怎么做到下面这样呢&#xff1f; 二、解决办法 vs把项目运行起来之后&#xff0c;在电脑的右下角有一个图标&#xff0c;右键它 点击其中一个 进入applicationhost.config文件

Golang | Leetcode Golang题解之第14题最长公共前缀

题目&#xff1a; 题解&#xff1a; func longestCommonPrefix(strs []string) string {if len(strs) 0 {return ""}isCommonPrefix : func(length int) bool {str0, count : strs[0][:length], len(strs)for i : 1; i < count; i {if strs[i][:length] ! str0 …

用树莓派监测地震?

监测人类活动和地质活动对地球的影响是 Raspberry Shake 在全球取得的一项成功。 Raspberry Shake 的目标是建立一个让公民科学家也能使用的专业级地震仪。现在&#xff0c;他们在全球安装了数千台基于 Raspberry Pi 的高灵敏度仪器&#xff0c;为前沿研究提供动力。 解决方案…

Facial Micro-Expression Recognition Based on DeepLocal-Holistic Network 阅读笔记

中科院王老师团队的工作&#xff0c;用于做微表情识别。 摘要&#xff1a; Toimprove the efficiency of micro-expression feature extraction,inspired by the psychological studyof attentional resource allocation for micro-expression cognition,we propose a deep loc…

IDEA中无法保存设置 Cannot Save Settings

确定原因: 在IDEA中父工程不应该存在有子工程的相关东西 首先,这是我的DCYJ项目(观察右侧的Content Root) 其次,这是我的EAPOFode项目(观察右侧的Content Root爆红处) 最后我将DCYJ项目右侧的Content Root全部删掉

Java毕业设计 基于springboot vue撸宠平台 宠物系统

Java毕业设计 基于springboot vue撸宠平台 宠物系统 springboot撸宠平台 宠物系统 功能介绍 首页 图片轮播 用户或商家注册 用户或商家登录 登录验证码 店铺信息 店铺详情 店铺投诉 宠物信息 宠物详情 预订 退订 搜索 收藏 点赞 踩 评论 个人中心 更新信息 我的收藏 在线客服…

【NLP】隐马尔可夫模型(HMM)与条件随机场(CRF)简介

一. HMM 隐马尔可夫模型&#xff08;Hidden Markov Model, HMM&#xff09;是一种用于处理含有隐藏状态的序列数据的统计学习模型。通过建模隐藏状态之间的转移关系以及隐藏状态与观测数据的生成关系&#xff0c;HMM能够在仅观察到部分信息的情况下进行状态推理、概率计算、序…

Spring Boot项目获取resources目录下的文件并返回给前端

学无止境&#xff0c;气有浩然&#xff01; 新开通公众号&#xff0c;欢迎大家关注&#xff0c;后续会持续分享技术和相关资料 文章目录 前言方案1.getResourceAsStream2.ResourceLoader3.Value配合Resource 打完收工&#xff01; 前言 最近项目需要下载一个模板文件用来修改…

32.768khz晶振时间跑不准有偏差的原因

32.768kHz晶振是一种常见的晶振频率&#xff0c;广泛应用于实时钟电路、计时电路和低功耗设备中。然而&#xff0c;有时候会发现32.768kHz晶振的时间跑不准&#xff0c;存在一定的偏差。JF晶发电子将介绍几个可能导致32.768kHz晶振时间跑不准的原因。 1. 温度变化&#xff1a;…

vue3页面导出为PDF文件

vue3页面导出为PDF文件 尝试了很多方法&#xff0c;都没有找到完美的解决方法 目前网上有个思路&#xff0c;就是将页面先转存为图片&#xff0c;然后将图片另存为PDF文件 记录一下完整过程 一、安装必备包 安装两个第三方插件 npm i html2canvas npm i jspdfhtml2canvas…