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

Qt项目——汽车仪表盘

目录

  • 前言
  • 结果预览
  • 工程文档
  • 一、QPaintEvent绘图事件
  • 二、QPainter画家
  • 三、渐变色
  • 四、坐标转移
  • 结语

前言

汽车仪表盘非常的简单,理解绘图事件,会用就能轻而易举的做出来,这期主要是学习QPainter这个控件。

在这里插入图片描述

结果预览

在这里插入图片描述

工程文档

同样的,我还是把代码放到gitCode上。
https://gitcode.com/ycs66/yibiaopan

一、QPaintEvent绘图事件

QPaintEvent 是 Qt 框架中一个重要的事件类,专门用于处理绘图事件。当 Qt视图组件需要重绘自己的一部分时,就会产生 oPaintevent事件。这通常发生在以下几种情况:
1.窗口第一次显示时:当窗口或控件第一次出现在屏幕上时,系统会生成一个 QPaintEvent 事件,通知窗口进行自身的绘制。
2.窗口大小改变时:当用户改变窗口的大小时,窗口的内容通常需要重新绘制以适应新的尺寸。
3.窗口部分被遮挡后又重新显示时:如果窗口被其他窗口遮挡,然后又重新露出来,被遮挡的部分通常需要重新绘制。
4.手动请求重绘:通过调用Qwidget 的 update()或 repaint() 方法,可以手动触发重绘事件。

在 paintevent方法中,可以创建一个QPainter 对象并使用它来执行绘制操作。QPainter 可以绘制各种基本图形,如线条、矩形、椭圆等,还可以绘制文本和图像。重写paintevent 是在 Qt 中进行自定义绘制的标准做法。

二、QPainter画家

QPainter 是 Qt 库中用于在屏幕上进行绘画的类。它提供了各种绘制功能,比如画线、画图形、画文本等
以下是一些基本的用法示例:
**1.初始化 QPainter:**首先,您需要一个 oPaintpevice :,比如一个 Qwidget或 QPixmap;然后使用它来初始化"QPainter 对象。

QPainterpainter(this);

2.设置画笔和画刷:您可以设置画笔(用于描边)和画刷(用于填充)的颜色、样式等。

painter.setPen(Qt::blue);//设置画笔颜色为蓝色
painter.setBrush(Qt::yellow);//设置画刷颜色为黄色

**3.绘制图形:**使用 QPainter 的方法来绘制线条、矩形、圆形、文本等。

painter.drawLine(10,10,100,100);//画线
painter.drawRect(10,10,100,100);//画矩形
painter.drawText(10,10,"Hello,Qt!");//画文本

三、渐变色

1.线性渐变
QLinearGradient 是 Qt 框架中用于创建线性渐变的类。线性渐变是一种从一个颜色平滑过渡到另一个颜色的效果,其变化沿着两个点之间的直线进行。这种渐变在图形用户界面设计中非常常见,用于添加深度、立体感或动态效果。

基本用法
要使用 aLinearGradient ,你需要执行以下几个基本步骤
1.创建 qLinearGradient 对象:指定渐变的起点和终点坐标。
2.设置颜色停靠点:在渐变线上定义颜色和相应的位置。
3.使用渐变创建 QBrush :用 QLinearGradient 对象来创建一个 QBrush ,然后用它在 QPainter中进行绘制。

QLinearGradientlinearGradient(0,0,100,100);//起点(0,0)终点(100,100)
//设置颜色停靠点
linearGradient.setColorAt(0.0,Qt::red); //起点颜色linearGradient.setColorAt(1.0,Qt::blue); //终点颜色
//使用这个渐变创建QBrush
QBrush brush(linearGradient);
//使用QBrush进行绘图
QPainterpainter(this);
painter.setBrush(brush);
painter.setPen(Qt::NoPen);//无边框
painter.drawRect(this->rect());//绘制矩形覆盖整个小部件

2. 径向渐变
QRadiaiGradient 是 Qt 框架中用于创建径向渐变的类。径向渐变是一种从中心点向外部辐射的颜色渐变,通常在中心点有一种颜色,而向外围渐渐变化为另一种颜色。这种渐变非常适合用于模拟光源、阴影或创建圆形的立体感。

基本用法
要使用 QRadia1Gradient ,你需要执行以下几个基本步骤:
1.创建 QRadia1Gradient 对象:指定渐变的中心点、半径以及焦点(可选)。
2.设置颜色停靠点:在径向渐变中定义颜色和对应的位置。
3.使用渐变创建 QBrush :利用 QRadialGradient 对象创建一个 QBrush ,然后用它在 QPainter 中进行绘制。

//创建一个QRadialGradient对象
QRadialGradientradialGradient(50,50,50);//中心和半径(50,50,50)//可选:设置焦点
//radialGradient.setFocalPoint(30,30);
//设置颜色停靠点
radialGradient.setColorAt(0.0,Qt::yellow);//中心颜色radialGradient.setColorAt(1.0,Qt::black); //外围颜色
//使用这个渐变创建QBrush
QBrushbrush(radialGradient);
//使用QBrush进行绘图
QPainterpainter(this);
painter.setBrush(brush);
painter.setPen(Qt::NoPen);//无边框
painter.drawRect(this->rect());//绘制矩形覆盖整个小部件

3 圆锥形渐变
aconica1Gradient 是 Qt 框架中用于创建圆锥形渐变的类。圆锥渐变是一种渐变效果,其中颜色沿着圆锥的轮廓变化,类似于旋转颜色轮。这种渐变以其中心点为基点,颜色沿圆周分布,可以创建出富有动感的视觉效果。
基本用法
要使用 aconicalGradient ,你通常需要做以下几个步骤
1.创建QconicalGradient 对象:指定渐变的中心点和起始角度。
2.设置颜色停靠点:为渐变添加不同的颜色和对应的位置(角度)
3.使用渐变创建 QBrush :使用这个渐变对象来创建一个:QBrush,
然后应用到 QPainter 中进行绘
图。

//创建一个QConicalGradient对象
QConicalGradientconicalGradient(100,100,0);//中心点(100,100),起始角度0
//添加颜色停靠点
conicalGradient.setColorAt(0.0,Qt::red);
conicalGradient.setColorAt(0.5,Qt::blue);conicalGradient.setColorAt(1.0,Qt::red);
//使用这个渐变创建QBrush
QBrushbrush(conicalGradient);
//使用QBrush进行绘图
QPainterpainter(this);
painter.setBrush(brush);
painter.setPen(Qt::NoPen);//无边框
painter.drawRect(this->rect());//绘制矩形覆盖整个小部件

四、坐标转移

在 Qt框架中, painter.translate(rect().center())这行代码的作用是移动 QPainter 的坐标系统原点到当前绘制区域(即由 rect() 返回的矩形)的中心。
解释一下各个部分:
1.:painter:这是一个 QPainter 对象实例,用于在 Qt 窗囗或者图像上进行绘制。
2:translate():这是 QPainter 类中的一个方法,用于改变坐标系统的原点。它接受一个 QPoint 或QPointF 作为参数,这个点指定了新的原点位置。
3.rect():这通常是指一个控件(如 QWidget)的矩形区域,返回一个 QRect或 QRectF 对象,表示该控件的大小和位置。
4:rect().center():这个方法返回当前矩形(即控件的区域)的中心点,是一个 QPoint 或OPointF 对象。
总之,painter.translate(rect().center())这行代码将 QPainter 的绘图原点移动到控件的中心。这在进行中心对称绘制或者需要以控件中心为基准进行绘图时特别有用.

结语

这个绘图事件总体来说比较理解,可以根据自己的想象力来画出自己需要的东西,只是审美这种东西每个人都不一样,所以有的人画出来很好看,有的人就很普通。

在这里插入图片描述
希望大家可以一键三连,后续我们一起学习,谢谢大家!!!
在这里插入图片描述

http://www.xdnf.cn/news/875.html

相关文章:

  • git详解
  • Vue v-for 循环DOM 指定dom个数展示一行
  • 【图像变换】pytorch-CycleGAN-and-pix2pix的学习笔记
  • Git 大文件使用 Git-LFS 管理,推送失败
  • .NET WPF 三维模型
  • 【xlog日志文件】怎么删除里面包含某些字符串的行(使用excel)
  • 垂直行业突围:工业软件在汽车、航空领域的 “破壁” 实践
  • 星云智控科技-优雅草星云物联网AI智控系统软件产品技术栈一览表-优雅草卓伊凡
  • android的 framework 是什么
  • 【MySQL】数据库安装
  • 第十四届蓝桥杯 2023 C/C++组 平方差
  • NLTK 基础入门:用 Python 解锁自然语言处理
  • 【回眸】error: failed to compile `xxxxxx`重装rust环境
  • 【数据结构和算法】4. 链表 LinkedList
  • 87233系列USB连续波功率探头
  • git远程分支重命名(纯代码操作)
  • 【FFmpeg从入门到精通】第四章-FFmpeg转码
  • PyTorch 线性回归详解:模型定义、保存、加载与网络结构
  • 回车键监听
  • MYSQL之基础认识(卸载安装登录, 基本概念)
  • 【日志体系】ELK Stack与云原生日志服务
  • go for 闭环问题【踩坑记录】
  • 解决Mac 安装 PyICU 依赖失败
  • 反向传播思想
  • 【Flask】Explore-Flask:早期 Flask 生态的实用指南
  • 测试用例书写规范详解:构建高效测试体系的基础
  • Java第六节:创建线程的其它三种方式(附带源代码)
  • FreeRTos学习记录--1.工程创建与源码概述
  • Hadoop+Spark 笔记 2025/4/21
  • 力扣2492:并查集/dfs