Qt --- 界面优化 --- QSS和绘图API

界面优化 =》美化

一个程序的界面是否好看,是否重要呢。

有些面向专业领域的程序,界面好看与否,不是看关键,更关键的是实际的效果。有些面向普通用户领域的程序,界面好看,还是很大的加分项。

界面优化 Qt中使用QSS =》网页前端 CSS

能够针对界面的样式来进行设置。包括不限于:大小、位置、颜色、背景、间距、字体……

CSS的功能是非常强大,非常丰富的。QSS要逊色一些,也能完成很多的工作。有时候,可以通过QSS设置样式。也可以通过C++代码设置样式。如果两者冲突,QSS优先级最好

基本语法:

选择器:先选择某个/某一类控件,接下来进行各种属性设置,都是针对选中的控件生效的。

键值对:针对某些样式具体的设置了。

上述代码的含义是把QPushButton按钮的文本设置成为红色。

一、QSS基础使用

代码:

设置样式的时候,是可以指定某个控件来设置的。指定控件之后,此时的样式就会针对这个指定的控件,也会针对子空间生效。

既要考虑到子空间,也要考虑到选择器的筛选。

设置全局样式

界面上所有的样式都集中到一起来组织。

如果设置了全局样式,然后在某个控件里有设置了其他样式,会怎么样。

此时这两方面的样式,会叠加起来。这叫做层叠性。

如果设置了全局样式,在某个控件里设置的样式和全局样式冲突了,又会怎么样。

局部样式的优先级是更高的,覆盖了对应的全局样式。

实际开发中,就可以在全局样式中设置比较通用的样式,统一整个程序的界面风格。如果需要针对某个控件进行微调,可以使用局部样式来做出调整。

二、样式和代码的分离

QSS上述代码中,样式代码和C++代码都是混在一起的。如果QSS样式代码比较简单,无所谓了,如果QSS代码非常复杂,继续这样搞,代码的维护成本就很高了。

我们可以把样式代码拎出来,放到单独的文件中,后续可以直接让C++代码来读取并加载文件内容。就可以解耦合了。

代码:

1、创建qrc文件,通过qrc管理样式文件。

2、创建单独的QSS文件,把这样的文件放到qrc中。

3、编写C++代码,读取QSS文件中的内容,并设置样式。

这个方案仅供参考,实际开发中还有更方便的方案。

在 Qt Designer中直接集成了这样的功能,允许我们把样式直接写到.ui文件里。

通过这里就可以编写界面的样式了,这里进行的修改都会记录到ui文件中,并且在程序运行时会自动生效。而且这里还能进行预览。

记录了当前编辑的样式,后续Qt根据ui文件生成C++代码,也就会同时把样式设置进去。

选中控件也是可以进行设置样式的。

由于设置样式太灵活,有很多地方都能设置,就导致当某个控件样式不符合预期的时候,排查起来就比较麻烦了。全局样式,指定控件的样式,指定控件的父控件的样式,QSS文件中的样式,ui文件中的样式。实际开发中,如果需要设置样式,建议最好统一使用某一种方式来设置。

三、选择器

类型选择器,类选择器。全局选择器

代码:

类型选择器对子类会生效,相同的类都会被选中

类选择器不会对子类生效。

在开发中,期望不同的控件样式不同,此时就需要使用id选择器了。id是唯一的。

当类选择器和id选择器选中同一个控件的时候,并且设置的样式是冲突的,此时id选择器的优先级更高。

并集选择器:也可以写成ID选择器

子控件选择器

含有子控件的控件:QSpinBox,QComboBox下拉框。

代码:

伪类选择器

前面介绍的选择器,都是选中控件,伪类选择器,选中的是控件的状态。符合一定状态条件的控件。

以上选择器还可以通过!取反。

代码:

这些功能也可以通过事件来书写。

四、盒子模型

box model盒子模型,来自于CSS

符合属性 margin可以拆成四个属性,margin-left,margin-right,margin-top,margin-bottom。

padding也是可以拆分成四个属性的。

代码:

 给按钮设置样式

给复选框设置样式

给输入框设置样式

给列表框设置样式

渐变色的使用方法

给菜单设置样式

实现登录界面

直观想法,是直接给QWidget顶层窗口设置背景图。但是Qt中存在限制,直接给顶层窗口设置背景会失效。暂时不知道为什么要这样。没有具体的解释。可以给上述控件外头套上一个和窗口大小一样大QFrame控件。

QSS小结

1、QSS是什么

2、QSS基本用法

3、选择器的使用

4、子控件选择器

5、伪类选择器

6、盒子模型

7、代码例子。QSS支持的样式属性值是很多的。

五、绘图API

绘图画画,前面学习Qt主要是学Qt的各种控件 =》本质上都是画出来的。都是一些常用的东西,Qt已经提前画好了,拿过来就能使用。实际开发中,很可能现有的控件无法满足要求,就需要自己diy一些控件,Qt提供的绘图API就是为了解决上述问题的。实际开发中大部分情况下不需要使用绘图API,

绘图API核心类

QPainter,提供一系列的绘图方法,实现会话的动作

QPaintDevice,你要画的内容是往啥东西上画的,也就是画板。QWidget就是QPaintDevice的子类。

QPen 画笔 。设置画图的线条属性。

QBrush 画刷 设置画图的填充属性。

一个关键的注意事项,画图相关的操作,一般不会放到QWidget的构造函数中调用执行,而是Qt提供了一个paintEvent事件处理函数,在这里进行调用。和paintEvent和它的对应的会有一个QPaintEvent事件,

1、控件首次创建的时候,比如往QWidget上画画,QWidget创建之前,画的东西当然不生效。首次创建QWidget就能显示出画的东西来。

2、控件被遮挡,在解除遮挡。这个时机进行绘制也是很重要的,否则绘制的内容就会被遮挡之后就没了。

3、窗口被最小化,再还原。

4、控件大小发生改变的时候

5、主动在代码中调用repaint或者update触发事件(都是QWidget提供的成员函数)。

绘制各种形状

绘制文字

0横坐标,表示的是文字最左侧的位置。

100纵坐标,表示的是文字的基线位置

通过画笔对象QPen设置绘制的形状的颜色信息

QBrush画刷

设置颜色和风格

可以设置的风格

具体的使用

绘制图片

QPixmap通过这个类,就可以表示一个图片。

图片的旋转

QPainter对象进行了旋转,绘制出来的内容也就产生了旋转了。

是绕着0,0坐标系原点进行了旋转。为了让图片显示出来,可以把坐标系原点(Painter的起点)平移一下。比如可以平移到窗口右下角。

Qt就告一段落了!祝我们可以找到心仪的工作。在计算机的道路上走得更远。

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

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

相关文章

奖金高达 110 万元,Spatial Joy 2024 全球 AR 应用开发大赛启动

今年是AR应用开发大赛第三届,恰逢Rokid成立十周年,我们推出全新的大赛品牌“Spatial Joy”,引领开发者享受开发乐趣,为其打造充满挑战和惊喜的开发之旅,逐渐成为空间计算时代全球最大AR应用开发大赛。回顾大赛发展&…

PCB敷铜敷不了相同网络的线怎么办?

图片上的情况就是今天需要讲的内容,可以看出出来的线头是GND,敷的铜也是GND但是相同网络就是不能连在一起。 解释: 这是因为我们敷铜的时候属性选的是连接相同的net,如图所示: 解决办法: 只需要设置改为相同的Object就可以了&…

STM32+ADC+扫描模式

1 ADC简介 1 ADC(模拟到数字量的桥梁) 2 DAC(数字量到模拟的桥梁),例如:PWM(只有完全导通和断开的状态,无功率损耗的状态) DAC主要用于波形生成(信号发生器和音频解码器) 3 模拟看门狗自动监…

高效的视频压缩标准H.264介绍,以及H.264在视频监控系统中的应用

目录 一、概述 二、 工作原理 三、技术特点与优势 1、高效压缩率 2、高质量视频 3、错误恢复能力 4、灵活性 四、编解码过程 1、编码过程 2、解码过程 五、帧类型与结构 1、I帧 2、P帧 3、B帧 六、应用与优势 1、节省存储空间和带宽 2、提高视频质量 3、适应…

2024大二上js高级+ES6学习9.29(深/浅拷贝,正则表达式,let/const,解构赋值,箭头函数,剩余参数)

9.29.2024 1.浅拷贝和深拷贝 Es6的语法糖:用assign将obj对象浅拷贝给o对象。 把数组写在前面是因为数组也是对象 2.正则表达式 创建和检测正则表达式 正则表达式的使用直接跳过,等要用时现查现用 3.ES6 4.let关键字 块级作用域是指在一个{}l里 变量提…

File 和 Blob两个对象有什么不同

Blob 在 JavaScript 中,Blob(Binary Large Object)对象用于表示不可变的、原始的二进制数据。它可以用来存储文件、图片、音频、视频、甚至是纯文本等各种类型的数据。Blob 提供了一种高效的方式来操作数据文件,而不需要将数据全…

招联金融内推-2025校招

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

【springboot】使用thymeleaf模板

1. 导入依赖 首先&#xff0c;创建一个Spring Boot项目&#xff0c;并添加Thymeleaf依赖。在pom.xml文件中添加以下依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifa…

组合逻辑元件与时序逻辑元件

组合逻辑元件和时序逻辑元件都是数字电路中的基本构建块&#xff0c;但它们在功能和结构上存在显著差异。 1. 组合逻辑元件: 内容: 组合逻辑元件的输出仅取决于当前的输入&#xff0c;而与之前的输入无关。 它们没有记忆功能。 常见的组合逻辑元件包括&#xff1a; 与门 (AND…

美图AI短片创作工具MOKI全面开放 支持生成配乐、细节修改

人工智能 - Ai工具集 - 集合全球ai人工智能软件的工具箱网站 美图公司近日宣布&#xff0c;其研发的AI短片创作工具MOKI已正式向所有用户开放。这款专注于AI短片创作的工具&#xff0c;提供了包括动画短片、网文短剧等多种类型视频内容的生成能力&#xff0c;致力于为用户带来…

文件防泄密措施有哪些?6个方法有效防止文件泄密

想象一下&#xff0c;一群穿着黑衣的神秘人在电影中潜入高保安办公室&#xff0c;绕过各种高科技安保装置&#xff0c;只为偷走里面存放的饱含机密的文件&#xff01; 听起来是不是很刺激&#xff1f; 但如果这种情况发生在现实中&#xff0c;而且发生在你的企业或个人数据上…

【中级通信工程师】综合能力:2024年真题回顾(附答案)

【零基础3天通关中级通信工程师】 综合能力&#xff1a;2024年真题回顾 本文是根据参加考试的回忆并且结合网上几版资料复原的2024年通信考试中级《综合能力》的真题考卷&#xff0c;旨在为广大考生提供复习和备考的参考&#xff0c;试卷大体和真题相符&#xff0c;部分选项回…

互联网全景消息(6)之RocketMq-NameServer源码分析

一、RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术,自主研发的云正式商用的专业消息中间件,既可为分布式应用系统提供异步解耦和削峰填谷的能力,同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性,是阿里巴巴双 11 使用的核心产品。 二、…

[Linux]:线程(二)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 与Windows环境不同&#xff0c;我们在linux环境下需要通过指令进行各操作&…

MAC的几个常见的快捷方式

1.mac 查看图片好的方式 默认查看图片的方式无法直接切换上一张下一张 解决方法&#xff1a; 1.&#xff08;最好的方法&#xff09;选中图片直接按空格&#xff0c;进入快速预览图片 2.就是全部选中然后打开&#xff0c;但是说实话有点奇怪&#xff0c;而且很占内存 3.直接显示…

【JAVA开源】基于Vue和SpringBoot的网上租赁系统

本文项目编号 T 050 &#xff0c;文末自助获取源码 \color{red}{T050&#xff0c;文末自助获取源码} T050&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计5.4.1 用…

[Linux]:线程(一)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Linux学习 贝蒂的主页&#xff1a;Betty’s blog 1. 初识线程 1.1 线程的概念 在操作系统中&#xff0c;进程与线程一直是我们…

Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)

目录 1. 简介 2. JTAG to AXI Master 2.1 添加 IP Core 2.2 基本TCL命令 2.2.1 复位 JTAG-to-AXI Master 2.2.2 创建并运行写入传输事务 2.2.3 创建并运行读取传输事务 2.2.4 命令列表 2.3 帮助信息 2.4 创建TCL读写程序 2.4.1 Read proc 2.4.2 Write proc 2.4.3 …

cuda程序编译流程

cuda程序编译流程 本文以cuda example的matrixMul矩阵乘法为例说明cuda程序的编译流程。 1. 源代码 .cu 文件 在matrixMul示例中&#xff0c;源代码文件 matrixMul.cu 是典型的CUDA程序&#xff0c;包含以下部分&#xff1a; 流程图 主机代码&#xff08;Host Code&#xf…

GNSS定位中自适应调整电离层延迟参数过程噪声的方法

文章目录 前言一、非差非组合PPP模型二、电离层功率谱密度计算三、具体实现方法3.1 不平滑3.2 三阶多项式平滑 参考文献 前言 GNSS定位中不少技术手段如PPP和长基线RTK需要将电离层延迟作为参数估计&#xff0c;电离层延迟的变化通常被描述为随机游走过程&#xff0c;而功率谱密…