1.QPixmap
对不同平台做了显示的优化,可以将画的图保存到磁盘上
头文件:
#include"QPixmap"
#include"QPainter"
1.1QPixmap画图
代码:
//Pixmap绘图设备QPixmap pix(300,300);//声明画家QPainter painter(&pix);painter.setPen(QPen(Qt::green));painter.drawEllipse(QPoint(150,150),100,100);//保存pix.save("D:\\pix.png");
运行发现窗口中什么都没有,因为没有在Widget窗口中画,而是在电脑的D盘下
在d盘中多了一个pix.png的文件,画着一个绿色的圆
1.2填充颜色
代码:
pix.fill(Qt::white);
2.QImage
可以对像素进行访问
头文件:
#include"QImage"
2.1QImage画图
代码:
//QImage绘图设备QImage img(300,300,QImage::Format_RGB32);img.fill(Qt::white);QPainter painter(&img);painter.setPen(QPen(Qt::blue));painter.drawEllipse(QPoint(150,150),100,100);//保存img.save("D:\\img.png");
同样窗口中没有东西,还是在电脑的D盘
2.2修改像素
添加资源文件:https://blog.csdn.net/m0_74724723/article/details/146999612?spm=1011.2415.3001.5331
代码:
widget.h
//绘图事件void paintEvent(QPaintEvent*);
widget.cpp
//绘图事件
void Widget::paintEvent(QPaintEvent*)
{QPainter painter(this);//利用QImage对像素进行修改QImage img;img.load(":/Image/pic1.png");painter.drawImage(0,0,img);
}
修改像素点:
//修改像素点for(int i=50;i<100;i++){for(int j=50;j<100;j++){QRgb value=qRgb(255,0,0);img.setPixel(i,j,value);}}
即横纵坐标在50~100的区间内的像素点都被修改成了红色
3.QPicture
记录和重现 绘图指令
头文件:
#include"QPicture"
3.1QPicture画图
代码:
在widget的构造函数中写
//QPicture 绘图设备QPicture pic;QPainter painter;painter.begin(&pic);//开始画painter.setPen(QPen(Qt::cyan));painter.drawEllipse(QPoint(150,150),100,100);painter.end();//结束画//保存到磁盘pic.save("D:\\pic.zt");
但是这个文件打不开
3.2重现QPicture的绘图指令
代码:
写在绘图事件的函数中
QPainter painter(this);//重现QPicture的绘图指令QPicture pic;pic.load("D:\\pic.zt");painter.drawPicture(0,0,pic);
完整代码:
widget.h
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();//绘图事件void paintEvent(QPaintEvent*);private:Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#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);// //Pixmap绘图设备// QPixmap pix(300,300);// //填充颜色// pix.fill(Qt::white);// //声明画家// QPainter painter(&pix);// painter.setPen(QPen(Qt::green));// painter.drawEllipse(QPoint(150,150),100,100);// //保存// pix.save("D:\\pix.png");// //QImage绘图设备// QImage img(300,300,QImage::Format_RGB32);// img.fill(Qt::white);// QPainter painter(&img);// painter.setPen(QPen(Qt::blue));// painter.drawEllipse(QPoint(150,150),100,100);// //保存// img.save("D:\\img.png");//QPicture 绘图设备QPicture pic;QPainter painter;painter.begin(&pic);//开始画painter.setPen(QPen(Qt::cyan));painter.drawEllipse(QPoint(150,150),100,100);painter.end();//结束画//保存到磁盘pic.save("D:\\pic.zt");
}//绘图事件
void Widget::paintEvent(QPaintEvent*)
{// QPainter painter(this);// //利用QImage对像素进行修改// QImage img;// img.load(":/Image/pic1.png");// //修改像素点// for(int i=50;i<100;i++)// {// for(int j=50;j<100;j++)// {// QRgb value=qRgb(255,0,0);// img.setPixel(i,j,value);// }// }// painter.drawImage(0,0,img);QPainter painter(this);//重现QPicture的绘图指令QPicture pic;pic.load("D:\\pic.zt");painter.drawPicture(0,0,pic);
}Widget::~Widget()
{delete ui;
}