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;
}