Qt中QSS的简单使用

样式表的组成

样式表由两大元素组成:选择器和声明。选择器实际上可以理解为对象,声明则是对该对象的属性的设置。

样式表的使用

方法一:在代码中调用setStyleSheet()来设置样式;
方法二:通过加载qss文件来设置样式。

样式表的简单使用介绍

setStyleSheet()的简单应用:
【1】通过QApplication的对象调用;
(1)创建QSS文件——myqss.qss;
创建文本文件,存入源文件所在的同级目录下,修改其文件名为myqss.qss。
(2)用QtCreate打开该工程,在项目名上右键点击添加新文件,选择Qt资源文件,按照提示创建资源文件;
(3)在创建的资源文件上右键选择添加前缀,之后添加该项目所用到的资源文件,即图片,添加之后保存;
(4)在main.cpp文件中添加如下代码。

#include <QApplication>
#include <QFile>
int main(int argc,char *argv[])
{QApplication app(argc,argv);QFile file(".\myqss.qss");/*QSS文件所在的路径*/file.open(QIODevice::ReadOnly);if(file.isOpen()){QString strFile = file.readAll();app.setStyleSheet(strFile);file.close();/*记得关闭QSS文件*/}return app.exec();
}

备注:
此方法通过在主函数中读取QSS文件,来设置界面的样式,可以将整个项目中各界面对应的样式设置都都在一个QSS文件下

qss文件的大体介绍

  1. 只有一个界面的QSS文件
    内容形式:控件类名#objectName{ … }
    如只有一个界面,界面上有一个QPushButton控件,在其对应的qss文件中可以编写其内容为下:
/*创建应用程序,基类为QWidget,在其ui文件中将QWidget的objectName更改为WidgetPainter,拖入控件QPushButton将其ObjectName更改为pushButtonPainter,现在qss文件中设置按钮的样式,按钮未被点击的状态和按钮被点击的状态*/
/*画笔未被点击*/
QWidget#WidgetPainter>QPushButton#pushButtonPainter{background-color:transparent;image:url(:/image/painterUnchecked.png);
}/*画笔被点击*/
QWidget#WidgetPainter>QPushButton#pushButtonPainter:pressed{background-color:transparent;image:url(:/image/painterChecked.png);
}

因为整个应用程序只有一个界面,可以将整个项目中所有控件的样式设置都写到一个qss文件中,在main函数中加载qss文件,给界面设置样式。
2. 多界面的QSS文件
可以将每一个界面写一个qss文件,然后在各界面对应的类中的构造函数里加载qss文件;也可以将所有界面的样式设置写到一个qss文件中,在main函数中加载qss文件。

/*将信号源名字界面与系统设置界面的样式设置写道同一个qss文件中,对于部件间关系的归属必须锊清,否则会达不到预想的界面效果,下面是在一个QWidget(objectName为SignalSource)上拖入一个QWidget(objectName为widget_title),再在objectName为widget_title的QWidget上拖入标签QLabel和按钮QPushButton,即QLabel和QPushButton为widget_title的直接子部件,widget_title为SignalSource的直接子部件,之间子部件之间使用>,控件类与控件的名称之间使用#,*/
/***************************信号源名字子页面**************/
/*页面的背景*/
QWidget#SignalSource{background-color:#FF2D3274;
}/*页面标题栏*/
QWidget#SignalSource>QWidget#widget_title{background-color:#FF262B63;
}/*信号源的名字*/
QWidget#widget_title>QLabel#label_name{color: rgb(255, 255, 255);font-size:16px;font-family:Microsoft YaHei;
}/*控制按钮*/
QWidget#widget_title>QPushButton#pushButton_control{background-color:transparent;image:url(:/new/prefix1/images/contrl.png);border-style:flat;
}/*控制按钮被点击状态*/
QWidget#widget_title>QPushButton#pushButton_control:checked{image:url(:/new/prefix1/images/finishControl.png);
}/*上屏按钮*/
QWidget#widget_title>QPushButton#pushButton_upscr{background-color:transparent;image:url(:/new/prefix1/images/upsrc.png);border-style:flat;
}/*上屏按钮被点击状态*/
QWidget#widget_title>QPushButton#pushButton_upscr:checked{image:url(:/new/prefix1/images/downscr.png);
}/*设置按钮*/
QWidget#widget_title>QPushButton#pushButton_set{	background-color:transparent;image:url(:/new/prefix1/images/seting.png);border-style:flat;
}/*设置按钮鼠标按下状态*/
QWidget#widget_title>QPushButton#pushButton_set:checked{image:url(:/new/prefix1/images/seting2.png);
}/*全屏按钮*/
QWidget#widget_title>QPushButton#pushButton_fullscr{background-color:transparent;image:url(:/new/prefix1/images/fullscr.png);border-style:flat;
}/*全屏按钮鼠标按下状态*/
QWidget#widget_title>QPushButton#pushButton_fullscr:checked{image:url(:/new/prefix1/images/fullsrc2.png);
}/*******************系统设置****************/
/*整体窗口背景#FF2E3274*/
QDialog#SystemSet{background-color:#FF2E3274;	
/*	box-shadow: 0px 0px 40px 0px rgba(0, 0, 0, 0.1);*/border-radius: 5px 5px 5px 5px;
}/*窗体头背景*/
QDialog#SystemSet>QWidget#widget_title{background-color:#FF262B63;
}/*系统设置标题*/
QWidget#widget_title>QLabel#label_title{color:#FFFFFFFF;font-family:MicrosoftYaHei;font-size:16px;
}/*系统设置图标*/
QWidget#widget_title>QLabel#label_sysSet{background-color:transparent;image:url(:/new/prefix1/images/sysset.png);
}/*默认设置按钮*/
QWidget#widget_title>QPushButton#pushButton_defaultset{color:#FFFFFFFF;font-family:MicrosoftYaHei;font-size:16px;	background-color:#FF282C66;border-top-left-radius:5px;border-top-right-radius:5px;border-style:flat;
}/*默认设置按钮被点击*/
QWidget#widget_title>QPushButton#pushButton_defaultset:pressed{color:#FFFFFFFF;background-color:#FF008AFF;font-family:MicrosoftYaHei;font-size:16px;
}/*默认设置按钮旁边白线*/
QWidget#widget_title>QLabel#label1{background-color:#FFFFFF;	border-radius: 1px;	opacity: 0.5;
}/*高级设置按钮*/
QWidget#widget_title>QPushButton#pushButton_advanceset{color:#FFFFFFFF;font-family:MicrosoftYaHei;font-size:16px;	background-color: #FF282C66;border-top-left-radius:5px;border-top-right-radius:5px;border-style:flat;
}/*高级设置按钮被点击*/
QWidget#widget_title>QPushButton#pushButton_advanceset:pressed{color:#FFFFFFFF;background-color:#FF008AFF;font-family:MicrosoftYaHei;font-size:16px;
}/*高级设置按钮旁边白线*/
QWidget#widget_title>QLabel#label2{background-color:#FFFFFF;	border-radius: 1px;	opacity: 0.5;
}/*ip设置按钮*/
QWidget#widget_title>QPushButton#pushButton_ipset{color:#FFFFFFFF;font-family:MicrosoftYaHei;font-size:16px;	background-color: #FF282C66;	border-top-left-radius:5px;border-top-right-radius:5px;border-style:flat;
}/*ip设置按钮被点击*/
QWidget#widget_title>QPushButton#pushButton_ipset:pressed{color:#FFFFFFFF;background-color:#FF008AFF;font-family:MicrosoftYaHei;font-size:16px;
}QWidget>QPushButton#pushButton_close{background-color:transparent;image:url(:/new/prefix1/images/close.png);
}

以上是对QSS使用过程中的一些简单的总结。涉及更多的内容还需自己挖掘,个人理解在多界面共用一个qss文件时,部件之间关系十分重要。
在使用图片作为整个界面的背景图片时,需要在QWidget中拖入一个QWidget,在拖入的QWidget中设置背景透明,背景图片,并且需要将整个界面的QWidget设置为透明,无标题,否则达不到想要的效果
如下面的qss文件中所写:

/*提示窗口的整体需要加载一张图片,先在QDialog中拖入控件QWidget(objectName为widget),在程序设置QDialog的没有标题和背景透明,在qss文件中编写widget背景透明,加载背景图片*/
/****************通知提示窗口*************/
/*界面的整体背景rgba(0,255,255,255)*/
QDialog#InformDialog>QWidget#widget{	background-color:transparent;background-image:url(:/new/prefix1/images/informbackground.png);
}

image,backgroun-image,border-image的区别,image的不会改变图片的大小,不会拉伸和压缩图片,backgroun-image一般用于整个控件的背景图片,无法随部件的大小自动缩放,border-image为可以随部件的大小自动缩放

子部件的样式设置

控件的子控件设置样式简单的贴一些自己之前做过的,更多还需自己学习。

/*QComboBox控件的子部件的简单设置下拉的界面,下拉界面每一项,下拉按钮的样式,QSpinBox,QCheckBox,QRadioButton子部件的设置*/
/*下拉按钮*/
QWidget#systemdefaltSet>QComboBox{	background-color: #121650;border-radius: 6px;font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*下拉按钮*/
QWidget#systemdefaltSet>QComboBox::down-arrow{	image:url(:/new/prefix1/image/comboxDown.png);
}/*下拉按钮隐藏边框*/
QWidget#systemdefaltSet>QComboBox::drop-down{	border:none;top:4px;left:-15px;
}/*下拉窗体*/
QWidget#systemdefaltSet>QComboBox QAbstractItemView{	background-color:#55557f;outline: 1px solid #ffaa7f;   /* 选定项的虚框 */selection-background-color:#121650;color:#FFFFFF;
}/*下拉窗体每一项*/
QWidget#systemdefaltSet>QComboBox QAbstractItemView::item{	height:50px;
}
/*行列按钮最初形态#spinBoxrow*/
advanceSet>QSpinBox{		background-color: #12164F;border-radius: 6px;	font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*行列按钮被点击之后整体轮廓设置*/
advanceSet>QSpinBox:pressed{			background-color: #121650;border: 1px solid #00FFFF;border-radius: 6px;
}/*行列按钮上箭头没有被点击的状态:unchecked*/
advanceSet>QSpinBox::up-button{	image:url(:/new/prefix1/image/spinupbtnUnchecked.png);
}/*行列按钮下箭头没有被点击的状态:unchecked*/
advanceSet>QSpinBox::down-button{	image:url(:/new/prefix1/image/spindownbtnUnchecked.png);
}/*行列按钮上箭头被点击的状态*/
advanceSet>QSpinBox::up-button:pressed{	image:url(:/new/prefix1/image/spinupbtnChecked.png);	border:none;
}/*行列按钮下箭头被点击的状态*/
advanceSet>QSpinBox::down-button:pressed{	image:url(:/new/prefix1/image/spindownbtnChecked.png);	border:none;
}/*此界面上所有的单选按钮最初状态*/
advanceSet>QRadioButton{font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*此界面上所有的单选按钮的子部件的最初状态(未点击状态)*/
advanceSet>QRadioButton::indicator{image:url(:/new/prefix1/image/radioUnchecked.png);
}/*此界面上所有的单选按钮的子部件的被点击后的状态(点击状态)*/
advanceSet>QRadioButton::indicator:checked{image:url(:/new/prefix1/image/radioChecked.png);
}/*此界面上所有的复选框最初时的状态*/
advanceSet>QCheckBox{font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;
}/*此界面上所有的复选框子部件未被点击时的状态*/
advanceSet>QCheckBox::indicator{background-color:transparent;image:url(:/new/prefix1/image/checkbtnUnchecked.png);
}/*此界面上所有的复选框子部件被点击时的状态*/
advanceSet>QCheckBox::indicator:checked{image:url(:/new/prefix1/image/checkbtnChecked.png);
}

多个相同类型的控件的样式相同

若同一类型的控件的样式要求一致,可以一起设置。

  1. 界面上有多个相同类型的控件,但是有几个控件的样式要求一致,可以采取如下设置;
/*界面中还有其它的QPushButton,但是有两个QPushButton的样式设置要求一致,可以一起设置*/
/*确定按钮,取消按钮*/
QWidget#widget>QPushButton#pushButton_confirm,QPushButton#pushButton_cancel{	font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #FFFFFF;background-color:#FF080C3E;	border: 1px solid #FFFFFF;border-radius: 6px;
}/*确定按钮,取消按钮被点击状态*/
QWidget#widget>QPushButton#pushButton_confirm:pressed,QPushButton#pushButton_cancel:pressed{font-size: 14px;font-family: Microsoft YaHei;font-weight: 400;color: #000438;	background-color: #00FFFF;opacity: 0.9;border-radius: 6px;
}

2.若界面上所有同一类型的控件的样式都要求设置一致,可以不用指明控件名称,直接设置。

/*界面上所有的QPushButton控件的样式一致*/
InformDialog>QPushButton{color:#FFFFFF;background-color:#FF2D3274;border: 1px solid #FFFFFF;border-radius: 6px;
}/*取消按钮被点击状态*/
InformDialog>QPushButton:pressed{background-color: #008AFF;border-radius: 6px;
}

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

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

相关文章

5G精华问答:5G的速度到底有多快?| 技术头条

近几年5G大火&#xff0c;尤其是2019年更是达到了高潮&#xff0c;关于5G的各种问题也随之而来&#xff0c;它究竟有多快&#xff0c;会不会取代WiFi和4G&#xff0c;今天就为大家来解答各种关于5G的问题吧。1Q&#xff1a;5G会取代Wi-Fi么&#xff1f;A&#xff1a;5G是第五代…

第一篇:Spring Boot 快速入门篇

小技巧&#xff1a; Spring Boot 集成周边技术3部曲 1.pom文件引入maven依赖 2.配置文件中配置相关信息 3.启动类上加注解 一、Spring Boot 构建项目有2种方式&#xff1a; Maven 构建项目 1、访问 http://start.spring.io/2、选择构建工具 Maven Project、Java、Spring Boot…

Windows OpenGL 图像伽马线

目录 一.OpenGL 图像伽马线 1.原始图片2.效果演示 二.OpenGL 图像伽马线源码下载三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 特效 零基础 OpenGL ES …

Qt使用socket通信时接收的汉字信息显示时乱码

显示乱码的原因是因为编码格式不一致。 下面附上一个曾经的例子。 QString str ui->textEdit->toPlainText();QByteArray text str.toUtf8();//返回一个字符串的utf-8形式&#xff0c;可以表示所有字符 // QByteArray text str.toLatin1();//只能输出英文和数字&a…

OpenStack已死?恐怕你想多了 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;译者&#xff1a;Lorraine Lo在接受不同采访时我经常会被问到这么一个问题&#xff1a…

Windows 环境 Jenkins集成构建SonarQube

关于Windows搭建SonarQube_Mysql的相关操作先点击下面的链接&#xff0c;进行跳转。 操作手册&#xff1a; Windows搭建SonarQube_Mysql 启动Jenkins有2种方式&#xff1a; 第1种&#xff1a;java -jar jenkins.war :原理是用自身的netty启动第2种&#xff1a;把jenkins.war…

tcp的简单使用实例一

话不多说&#xff0c;直接上自己写的一个tcp小程序&#xff0c;分为客户端和服务端两个程序&#xff0c;实现了单一方向的数据传输。下面来看具体的代码&#xff1a; 先看客户端的程序。创建基于Qt Widgets Application 的应用程序&#xff0c;选择基类QDialog,修改类名为myCli…

java 中以||作为split分隔符正确的写法

java 中以||作为split分隔符正确的写法 今天项目中需要在后台处理前台传递过来的拼接字符串&#xff0c;一开始写成str.split("\||")&#xff0c;得不到正确的结果&#xff0c;通过百度查找发现 java 中以||作为split分隔符正确的写法需要将||进行转义&#xff0c;否…

英特尔强势上新一大波数据产品,小伙伴们“奔走相告”…… | 极客头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;刘晶晶近日&#xff0c;英特尔推出了一款创新产品组合&#xff0c;点…

Qt中Tcp通信的简单使用二

tcp编程中写的一个简单的单项传输数据的小例子&#xff0c;和上一节一样&#xff0c;分为客户端和服务端程序&#xff0c;下面看一下界面的效果。 创建的方法和之前一样&#xff0c;上面上代码&#xff1a; 客户端 Client.h #ifndef CLIENT_H #define CLIENT_H#include <…

atom插件安装方法

Search Atom packages 安装插件前提&#xff1a; 1、安装git 和node.js2、node官网&#xff1a;https://nodejs.org/en/3、下载稳定版 4、安装node.js 详细安装步骤&#xff1a; http://www.runoob.com/nodejs/nodejs-install-setup.html 5、插件搜索官网&#xff1a; https…

Docker精华问答:Docker与虚拟机的区别?| 技术头条

Docker 是个划时代的开源项目&#xff0c;它彻底释放了计算虚拟化的威力&#xff0c;极大提高了应用的维护效率&#xff0c;降低了云计算应用开发的成本&#xff01;使用 Docker&#xff0c;可以让应用的部署、测试和分发都变得前所未有的高效和轻松&#xff01;1Q&#xff1a;…

Qt下Tcp通信的简单使用三

和之前两个例子一样&#xff0c;程序比较简单&#xff0c;刚入门的可以看看&#xff0c;先上效果图。 下面是客户端&#xff1a; myClient.h #ifndef CLIENT_H #define CLIENT_H#include <QDialog>QT_BEGIN_NAMESPACE namespace Ui { class Client; } QT_END_NAMESPAC…

docker创建jdk镜像

前言&#xff1a; 现在有需求要用docker跑java项目&#xff0c;而且有多个项目&#xff0c;所以我的思路是自己搭建一个基于jdk8的基础镜像&#xff0c;后边所有的项目镜像在这个基础上再编译。 将要用到的技术及软件&#xff1a; 编译方式&#xff1a;Dockerfile Linux镜像&am…

44年前的今天,改变世界的TA诞生了! | 极客头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;1975年4月4日&#xff0c;是历史上普通的一天。这一天&#xff0c;有两个人成立…

第二篇:Spring Boot 热部署

文章目录1. 依赖2. 开启实时自动编译3. 开启运行自动编译开关1. 依赖 <!-- 热部署DevTools --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency>2. 开启实时自…

Qt关于Tcp通信步骤的总结

Qt中TCP通信&#xff0c;与C中tcp通信还是有差别的&#xff0c;下面总结一下Qt中TCP通信。 服务端&#xff1a; 创建QTcpServer对象。可以在构造函数中创建&#xff0c;在.h中声明类QTcpServer,并在类中定义其指针变量&#xff1b;监听。使用函数listen()来监听IP和端口&…

Spring Boot 企业实战_前夕

Spring Boot 专栏设置意在实战微服务&#xff0c;依赖统一由父工程进行依赖控制&#xff0c;其他子项目均依赖此工程。 小技巧&#xff1a; Spring Boot 集成周边技术3部曲 1.pom文件引入maven依赖 2.配置文件中配置相关信息 3.启动类上加注解 创建Spring Boot 父工程&#xff…

西门子和阿里云要搞啥事情?| 极客头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;重 磅• 西门子MindShpere成功部署在阿里功云上并开始运营• 信守承诺、按期推…

Qt中UDP通信的简单示例

udp通信分为发送端和接收端&#xff0c;通信步骤可以分为以下&#xff1a; 接收端&#xff1a; 创建QUdpSocket对象。在.h文件中添加类的前置声明&#xff0c;定义该类的指针&#xff0c;在.cpp的构造函数中定义指向该类的指针。bind()。绑定IP和端口。connect()。绑定readyR…