Qt界面优化

背景介绍

在⽹⻚前端开发领域中, CSS 是⼀个⾄关重要的部分. 描述了⼀个⽹⻚的 “样式”. 从⽽起到对⽹⻚美化的作⽤.

所谓样式, 包括不限于⼤⼩, 位置, 颜⾊, 背景, 间距, 字体等等.
现在的⽹⻚很难找到没有 CSS 的. 可以说让 “界⾯好看” 是⼀个刚需.

⽹⻚开发作为 GUI 的典型代表, 也对于其他客⼾端 GUI 开发产⽣了影响. Qt 也是其中之⼀.
Qt 仿照 CSS 的模式, 引⼊了 QSS, 来对 Qt 中的控件做出样式上的设定, 从⽽允许程序猿写出界⾯更好看的代码.
当然, 由于 Qt 本⾝的设计理念和⽹⻚前端还是存在⼀定差异的, 因此 QSS 中只能⽀持部分 CSS 属性.整体来说 QSS 要⽐ CSS 更简单⼀些.

基本语法

对于CSS来说,基本的语法结构非常简单:

选择器{
	属性名:属性值;
}

QSS沿用了这样的特性:

选择器{
	属性名:属性值;
}
  1. 选择器: 描述了那个控件要应用样式规则(在于确定谁?);
  2. 属性: 是一个键值对,属性名表示要设置那种样式,属性值表示设置的样式的值(在于怎么做?);

eg:

QPushButton {
	color: red;
}

上面这个例子表示:
将所有的QPushButton的文本样式设置为红色;

eg:当用户点击按钮的时候就会将按钮上的文本颜色进行替换:

  1. 设计大概UI界面:
    在这里插入图片描述

  2. 给按钮控件的clicked信号绑定对应的槽函数:
    在这里插入图片描述

  3. 运行结果:
    在这里插入图片描述

上述通过控件的setStyleSheet成员函数设置的QSS样式,只会针对当前控件生效,不会对界面上的其它按钮控件生效;

QSS设置方式

指定控件样式设置

就是通过控件的成员函数setStyleSheet来来设置QSS,这样设置出来的样式只针对当前控件本身生效,在界面上其它控件不受影响;
但是,这样设置会对其挂载在本控件上的子控件们产生影响;

eg: 给一控件设置样式,其挂载在当前控件上面的子控件也会收到影响:

  1. 设置界面
    在这里插入图片描述

  2. 通过Widget设置样式
    在这里插入图片描述

  3. 运行结果
    在这里插入图片描述

当然:

  1. 如果父控件通过QSS设置样式过后,其挂载的子控件也使用了QSS来设置自己的样式,那么这时候子控件的样式设置以自己的为准;
  2. 对于一个控件来说,通过QSS设置的样式优先级高于通过代码设置的;
    eg:
    在这里插入图片描述

全局样式设置

向上面那样一个一个的指定每个控件的样式,得累死,并且一旦控件多起来,那么我们就可能在代码的任意地方都设置QSS,不方便统一管理,秉持着“高内聚,低耦合”的观念,我们建议将QSS放在一处设置,这样方便管理;

全局样式设置:
通过QApplication的setStyleSheet成员函数来设置整个程序的全局样式;
在这里插入图片描述
在这里插入图片描述

全局样式优点:

  1. 是同一个样式针对多个控件生效,代码更加简洁;
  2. 所有控件样式内聚在一起,便于维护和排查问题;

样式的层叠特性:
就比如说我们通过全局样式给按钮控件们设置了颜色为绿色,随后我们希望单独在调整一下按钮2的字体大小,于是我们又单独通过按钮2的setStyleSheet函数来设置QSS样式改变按钮2的字体大小为50像素,最终按钮2呈现出来的样式就是,字体为绿色,字体大小为50像素的情况,像这样,对于按钮2来说,它即继承了全局样式的文本颜色属性,也复用了自己样式的字体大小属性,这样两个样式属性叠加起来现象就叫样式的层叠属性;

eg:
在这里插入图片描述

运行结果:

在这里插入图片描述

当然,如果控件本地样式和全局样式冲突了,那么本地样式优先;

从文件加载样式表

上面两种样式设置方式,都是将样式表和代码融合在一起了,在后期代码量打起来过后就会变得越来越不好维护,因此更好的做法是将样式单独放在一个文件中,然后从文件中读取样式表;

eg:

  1. 设计ui界面
    在这里插入图片描述
  2. 创建.qss文件,并续写QSS样式
    在这里插入图片描述
  3. 为了避免路径问题,我们将style.qss文件采用qrc机制,导入到程序中
    在这里插入图片描述
  4. 采用全局样式
    在这里插入图片描述
  5. 最终运行结果
    在这里插入图片描述

使用Qt Designer来编辑QSS

QSS 也可以通过 Qt Designer 直接编辑, 从⽽起到实时预览的效果. 同时也能避免 C++ 和 QSS 代码的耦合.

  1. 选中要设计的控件,然后鼠标右键,选中“改变样式表”
    在这里插入图片描述
  2. 开始编辑QSS样式
    在这里插入图片描述
  3. 效果实时展示
    在这里插入图片描述

选择器

选择器实例说明
全局选择器*选择所有的控件
类型选择器QPushButton 、QLabel等选择QPushButton、QLabel及其子类实例(这里的子类是继承关系上的)
类选择器.QPushButton选择所有的QPushButton控件,不考虑其子类的实例
ID选择器#objectName指定单独一个控件进行设置
后代选择器QDialog QPushButton选择 QDialog 的所有后代(⼦类控件, 孙⼦类控件等等)中的 QPushButton.
⼦选择器QDialog > QPushButton选择 QDialog 的所有⼦类控件中的 QPushButton.
并集选择器QPushButton, QLineEdit,QComboBox选择 QPushButton, QLineEdit, QComboBox 这三种控件.(即接下来的样式会针对这三种控件都⽣效).
属性选择器QPushButton[flat=“false”]选择所有 QPushButton 中, flat 属性为 false 的控件.

我们只需要记住几个常用的即可,不会的到时候查文档即可;

注意:
当某个控件⾝上, 通过类型选择器和 ID 选择器设置了冲突的样式时, ID 选择器样式优先级更
⾼.同理, 如果是其他的多种选择器作⽤同⼀个控件时出现冲突的样式, 也会涉及到优先级问题.
Qt ⽂档上有具体的优先级规则介绍 (参⻅ The Style Sheet Syntax 的 Conflict Resolution 章
节).这⾥的规则计算起来⾮常复杂(CSS 中也存在类似的设定), 咱们此处对于优先级不做进⼀步讨
论.实践中我们可以简单的认为, 选择器描述的范围越精准, 则优先级越⾼. ⼀般来说, ID 选择器优
先级是最⾼的.

子控件选择器

有些控件内部包含了多个“子控件”.比如QComboBox的下拉后的面板,还有QSpinBox的上下按钮等;

我们可以通过子控件选择器" :: " 针对上述子控件进行样式设置;

哪些控件拥有哪些⼦控件, 参考⽂档 Qt Style Sheets Reference 中 List of Sub-Controls 章
节.

eg1: 设置下拉框的下拉箭头样式

  1. 通过Qt Designer设计一个下拉框,并放入几条数据
    在这里插入图片描述
  2. 将下列图标元素,通过qrc当如程序
    在这里插入图片描述
    在这里插入图片描述
  3. 编写核心代码
    在这里插入图片描述
  4. 运行结果
    在这里插入图片描述

伪类选择器

伪类选择器, 是根据控件所处的某个状态被选择的. 例如按钮被按下, 输⼊框获取到焦点, ⿏标移动到某个控件上等.

  1. 当状态具备时, 控件被选中, 样式⽣效.
  2. 当状态不具备时, 控件不被选中, 样式失效.

使用":" 的方式来定义伪类选择器;

以下是一些伪类选择器:
在这里插入图片描述

这些状态可以使⽤ ! 来取反. ⽐如 :!hover 就是⿏标离开控件时, :!pressed 就是⿏标松开时,
等等.

需要的时候,去查Qt文档即可
参考 Qt Style Sheets Reference 的 Pseudo-States 章节.

eg: 当鼠标悬停在按钮上面时,就改变按钮上文本的颜色;

核心代码:
通过Qt Designer来设计QSS
在这里插入图片描述
运行结果:

在这里插入图片描述

样式属性

QSS 中的样式属性⾮常多, 不需要都记住. 核⼼原则还是⽤到了就去查.
⼤部分的属性和 CSS 是⾮常相似的.

参考Qt Style Sheets Reference::List of Properties章节

BoxModel(盒模型)

在这里插入图片描述

一个遵循盒模型的控件,由上述几个部分构成:

  1. Content矩形区域: 存放控件内容;eg: 文本、图标;
  2. Padding矩形区域: 内边距;内容和边框的距离;
  3. Border矩形区域: 控件的边框区域
  4. Margin矩形区域: 外边距;边框到控件 geometry 返回的矩形边界的距离

在这里插入图片描述

可以通过一些QSS属性来设置上述的边距和边距样式;

QSS属性说明
margin设置四个⽅向的外边距. 复合属性.
padding设置四个⽅向的内边距. 复合属性.
border-style设置边框样式
border-width边框的粗细
border-color边框的颜⾊
border复合属性, 相当于 border-width+border-style + border-color

eg1: 设置边框和内边距

  1. 在界面上创建一个Label
    在这里插入图片描述
  2. 通过全局样式来设计
    在这里插入图片描述
  3. 运行结果
    在这里插入图片描述

控件样式示例

按钮

在这里插入图片描述

经过QSS样式调整:

QPushButton{
	font-size:20px;
	border: 2px solid green;
	border-radius: 15px;
	background-color: rgb(133, 229, 255);
}

在这里插入图片描述

属性解释:

  1. font-size: 字体大小
  2. border-radius: 圆角矩形,数值越大,角就越圆;
  3. backgroung-color: 背景色;

复选框

eg:

  1. 默认情况下(未选中)使用:
    在这里插入图片描述
  2. 默认情况下(选中):
    在这里插入图片描述
  3. 鼠标放上去(未选中):
    在这里插入图片描述
  4. 鼠标放上去(选中):
    在这里插入图片描述
  5. 鼠标点击(未选中):
    在这里插入图片描述
  6. 鼠标点击选中:
    在这里插入图片描述

QSS代码:

QCheckBox::indicator {
	width:40px;
	height:40px;
}

QCheckBox::indicator:unchecked{
	image: url(:/hu.png);
}
QCheckBox::indicator::checked{
	image: url(:/hz.png);
}

QCheckBox::indicator:unchecked:hover{
	image: url(:/lu.png);
}
QCheckBox::indicator:checked:hover{
	image: url(:/lz.png);
}
QCheckBox::indicator:unchecked:pressed{
	image: url(:/gu.png);
}
QCheckBox::indicator:checked:pressed{
	image: url(:/gz.png);
}

运行结果:
在这里插入图片描述

  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt界面优化项目优化主要是指通过对Qt应用程序的界面进行优化,提高用户体验和程序的可用性。 在Qt界面优化项目中,首先需要优化应用程序的界面布局和设计。良好的界面设计可以让用户更加轻松和愉快地使用应用程序。此外,还需要进行控件的优化,比如调整控件的尺寸、颜色和字体等,以便更加符合用户的使用习惯和审美观。 其次,还需要进行界面交互优化。通过增强用户与应用程序之间的互动方式,使用户更方便地使用应用程序。比如,添加更多的鼠标提示信息,让用户更明白应用程序的功能;增加快捷键,使用户更快速地完成任务等。 除了界面和交互方面的优化,还需要对程序的性能和质量进行优化。这包括程序的响应时间、稳定性、安全性等方面。这需要通过对程序的代码进行优化,比如使用更高效的算法、减少冗余代码等方式,以提高程序的性能和质量。 综上所述,Qt界面优化项目优化主要是针对Qt应用程序的界面和交互进行改进,并通过优化程序的性能和质量,提高用户体验和程序可用性。 ### 回答2: Qt界面优化项目优化是对一个已有的Qt界面项目进行优化和改进,目的是提升界面的交互性,增强用户体验。该项目主要通过以下几个方面实现: 1. 界面设计方面:根据用户反馈和需求,重新设计界面优化布局和色调,让用户操作更加直观和流畅。 2. 优化控件方面:通过改进UI控件,让用户操作更加便捷和高效。比如,增加搜索框、下拉选项、快捷键等,减少用户操作的步骤和时间。 3. 优化性能方面:对程序的运行速度和响应时间进行优化,让用户操作更加流畅和快速。通过减少不必要的计算和请求,优化程序内存和资源的使用。 4. 增强功能方面:在保持原有功能的基础上,增加新的实用功能,提高用户的操作效率和体验。 5. 兼容性和稳定性方面:确保程序在不同的操作系统环境中可以正常运行,并修复已知的bug,保证程序的稳定性和可靠性。 Qt界面优化项目优化需要对现有程序进行全面的分析和评估,针对现有问题进行有针对性的优化。通过不断的迭代和改进,最终实现要求的优化目标,提升用户体验和程序质量。 ### 回答3: Qt是一种跨平台的图形用户界面(GUI)框架,用于开发应用程序的图形界面Qt界面优化项目优化是指对Qt框架下应用程序的图形界面进行优化,以达到更好的用户体验和更高的效率。 Qt界面优化项目优化通常包括以下方面: 1.美化界面,改善用户体验。利用Qt提供的丰富的界面控件和样式表,设计出美观、直观、易用的界面,以吸引更多的用户使用和喜爱该应用程序。 2.提高响应速度,增强应用程序的稳定性。对界面的渲染效率进行优化,采用异步加载等技术手段,降低加载时间和CPU占用率,提高界面的响应速度和应用程序的稳定性。 3.优化代码结构和模块化设计,提升开发效率。调整应用程序的代码架构,使之更好地符合设计模式和代码规范,减少代码冗余和模块耦合,提升开发效率。 4.对不同平台进行定制化设计。针对不同平台的不同特性和用户需求,进行针对性的界面设计和优化,以得到最佳的用户体验和应用程序性能。 综上所述,Qt界面优化项目优化是对应用程序界面的综合优化,以提高用户体验、提升开发效率和提高应用程序性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南猿北者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值