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);
    // 使用这个渐变创建 QBrush
    QBrush 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.圆的半径	r
		2.圆的偏转角度 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/180
            int 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/180
            int 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的分享

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity每日一记】如何从0到1将特效图集制作成一个特效

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Prometheus+grafana环境搭建Nginx(docker+二进制两种方式安装)(六)

由于所有组件写一篇幅过长&#xff0c;所以每个组件分一篇方便查看&#xff0c;前五篇链接如下 Prometheusgrafana环境搭建方法及流程两种方式(docker和源码包)(一)-CSDN博客 Prometheusgrafana环境搭建rabbitmq(docker二进制两种方式安装)(二)-CSDN博客 Prometheusgrafana环…

数据分析python代码——数据填充

在Python中&#xff0c;我们通常使用pandas库来处理和分析数据。数据填充是数据预处理的一个重要步骤&#xff0c;用于处理数据中的缺失值。以下是使用pandas库进行数据填充的示例代码&#xff1a; 在数据分析中&#xff0c;处理缺失值&#xff08;空值&#xff09;是一个重要…

基于微信小程序的实验室预约系统的设计与开发

个人介绍 hello hello~ &#xff0c;这里是 code袁~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的…

c语言文件操作(超详细)

前言 这次的博客&#xff0c;可以让大家快速掌握文件操作&#xff0c;方便大家快速找到不懂的内容 文件操作的作用以及基础 1. 为什么使用文件&#xff1f; 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&…

(arxiv2401) CrossMAE

作者团队来自加州大学伯克利分校&#xff08;UC Berkeley&#xff09;和加州大学旧金山分校&#xff08;UCSF&#xff09;。论文主要探讨了在MAE的解码中&#xff0c;图像patch之间的依赖性&#xff0c;并提出了一种新的预训练框架 CrossMAE。 论文的主要贡献包括&#xff1a; …

代码随想录-算法训练营day02【滑动窗口、螺旋矩阵】

专栏笔记&#xff1a;https://blog.csdn.net/weixin_44949135/category_10335122.html https://docs.qq.com/doc/DUGRwWXNOVEpyaVpG?uc71ed002e4554fee8c262b2a4a4935d8977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II &#xff0c;总结 建议…

(源码+部署+讲解)基于Spring Boot和Vue的大学生快递代取服务平台的设计与实现

一、引言 本报告旨在详细阐述基于Spring Boot后端框架和Vue前端框架的大学生快递代取服务平台的设计与实现过程。该平台旨在为大学生提供便捷的快递代取服务&#xff0c;解决因时间冲突或距离过远而无法及时取件的问题。通过该平台&#xff0c;用户可以发布代取需求&#xff0c…

[中级]软考_软件设计_计算机组成与体系结构_07_存储系统

存储系统 层次划存储概念图局促性原理分类存储器位置存取方式按内容存储按地址存储 工作方式拓展 往年真题 高速缓存(cache)概念案例解析&#xff1a;求取平均时间 Cache与主存的地址映射映像往年真题 主存编制计算编址大小的求取编址与计算存储单元编址内容总容量求取例题解析…

java爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

github生成新的SSH密钥

首先是参考官方文档 生成新的 SSH 密钥并将其添加到 ssh-agent述 当你在创建SSH密钥时遇到提示&#xff1a; Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM):这一步是让你选择保存生成的SSH密钥对的文件名和位置。如果你直接按回车键&#xff08;[Pr…

Java项目:基于Springboot+vue实现的医院住院管理系统设计与实现(源码+数据库+开题报告+任务书+毕业论文)

一、项目简介 本项目是一套基于Springbootvue实现的医院住院管理系统设 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简…

Activity入门2——生命周期与任务栈

OnCreate与OnDestroy OnCreate&#xff1a;创建一个活动。 OnDestroy&#xff1a;销毁一个活动。 假设某个用户在一个活动里输入了一些信息&#xff0c;用户由于某些原因退出了该活动&#xff0c;返回时希望能够还原之前输入的信息&#xff0c;不然重新输入就太麻烦了。 pub…

软考高级架构师:嵌入式软件开发概念和例题

一、AI 讲解 嵌入式软件开发和传统软件开发的差异 嵌入式软件开发与传统软件开发在目标、环境和开发过程等方面有显著的差异。下面通过对比的方式&#xff0c;简要阐述这些差异所在&#xff1a; 特性嵌入式软件开发传统软件开发开发目标针对特定硬件系统&#xff0c;强调软硬…

【Fn+windows键】‘Windows键+L’不能锁屏的问题

winL锁屏 3个键盘灯1.NumLock指示灯2.CapsLock指示灯3.ScrollLock指示灯 2.电脑锁屏问题 突然发现winL不能锁屏&#xff0c;反而是在自己打开的软件界面内编辑 各种操作之下&#xff0c;发现键盘上最不常用的灯亮了 所以了解了一番键盘灯的功能 3个键盘灯 1.NumLock指示灯 N…

快递费用一目了然:taobao.item_fee API在电商中的应用

taobao.item_fee API在电商中的应用主要体现在精准计算快递费用&#xff0c;从而为用户提供一个更加透明和便捷的购物体验。这一接口允许淘宝或天猫的开发者根据商品ID、收货地址等信息&#xff0c;精确计算商品的快递费用。对于用户而言&#xff0c;这意味着在购物过程中能够实…

工厂模式图

工厂模式 介绍一下简单工厂模式与工厂方法模式 结构图 简单工厂模式 工厂方法模式

【剑指offr--C/C++】JZ7 重建二叉树

一、题目 二、思路及代码 前序遍历&#xff1a;中、左、右。所以前序遍历的第一个节点是树的根节点&#xff0c;第二个节点是左子树的根节点。。。。 中序遍历&#xff1a;左、中、右。树的根节点在中间某处 我们可以根据二者的特点结合一下&#xff1a;对于前序遍历序列{1,2,4…

ubuntu安装sublime3并设置中文

安装Sublime Text 3 在Ubuntu上安装Sublime Text 3可以通过以下步骤进行&#xff1a; 打开终端。 导入Sublime Text 3的GPG密钥&#xff1a; wget -qO- https://download.sublimetext.com/sublimehq-pub.gpg | sudo apt-key add - 添加Sublime Text 3的存储库&#xff1a; …

纯C代码模板

一、快排 void QuickSort(int *a,int left,int right){if(left>right) return;else{int low left,high right;int pivot a[low];while(low<high){while(a[high] > pivot && low < high){high--;}a[low] a[high]; //必须先动a[low]while(a[low] < …