一、Qt汽车仪表盘之绘制背景-绘制饼图

news2024/12/23 9:27:45

一、绘图坐标系分析

1、坐标系平移

1、从原来的坐标系中心移动到矩形仪表盘中心,相对应的坐标会发生变化。
在这里插入图片描述

2、了解绘制饼图的含义

(1)坐标系平移之后坐标变化

在这里插入图片描述

(2)绘制第一个饼图效果

第一个饼图:坐标(-r,-r)宽度为2r,高度为2r的矩形内接圆,从角度为-60度开始顺时针旋转60度绘制饼图。 画笔为绿色的是饼图边框;画刷填充饼图内部为红色

 int  r= radius;//内接圆半径
 
 //设置画笔 绘制饼图的绿色边框
 painter->setPen(QPen(Qt::green,5));

 //画5块饼图,每个60度 , 弧度需要乘16
 painter->setBrush(Qt::red );//饼图内部填充为红色
 
 //矩形(-r,-r , 2*r ,2*r)的内接圆半径为r,从-60度到60度顺时针绘制饼图
 painter->drawPie(-r,-r , 2*r ,2*r , -60 *16 ,60*16);

在这里插入图片描述

在这里插入图片描述

(3)绘制第二个饼图效果

第二个饼图:坐标(-r,-r)宽度为2r,高度为2r的矩形内接圆,从角度为0度开始顺时针旋转60度绘制饼图。 画笔为白色的是饼图边框;画刷填充饼图内部为黄色。
在这里插入图片描述

(4)画笔没有设置为白色的效果

在这里插入图片描述

二、实现效果

1、画内表盘圆形

    //画内表盘圆形
     r = radius *0.8; //外面直径的0.8倍数
     painter->setBrush( QColor("#7B68EE") );
     painter->drawEllipse(-r, -r,  r * 2,  2*r  );//绘制矩形的内接圆 位置  宽度  高度

在这里插入图片描述

三、代码

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include"dialwidget.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;

    //定义仪表类
    DialWidget dw;

};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //设置仪表盘的父窗口
    //dw.setParent(this);

    dw.setParent(ui->tab_3);

    //设置仪表盘的大小
    dw.setGeometry(800,50, 250,250);

}
MainWindow::~MainWindow()
{
    delete ui;
}

dialwidget.h

#ifndef DIALWIDGET_H
#define DIALWIDGET_H

#include <QWidget>

namespace Ui {
class DialWidget;
}

class DialWidget : public QWidget
{
    Q_OBJECT

public:
    explicit DialWidget(QWidget *parent = nullptr);
    ~DialWidget();

     void paintEvent(QPaintEvent *event);

 private:
     //绘制的细节,私有
      void drawBg(QPainter*painter);

private:
    Ui::DialWidget *ui;

    //仪表盘的半径
    int radius ;
};

#endif // DIALWIDGET_H

dialwidget.cpp

#include "dialwidget.h"
#include "ui_dialwidget.h"
#include<QPainter>

DialWidget::DialWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::DialWidget)
{
    ui->setupUi(this);
}

 void DialWidget::paintEvent(QPaintEvent *event)
 {
     //定义画家类
     QPainter painter(this);

     //以矩形短的一条边为 圆盘的直径      dialwidget.ui上的长和宽
     int w= width();
     int h = height();
     radius = qMin(w,h)/2;

     //反锯齿设置
     painter.setRenderHint(QPainter::Antialiasing);

     //将坐标系平移到窗口中心,方便后面绘制
     painter.translate( w/2, h/2);

     //绘制仪表盘的背景
     drawBg(&painter);

 }

//绘制仪表盘的背景函数
 void DialWidget::drawBg(QPainter*painter)
 {
     int  r= radius;

     //设置画笔 绘制饼图的白色边框
     painter->setPen(QPen(Qt::white,5));

     //画5块饼图,每个60度 , 弧度需要乘16
     painter->setBrush(Qt::red );
     painter->drawPie(-r,-r , 2*r ,2*r , -60 *16 ,60*16);//矩形(-r,-r , 2*r ,2*r)的内接圆从-60度到60度

     QColor yellow = QColor("#FF9C0E");
     painter->setBrush(yellow);
     painter->drawPie(-r, -r, r * 2, 2*r,0*16,60*16); //0*16,60*16 0度开始,正向逆时针旋转60度数

     QColor green = QColor("#1FFF8B");
     painter->setBrush(green);
     painter->drawPie(-r, -r, r * 2, 2*r,60*16,60*16);

     painter->setBrush(yellow);
     painter->drawPie(-r, -r, r * 2, 2*r,120*16,60*16);

     painter->setBrush(Qt::red );
     painter->drawPie(-r, -r, r * 2, 2*r,180*16,60*16);


     //画内表盘圆形
     r = radius *0.8; //外面直径的0.9倍数
     painter->setBrush( QColor("#7B68EE") );
     painter->drawEllipse(-r, -r,  r * 2,  2*r  );//绘制矩形的内接圆 位置  宽度  高度


 }

DialWidget::~DialWidget()
{
    delete ui;
}

在这里插入图片描述

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

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

相关文章

[COMST 2022] 元宇宙的安全隐私问题

A Survey on Metaverse: Fundamentals, Security, and Privacyhttps://ieeexplore.ieee.org/abstract/document/9880528摘要元宇宙&#xff0c;作为下一代互联网的一个不断发展的范式&#xff0c;旨在建立一个完全沉浸式、超时空、自我维持的虚拟共享空间&#xff0c;供人类玩耍…

进销存ERP源码/ 进销存APP源码/小程序ERP系统/Thinkphp+Uniapp全开源销售进库出入库

框架&#xff1a;ThinkPHP5.0.24 uniapp 包含:服务端php全套开源源码&#xff0c;uniapp前端全套开源源码&#xff08;可发布H5/android/iod/微信小程序/抖音小程序/支付宝/百度小程序&#xff09; 注&#xff1a;这个是全开源&#xff0c;随便你怎么开&#xff0c;怎么来&…

JUC并发编程之SynchronousQueue的底层原理

作者简介&#xff1a;专注于研究Linux内核、Hotspot虚拟机、汇编语言、JDK源码、各大中间件源码等等喜欢的话&#xff0c;可以三连关注~SynchronousQueue是什么在JDK源码中JUC包下的并发编程阻塞/同步队列实现各种花样&#xff0c;但是队列的实现无非是。先进先出&#xff0c;后…

程序员必备的Linux命令——文件及目录命令

Linux命令就是我们对Linux系统进行管理的操作指令。类似于我们操作windows系统中可视化的各种操作动作。 在Linux系统中&#xff0c;我们任何东西都被认做是文件&#xff0c;比如cpu、内存、键盘以及用户全是文件。Linux命令类似于之前的DOS命令。 Linux系统中命令分为两种&a…

ORB-SLAM3算法和代码学习——系统初始化浅谈

总述 先放一张LocalMapping的代码结构图 相比于ORB-SLAM2&#xff0c;ORB-SLAM3的系统初始化分成了三个主要的模块&#xff1a;纯视觉初始化、纯IMU初始化、视觉和IMU联合优化。 纯视觉初始化和之前一样就是单目或者双目初始化&#xff0c;在Tracking线程中进行&#xff1b…

js数据结构之栈

1.栈数据结构 栈是一种遵从后进先出&#xff08;LIFO&#xff09;原则的有序集合。新添加或待删除的元素都保存在栈的同一端&#xff0c;称作栈顶&#xff0c;另一端就叫栈底。在栈里&#xff0c;新元素都靠近栈顶&#xff0c;旧元素都接近栈底。 在现实生活中也能发现许多栈的…

【服务器数据恢复】Raid5崩溃导致EMC存储不可用的数据恢复案例

服务器数据恢复环境&#xff1a; EMC存储&#xff0c;多块stat硬盘组建raid5磁盘阵列&#xff0c;两块热备盘&#xff0c;上层采用zfs文件系统。 服务器故障&检测&分析&#xff1a; EMC存储中的raid5磁盘阵列有2块硬盘出现故障&#xff0c;但是只有一块热备盘被激活&am…

关于原型和原型链的整理学习

关于原型和原型链是很多人学习或面试时遇到的问题&#xff0c;可能部分不懂&#xff0c;部分懂但不会说&#xff0c;下面关于原型和原型链进行简单的整理总结&#xff0c;希望可以帮助到大家。 一、JS中的原型和原型链 1、原型说明 所有的引用类型&#xff08;数组、函数、对…

【Tools】Git和VS Code配置

文章目录0 前期教程1 前言2 基本使用2.1 配置2.2 获取帮助3 GitHub仓库和git3.1 新建一个GitHub仓库3.2 删除一个仓库&#xff08;repository&#xff09;3.3 上传项目代码4 git常用指令4.1 创建分支4.2 合并分支4.3 在git提交记录上移动4.4 撤销变更4.5 整理提交记录5 在VS Co…

蓝桥杯 stm32 DAC

文章代码使用 HAL 库。 文章目录前言一、根据手册了解 DAC 重要特性 :二、CubeMX 创建工程&#xff1a;三、DAC 代码&#xff1a;1. 设置DAC输出值函数。2. 开启DAC输出函数。3. DAC 输出电压。总结前言 DAC 就是 数字模拟信号转换器 &#xff0c;也就是把 数字信号转变成模拟…

实施MES系统前,先想清楚首先用来解决什么问题

MES系统首先用来解决什么问题&#xff1f; 很多人会自然而然地认为&#xff0c;MES系统是用来解决管理问题的&#xff0c;是为了明确管理流程的&#xff0c;是为了建立管控标准的…… 甲方会有很多很多想解决的问题&#xff0c;甚至在系统导入过程中&#xff0c;各个部门也会…

vue中安装与引用echarts示例

第002个点击查看专栏目录Echarts发展到现在&#xff0c;已经陆续经过了很多版本&#xff0c;越来越完善&#xff0c;现在主要研究5.0以上的功能。这里是介绍在vue项目中&#xff0c;如果全局或者局部引用echarts&#xff0c;对项目初装echarts会起到非常大的帮助。 NPM 安装 E…

电脑文件如何自动备份?

电脑文件如何自动备份&#xff1f;计算机的出现是人类科技发展的重要标志&#xff0c;电脑已经成为我们工作、生活以及学习中必不可少的工具&#xff0c;尤其是在工作中的应用&#xff0c;它改变了以前传统的工作方式。电脑的使用给我们带来极大方便的同时&#xff0c;也带来了…

mPEG-SS-NH2 ;mPEG-SS-Amine;甲氧基聚乙二醇-双硫键-氨基-科研用试剂简介

mPEG-SS-NH2 甲氧基聚乙二醇-双硫键-氨基 英文名称&#xff1a;mPEG-SS-NH2 英文别名&#xff1a;mPEG-SS-Amine 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治 外观: 固体或粘性液体&#xff0c;取…

3D渲染优化入【Three.js】

Three.js 应用程序以每秒 60 帧 (FPS) 的速度执行 3D 渲染是流畅和愉快体验的保证。 然而&#xff0c;这是一个有时难以实现的目标&#xff01;本文整理了优化 Three.js 应用程序和达到 60 FPS 的最佳提示和技巧&#xff01; 推荐&#xff1a;使用 NSDT场景编辑器 快速搭建 3D…

Day13【元宇宙的实践构想02】—— 元宇宙与沉浸式交互技术介绍、支撑开发与应用

&#x1f483;&#x1f3fc; 本人简介&#xff1a;男 &#x1f476;&#x1f3fc; 年龄&#xff1a;18 ✍今日内容&#xff1a;《元宇宙的实践构想》02——元宇宙与沉浸式交互技术 &#x1f6a9; 今日留言&#xff1a;亮亮被迫去练科目二啦&#xff0c;定时发布的文章&#xff…

鉴源论坛 · 观通丨联锁系统原理浅析

作者 |刘艳青 上海控安安全测评中心安全测评部测试经理 版块 | 鉴源论坛 观通 01 联锁系统的硬件结构 根据联锁系统的层级关系&#xff0c;联锁系统的硬件层级可以分为4层&#xff1a;人机会话层、联锁层、接口层、室外设备层。 图1 联锁系统的硬件结构 02 联锁系统的软件结…

误删照片音视频文件不要担心 几种方法解救慌乱的你

误删照片音视频文件不要担心 几种方法解救慌乱的你 推荐的几款软件涵盖了大量的恢复方式,手机如果刷机或者损坏找回的几率会越低 免费软件获取方式关注公众号回复8585 更多软件获取方式点我 方法1&#xff1a;从手机相册中恢复手机删除的照片 这里以vivo手机为例,其他手机也是差…

C/C++ Linux Socket网络编程

之前已经学习了QT的socket编程 和 C/C在window环境的socket编程&#xff0c;现在再来学习一波C/C在Linux环境下的socket编程&#xff0c;为以后学习C Linux 服务器开发做准备。 目录 一、Socket简介 二、Socket编程基础 1. 网络字节序 2. sockaddr数据结构 3. IP地址转换函数…

新C++(5):异常

"山&#xff0c;请你慢些走向我呀~"一、异常初始每当我们使用传统C写一些诸如malloc\realloc,或者不允许传入的参数为空(nullptr)时&#xff0c;我们时长会加一个断言(assert),一旦条件为false立即终止程序&#xff0c;不仅如此&#xff0c;当申请的空间够大&#xf…