【QT】18 绘图系统(QPaintDevice类)

  代码资源:https://download.csdn.net/download/qq_36926037/85052673

18.1 绘图概述及项目创建

18.1.1 绘图概述

  绘图设备是继承自QPaintDevice类的子类,QT一共提供了四个绘图设备类:
  (1)QPixmap专门为图像在不同屏幕(平台)上的显示做了优化
  (2)QBitmap是QPixmap的一个子类,它的色深限制为1,可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap
  (3)QImage专门为图像的像素级访问做出优化
  (4)QPicture则可以记录和重现QPainter的各条命令,保存的图像格式为任意(自定义)格式

18.1.2 项目创建

   创建项目,详细过程步骤:https://blog.csdn.net/qq_36926037/article/details/123720720
在这里插入图片描述

18.2 QPixmap绘图设备

  前提:包含QPixmap头文件
  QPixmap:对不同平台的显示做了优化

#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QPainter>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    /*################QPixmap绘图设备:专门为平台做了显示优化###############*/
    //(1)QPixmap绘图设备
    //#include <QPixmap>
    QPixmap pix(300,300);
    pix.fill(Qt::white);

    //(2)声明画家
    //#include <QPainter>
    QPainter painter(&pix);//绘图设备和画笔绑定

    //(3)绘制
    painter.setPen(QPen(Qt::green));
    painter.drawEllipse(QPoint(150,150),100,100);

    //(4)保存
    pix.save("D:\\pixmap.png");

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

在这里插入图片描述

18.3 QImage绘图设备

  前提:包含QImage头文件

18.3.1 绘图

  案例1:

#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QPainter>
#include <QImage>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    /*################QImage绘图设备:可以对像素进行操作###############*/
    //(2)QImage绘图设备
    //#include <QImage>
    QImage img(300,300,QImage::Format_RGB32);
    img.fill(Qt::white);

    //(2)声明画家
    //#include <QPainter>
    QPainter painter(&img);//绘图设备和画笔绑定

    //(3)绘制
    painter.setPen(QPen(Qt::blue));
    painter.drawEllipse(QPoint(150,150),100,100);

    //(4)保存
    img.save("D:\\img.png");


}

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

在这里插入图片描述

18.3.2 像素级操作

  (1)添加资源文件参考:https://blog.csdn.net/qq_36926037/article/details/123687483
**加粗样式**
  (2)创建绘图事件

#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();
    //绘图事件
    void paintEvent(QPaintEvent *ev);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

在这里插入图片描述

#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QPainter>
#include <QImage>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    /*################QImage绘图设备:可以对像素进行操作###############*/
    //(2)QImage绘图设备
    //#include <QImage>
   QImage img(300,300,QImage::Format_RGB32);
    img.fill(Qt::white);

    //(2)声明画家
    //#include <QPainter>
    QPainter painter(&img);//绘图设备和画笔绑定

    //(3)绘制
    painter.setPen(QPen(Qt::blue));
    painter.drawEllipse(QPoint(150,150),100,100);

    //(4)保存
    img.save("D:\\img.png");


}
//重写绘图事件
void Widget:: paintEvent(QPaintEvent *ev)
{
    //利用QImage对像素进行修改
    //(1)创建设备
    QImage img;
    img.load(":/image/1.png");
    //(2)创建画笔
    QPainter painter(this);
    //(3)修改像素点
    for(int i=50;i<100;i++)
    {
        for (int j=50;j<100;j++)
        {
            QRgb value=qRgb(0,255,0);
            img.setPixel(i,j,value);
        }
    }
    //(4)绘图
    painter.drawImage(0,0,img);

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

在这里插入图片描述

18.4 QPicture绘图设备

18.4.1 绘图

  前提:包含 QPicture头文件
  

#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QPainter>
#include <QImage>
#include <QPicture>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    /*################QPicture绘图设备:可以记录和重新绘图指令###############*/
    //(1)QPicture绘图设备
    //#include <QPicture>
    QPicture pic;

    //(2)声明画家
    //#include <QPainter>
    QPainter painter(&pic);//绘图设备和画笔绑定

    //(3)开始绘制
    painter.begin(&pic);//开始在pic设备上绘画

    painter.setPen(QPen(Qt::red));
    painter.drawEllipse(QPoint(150,150),100,100);

    //(4)结束绘制
    painter.end();

    //(5)保存
    pic.save("D:\\pic.zt");
}

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

在这里插入图片描述

18.4.2 重现绘图指令

  (1)声明绘图事件

#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();
    //绘图事件
    void paintEvent(QPaintEvent *ev);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

在这里插入图片描述
  (2)实现绘图事件

#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QPainter>
#include <QImage>
#include <QPicture>

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

    /*################QPicture绘图设备:可以记录和重现绘图指令###############*/
    //(1)QPicture绘图设备
    //#include <QPicture>
    QPicture pic;

    //(2)声明画家
    //#include <QPainter>
    QPainter painter(&pic);//绘图设备和画笔绑定

    //(3)开始绘制
    painter.begin(&pic);//开始在pic设备上绘画

    painter.setPen(QPen(Qt::red));
    painter.drawEllipse(QPoint(150,150),100,100);

    //(4)结束绘制
    painter.end();

    //(5)保存
    pic.save("D:\\pic.zt");
}

void Widget:: paintEvent(QPaintEvent *ev)
{

    //(1)重现QPicture绘图指令
   QPicture pic;
   pic.load("D:\\pic.zt");
    //(2)创建画笔
    QPainter painter(this);

    //(3)绘图
    painter.drawPicture(0,0,pic);

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值