博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt 绘图设备
阅读量:244 次
发布时间:2019-03-01

本文共 2992 字,大约阅读时间需要 9 分钟。

绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和 QPicture。其中,

1.QPixmap专门为图像在屏幕上的显示做了优化,和平台相关,不能对图片进行修改;
2.QBitmap是QPixmap的一个子类,它的色深限定为1,可以使用 QPixmap的isQBitmap()函数来确定这个QPixmap是不是一个QBitmap;
3.QImage专门为图像的像素级访问做了优化,可以对图片进行修改,可以在线程中绘图
4.QPicture则可以记录和重现QPainter的各条命令,保存绘图的状态(二进制文件)。

例:使用QPixmap类的对象作为绘图设备

#include "mywidget.h"#include "ui_mywidget.h"#include
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget){
ui->setupUi(this); //这里因为我们不在窗口里面绘图,所以不用在MyWidget中重写paintEvent函数 //本次指定绘图设备是Pixmap //绘图设备,400*300 QPixmap pixmap(400,300); QPainter p(&pixmap);//创建画家对象并指定绘图设备 //填充背景色为白色,两种方法 pixmap.fill(Qt::white); //p.fillRect(0,0,400,300,QBrush(Qt::white)); p.drawPixmap(0,0,80,80,QPixmap(":/new/prefix1/image/face.png")); //因为没有在窗口上绘图,所以要保存图片才能看效果 pixmap.save("../pixmap.png");}MyWidget::~MyWidget(){
delete ui;}

例:使用QImage类的对象作为绘图设备

#include "mywidget.h"#include "ui_mywidget.h"#include
#include
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget){
ui->setupUi(this); //创建一个绘图设备,QImage::Format_ARGB32背景是透明 QImage image(400,300,QImage::Format_ARGB32); QPainter p(&image); //绘图 p.drawImage(0,0,QImage(":/new/prefix1/image/face.png")); //对绘图设备前50个像素点进行操作 for(int i=0;i<50;i++) for(int j=0;j<50;j++) {
image.setPixel(QPoint(i,j),qRgb(0,255,255)); } image.save("../image.png");}MyWidget::~MyWidget(){
delete ui;}

例:使用QImage类的对象作为绘图设备

mywidget.h

#ifndef MYWIDGET_H#define MYWIDGET_H#include 
#include
QT_BEGIN_NAMESPACEnamespace Ui {
class MyWidget; }QT_END_NAMESPACEclass MyWidget : public QWidget{
Q_OBJECTpublic: MyWidget(QWidget *parent = nullptr); ~MyWidget();protected: void paintEvent(QPaintEvent *event);private: Ui::MyWidget *ui;};#endif // MYWIDGET_H

mywidget.cpp

#include "mywidget.h"#include "ui_mywidget.h"#include
#include
MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget){
ui->setupUi(this); QPicture picture; QPainter p(&picture); p.drawPixmap(0,0,80,80,QPixmap(":/new/prefix1/image/face.png")); p.end();//告诉系统终止记录(这句话别漏了!) //保存的是二进制文件 picture.save("../picture.bin"); //接下来我们要把上面存的这个二进制文件在窗口上绘图}MyWidget::~MyWidget(){
delete ui;}void MyWidget::paintEvent(QPaintEvent *event){
QPainter p(this); QPicture pic; pic.load("../picture.bin");//加载二进制文件 p.drawPicture(0,0,pic);}

最后看一下QPixmap-与QImage的相互转换:

void MyWidget::paintEvent(QPaintEvent *event){
QPainter p(this); QPixmap pixmap; pixmap.load(":/new/prefix1/image/face.png"); //QPixmap-->QImage QImage tempImage=pixmap.toImage(); p.drawImage(0,0,tempImage); QImage image; image.load(":/new/prefix1/image/Luffy.png"); //QImage-->QPixmap QPixmap tempPixmap=QPixmap::fromImage(image); p.drawPixmap(100,0,tempPixmap);}

转载地址:http://uimt.baihongyu.com/

你可能感兴趣的文章