当前位置: 首页 > news >正文

QT中的QSS---界面美化

QSS是Qt中能够针对界面的样式进行设置,如:大小,位置,颜色,背景,间距,字体等

与CSS功能一致

设置控件样式

基本语法

选择器

{

属性名:属性值;

}

选择器描述了当前样式针对哪类/个控件生效

属性名:属性值是对某些样式进行具体的设置,可以有多个

如:

QPushButton { color: red; }

创建继承自widget的文件进行实现

在ui界面创建一个按钮

在widget构造函数通过QSS进行

指定控件后,此时的样式就会针对指定的控件生效,也会对指定控件的子控件生效

在ui界面再创建一个按钮,直接指定控件类型,而不是控件

样式对此类型所有控件生效

设置全局样式

将界面上所有的样式都集中到一起进行组织

例:

再创建一个继承自widget的文件

在ui界面创建3个按钮

在main.cpp文件进行全局样式的设置

通过QApplication实例的a对象进行设置

如果设置了全局样式,然后在某个控件又设置了样式,哪个会生效?

如:

如果设置的相同类型的样式,那么全局样式失效,局部样式优先级高

如果全局和局部设置了不同类型的样式,那么两种样式会叠加起来

CSS样式设置和代码分离

实现通过单独的文件来设置控件样式,而不是在代码文件中进行设置

例:

创建一个继承自Widget的文件

创建一个qrc文件,通过qrc来管理样式文件

创建单独的qss文件,通过qrc机制导入程序

编写c++代码,读取qss文件的内容并设置样式

添加qss文件时,直接新建一个qss文件,添加到qrc文件中

添加后在程序中打开该文件

编写CSS代码

在ui界面创建一个pushButton

在main.cpp通过函数读取qss文件,将读取到的样式设置进界面

该方法不太便利,需要创建文件,读取文件

将样式直接写入ui文件

Qt Designer中集成了代码和样式分离的功能,允许直接把样式写进.ui

文件中

如:

创建一个继承自widget的文件

在ui界面创建一个pushButton

在按钮旁边空白处,选中整个窗口,点击鼠标右键,选择改变样式表

能够在此处编写界面的样式,会记录到ui文件中,在程序允许时自动生效

带实时预览

在ui文件自动中多出一个设置样式的操作

也可以在ui界面选中某个控件后,单独对某个控件设置样式

选择器

QSS的选择器支持以下几种

选择器

示例

说明

全局选择器

*

选择所有的widget

类型选择器(type selector)

QPushButton

选择所有的

QPushButton和其子类的控件

类选择器(class selector)

.QPushButton

选择所有的

QPushButton的控件,不包括子类

ID选择器

#PushButton_2

选择objectName为pushButton_2的控件

后代选择器

QDialog QPushButton

选择QDialog的所有后代中的

QPushButton

子选择器

QDialog>QPushButton

选择QDialog的所有子控件中的

QPushButton

并集选择器

QPushButton,QLineEdit,QComboBox

选择

QPushButton,QLineEdit,QComboBox这三种控件

属性选择器

QPushButton[flat=”false”]

选择QPushButton中,flat属性为false的控件

例:

创建一个继承自widget的文件

在ui界面创建一个pushbutton

此处的QPushButton选择器不仅对QPushButton生效,同样也会对QPushButton的子类生效

如,QPushButton是QWidget的子类

将QWidget选中后,同样对其子类QPushButton生效

当使用类选择器,如.QWidget时,就不会选中子类

如:

再在ui界面创建两个pushButton,通过id选择器,将他们设为不同的颜色


例:
给控件的子控件进行修改样式
在ui界面创建一个ComboBox下拉框


用qrc机制导入一个图片

将图片设置仅comboBox的子控件--down-arrow

伪类选择器

伪类选择器,是根据控件所处的某个状态被选择的,例如按钮被按下,输入框获取到焦点,鼠标移动到某个控件上等
        当状态具备时,控件被选中,样式生效
        当状态不具备时,控件不被选中,样式失效
使用:的方式定义伪类选择器

常见伪类选择器

常见伪类选择器

伪类选择器

说明

:hover

鼠标放到控件上

:pressed

鼠标左键按下时

:focus

获取输入焦点时

:enabled

元素处于可用状态时

:checked

被勾选时

:read-only

元素为只读状态时

这些状态都可以使用!来取反,如:!hover就算鼠标离开控件时,:!pressed就是鼠标松开时

例:
创建一个继承自widget的文件
在ui界面创建一个按钮

样式属性
QSS中可以对控件设置的属性非常多,一般随用随查
在Qt Assiatant中的Qt Style Sheet Reference章节进行查看

常用属性如:

属性

说明

background-color

设置控件背景颜色

border-radius

单位为像素,设置控件圆角,值越大,控件越圆

font-size

设置字体大小

color

设置文字颜色


盒模型(Box Model)

Qt中每个widget都是一个矩形

相关属性

复合属性的意思是:
如:margin---> margin-left margin-left margin-top margin-bottom

margin: 10px;  四个方向都是10px的外边距

margin:10px 20px; 上下是10px,左右是20px

margin:10px 20px 30px 40px; 上是10px,右是20px,下是30px,左是40px,按顺时针方向进行设置

例:

内边距

创建一个继承自widget的文件

在ui界面创建一个QLabel

外边距

创建一个继承自widget的文件

在构造函数创建pushButton,进行初始化

设置外边距后,按钮变小了

可打印其高度和宽度看是否变化


未发生变化,因为边框是在控件中进行显示的,所以看起来按钮变小了

复选框
相关属性:

要点

说明

::indicator

子控件选择器,选中checkbox中的对勾部分

:hover

伪类选择器,选中鼠标移动上去的状态

:pressed

伪类选择器,选中鼠标按下的状态

:checked

伪类选择器,选中checkbox被选中的状态

:unchecked

伪类选择器,选中checkbox未被选中的状态

width

设置子控件宽度,对普通控件无效

height

设置子控件高度,对普通控件无效

image

设置子控件的图片


实现自定义复选框样式
将复选框的三种状态都导入对应的图片

准备6张图片
使用灰色作为默认状态,粉色作为hover状态,蓝色作为pressed状态

新建一个widget文件
在ui界面创建一个checkbox

使用qrc机制,创建资源文件,将图片导入

在ui界面右键点击checkbox选中改变样式表来设置样式
先对整体样式进行设置

indicator是复选框的子控件---小方框

实现其在未勾选是,在默认,鼠标放置,按下
勾选后,在默认,鼠标放在,按下都有不同的样式


输入框

自定义单行编辑框
相关属性

属性

说明

border-width

设置边框宽度

border-radius

设置边框圆角

border-color

设置边框颜色

border-style

设置边框风格

padding

设置内边距

color

设置文字颜色

background

设置背景颜色

selection-background-color

设置选中文字的背景颜色

selection-color

设置选中文字的文本颜色


创建一个继承自widget的文件
在ui界面创建一个lineEdit,转到样式表

修改文本颜色,大小,背景颜色

修改文本选中后的颜色和背景色

列表框

自定义列表框

创建一个继承自widget的ui文件
在ui界面创建一个listWidget,添加元素


转到改变样式表
修改鼠标悬停和点击其元素的背景色


此处设置的是纯色
可以设置为渐变色---通过qlineargradient来进行设置
需要填写六个参数

参数:

x1

开始颜色渐变的横坐标

y1

开始颜色渐变的纵坐标

x2

结束颜色渐变的横坐标

y2

结束颜色渐变的纵坐标

stop:0

开始渐变的颜色

stop:1

结束渐变的颜色


如 x1:0  y1:0 x2:1  y2:1 ---从左到右渐变
   x1:0  y1:0 x2:0  y2:1---从上到下渐变     
   x1:0  y1:0 x2:1  y2:1---对角线渐变

设置渐变色:
从左往右渐变和上往下渐变

菜单栏

自定义菜单栏
相关属性

要点

说明

QMenuBar::item

选中菜单栏中的元素

QMenuBar::item:selected

选中菜单栏中被选中的元素

QMenuBar::item:pressed

选中菜单栏中的鼠标点击的元素

QMenu::item

选中菜单中的元素

QMenu::item:selected

选中菜单中被选中的元素

QMenu::separator

选中菜单栏的分割线


创建一个继承自MainWindow的文件
进行初始化

转到改变样式表

修改背景色

修改菜单背景色,边框为圆角,修改外边距

添加菜单被选中样式

添加菜单项被选中后背景色

实现登陆界面

创建一个继承自widget的文件

在ui界面创建两个lineEdit,一个checkBox,pushButton

通过垂直布局管理器进行管理

设置两个输入框和按钮的最小高度

设置输入框的提示内容

通过qrc机制导入资源文件,将图片设置为背景

不能直接给顶层窗口设置背景图---因为Qt中存在限制,直接给顶层窗口设置背景会失效

解决方法----给布局中的控件外面套一个和窗口一样大的控件---QFrame控件,通过给QFrame控件来设置背景

结构为QWidget下是QFrame,QFarm下是layout,layout下是具体控件

转到QWidget的改变样式表

设置其控件---QFrame的背景

通过设置border-image,而不是background-image,因为通过border-image设置背景图片后,背景会跟随控件大小而改变

设置输入框文字颜色和背景颜色

设置输入框内边距,文字大小,取消边框,设置圆角

将密码输入框的表现模式设置为密码

对checkBox和pushButton进行设置

设置按钮按下后的样式


效果:

相关文章:

  • 蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术
  • 《Android 应用开发基础教程》——第十一章:Android 中的图片加载与缓存(Glide 使用详解)
  • 解决“‘mvn‘ 不是内部或外部命令,也不是可运行的程序”错误
  • 一条 SQL 查询语句是如何执行的(MySQL)
  • Redis怎么避免热点数据问题
  • 云原生后端架构的实践与挑战:探索现代后端开发的未来
  • JVM性能调优的基础知识 | JVM内部优化与运行时优化
  • SQL面试题——留存分析之使用bitmap 计算留存
  • d202552-sql
  • PostgreSQL常用函数
  • 个人健康中枢的多元化AI硬件革新与精准健康路径探析
  • PyTorch、Flash-Attn、Transformers与Triton技术全景解析+环境包
  • 融智学数学符号体系的系统解读(之一)
  • 本地大模型编程实战(32)用websocket显示大模型的流式输出
  • 软考 系统架构设计师系列知识点之杂项集萃(51)
  • [学成在线]22-自动部署项目
  • 4.1 模块概述
  • ubuntu22.04安装显卡驱动与cuda+cuDNN
  • BERT+CRF模型在命名实体识别(NER)任务中的应用
  • ElasticSearch深入解析(八):索引设置、索引别名、索引模板
  • 福州交警:一小型汽车因操作不当撞上汽车和电动车,致2人死亡
  • 辽宁男篮被横扫这一晚,中国篮球的一个时代落幕了
  • 5月1日全国铁路发送旅客2311.9万人次,创历史新高
  • “三桶油”一季度净赚966亿元:业绩分化加剧,有人欢喜有人愁
  • 《一鸣惊人》五一特别节目:以戏曲为桥梁,展现劳动者的坚守
  • 空调+零食助顶级赛马备战,上海环球马术冠军赛即将焕新登场