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

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 的绘图原点移动到控件的中心。这在进行中心对称绘制或者需要以控件中心为基准进行绘图时特别有用.

结语

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

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

相关文章:

  • Git SSH 密钥多个 Git 来源
  • 研究夜间灯光数据在估计出行需求方面的潜力
  • MySQL 按照日期统计记录数量
  • python 练习
  • 基于LoRA的Llama 2二次预训练实践:高效低成本的大模型领域适配
  • 使用c++调用deepseek的api(附带源码)
  • AI律师匹配AI分析法律需求意图并匹配律师
  • 为什么在TCP层(即传输层)没有解决半包、粘包的问题
  • 基于SpringBoot的在线抽奖系统测试用例报告
  • unity之协程
  • 算法学习(二)
  • 【Leetcode 每日一题】2145. 统计隐藏数组数目
  • 爬虫学习——LinkEXtractor提取链接与Exporter导出数据
  • OpenCV 图形API(47)颜色空间转换-----将 I420(YUV 4:2:0) 格式的图像数据转换为 RGB 格式
  • 大模型应用开发大纲
  • 什么是SPA,SPA与MAP区别
  • alibaba-JSONObject使用
  • 数据库优化
  • 全球首个人形机器人半程马拉松技术分析:翻车名场面背后的突破与挑战
  • Java第五节:继承thread类创建线程
  • 大学2025丨浙大哲学院院长王俊:文科的价值不在于直接创造GDP
  • 安且吉兮,西泠印社雅集吴昌硕故里
  • 复旦大学附属中山医院也有儿科了,门诊将于下月底开业
  • 国家卫健委:无资质机构严禁开展产前筛查
  • 长三角主流媒体将走进“来电”宜昌,探寻高质量发展密码
  • 体坛联播|中国U16女足击败墨西哥,王星昊首获世界冠军