QT绘图项目 - 汽车表盘

news2025/7/10 5:35:36

目录

前言:

整体代码

widget.h

widget.cpp

效果演示

实现刻度文字正确排版

优化代码

达到效果

封装整理代码结构:

widget.h

widget.cpp

指针样式美化

 优化后的指针API

效果演示

设置高速刻度为红色

 优化刻度API

效果演示

速度显示优化

给内圈画上黑色

优化速度显示文本格式

调整绘画顺序

效果演示

实现内环发光圈:

内环发光效果API

插入位置

效果演示

实现外环发个圈

外环发光效果API

插入位置

实现效果

绘制汽车logo

绘制汽车logo的API

插入位置

实现效果

deBug及微调

bug1: restore()和 save() 没有配对使用

bug2:中间显示的速度不匹配


前言:

 这个表盘在上一个项目"简易表盘"的基础上搭建,请先看上篇:

Qt绘图项目 - 简易表盘-CSDN博客

整体代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

protected:
   void paintEvent(QPaintEvent *event);

private:
    Ui::Widget *ui;
    QTimer *timer;
    int currentValue; //实现指针移动
    int mark = 0; // 控制指针的移动方向
    int startAbgle; // 设置起始角度
    double angle;
    void initCanvas(QPainter& painter);
    void drawMiddleCircle(QPainter& painter,int radius);
    void drawCurrentSpeed(QPainter& painter);
    void drawScale(QPainter& painter,int radius);
    void drawScaleText(QPainter& painter,int radius);
    void drawPointLine(QPainter &painter,int length);
    void drawSpeedPie(QPainter& painter,int radius);
    void startSpeed();
    void drawEllispseInnerBlack(QPainter& painter,int radius);
    void drawEllispseInnerBShine(QPainter& painter,int radius);
    void drawEllispseOutterBShine(QPainter& painter,int radius);
    void drawLogo(QPainter& painter,int radius);
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QPainter>
#include <QTimer>
#include <QtMath>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setFixedSize(800,600);
    startAbgle = 150; // 设置起始角度为150
    startSpeed();


}

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

void Widget::initCanvas(QPainter& painter)
{
    //设置抗锯齿
    painter.setRenderHints(QPainter::Antialiasing,true);
    //设置黑色的背景色
    painter.setBrush(Qt::black); // 设置 黑色的画刷
    painter.drawRect(rect());

    //坐标系,平移到中心
    QPoint cent(rect().width()/2,rect().height()*0.6); //自定义中心位置
    painter.translate(cent);

}

void Widget::drawMiddleCircle(QPainter &painter,int radius)
{
    //画小圆
    painter.setPen(QPen(Qt::white,4)); //设置白色的画笔
    painter.drawEllipse(QPoint(0,0),60,60);
}

//画当前速度
void Widget::drawCurrentSpeed(QPainter &painter)
{
    painter.setPen(Qt::white);
    //显示当前速度值:
    QFont font("Arial",30);
    font.setBold(true);
    painter.setFont(font);
    painter.drawText(QRect(-60,-60,120,70),Qt::AlignCenter,QString::number(currentValue*4));

    QFont font2("Arial",13);
    font2.setBold(true);
    painter.setFont(font2);
    painter.drawText(QRect(-60,-60,120,160),Qt::AlignCenter,"Km/h");

}

// 画出当前刻度
void Widget::drawScale(QPainter &painter,int radius)
{
    //保存原点:
    painter.save(); // 三点钟方向
    //画刻度:

    //1.算出一个刻度需要的角度 270 度分成 50份
    angle = 240*1.0/60; //需要先转为double类型,否则销售几乎部分会被吞掉造成误差
    //2.设置起始角度
    painter.rotate(startAbgle); // 从135度开始
    //设置字体样式:
    // painter.setFont(QFont("华文宋体",8));
    //3.分类讨论 画出所有刻度
    for(int i=0;i<=60;++i){//包括0-  一共有61根刻度线
        if(i>=40){  // 时速160 = 40*4 认定为高速
            painter.setPen(QPen(Qt::red,5)); //将高速速设定为红色
        }

        if(i%5 == 0){ // 被5 整除进一步细分表盘
            //画出一个长刻度
            painter.drawLine(radius-20,0,radius-3,0);
        }
        else{
            //画出一个长刻度
            painter.drawLine(radius-10,0,radius-3,0);
        }
        painter.rotate(angle);//选择angle的角度准备去画下一个刻度
    }
    painter.restore();
}

// 写刻度文字
void Widget::drawScaleText(QPainter &painter, int radius)
{
    //设置字体:

    QFont font("Arial",13);
    font.setBold(true); // 设置粗体
    painter.setFont(font);
    int r = radius-43;

    for(int i=0;i<=60;++i){
        if(i%5 == 0){ // 每5格标记一个刻度
            //保存坐标系
            painter.save();
            //算出平移点  // 弧度 = 角度*3.1415/180
            int delX =  qCos(qDegreesToRadians(210-angle*i))*r;//QT中sin、cos认的是弧度
            int delY =  qSin(qDegreesToRadians(210-angle*i))*r;//qDegreesToRadians - 角度转弧度

            //平移坐标系
            painter.translate(QPoint(delX,-delY));
            //旋转坐标系:
            painter.rotate(-120+angle*i);//angle=4,30*4=120,实参是0,120
            //写上文字
            painter.drawText(-25,-25,50,30,Qt::AlignCenter,QString::number(i*4));
            //恢复坐标系
            painter.restore();
        }
    }

}

// 画指针
void Widget::drawPointLine(QPainter &painter,int length)
{
    //画指针 --> 线
    //先恢复到之前保存的原点:

    painter.save(); // 接着保存原点
    // 通过定时器去改变currentValue的值,去控制指针的移动
    // painter.drawLine(60,0,height()/2-20-38,0); // 58

    //指针样式美化:

    painter.setRenderHint(QPainter::Antialiasing,true);
    painter.setBrush(Qt::white);
    painter.setPen(Qt::NoPen);
    //painter.translate(rect().center());
    static const QPointF points[4] = {
        QPointF(0,0),
        QPointF(0,15.0),
        QPointF(220.0,1.1),
        QPointF(220.0,-1.1)
    };

    //给指针弧度偏移 --> 让指针转动起来
    painter.rotate(startAbgle+angle*currentValue); // 进行坐标系偏移
    painter.drawPolygon(points, 4);
    painter.restore();
}

//画扇形
void Widget::drawSpeedPie(QPainter &painter, int radius)
{

    QRect rentangle(-radius,-radius,radius*2,radius*2);
    painter.setPen(Qt::NoPen);
    painter.setBrush(QColor(255,0,0,80));

    painter.drawPie(rentangle,(-startAbgle)*16,-angle*currentValue*16);
}

void Widget::startSpeed()
{
    timer = new QTimer(this);
    currentValue = 0;
    connect(timer,&QTimer::timeout,[=](){
        if(mark == 0){
            currentValue++;
            if(currentValue >= 60)
                mark = 1;
        }
        else if(mark ==1){
            currentValue--;
            if(currentValue <= 0)
                mark = 0;
        }
        update(); // 触发绘图事件
    });
    timer->start(30);
}

// ,给内圈画上黑色
void Widget::drawEllispseInnerBlack(QPainter &painter, int radius)
{
    painter.setBrush(Qt::black);
    painter.drawEllipse(QPoint(0,0),radius,radius);
}

// 内环发光效果
void Widget::drawEllispseInnerBShine(QPainter &painter, int radius)
{
    // 径向 渐变实现
    QRadialGradient radialGradient(0,0,radius);
    radialGradient.setColorAt(0.0,QColor(255,0,0,200));
    radialGradient.setColorAt(1.0,QColor(0,0,0,100));
    painter.setBrush(radialGradient);
    painter.drawEllipse(QPoint(0,0),radius,radius);
}

// 画外围发光圈
void Widget::drawEllispseOutterBShine(QPainter &painter, int radius)
{

    QRect rentangle(-radius,-radius,radius*2,radius*2);
    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(rentangle,(-150)*16,-angle*60*16);
}

// 绘制汽车logo
void Widget::drawLogo(QPainter &painter, int radius)
{
 QRect rectangle(-65,radius*0.38,130,50);
 painter.drawPixmap(rectangle,QPixmap(":/C:/Users/31472/Desktop/Images/qi_che_biao_pan/lu_hua.png"));

}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    int rad = height()/2;
    // 初始化画布
    initCanvas(painter);

    //不用画大圆了,用刻度尺去表出框架即可
    //painter.drawEllipse(QPoint(0,0),height()/2,height()/2);

    //画出中间的小圆
    drawMiddleCircle(painter,60);

    //画刻度
    drawScale(painter,rad);

    //写刻度文字:
    drawScaleText(painter,rad);
    // 画指针
    drawPointLine(painter,rad-58);
    //画扇形
    drawSpeedPie(painter,rad);
    //画渐变色发光内圈圆
    drawEllispseInnerBShine(painter,110);
    // 画黑色内圈
    drawEllispseInnerBlack(painter,80);
    //画出当前速度 -- 放正在画黑的下面,要设置在黑圈的图层下
    drawCurrentSpeed(painter);
    //画外环发光圈
    drawEllispseOutterBShine(painter,rad+15);
    //画汽车logo
    drawLogo(painter,rad);

}

效果演示

实现刻度文字正确排版

 移动坐标系,达到正确排版

优化代码

//刻度文字达到正确排版效果

    int r = height()/2-43;
    painter.restore();
    for(int i=0;i<=60;++i){
        if(i%5 == 0){ // 每5格标记一个刻度
        //保存坐标系
        painter.save();
        //算出平移点  // 弧度 = 角度*3.1415/180
        int delX =  qCos(qDegreesToRadians(210-angle*i))*r;//QT中sin、cos认的是弧度
        int delY =  qSin(qDegreesToRadians(210-angle*i))*r;//qDegreesToRadians - 角度转弧度

        //平移坐标系
        painter.translate(QPoint(delX,-delY));
        //旋转坐标系:
        painter.rotate(-120+angle*i);//angle=4,30*4=120,实参是0,120
        //写上文字
        painter.drawText(-25,-25,50,30,Qt::AlignCenter,QString::number(i*4));
        //恢复坐标系
        painter.restore();
        }
    }

达到效果

封装整理代码结构:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

protected:
   void paintEvent(QPaintEvent *event);

private:
    Ui::Widget *ui;
    QTimer *timer;
    int currentValue; //实现指针移动
    int mark = 0; // 控制指针的移动方向
    int startAbgle; // 设置起始角度
    double angle;
    void initCanvas(QPainter& painter);
    void drawMiddleCircle(QPainter& painter,int radius);
    void drawCurrentSpeed(QPainter& painter);
    void drawScale(QPainter& painter,int radius);
    void drawScaleText(QPainter& painter,int radius);
    void drawPointLine(QPainter &painter,int length);
    void drawSpeedPie(QPainter& painter,int radius);
    void startSpeed();
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

#include <QPainter>
#include <QTimer>
#include <QtMath>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    startAbgle = 150; // 设置起始角度为150
    startSpeed();


}

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

void Widget::initCanvas(QPainter& painter)
{
    //设置抗锯齿
    painter.setRenderHints(QPainter::Antialiasing,true);
    //设置黑色的背景色
    painter.setBrush(Qt::black); // 设置 黑色的画刷
    painter.drawRect(rect());

    //坐标系,平移到中心
    painter.translate(rect().center());

}

void Widget::drawMiddleCircle(QPainter &painter,int radius)
{
    //画小圆
    painter.setPen(QPen(Qt::white,4)); //设置白色的画笔
    painter.drawEllipse(QPoint(0,0),60,60);
}

//画当前速度
void Widget::drawCurrentSpeed(QPainter &painter)
{
    //显示当前速度值:
    painter.setFont(QFont("华文宋体",15));
    painter.drawText(QRect(-60,-60,120,120),Qt::AlignCenter,QString::number(currentValue));

}

// 画出当前刻度
void Widget::drawScale(QPainter &painter,int radius)
{
    //保存原点:
    painter.save(); // 三点钟方向
    //画刻度:

    //1.算出一个刻度需要的角度 270 度分成 50份
    angle = 240*1.0/60; //需要先转为double类型,否则销售几乎部分会被吞掉造成误差
    //2.设置起始角度
    painter.rotate(startAbgle); // 从135度开始
    //设置字体样式:
   // painter.setFont(QFont("华文宋体",8));
    //3.分类讨论 画出所有刻度
    for(int i=0;i<=60;++i){//包括0-  一共有61根刻度线
        if(i%5 == 0){ // 被5 整除进一步细分表盘
            //画出一个长刻度
            painter.drawLine(radius-20,0,radius-3,0);
        }
        else{
            //画出一个长刻度
            painter.drawLine(radius-10,0,radius-3,0);
        }
        painter.rotate(angle);//选择angle的角度准备去画下一个刻度
    }

}

// 写刻度文字
void Widget::drawScaleText(QPainter &painter, int radius)
{
    int r = radius-43;
    painter.restore();
    for(int i=0;i<=60;++i){
        if(i%5 == 0){ // 每5格标记一个刻度
        //保存坐标系
        painter.save();
        //算出平移点  // 弧度 = 角度*3.1415/180
        int delX =  qCos(qDegreesToRadians(210-angle*i))*r;//QT中sin、cos认的是弧度
        int delY =  qSin(qDegreesToRadians(210-angle*i))*r;//qDegreesToRadians - 角度转弧度

        //平移坐标系
        painter.translate(QPoint(delX,-delY));
        //旋转坐标系:
        painter.rotate(-120+angle*i);//angle=4,30*4=120,实参是0,120
        //写上文字
        painter.drawText(-25,-25,50,30,Qt::AlignCenter,QString::number(i*4));
        //恢复坐标系
        painter.restore();
        }
    }

}

// 画指针
void Widget::drawPointLine(QPainter &painter,int length)
{
    //画指针 --> 线
    //先恢复到之前保存的原点:
    painter.restore();
    painter.save(); // 接着保存原点
    // 通过定时器去改变currentValue的值,去控制指针的移动
    painter.rotate(startAbgle+angle*currentValue); // 进行坐标系偏移
    painter.drawLine(60,0,height()/2-20-38,0); // 58
}

//画扇形
void Widget::drawSpeedPie(QPainter &painter, int radius)
{
    painter.restore();
    QRect rentangle(-radius,-radius,radius*2,radius*2);
    painter.setPen(Qt::NoPen);
    painter.setBrush(QColor(255,128,64,150));

    painter.drawPie(rentangle,(-startAbgle)*16,-angle*currentValue*16);
}

void Widget::startSpeed()
{
    timer = new QTimer(this);
    currentValue = 0;
    connect(timer,&QTimer::timeout,[=](){
        if(mark == 0){
            currentValue++;
            if(currentValue >= 60)
                mark = 1;
        }
        else if(mark ==1){
            currentValue--;
            if(currentValue <= 0)
                mark = 0;
        }


        update(); // 触发绘图事件
    });
    timer->start(30);
}

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    // 初始化画布
    initCanvas(painter);

    //不用画大圆了,用刻度尺去表出框架即可
    //painter.drawEllipse(QPoint(0,0),height()/2,height()/2);

    //画出中间的小圆
    drawMiddleCircle(painter,60);
    //画出当前速度
    drawCurrentSpeed(painter);
    //画刻度
    drawScale(painter,height()/2);

    //写刻度文字:
    drawScaleText(painter,height()/2);
    // 画指针
    drawPointLine(painter,height()/2-58);


    //画扇形
    drawSpeedPie(painter,height()/2);

}

指针样式美化

 优化后的指针API

// 画指针
void Widget::drawPointLine(QPainter &painter,int length)
{
    //画指针 --> 线
    //先恢复到之前保存的原点:
    painter.restore();
    painter.save(); // 接着保存原点
    // 通过定时器去改变currentValue的值,去控制指针的移动
     // painter.drawLine(60,0,height()/2-20-38,0); // 58


    //指针样式美化:

    painter.setRenderHint(QPainter::Antialiasing,true);
    painter.setBrush(Qt::white);
    painter.setPen(Qt::NoPen);
    //painter.translate(rect().center());
    static const QPointF points[4] = {
        QPointF(0,0),
        QPointF(0,15.0),
        QPointF(220.0,1.1),
        QPointF(220.0,-1.1)

    };

    //给指针弧度偏移 --> 让指针转动起来
    painter.rotate(startAbgle+angle*currentValue); // 进行坐标系偏移
    painter.drawPolygon(points, 4);

}

效果演示

可以看到我们投票通过画多边形的方式对指针进行了美化

设置高速刻度为红色

 优化刻度API

void Widget::drawScale(QPainter &painter,int radius)
{
    //保存原点:
    painter.save(); // 三点钟方向
    //画刻度:

    //1.算出一个刻度需要的角度 270 度分成 50份
    angle = 240*1.0/60; //需要先转为double类型,否则销售几乎部分会被吞掉造成误差
    //2.设置起始角度
    painter.rotate(startAbgle); // 从135度开始
    //设置字体样式:
   // painter.setFont(QFont("华文宋体",8));
    //3.分类讨论 画出所有刻度
    for(int i=0;i<=60;++i){//包括0-  一共有61根刻度线
        if(i>=40){  // 时速160 = 40*4 认定为高速
         painter.setPen(QPen(Qt::red,5)); //将高速速设定为红色
        }

        if(i%5 == 0){ // 被5 整除进一步细分表盘
            //画出一个长刻度
            painter.drawLine(radius-20,0,radius-3,0);
        }
        else{
            //画出一个长刻度
            painter.drawLine(radius-10,0,radius-3,0);
        }
        painter.rotate(angle);//选择angle的角度准备去画下一个刻度
    }

}

效果演示

//注意我这里设置了字体格式:

    QFont font("Arial",13);
    font.setBold(true); // 设置粗体
    painter.setFont(font);

速度显示优化

给内圈画上黑色

void Widget::drawEllispseInnerBlack(QPainter &painter, int radius)
{
  painter.setBrush(Qt::black);
  painter.drawEllipse(QPoint(0,0),radius,radius);
}

优化速度显示文本格式

//画当前速度
void Widget::drawCurrentSpeed(QPainter &painter)
{
    painter.setPen(Qt::white);
    //显示当前速度值:
    QFont font("Arial",30);
    font.setBold(true);
    painter.setFont(font);
    painter.drawText(QRect(-60,-60,120,70),Qt::AlignCenter,QString::number(currentValue));

    QFont font2("Arial",13);
    font2.setBold(true);
    painter.setFont(font2);
    painter.drawText(QRect(-60,-60,120,160),Qt::AlignCenter,"Km/h");

}

调整绘画顺序

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);

    // 初始化画布
    initCanvas(painter);

    //不用画大圆了,用刻度尺去表出框架即可
    //painter.drawEllipse(QPoint(0,0),height()/2,height()/2);

    //画出中间的小圆
    drawMiddleCircle(painter,60);

    //画刻度
    drawScale(painter,height()/2);

    //写刻度文字:
    drawScaleText(painter,height()/2);
    // 画指针
    drawPointLine(painter,height()/2-58);

    //画扇形
    drawSpeedPie(painter,height()/2);
    // 画黑色内圈
    drawEllispseInnerBlack(painter,80);
    //画出当前速度 -- 放正在画黑的下面,要设置在黑圈的图层下
    drawCurrentSpeed(painter);

}

效果演示

实现内环发光圈:

内环发光效果API

void Widget::drawEllispseInnerBShine(QPainter &painter, int radius)
{
    // 径向 渐变实现
    QRadialGradient radialGradient(0,0,radius);
    radialGradient.setColorAt(0.0,QColor(255,0,0,200));
    radialGradient.setColorAt(1.0,QColor(0,0,0,100));
    painter.setBrush(radialGradient);
    painter.drawEllipse(QPoint(0,0),radius,radius);
}

插入位置

效果演示

实现外环发个圈

外环发光效果API

// 画外围发光圈
void Widget::drawEllispseOutterBShine(QPainter &painter, int radius)
{
    painter.restore();
    QRect rentangle(-radius,-radius,radius*2,radius*2);
    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(rentangle,(-150)*16,-angle*60*16);
}

插入位置

实现效果

绘制汽车logo的API

//需要先添加资源文件

void Widget::drawLogo(QPainter &painter, int radius)
{
 QRect rectangle(-65,radius*0.38,130,50);
 painter.drawPixmap(rectangle,QPixmap(":/C:/Users/31472/Desktop/Images/qi_che_biao_pan/lu_hua.png"));

}

插入位置

实现效果

deBug及微调

bug1: restore()和 save() 没有配对使用

处理手段: 把多余的restore()去掉

bug2:中间显示的速度不匹配

处理:

这样修改后得到的速度就是实际值

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

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

相关文章

【java计算机专业毕设】房屋租赁系统代码源码MySQL springboot vue html maven送文档ppt

1项目功能 【java计算机专业毕设】房屋租赁系统javaweb MySQL springboot vue html maven 送报告 2项目介绍 系统功能&#xff1a; 房屋租赁系统包括管理员和用户和房东三种角色。 该系统包含多个功能模块&#xff0c;分别为管理员、用户和房东提供服务。管理员功能包括个人中…

智能创作引领潮流,抓住时机!TikTok矩阵源码带来自动定时发布的成功策略

智能创作是当今社交媒体平台发展的重要趋势&#xff0c;而TikTok作为最受欢迎的短视频平台之一&#xff0c;通过其独特的创作方式和大量的用户&#xff0c;已经成为广告主和内容创作者的首选平台。在这个竞争激烈的市场&#xff0c;抓住时机并实现成功的关键是自动定时发布&…

遗传算法求解车间调度问题(附python代码)

背景介绍 车间调度问题&#xff08;Job Shop Scheduling Problem, JSSP&#xff09;是一类经典的组合优化问题&#xff0c;它在制造业和生产管理中有着广泛的应用。JSSP 的目标是对车间中的一系列作业进行排程&#xff0c;以使得作业在不同机器上的加工顺序是最优的&#xff0…

03 Tricks

一&#xff1a;Auto-ML的一般形式 还可以支持这个CV啦lp啦&#xff0c;还有多模态啦&#xff0c;都还有很多很多任务啊&#xff0c;都可以支持啊 Auto-Sklearn Auto-Pytorch 结构搜所&#xff1a;神经网络搜所算法&#xff1a; AutoGluon 02 >自动特征工程 Tsfresh Boru…

分布式文件存储 - - - MinIO从入门到飞翔

MinIO从入门到飞翔 文章目录 MinIO从入门到飞翔0、前言1、分布式文件系统2、MinIO 介绍3、 MinIO安装&#xff08;docker&#xff09;4、基本概念5、通过代码上传文件到MinIO6、封装MinIO为starter7、在其他项目中集成封装好的模块 0、前言 对象存储是一种数据存储架构&#x…

Mybatis中#和$的区别

在MyBatis中&#xff0c;#{} 和 ${} 是两种用于参数替换的占位符&#xff0c;但它们在处理方式和安全性上有所不同 #{} 预编译处理&#xff1a;MyBatis在处理#{}时&#xff0c;会将其中的内容作为参数进行预编译处理。这意味着MyBatis会生成一个PreparedStatement对象&#x…

Python武器库开发-武器库篇之SSH服务暴力破解(五十四)

Python武器库开发-武器库篇之SSH服务暴力破解(五十四) SSH&#xff08;Secure Shell&#xff09;是一种加密的网络协议&#xff0c;用于在不安全的网络上提供安全的远程登录和文件传输功能。SSH可以在客户端和服务器之间建立安全的通信连接&#xff0c;确保通信数据的机密性和…

Web应用安全测试-防护功能失效

Web应用安全测试-防护功能失效 1、账号弱锁定机制 漏洞描述&#xff1a;系统帐号锁定时间太短 测试方法&#xff1a;登录时多次输入错误密码&#xff0c;触发账户锁定机制&#xff0c;查看锁定时间是否低于3分钟。 风险分析&#xff1a;若账户锁定时间过短&#xff0c;攻击…

洋人道歉,「国产」出品,全球最强端侧多模态大模型!(懒人包)

最近&#xff0c;在AI圈发生了一件大事&#xff0c;那就是斯坦福AI团队因抄袭清华系开源大模型而引起了国际社交平台上的巨大争议。事件的核心围绕一款名为“Llama3-V”的斯坦福团队开发的多模态大模型&#xff0c;该模型一经发布&#xff0c;便以其低成本高效率的特性&#xf…

广州酒吧安全管理:蓝牙可燃气体报警器的实践与检定

随着现代都市生活的丰富多样&#xff0c;酒吧已成为人们休闲娱乐的重要场所。然而&#xff0c;酒吧内大量使用的燃气设备也带来了不小的安全隐患。 如何在确保顾客享受愉悦时光的同时&#xff0c;保障他们的生命财产安全&#xff0c;成为广州各大酒吧经营者亟待解决的问题。 …

数据结构 实验 2

题目一&#xff1a;遍历二叉树 一、实验目的 熟练掌握指针变量、链表的含义掌握二叉树的结构特性&#xff0c;以及二叉链表的存储方式的特点掌握用递归的方法处理二叉树的基本算法掌握二叉树的四种遍历方式&#xff08;先序、中序、后序、按层次&#xff09; 二、实验步骤 …

Unity资源 之 最受欢迎的三消游戏开发包 - Bubble Shooter Kit 【免费领取】

三消游戏开发包 - Bubble Shooter Kit 免费领取 前言资源包内容领取兑换码 前言 如果你是一名 Unity 游戏开发者&#xff0c;并且正在寻找一种快速、简单的方式来创建自己的三消游戏&#xff0c;那么 Bubble Shooter Kit 就是你所需要的。 资源包内容 Bubble Shooter Kit 是…

typora+Picgo使用Lsky pro搭建本地服务图床

typoraPicgo使用Lsky pro搭建本地服务图床 Picgo下载lankong插件lankong插件安装Auth token获取 Picgo测试typora测试问题说明 Picgo下载 Picgo下载&#xff1a;https://github.com/Molunerfinn/PicGo/releases&#xff0c;注意&#xff1a;请直接使用尝鲜版&#xff0c;正式版…

【kaggle量化交易第一名方案】Trading at the Close

2024 1st Place Solution Overview 最终模型(CV/Private LB为5.8117/5.4030)是CatBoost(5.8240/5.4165)、GRU(5.8481/5.4259)和Transformer(5.8619/5.4296)的组合,权重分别为0.5、0.3、0.2,从验证集中搜索得到。这些模型共享相同的300个特征。 此外,在线学习(On…

2024【大模型】国内市场如何?程序员该何时入局?

1.市场形势 根据最新的市场研究报告&#xff0c;2023年中国的大模型市场呈现出显著的发展趋势和广阔的前景。以下是关于中国大模型市场的几个关键点&#xff1a; 市场规模和增长&#xff1a;2023年&#xff0c;中国AI大模型行业的市场规模达到了147亿元人民币&#xff0c;预计…

stable-diffusion 3 体验部署流程(ComfyUI)

环境准备 下载及简介 git clone https://huggingface.co/stabilityai/stable-diffusion-3-medium SD3 checkpoints&#xff1a; sd3_medium_incl_clips.safetensors (5.5GB)sd3_medium_incl_clips_t5xxlfp8.safetensors (10.1GB)sd3_medium.safetensors (4.3GB) 前两个可以…

RK3568笔记三十二:PaddleSeg训练部署

一、环境 1、Autodl配置 PyTorch 1.7.0Python 3.8(ubuntu18.04)Cuda 11.02、所需环境需求 - OS: 64-bit - Python 3(3.6/3.7/3.8/3.9/3.10)&#xff0c;64-bit version - pip/pip3(9.0.1)&#xff0c;64-bit version - CUDA > 10.2 - cuDNN > 7.6 - PaddlePaddle (the…

qmt量化交易策略小白学习笔记第28期【qmt编程之获取财务数据列表--十大股东和股东数】

qmt编程之获取财务数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 十大股东/十大流通…

数据结构-稀疏数组

稀疏数组是一种特殊的数据结构&#xff0c;主要用于存储那些大部分元素为零或者未使用的大型数组。以下是关于稀疏数组的详细知识点&#xff0c;按照分点表示和归纳的方式整理&#xff1a; 一、定义 稀疏数组是指那些大部分内容值为空&#xff08;通常为0&#xff09;的数组。…

【Spring6】13-19章 JdbcTemplate+代理模式+AOP+Spring事务+Spring集成MyBatis

十三、JdbcTemplate JdbcTemplate是Spring提供的一个JDBC模板类&#xff0c;是对JDBC的封装&#xff0c;简化JDBC代码。 当然&#xff0c;你也可以不用&#xff0c;可以让Spring集成其它的ORM框架&#xff0c;例如&#xff1a;MyBatis、Hibernate等。 接下来我们简单来学习一下…