【嵌入式——QT】QPainter基本绘图

news2024/11/15 11:14:36

【嵌入式——QT】QPainter基本绘图

  • QPainter与QPaintDevice
  • paintEvent事件和绘图区
  • QPainter主要属性
  • QPen主要功能
  • QBrush主要功能
  • QPainter绘制基本图形方法
  • 图示
  • 代码示例

QPainter与QPaintDevice

QPainter是用来进行绘图操作的类,QPaintDevice是一个可以使用QPainter进行绘图的抽象的二维界面,QPaintEngine给QPainter提供在不同设备上绘图的接口,QPaintEngine类由QPainter和QPaintDevice内部使用,应用程序一般无需和QPaintEngine打交道,除非要创建自己的设备类型。

paintEvent事件和绘图区

QWidget类及其子类是最常用的绘图设备,从QWidget类继承的类都有paintEvent事件,要在设备上绘图,只需重定义此事件并编写相应代码。

QPainter主要属性

  • pen属性:是一个QPen对象,用于控制线条的颜色、宽度、线型等;
  • brush属性:是一个QBrush对象,用于设置一个区域的填充特性,可以设置填充颜色、填充方式、渐变特性;
  • font属性:是一个QFont对象,用于绘制文字时,设置文字的字体样式、大小等属性;

QPen主要功能

  • setColor(const QColor &color):设置画笔颜色,即线条颜色;
  • setWidth(int width):设置线条宽度;
  • setStyle(Qt::PenStyle style):设置线条样式;
  • setCapStyle(Qt::PenCapStyle style):设置线条端点样式;
  • setJoinStyle(Qt::PenJoinStyle style):设置连接方式;

QBrush主要功能

  • setColor(const QColor &color):设置画刷颜色;
  • setStyle(Qt::BrushStyle style):设置画刷样式;
  • setTexture(const QPixmap &pixmap):设置一个QPixmap类型的图片作为画刷的图片;
  • setTextureImage(const QImage &image):设置一个QImage类型的图片作为画刷的图片;

QPainter绘制基本图形方法

  • drawArc():画弧线;
  • drawChord():画一段弦;
  • drawConvexPolygon():画凸多边形;
  • drawEllipse:画椭圆;
  • drawImage():绘制图片;
  • drawLine(const QLineF &line):画直线;
  • drawLines(const QLineF *lines, int lineCount):画一批直线;
  • drawPath(const QPainterPath &path):绘制由QPainterPath对象定义的路线;
  • drawPie(const QRectF &rectangle, int startAngle, int spanAngle):绘制扇形;
  • drawPixmap(int x, int y, const QPixmap &pixmap):绘制QPixmap类型图片;
  • drawPoint(int x, int y):绘制一个点;
  • drawPoints:绘制一批点;
  • drawPolygon:绘制多边形,最后一个点和第一个点闭合;
  • drawPolyline:绘制多点连接的线,最后一个点不会和第一个点连接;
  • drawRect(int x, int y, int width, int height):画矩形;
  • drawRoundedRect:绘制圆角矩形;
  • drawText(int x, int y, const QString &text):绘制文本,只能绘制单行文字;
  • fillRect(int x, int y, int width, int height, const QBrush &brush):填充一个矩形,无边框线;
  • eraseRect:擦除某个矩形区域;
  • fillPath:填充某个QPainterPath定义的绘图路径 但是轮廓线不显示;
  • fillRect:填充一个矩形,无边框线;

图示

随便截了两张图片,代码中均有实现,不一一列举图片了。
在这里插入图片描述

在这里插入图片描述

代码示例

QPainterForm.h

#ifndef QPAINTERFORM_H
#define QPAINTERFORM_H

#include <QWidget>

namespace Ui
{
    class QPainterForm;
}

class QPainterForm : public QWidget
{
    Q_OBJECT

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

    void paintEvent(QPaintEvent* event) Q_DECL_OVERRIDE;


    void drawArcDemo();
    void drawChordDemo();
    void drawConvexPolygonDemo();
    void drawEllipseDemo();
    void drawImageDemo();
    void drawLineDemo();
    void drawLinesDemo();
    void drawPathDemo();
    void drawPieDemo();
    void drawPixmapDemo();
    void drawPointDemo();
    void drawPointsDemo();
    void drawPolygonDemo();
    void drawPolylineDemo();
    void drawRectDemo();
    void drawRoundedRectDemo();
    void dratTextDemo();
    void eraseRectDemo();
    void fillPathDemo();
    void fillRectDemo();

    void fivePointedStar();

    void viewPortAndWindow();




private:
    Ui::QPainterForm* ui;
};

#endif // QPAINTERFORM_H

QPainterForm.cpp

#include "QPainterForm.h"
#include "ui_QPainterForm.h"
#include <QPainter>
QPainterForm::QPainterForm(QWidget* parent)
    : QWidget(parent)
    , ui(new Ui::QPainterForm)
{
    ui->setupUi(this);
    //设置窗口背景为白色
    setPalette(QPalette(Qt::white));
    setAutoFillBackground(true);
}

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

void QPainterForm::paintEvent(QPaintEvent* event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::TextAntialiasing);
    //宽
    int w = this->width();
    //高
    int h = this->height();
    #if 0
    //中间区域矩形块
    QRect rect(w/4, h/4, w/2, h/2);
    //画笔
    QPen pen;
    pen.setWidth(3);//线宽
    pen.setColor(Qt::red);//线条红色
    pen.setStyle(Qt::DashLine);//线的样式,实线、虚线
    pen.setCapStyle(Qt::FlatCap);//线的断点样式
    pen.setJoinStyle(Qt::BevelJoin);//线的连接点样式
    painter.setPen(pen);
    //画刷
    QBrush brush;
    brush.setColor(Qt::yellow);//画刷颜色
    //Qt::BrushStyle
    brush.setStyle(Qt::CrossPattern);//画刷填充样式
    painter.setBrush(brush);
    //绘图
    painter.drawRect(rect);
    #endif
    #if 0
    QPainter painter2(this);
    /**
    QRadialGradient(qreal cx, qreal cy, qreal radius, qreal fx, qreal fy);
    cx xy 辐射填充的中心点,radius 是辐射填充区的半径,fx fy是焦点坐标
    **/
    QRadialGradient radialGrad(w/2, h/2, qMax(w/8, h/8), w/2, h/2);
    //0表示起点
    radialGrad.setColorAt(0, Qt::green);
    //1表示终点
    radialGrad.setColorAt(1, Qt::blue);
    radialGrad.setSpread(QGradient::ReflectSpread);
    painter2.setBrush(radialGrad);
    painter2.drawRect(this->rect());
    #endif
    // drawArcDemo();
    // drawChordDemo();
    // drawConvexPolygonDemo();
    // drawEllipseDemo();
    // drawImageDemo();
    // drawLineDemo();
    // drawLinesDemo();
    // drawPathDemo();
    // drawPieDemo();
    // drawPixmapDemo();
    // drawPointDemo();
    // drawPointsDemo();
    // drawPolygonDemo();
    // drawPolylineDemo();
    // drawRectDemo();
    // drawRoundedRectDemo();
    // dratTextDemo();
    // eraseRectDemo();
    // fillPathDemo();
    // fillRectDemo();
    // fivePointedStar();
    viewPortAndWindow();
}

void QPainterForm::drawArcDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    int startAngle = 90 * 16;
    int spanAngle = 90*16;
    QPainter painter(this);
    //画弧线
    painter.drawArc(rect, startAngle, spanAngle);
}

void QPainterForm::drawChordDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    int startAngle = 90 * 16;
    int spanAngle = 90*16;
    QPainter painter(this);
    //画一段弦
    painter.drawChord(rect, startAngle, spanAngle);
}

void QPainterForm::drawConvexPolygonDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QPoint points[4] = {QPoint(5*w/12, h/4), QPoint(3*w/4, 5*h/12), QPoint(5*w/12, 3*h/4), QPoint(w/4, 5*h/12)};
    QPainter painter(this);
    //根据给定的点画凸多边形
    painter.drawConvexPolygon(points, 4);
}

void QPainterForm::drawEllipseDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainter painter(this);
    //画椭圆
    painter.drawEllipse(rect);
}

void QPainterForm::drawImageDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QImage image("图片地址");
    QPainter painter(this);
    //在指定区域内绘制图片
    painter.drawImage(rect, image);
}

void QPainterForm::drawLineDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QLine line(w/4, h/4, w/2, h/2);
    QPainter painter(this);
    //画直线
    painter.drawLine(line);
}

void QPainterForm::drawLinesDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QVector<QLine> lines;
    lines.append(QLine(rect.topLeft(), rect.bottomRight()));
    lines.append(QLine(rect.topRight(), rect.bottomLeft()));
    lines.append(QLine(rect.topLeft(), rect.bottomLeft()));
    lines.append(QLine(rect.topRight(), rect.bottomRight()));
    QPainter painter(this);
    //画一批直线
    painter.drawLines(lines);
}

void QPainterForm::drawPathDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainterPath path;
    path.addEllipse(rect);
    path.addRect(rect);
    QPainter painter(this);
    //绘制由QPainterPath定义的路线
    painter.drawPath(path);
}

void QPainterForm::drawPieDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    int startAngle = 40*16;
    int spanAngle = 120*16;
    QPainter painter(this);
    //绘制扇形
    painter.drawPie(rect, startAngle, spanAngle);
}

void QPainterForm::drawPixmapDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPixmap pixmap("图片地址");
    QPainter painter(this);
    //绘制QPixmap类型的图片
    painter.drawPixmap(rect, pixmap);
}

void QPainterForm::drawPointDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QPainter painter(this);
    //绘制一个点
    painter.drawPoint(QPoint(w/2, h/2));
}

void QPainterForm::drawPointsDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QPoint points[] = {QPoint(5*w/12, h/4), QPoint(3*w/4, 5*h/12), QPoint(2*w/4, 5*h/12)};
    QPainter painter(this);
    //绘制一批点
    painter.drawPoints(points, 3);
}

void QPainterForm::drawPolygonDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QPoint points[] = {QPoint(5*w/12, h/4), QPoint(3*w/4, 5*h/12), QPoint(5*w/12, 3*h/4), QPoint(2*w/4, 5*h/12)};
    QPainter painter(this);
    //绘制多边形,最后一个点和第一个点闭合
    painter.drawPolygon(points, 4);
}

void QPainterForm::drawPolylineDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QPoint points[] = {QPoint(5*w/12, h/4), QPoint(3*w/4, 5*h/12), QPoint(5*w/12, 3*h/4), QPoint(2*w/4, 5*h/12)};
    QPainter painter(this);
    //绘制多点连接的线,最后一个点不会和第一个点连接
    painter.drawPolyline(points, 4);
}

void QPainterForm::drawRectDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainter painter(this);
    //绘制矩形
    painter.drawRect(rect);
}

void QPainterForm::drawRoundedRectDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainter painter(this);
    //绘制圆角矩形
    painter.drawRoundedRect(rect, 20, 20);
}

void QPainterForm::dratTextDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QFont font;
    font.setPointSize(30);
    font.setBold(true);
    QPainter painter(this);
    painter.setFont(font);
    //绘制文本
    painter.drawText(rect, "Hello Qt");
}

void QPainterForm::eraseRectDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainter painter(this);
    //擦除某个矩形区域
    painter.eraseRect(rect);
}

void QPainterForm::fillPathDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainterPath path;
    path.addEllipse(rect);
    path.addRect(rect);
    QPainter painter(this);
    //填充某个QPainterPath定义的绘图路径 但是轮廓线不显示
    painter.fillPath(path, Qt::red);
}

void QPainterForm::fillRectDemo()
{
    //宽
    int w = this->width();
    //高
    int h = this->height();
    QRect rect(w/4, h/4, w/2, h/2);
    QPainter painter(this);
    //填充一个矩形,无边框线
    painter.fillRect(rect, Qt::green);
}
//坐标变换 五角星
void QPainterForm::fivePointedStar()
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setRenderHint(QPainter::TextAntialiasing);
    qreal r = 100;
    const qreal pi = 3.14159;
    qreal deg = pi*72/180;
    QPoint points[5]= {
        QPoint(r, 0),
        QPoint(r*std::cos(deg), -r*std::sin(deg)),
        QPoint(r*std::cos(2*deg), -r*std::sin(2*deg)),
        QPoint(r*std::cos(3*deg), -r*std::sin(3*deg)),
        QPoint(r*std::cos(4*deg), -r*std::sin(4*deg))
    };
    //设置字体
    QFont font;
    font.setPointSize(12);
    font.setBold(true);
    painter.setFont(font);
    //设置画笔
    QPen penLine;
    penLine.setWidth(2);//线宽
    penLine.setColor(Qt::blue); //线颜色
    penLine.setStyle(Qt::SolidLine); //线的类型
    penLine.setCapStyle(Qt::FlatCap);//线端点样式
    penLine.setJoinStyle(Qt::BevelJoin);//线连接点样式
    painter.setPen(penLine);
    //设置画刷
    QBrush brush;
    brush.setColor(Qt::yellow);
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);
    QPainterPath starPath;
    starPath.moveTo(points[0]);
    starPath.lineTo(points[2]);
    starPath.lineTo(points[4]);
    starPath.lineTo(points[1]);
    starPath.lineTo(points[3]);
    starPath.closeSubpath();//闭合路径,最后一个点与第一个点相连
    starPath.addText(points[0], font, "0");
    starPath.addText(points[1], font, "1");
    starPath.addText(points[2], font, "2");
    starPath.addText(points[3], font, "3");
    starPath.addText(points[4], font, "4");
    //绘图
    painter.save();//保存坐标状态
    painter.translate(100, 120); //平移
    painter.drawPath(starPath);//画星星
    painter.drawText(0, 0, "S1");
    painter.restore();//恢复坐标状态
    painter.translate(300, 120); //平移
    painter.scale(0.8, 0.8); //缩放
    painter.rotate(90);//顺时针旋转90度
    painter.drawPath(starPath);
    painter.drawText(0, 0, "S2");
    painter.resetTransform();//复位所有坐标变换
    painter.translate(500, 120); //平移
    painter.rotate(-145);//逆时针旋转145度
    painter.drawPath(starPath);
    painter.drawText(0, 0, "S3");
}

//视口 窗口
void QPainterForm::viewPortAndWindow()
{
    QPainter painter(this);
    //宽
    int w = this->width();
    //高
    int h = this->height();
    int side =qMin(w, h);
    QRect rect((w-side)/2, (h-side)/2, side, side);
    painter.drawRect(rect);
    painter.setViewport(rect);//设置viewport 图案就在这个矩形框之内
    painter.setWindow(-100, -100, 200, 200);
    painter.setRenderHint(QPainter::Antialiasing);
    QPen pen;
    pen.setWidth(1);
    pen.setColor(Qt::red);
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);
    for(int i=0; i<36; i++) {
        //画椭圆
        painter.drawEllipse(QPoint(50, 0), 50, 50);
        //顺时针旋转10度
        painter.rotate(10);
    }
}

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

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

相关文章

RabbitMQ 模拟实现【一】:需求分析

文章目录 消息队列消息队列消息队列的作用图解生产者消费者模型BrokerSever 内部涉及的关键概念交换机功能消费的实现方式数据存储方式网络通信消息应答模式 消息队列模拟实现Gitee网址 消息队列 采用 SpringBoot 框架实现 消息队列 通常说的消息队列&#xff0c;简称MQ&am…

AP AUTOSAR 执行管理与状态管理的交互

本系列文章将从以下六个方面来介绍AP平台核心技术: 接下来,让我们来看第4个部分: 第四部分 执行管理与状态管理的交互 4.1 执行管理与状态管理的交互

这个班要不还是别上了吧。

先不提代码写得对不对。咱就是说&#xff0c;打印语句都出不来&#xff0c;搞个chuanchuan哟。 &#xff08;谁能给我解释一下。。&#x1f643;&#xff09;

Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型是一个真实模型&#xff0c;并且具有幻想和创意色彩。 作者述&#xff1a;我选取了…

腾讯t-design 实现图片预览组件的显示和使用

腾讯t-design 发布了 下面介绍一个组件的使用 图片预览 <template><div><div class"tdesign-demo-image-viewer__base"><t-image-viewer :images"[img]"><template #trigger"{ open }"><div class"tde…

【智能算法】非洲秃鹫优化算法(AVOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2021年&#xff0c;Abdollahzadeh等人受到非洲秃鹫自然捕食行为启发&#xff0c;提出了非洲秃鹫优化算法(African Vultures Optimization Algorithm, AVOA)。 2.算法原理 2.1算法思想 AVOA模拟了…

13.WEB渗透测试--Kali Linux(一)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;12.WEB渗透测试-Linux系统管理、安全加固&#xff08;下&#xff09;-CSDN博客 kali由 Of…

python爬虫实战——抖音

目录 1、分析主页作品列表标签结构 2、进入作品页前 判断作品是视频作品还是图文作品 3、进入视频作品页面&#xff0c;获取视频 4、进入图文作品页面&#xff0c;获取图片 5、完整参考代码 6、获取全部作品的一种方法 本文主要使用 selenium.webdriver&#xff08;Firef…

【js刷题:数据结构数组篇之移除元素】

移除元素 一、题目二、思路三、方法1.暴力解法2.双指针法定义快指针和慢指针代码展示 三、力扣刷题1.删除排序数组中的重复项 一、题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额…

vivo统一接入网关VUA转发性能优化实践

作者&#xff1a;vivo 互联网服务器团队 - Qiu Xiangcun 本文将探讨如何通过使用Intel QuickAssist Technology&#xff08;QAT&#xff09;来优化VUA的HTTPS转发性能。我们将介绍如何使用QAT通过硬件加速来提高HTTPS转发的性能&#xff0c;并探讨QAT在不同应用场景中的表现。最…

重学SpringBoot3-内容协商机制

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-内容协商机制 ContentNegotiationConfigurer接口配置内容协商URL参数Accept头使用Url扩展名 自定义内容协商格式步骤1: 注册自定义媒体类型步骤2: 实现H…

AI实战:借助Python与PaddleOCR,实现高精度文本检测与识别

1、引言 欢迎来到今天的教程&#xff1a;“驾驭PaddleOCR&#xff0c;解锁Python文字识别新技能”。在本篇文章中&#xff0c;我们将手把手教你如何安装及使用这款强大的Python库&#xff0c;轻松应对各类图像中的文字识别问题。 2、安装PaddleOCR 首先确保你的环境中已安装…

苹果电脑下载crossover对电脑有影响吗 crossover mac 好用吗CrossOver虚拟机 CrossOver打游戏

苹果电脑下载crossover对电脑有影响吗&#xff1f; 在苹果电脑下载安装crossover对电脑没有什么影响&#xff0c;并且可以解决macOS系统不能安装Windows应用程序的问题。相较于虚拟机和双系统而言&#xff0c;crossover安装软件更简单&#xff0c;占用内存也更小。下面我们来看…

Css基础——精灵图(sprites)和字体图标

1、精灵图 1.1、精灵图的由来 一个网页中往往会应用很多小的背景图像作为修饰&#xff0c;当网页中的图像过多时&#xff0c;服务器就会频繁地接收和发送 请求图片&#xff0c;造成服务器请求压力过大&#xff0c;这将大大降低页面的加载速度。 因此&#xff0c;为了有效地减…

可行性研究报告模板

1业务需求可行性分析 2技术可行性分析 2.1规范化原则 2.2高度的兼容性和可移植性 2.3人性化、适用性 2.4标准化统一设计原则 2.5先进安全可扩展性原则 3开发周期可行性分析 4人力资源可行性分析 5成本分析 6收益分析 7结论 软件项目全套资料获取下载&#xff1a;软件开发全套资…

链路聚合练习

下面的接口都改为Etherent [LSW1]int Eth-Trunk 1 创建一个eth-trunk 1[LSW1-Eth-Trunk1]int g0/0/1[LSW1-GigabitEthernet0/0/1]eth-trunk 1 将接口0/0/1加入eth-trunk 1[LSW1-GigabitEthernet0/0/1]int g0/0/2[LSW1-GigabitEthernet0/0/2]eth-trunk 1[LSW1-GigabitEthernet…

CAQ六西格玛绿带认证流程:从能力考试到评价全解析

六西格玛绿带认证&#xff0c;作为质量管理领域的一个重要里程碑&#xff0c;对于专业人士来说是一项极具价值的认证。张驰咨询将详细解读这一流程&#xff0c;包括理论知识考试、项目实践能力评价&#xff0c;以及期满换证的相关细节。 一、理论知识考试 六西格玛绿带的理论…

OpenAI机器人,一出手就是王炸

「借助 OpenAI 的能力&#xff0c;Figure 01 现在可以与人全面对话了&#xff01;」 本周三&#xff0c;半个硅谷都在投的明星机器人创业公司Figure&#xff0c;发布了自己第一个 OpenAI 大模型加持的机器人 demo。 这家公司在 3 月 1 日刚刚宣布获得 OpenAI 等公司的投资&…

论文阅读——VSA

VSA: Learning Varied-Size Window Attention in Vision Transformers 方法&#xff1a; 给定输入特征X&#xff0c;VSA首先按照基线方法的例程&#xff0c;将这些标记划分为几个窗口Xw&#xff0c;窗口大小为预定义的w。我们将这些窗口称为默认窗口&#xff0c;并从默认窗口中…

(一)搭建Android Studio开发环境

一、JDK 1、下载 2、安装 双击进行安装&#xff0c;修改安装路径为&#xff1a;D:\Java\jdk-17.0.4.1即可&#xff0c;安装完成后目录如下&#xff1a; 配置环境变量 3、测试 WinR&#xff0c;输入cmd&#xff0c;按Enter后&#xff0c;键入&#xff1a;java --version&…