Qt之QSS样式表

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.mzph.cn/news/807491.shtml

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

相关文章

Vue 读取后台二进制文件流转为图片显示

Vue 读取后台二进制文件流转为图片显示 后台返回格式 <img :src"payImg" id"image" style"width: 150px;height: 150px;" alt"">axios写法 重点 responseType: ‘blob’ &#xff0c; 使用的是res中的data blob this.$axios.…

Windows安装MySQL

文章目录 一、下载MySQL安装包1、选择版本以及Windows系统点击下载2、选择No thanks,just start my download.3、下载到指定目录解压即可 二、添加环境变量三、添加配置文件四、初始化MySQL数据库服务器五、安装启动服务六、修改连接登录密码七、停止MySQL服务 一、下载MySQL安…

Linux网络的封包和拆包

一般使用socket 到令牌环网然后向上逐渐拆包 MTU:最大的传输单元 以太网&#xff1a;1500 mss&#xff1a;网络类型&#xff0c;线路&#xff0c;以及特性相关

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

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

[自研开源] MyData v0.8 数据集成案例分享

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 案例&#xff…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle&#xff0c;然后点击…

实验模拟 搭建elk 日志分析系统

目录 一 实验环境 二 ELK Elasticsearch 集群部署&#xff08;在Node1、Node2节点上操作&#xff09; 1&#xff0c;环境准备 2, 部署 Elasticsearch 软件(node1 node2) 2.1安装es 2.2设置开机自启 2.3修改 elasticsearch主配置文件&#xff08;先备份&#xff09;…

【vue/uniapp】使用 smooth-signature 实现 h5 的横屏电子签名

通过github链接进行下载&#xff0c;然后代码参考如下&#xff0c;功能包含了清空、判断签名内容是否为空、生成png/jpg图片等。 签名效果&#xff1a; 预览效果&#xff1a; 下载 smooth-signature 链接&#xff1a;https://github.com/linjc/smooth-signature 代码参考&a…

极狐GitLab 如何在 helm 中恢复数据

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …

查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用&#xff0c;使用top命令查看cpu使用率长时间50%以上&#xff0c;cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己&#xff0c;top命令无法查看到挖矿病毒进程&#xff0c;可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…

[CSS]样式属性+元素设置

哎呀&#xff0c;好多东西&#xff0c;根本记不住&#xff0c;更多的还是边用边记吧&#xff0c;这里的代码就当使用范例&#xff0c;但其实如果可以让gpt应该会更好&#xff0c;哎学吧&#xff0c;反正记得住当然更好 文本 属性名描述word-break单词换行。取值如下&#xff1…

[自研开源] MyData数据融合平台 诚邀试用

MyData &#xff0c;一个旨在简化 Web 应用之间数据对接的工具&#xff0c;提高日常工作效率&#xff0c;如其名“我的数据” 旨在让用户更好的掌控和管理数据。 v1.0 的目标是&#xff1a;针对多应用之间数据集成的场景&#xff0c;为开发人员提供更安全、更方便的对接集成方…

Elasticsearch8.x 设置密码

文章目录 一、环境说明二、使用elasticsearch-reset-password工具修改1、elasticsearch-reset-password工具位置2、设置密码 一、环境说明 elasticsearch版本&#xff1a;8.13.0 系统版本&#xff1a;Ubuntu 18.04.6 二、使用elasticsearch-reset-password工具修改 1、elast…

【Java程序员面试专栏 综合面试指南】5年资深程序员面试指南

基础知识对于5年内工作经验的同学考察相对比较多。包括编程语言、计算机网络、操作系统、设计模式、分布式知识、MySQL、Redis这种。其中随着年限的增长,基础知识考察的会越来越少,例如操作系统基本上只在学生阶段考察,计算机网络对于5年经验来说也考察的相对较少。5年以上对…

优化策略:企业海量文件传输事件处理(上)

在当今快速发展的商业环境中&#xff0c;企业的数据量正以前所未有的速度增长。这种增长不仅带来了机遇&#xff0c;也带来了挑战&#xff0c;特别是在文件传输任务的管理上。文件传输是企业日常运营中不可或缺的一部分&#xff0c;它涉及到大量的数据流动和信息交换。因此&…

0 idea搭建springboot项目

1 2 3 4 5 配置文件 application.yaml server:servlet:context-path: /app #项目名controller //注入到spring容器 Controller public class HelloController {GetMapping("hello")ResponseBodypublic String hello(){return "Hello,SpringBoot";} }启…

【MATLAB 预测算法教程】_1粒子群算法优化BP神经网络预测 - 教程和对应MATLAB代码

本文以MATLAB自带的脂肪数据集为例,将数据保存在EXCEL工作簿内,方便替换数据使用,以下介绍粒子群算法优化BP神经网络预测的MATLAB代码编写,主要流程包括1. 读取数据 2.划分训练集和测试集 3.归一化 4.确定BP神经网络的隐含层最优节点数量 5. 使用粒子群算法优化BP的神经网络…

[数据概念|数据技术]智能合约如何助力数据资产变现

“ 区块链上数据具有高可信度&#xff0c;智能合约将区块链变得更加智能化&#xff0c;以支持企业场景。” 之前鼹鼠哥已经发表了一篇文章&#xff0c;简单介绍了区块链&#xff0c;那么&#xff0c;智能合约又是什么呢&#xff1f;它又是如何助力数据资产变现的呢&#xff1f;…

Swagger转换成Excel文件

1、添加swagger解析依赖包&#xff1a; <dependency><groupId>io.swagger.parser.v3</groupId><artifactId>swagger-parser</artifactId><version>2.1.12</version></dependency>2、示例代码&#xff1a; package com.rlclou…

华为校招机试 - 相似图片分类(20240410)

题目描述 小明想要处理一批图片&#xff0c;将相似的图片分类。 他首先对图片的特征采样&#xff0c;得到图片之间的相似度&#xff0c;然后按照以下规则判断图片是否可以归为一类&#xff1a; 相似度 > 0 表示两张图片相似如果 A 和 B 相似&#xff0c;B 和 C 相似&…