QT-QPainter

QT-QPainter

  •  1.QPainter画图
    •   1.1 概述
    •   1.1 QPainter设置
    •   1.2 QPainter画线
    •   1.3 QPainter画矩形
    •   1.4 QPainter画圆
    •   1.5 QPainter画圆弧
    •   1.6 QPainter画扇形
  •  2.QGradient
    •   2.1 QLinearGradient线性渐变
    •   2.2 QRadialGradient径向渐变
    •   2.3 QConicalGradient锥形渐变
  •  3.综合仿雷达
  •  4.仪表盘
    •   4.1初
    •   4.2 正弦纠正刻度文字方向
    •   4.3 终

 1.QPainter画图

  1.1 概述

	坐标系为

在这里插入图片描述

	QPainter是Qt 库中用于在屏幕上进行绘画的类。它提供了各种绘制功能,比如画线、画图形、画文本等。在使用QPainter之前,需要对QPaintEvent事件进行重写

在这里插入图片描述

  1.1 QPainter设置

	1.初始化QPainter painter(this);2.设置笔刷QPen pen(Qt::blue,7);painter.setPen(pen);painter.setRenderHints(QPainter::Antialiasing,true);    //抗锯齿painter.setFont(QFont("Arial", 30));

  1.2 QPainter画线

    //画线-两点确定painter.drawLine(10,200,300,20);painter.drawLine(QLine(10,200,300,20));painter.drawLine(QPoint(10,200),QPoint(300,20));

  1.3 QPainter画矩形

    //画矩形//  void drawRect(const QRectF &rectangle) QRectF浮点型QRect rectangle(20,100,200,100);  painter.drawRect(rectangle);
//  void drawRect(int x, int y, int width, int height)painter.drawRect(20,100,200,100);
//  void drawRect(const QRect &rectangle)

  1.4 QPainter画圆

在这里插入图片描述

    //画圆形--在矩形区域画椭圆painter.drawEllipse(rectangle);painter.drawEllipse(rect().center(),200,100);    //在整个窗口的中间,画一个宽200 高100的椭圆painter.drawEllipse(QPoint(80,500),80,80);       //在yuan圆心的坐标点为(80,500)处画一个80*80的圆

  1.5 QPainter画圆弧

	绘制的弧由给定的矩形、起始角和伸缩脚定义。起始角和伸缩脚必须以1/16度表示,即一个完整的圆等于5760(16*360)。角的正值表示逆时针方向,角的负值表示顺时针方向零度在3点钟的位置。如://(x,y,width,height)--x,y为左上角起始点坐标QRect rectangle(200,100,200,150);	painter.drawRect(rectangle);painter.drawArc(rectangle,30*16,120*16);//30 起始角,正值逆时针方向,负值顺时针方向//120 伸缩角

在这里插入图片描述

    QRect rectangle(200,100,200,150);painter.drawRect(rectangle);painter.drawArc(rectangle,30*16,120*16);painter.drawArc(30,100,100,180,45*16,90*16);

  1.6 QPainter画扇形

    painter.drawPie(rectangle,30*16,120*16);

 2.QGradient

	QLinearGradient(const QPointF &start, const QPointF &finalStop)//渐变色起始点和终止点setColorAt(qreal position, const QColor &color)	

  2.1 QLinearGradient线性渐变

    QPainter painter(this);//起始点宽的 x:1/3---2/3  y:1/2处QLinearGradient lineGradient(width()/3,height()/2,width()*2/3,height()/2);lineGradient.setColorAt(0.1,Qt::black); //用给定的颜色在给定的位置创建一个停止点,给定的位置必须在0到1之间。lineGradient.setColorAt(1,Qt::white);QBrush brush(lineGradient);painter.setBrush(brush);painter.drawRect(rect());

在这里插入图片描述

    QPainter painter(this);//从左上角到右下角开始变QLinearGradient lineGradient(0,0,width(),height());lineGradient.setColorAt(0.1,Qt::black);lineGradient.setColorAt(1,Qt::white);QBrush brush(lineGradient);painter.setBrush(brush);painter.drawRect(rect());

在这里插入图片描述

    QPainter painter(this);QLinearGradient lineGradient(0,0,width(),height());lineGradient.setColorAt(0.7,Qt::black);lineGradient.setColorAt(1,Qt::white);QBrush brush(lineGradient);painter.setBrush(brush);painter.drawRect(rect());
}

在这里插入图片描述

    lineGradient.setColorAt(0,Qt::blue);	lineGradient.setColorAt(0.4,Qt::red);lineGradient.setColorAt(0.7,Qt::black);lineGradient.setColorAt(1,Qt::white);0-0.4   :蓝红渐变0.4-0.7 :红黑渐变0.7-1	:黑白渐变

在这里插入图片描述

  2.2 QRadialGradient径向渐变

//QRadialGradient(const QPointF &center, qreal radius, const QPointF &focalPoint)QPainter painter(this);QRadialGradient radialGradient(400,400,100);	//400,400--中心点,100辐射半径radialGradient.setColorAt(0,Qt::white);	//中心radialGradient.setColorAt(1,Qt::black);	//边缘painter.setBrush(QBrush(radialGradient));painter.drawRect(200,300,400,200);

在这里插入图片描述

  2.3 QConicalGradient锥形渐变

    QPainter painter(this);QConicalGradient conicalGradient(400,400,0);// 添加颜色停靠点conicalGradient.setColorAt(0.0, Qt::red);conicalGradient.setColorAt(0.5, Qt::blue);conicalGradient.setColorAt(1.0, Qt::red);// 使用这个渐变创建 QBrushQBrush brush(conicalGradient);// 使用 QBrush 进行绘图painter.setPen(Qt::NoPen);	//设置无边框painter.setBrush(brush);painter.drawRect(200,300,400,200);

在这里插入图片描述

 3.综合仿雷达

#include "widget.h"
#include "ui_widget.h"#include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer,&QTimer::timeout,this,[=](){startAngle += 30;if(startAngle >= 360){startAngle = 0;}update();});timer->setInterval(100);timer->start();
}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing,true); //平滑处理painter.setBrush(QBrush(Qt::black));painter.drawRect(rect());   //设置背景色被黑色painter.setBrush(Qt::NoBrush);painter.translate(rect().center()); //将坐标点转移到中间位置int rEve = height()/2/7;int dataTmp = rEve * 7;QPen pen(Qt::green,4);  //设置画笔painter.setPen(pen);for(int i=1;i<=7;i++){painter.drawEllipse(QPoint(0,0),rEve*i,rEve*i);}painter.drawLine(-rEve*7,0,rEve*7,0);   //横线painter.drawLine(0,-rEve*7,0,rEve*7);   //竖线QConicalGradient conGradient(0,0,-startAngle); //中心点(0,0)起始角度30//设置锥形渐变色conGradient.setColorAt(0,QColor(0,255,0,200));conGradient.setColorAt(0.1,QColor(0,255,0,100));conGradient.setColorAt(0.2,QColor(0,255,0,0));conGradient.setColorAt(1,QColor(0,255,0,0));//用渐变色指定画刷painter.setBrush(conGradient);painter.setPen(Qt::NoPen);  //取消边框//画扇形painter.drawPie(QRect(-dataTmp,-dataTmp,2*dataTmp,2*dataTmp),-startAngle*16,70*16);
}

 4.仪表盘

  4.1初

#include "widget.h"
#include "ui_widget.h"#include <QPainter>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);currentValue = 0;connect(timer,&QTimer::timeout,[=](){if(mark == 0){currentValue++;if(currentValue >= 60){mark = 1;}}if(mark == 1){currentValue--;if(currentValue == 0){mark = 0;}}update();});timer->start(50);
}Widget::~Widget()
{delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing,true);//底色弄成黑色painter.setBrush(QBrush(Qt::black));painter.drawRect(rect());//坐标系平移到中心painter.translate(rect().center());//画大圆painter.drawEllipse(QPoint(0,0),height()/2,height()/2);painter.setBrush(Qt::NoBrush);//画小圆painter.setPen(QPen(Qt::white,3));painter.drawEllipse(QPoint(0,0),60,60);//当前值painter.setFont(QFont("华文宋体",10));painter.drawText(QRect(-60,-60,120,120),Qt::AlignCenter,QString::number(currentValue));//画刻度-旋转坐标轴画线//1.算出一个刻度需要旋转的角度double angle = 240.0 / 60.0;//2.设置第一个刻度的位置//顺时针旋转坐标轴到15度,会一直处在15度位置直到下一次旋转将在15基础上+再次旋转的角度painter.setFont(QFont("华文宋体",10));painter.save(); //保存旋转前的位置painter.rotate(150);for(int i = 0;i<=60;i++){if(i%5 == 0){//画字if(135+angle * i < 270){painter.rotate(180);painter.drawText(-(height()/2-30),10,QString::number(i*4));painter.rotate(-180);}else{painter.drawText(height()/2-70,10,QString::number(i*4));}//画长刻度painter.drawLine(height()/2-20,0,height()/2-3,0);}else{  //画短刻度painter.drawLine(height()/2-8,0,height()/2-3,0);}//画完后旋转painter.rotate(angle);}//画指针-线//坐标轴先回到原点painter.restore();  //恢复到原来位置painter.save();painter.rotate(150+ angle *currentValue);painter.drawLine(60,0,height()/2-50-20,0);//画扇形painter.restore();painter.setPen(Qt::NoPen);painter.setBrush(QColor(255,0,0,150));painter.drawPie(QRect(-height()/2,-height()/2,height(),height()),(360-150)*16,-angle*currentValue*16);//angle前取负数,为了让它顺时针方向画
}

在这里插入图片描述

  4.2 正弦纠正刻度文字方向

	1.如图下,红框中50所示,刻度线处的文字应当保持与50同样的方向而不是图中120的方向易知在不改变坐标系的情况下无理论怎么旋转,其在远处所写的字符都无法达到红框50所显示的字符易知通过50代替120可知,若将坐标系原点移到120处在修改字符50120即可所以对于120的修改只需要在此坐标系的基础上将y轴的坐标改到120的坐标处即可2.那么它地方的坐标如何得到呢?已知条件1.圆的半径	r2.圆的偏转角度 a所以可得x,y的坐标x = r * cosa;y = r * sina; 

在这里插入图片描述

    //写刻度文字int r = height()/2- 45;for(int i=0;i<=60;i++){if(i%5 == 0){//保存坐标系painter.save();//算出平移点int delX = qCos(qDegreesToRadians(210-angle*i)) * r;int delY = qSin(qDegreesToRadians(210-angle*i)) * r;//平移坐标系painter.translate(QPoint(delX,-delY));//旋转坐标系//painter.rotate(angle * i); //已知120是正好的//写上文字painter.drawText(-20,-20,50,30, Qt::AlignCenter,QString::number(i*4));//恢复坐标系painter.restore();}}通过以上的修改,可将刻度转换成如下,但是只有120是正好的,其他的刻度需要先将坐标系旋转才能达到120的效果3.已知angle = 240.0 / 60.0 = 4120处旋转角为0,所以其他位置的旋转角度只需要凑齐120度的旋转角度即可120刻度时旋转角度为0,已知,在120时 angle * i = 120,若想在此处旋转角度为0则:0 = angle * i - 120;所以其他位置应当旋转的角度为painter.rotate(angle * i - 120); 

在这里插入图片描述
在这里插入图片描述

    int r = height()/2- 50;for(int i=0;i<=60;i++){if(i%5 == 0){//保存坐标系painter.save();//算出平移点int delX = qCos(qDegreesToRadians(210-angle*i)) * r;    //qt中认得是弧度,弧度=角度*pi/180int delY = qSin(qDegreesToRadians(210-angle*i)) * r;//平移坐标系painter.translate(QPoint(delX,-delY));//旋转坐标系painter.rotate(angle * i - 120);//写上文字painter.drawText(-25,-25,50,30, Qt::AlignCenter,QString::number(i*4));//恢复坐标系painter.restore();}}

在这里插入图片描述

  4.3 终

#include "widget.h"
#include "ui_widget.h"#include <QPainter>
#include <QtMath>
#include <QDebug>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);setFixedSize(800,600);  //设置默认窗口startAngle = 150;startSpeed();
}Widget::~Widget()
{delete ui;
}void Widget::initCanvas(QPainter& painter)
{painter.setRenderHint(QPainter::Antialiasing,true);//底色弄成黑色painter.setBrush(QBrush(Qt::black));painter.drawRect(rect());//坐标系平移到中心painter.translate(rect().center().x(),rect().center().y()+50);
}void Widget::drawMiddleCircle(QPainter &painter, int radius)
{//画小圆painter.setPen(QPen(Qt::white,3));painter.drawEllipse(QPoint(0,0),radius,radius);
}void Widget::drawCurrentSpeed(QPainter &painter)
{//当前值painter.setPen(Qt::white);QFont font("Arial",18);font.setBold(true); //加粗painter.setFont(font);painter.drawText(QRect(-60,-60,120,70),Qt::AlignCenter,QString::number(currentValue*4));QFont font2("Arial",10);font2.setBold(true); //加粗painter.setFont(font2);painter.drawText(QRect(-60,-60,120,160),Qt::AlignCenter,"Km/h");
}void Widget::drawScale(QPainter &painter,int radius)
{//1.算出一个刻度需要旋转的角度angle = 240.0 / 60.0;//2.设置第一个刻度的位置//顺时针旋转坐标轴到15度,会一直处在15度位置直到下一次旋转将在15基础上+再次旋转的角度painter.save(); //保存旋转前的位置painter.setPen(QPen(Qt::white,5));painter.rotate(startAngle);for(int i = 0;i<=60;i++){if(i>=40){painter.setPen(QPen(Qt::red,5));}if(i%5 == 0){//画长刻度painter.drawLine(radius-20,0,radius-3,0);}else{  //画短刻度painter.drawLine(radius-8,0,radius-3,0);}//画完后旋转painter.rotate(angle);}painter.restore();painter.setPen(QPen(Qt::white,5));
}void Widget::drawScaleText(QPainter &painter,int radius)
{QFont font("Arial",10);font.setBold(true); //加粗painter.setFont(font);int r = radius - 50;for(int i=0;i<=60;i++){if(i%5 == 0){//保存坐标系painter.save();//算出平移点int delX = qCos(qDegreesToRadians(210-angle*i)) * r;    //qt中认得是弧度,弧度=角度*pi/180int delY = qSin(qDegreesToRadians(210-angle*i)) * r;//平移坐标系painter.translate(QPoint(delX,-delY));//旋转坐标系painter.rotate(angle * i - 120);//写上文字painter.drawText(-25,-25,50,30, Qt::AlignCenter,QString::number(i*4));//恢复坐标系painter.restore();}}
}void Widget::drawPointLine(QPainter &painter,int length)
{//坐标轴先回到原点painter.save();painter.setBrush(Qt::white);painter.setPen(Qt::NoPen);static const QPointF points[4] = {QPointF(0,0),QPointF(200,-1.0),QPointF(200.0,1.0),QPointF(0.0,15.0),};painter.rotate(startAngle + angle *currentValue);painter.drawPolygon(points,4);// painter.drawLine(60,0,length,0);painter.restore();  //恢复到原来位置
}void Widget::drawSpeedPie(QPainter &painter, int radius)
{painter.setPen(Qt::NoPen);painter.setBrush(QColor(255,0,0,80));painter.drawPie(QRect(-radius,-radius,radius*2,radius*2),(360-startAngle)*16,-angle*currentValue*16);//angle前取负数,为了让它顺时针方向画
}void Widget::startSpeed()
{timer = new QTimer(this);currentValue = 0;connect(timer,&QTimer::timeout,[=](){if(mark == 0){currentValue++;if(currentValue >= 61){mark = 1;}}if(mark == 1){currentValue--;if(currentValue == 0){mark = 0;}}update();   //更新});timer->start(50);
}void Widget::drawEllipseInnerBlack(QPainter &painter, int radius)
{painter.setBrush(Qt::black);painter.drawEllipse(QPoint(0,0),radius,radius);}void Widget::drawEllipseInnerShine(QPainter &painter, int radius)
{QRadialGradient radialGradient(0,0,radius);radialGradient.setColorAt(0,QColor(255,0,0,200));radialGradient.setColorAt(1,QColor(0,0,0,100));painter.setBrush(radialGradient);painter.drawEllipse(QPoint(0,0),radius,radius);
}void Widget::drawEllipseOuterShine(QPainter &painter, int radius)
{painter.setPen(Qt::NoPen);QRadialGradient radialGradient(0,0,radius);radialGradient.setColorAt(1,QColor(255,0,0,200));radialGradient.setColorAt(0.97,QColor(255,0,0,120));radialGradient.setColorAt(0.9,QColor(0,0,0,0));radialGradient.setColorAt(0,QColor(0,0,0,0));painter.setBrush(radialGradient);painter.drawPie(QRect(-radius,-radius,radius*2,radius*2),(360-150)*16,-angle*61*16);//angle前取负数,为了让它顺时针方向画
}void Widget::drawLogo(QPainter &painter, int radius)
{QRect rectangle(-40,radius*0.38,80,80);painter.drawPixmap(rectangle,QPixmap(":/icon.png"));
}
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);int rad = height()/2;//初始化画布initCanvas(painter);//画小圆drawMiddleCircle(painter,60);//画刻度-旋转坐标轴画线drawScale(painter,rad);//写刻度文字drawScaleText(painter,rad);//画指针-线drawPointLine(painter,rad-70);//画扇形drawSpeedPie(painter,rad+22);//画渐变色内圈圆drawEllipseInnerShine(painter,110);//画黑色内圈drawEllipseInnerBlack(painter,80);//画当前速度drawCurrentSpeed(painter);//画外环发光圈drawEllipseOuterShine(painter,rad+22);drawLogo(painter,rad);
}

在这里插入图片描述

链接:https://pan.baidu.com/s/1UFuGa5WBCZv0H1BtSsIJbw 
提取码:14wi 
--来自百度网盘超级会员V5的分享

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

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

相关文章

二、GitLab相关操作

GitLab相关操作 一、组、用户、项目管理1.创建组2.创建项目3.创建用户并分配组3.1 创建用户3.2 设置密码3.3 给用户分配组 二、拉取/推送代码1.配置ssh(第一次需要)1.1 创建一个空文件夹1.2 配置本地仓账号和邮箱1.3 生成ssh公钥密钥1.4 gitlab配置公钥 2.拉取代码3.推送代码3.…

C语言动态内存空间分配

1. 前言 在讲内存分配前&#xff0c;咱来聊一下为什么会有内存分配这个概念呢&#xff0c;大家都知道C语言当中是有着许多的数据类型&#xff0c;使用这些数据类型就会在内存上开辟其相对应的空间&#xff0c;那既然会开辟相应的空间&#xff0c;为什么还会有内存分配呢&#x…

springcloud基本使用三(搭建nacos)

window下安装nacos: 下载页面:Releases alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud native applications. - Releases alibaba/nacoshttps://github.com/alibaba/nacos/releases…

基于卷积神经网络的中药识别(pytorch框架)【python源码+UI界面+前端界面+功能源码详解】

原作者链接&#xff1a;基于卷积神经网络的中药识别&#xff08;pytorch框架&#xff09;【python源码UI界面前端界面功能源码详解】_识别中药python-CSDN博客 //gitcode,gitee,飞桨&#xff0c;csdn&#xff0c;bilibili。几个有用网站&#xff0c;直接搜索即可&#xff0c;平…

主干网络篇 | YOLOv5/v7 更换骨干网络之 HGNetv2 | 百度新一代超强主干网络

本改进已融入到 YOLOv5-Magic 框架。 论文地址:https://arxiv.org/abs/2304.08069 代码地址:https://github.com/PaddlePaddle/PaddleDetection 中文翻译:https://blog.csdn.net/weixin_43694096/article/details/131353118 文章目录 HGNetv2网络结构1.1 主干网络1.2 颈部…

【Android】毫无耦合性,一个Item根布局搞定 item侧滑删除菜单,像IOS那样简单的使用侧滑删除。(1)

自定义ViewGroup实现侧滑删除简单&#xff0c;难得是还要同时 处理多指滑动的屏蔽&#xff0c;防止两个侧滑菜单同时出现&#xff0c;等等&#xff0c; 有办法将这些东西都用一个ViewGroup搞定么&#xff1f; 看本文如何巧用static类变量来解决这些矛盾冲突。 【2 预览】 那…

真快乐APP抢购源码实现

支持多个平台的自动 滑动验证码、选字验证码。缺点就是需要自己找一个验证码识别服务器,可以自己用python写一个,或者使用超级鹰(本篇教程就是使用它) 下面是实现源码 "ui"; Date.prototype.Format = function (fmt) {var o = {"M+": this.getMonth() …

2024年做抖音小店商家,最不该忽视的三个运营要点,一定要避开!

大家好&#xff0c;我是电商花花。 每一次平台规则的改变都深深的影响着我们无货源商家&#xff0c;我们只有在规则内行使&#xff0c;遵守规则&#xff0c;才能在安然无恙。 所以我们做抖音小店一定要及时关注平台的规则变化&#xff0c;以及整体的做店趋势。 只有这样才不…

App.vue触发axios报错及解决方案

App.vue触发axios报错及解决方案 修改根目录下vue.config.js文件 module.exports {publicPath: ./,assetsDir: assets,configureWebpack: {devServer: {client: {overlay: false}}} }重新npm run dev 搞定

十个排序算法

目录 冒泡排序(Bubble Sort) 选择排序(Select Sort) 插入排序&#xff08;InsertSort&#xff09; 希尔排序&#xff08;ShellSort&#xff09; 计数排序&#xff08;CountSort&#xff09; 快速排序&#xff08;QuickSort&#xff09; 归并排序&#xff08;Merge Sort&a…

Jenkins 安装部署

1、安装下载 官网地址&#xff1a;Jenkins 下载 war 包 1、前置环境 JDK 环境&#xff08;根据 Jenkins 版本不同&#xff0c;需要的 JDK 版本不同&#xff0c;目前需要 JDK11 的版本来支持&#xff09;Maven maven 官网下载压缩包 &#xff0c;并将其传输到服务器&#xf…

【热门话题】计算机视觉入门:探索数字世界中的“视觉智能”

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 计算机视觉入门&#xff1a;探索数字世界中的“视觉智能”摘要正文一、计算机视…

scoped原理及使用

一、什么是scoped&#xff0c;为什么要用 在vue文件中的style标签上&#xff0c;有一个特殊的属性&#xff1a;scoped。 当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。…

重构智能防丢产品,苹果Find My技术引领市场发展

目前市场上最主要的防丢技术是蓝牙防丢和GPS防丢&#xff0c;蓝牙防丢是通过感应防丢器与绑定手机的距离来实现防丢的。一般防丢会默认设置一个最远安全距离&#xff0c;超过这个安全距离后&#xff0c;与手机蓝牙信号断开&#xff0c;触发防丢报警&#xff0c;用户根据防丢报警…

Shell GPT:直接安装使用的chatgpt应用软件

ShellGPT是一款基于预训练生成式Transformer模型&#xff08;如GPT系列&#xff09;构建的智能Shell工具。它将先进的自然语言处理能力集成到Shell环境中&#xff0c;使用户能够使用接近日常对话的语言来操作和控制操作系统。 官网&#xff1a;GitHub - akl7777777/ShellGPT: *…

深度学习理论基础(三)封装数据集及手写数字识别

目录 前期准备一、制作数据集1. excel表格数据2. 代码 二、手写数字识别1. 下载数据集2. 搭建模型3. 训练网络4. 测试网络5. 保存训练模型6. 导入已经训练好的模型文件7. 完整代码 前期准备 必须使用 3 个 PyTorch 内置的实用工具&#xff08;utils&#xff09;&#xff1a; ⚫…

TXT文本高效编辑神器,教你进行隔行删除不需要的内容,轻松整理文本内容。

在信息爆炸的时代&#xff0c;我们每天都会接触到大量的文本信息&#xff0c;无论是工作中的报告、邮件&#xff0c;还是生活中的读书笔记、备忘录&#xff0c;都需要我们对文本进行高效的管理和编辑。然而&#xff0c;传统的文本编辑方式往往繁琐低效&#xff0c;无法满足我们…

PTA L2-048 寻宝图

给定一幅地图&#xff0c;其中有水域&#xff0c;有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏&#xff0c;这些有宝藏的点也被标记出来了。本题就请你统计一下&#xff0c;给定的地图上一共有多少岛屿&#xff0c;其中有多少是有宝藏的岛屿。 输入格式&#xf…

LeetCode练习题--567.字符串的排列

今天讲一个非常经典的滑动窗口的问题 这道题的意思很明显: 给你两个字符串s1与s2,判断s2中是否存在一个子串:它包含s1中所有字符且不包含其他字符 让我们先来写一下滑动窗口的模板: /*** 滑动窗口模板 * param s1 * param s2 */public static void model (String s1, String s2…

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…