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

news2024/9/29 21:15:53

界面优化 =》美化

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

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

界面优化 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.coloradmin.cn/o/2177838.html

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

相关文章

基于单片机的多路温度检测系统

**单片机设计介绍,基于单片机CAN总线的多路温度检测系统设计 文章目录 前言概要功能设计设计思路 软件设计效果图 程序设计程序 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探…

【Vue3】组件元素定义的ref属性和expose,setup返回值的关系

1、实例代码 首先一个测试结果: 1、在组件模版中元素定义的ref属性,会在编译阶段生成对应的props数据,作为参数传入到创建这个ref所在元素的vnode的方法中。 2、如果ref定义在一般的元素中,那么ref就指向这个元素的dom实例,如果re…

6.824 Lab 2C 学习记录

2C的test中的unreliable figure8算是给博主的迎头一棒,需要根据raft论文的figure8进行解决,leader无法提交不属于currentTerm的日志,当确定committed到当前term时才能apply。 这一步没做到时,报错大概率为applied error&#xff0…

leetcode 450.删除二叉搜索树中的结点

1.题目要求: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤&#…

SpringBoot--为什么Controller是串行的?怎样才能并行?

原文网址:SpringBoot--为什么Controller是串行的?怎样才能并行?-CSDN博客 简介 本文介绍SpringBoot为什么Controller是串行的?在什么场景下才能并行执行? 大家都知道,SpringBoot的Controller按理是并行执…

STM32DMA学习日记

STM32 DMA学习日记 写于2024/9/28晚 文章目录 STM32 DMA学习日记1. DMA简介2. I/O方式2.1 程序查询方式2.2 程序中断方式2.3 DMA方式 3.DMA框图4. 相关寄存器4.1 DMA中断状态寄存器(DMA_ISR)4.2 DMA中断标志清除寄存器(DMA_IFCR)…

3. 将GitHub上的开源项目导入(clone)到本地pycharm上——深度学习·科研实践·从0到1

目录 1. 在github上搜项目 (以OpenOcc为例) 2. 转移到码云Gitee上 3. 下载整个项目到本地 4. 在pycharm中打开项目 1. 在github上搜项目 (以OpenOcc为例) 把链接复制下来,转移到国内Gitee上,会更稳定 2. 转移到码云Gitee上 &…

IT基础监控范围和对象

监控易作为一款由美信时代独立自主研发的分布式一体化集中监控平台,其监控范围极为广泛,几乎涵盖了所有主流的IT基础设施以及相关的设备和系统。以下是对监控易监控范围的详细介绍: 一、IT基础资源监控 服务器硬件监控:监控易支…

【CAM350】使用总结 <二>{ 光绘Gerber 比较 }

一、 比较两份版本不同的光绘文件: //Analysis-Compare layers// 二、参数默认,比较完成给出结果 三、也可以直接在一份文件上选择“Draw on top” 四、对比差距直观可见

PageHelper - MyBatis 分页插件

如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表、多表分页。 学习任何知识都推荐查看它的官方文档:MyBatis 分页插件 PageHelper 文档里面介绍了很多,我这里谈一下我的理解&…

单细胞miloR分析(基于 KNN 图的细胞差异丰度分析方法)

通常情况下,对两组或多组样本进行了不同处理/干预之后,研究者首先会进行同种细胞亚群处理前后的细胞数量的比较,但在单细胞分辨率时代之后,即使是同一个亚群中的不同细胞也应当看成不同的样本。 那么问题就来了,既然应…

矩阵特征值估计

特征值的相关理论 矩阵的特征值与特征向量的定义由于是代数最基本的知识,在此暂且不介绍了,不太清楚的可以查询一下低阶代数课程。 一、矩阵特征值的估计1——矩阵特征值在复平面上的分布 定义 Gerschgorin圆盘:设 A(aij)nn 为实方阵&…

计算机变量内存分区

内存分区 堆区、栈区、全局区、文字常量区、代码区 1.堆区:malloc、calloc、realloc、free操作,可读可写;2.栈区:局部变量、函数形参、返回值 、可读可写3.全局区:全部变量、静态局部变量、静态全局变量 、可读可写&…

动手学深度学习(李沐)PyTorch 第 5 章 深度学习计算

5.1 层和块 为了实现这些复杂的网络,我们引入了神经网络块的概念。 块(block)可以描述单个层、由多个层组成的组件或整个模型本身。 使用块进行抽象的一个好处是可以将一些块组合成更大的组件, 这一过程通常是递归的,…

Matlab实现鲸鱼优化算法优化回声状态网络模型 (WOA-ESN)(附源码)

目录 1.内容介绍 2部分代码 3.实验结果 4.内容获取 1内容介绍 鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种基于座头鲸捕食行为的群智能优化算法。该算法通过模仿座头鲸使用螺旋形路径和包围猎物的策略来探索和开发解空间,以找到…

「Python入门」Pycharm的安装和运行

文章目录 Pycharm介绍文件介绍安装Pycharm打开pycharm配置python解释器运行代码新建文件 Pycharm介绍 PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使…

用manim实现有想法的Pi

这幅图展示了一个关于矩阵乘法的数学公式,背景为深绿色,给人一种简洁而专业的感觉。图中间是一个矩阵乘法的表达式,左侧是两个 2222 矩阵,分别为: 右侧则是它们的乘积,结果矩阵为: 整个公式被一…

Windows:win11旗舰版连接无线显示器,连接失败

摘要:win11系统通过 miracast 无线连接到长虹电视的时候,一直连接不上。查看电脑又是支持 miracast 协议,后续发现关闭防火墙即可正常连接。 一、问题现状 最近公司里新换了电视,打算把笔记本电脑投屏到电视上。由于 HDMI 插拔不…

电子信息工程职称评审流程有哪些?

电子信息工程职称评审流程有哪些? 2024年工程类职称评审6大步骤: 1.确认申报条件 2.准备评审材料 3.提交评审材料 4.组织专家评审 5.进入答辩环节 6.职称公示下证 哪些人可以评电子信息工程呢? 从事微电子、计算机与网络、信息与通信、…

媒体发稿:怎样写下有吸引力的文案共享-华媒舍

媒体发稿推广已成为企业、机构和个人宣传策划的重要方式之一。因为市场竞争激烈,怎样写下有吸引力的爆款文案成为了一个重要环节。这篇科谱详细介绍文章内容将为您分享一些对于如何写下爆款文案的机密手册。 1、关键词的风采 题目是文案的店面,取决于读…