导航菜单
首页 >  QT三大绘图类  > QT绘图类

QT绘图类

QT绘图类

QPaint设备类 |Qt GUI 5.15.13

绘图设备是指继承 QPaintDevice 的子类,你可以使用 QPainter 直接在其上面绘制图形,Qt 一共提供了四个这样继承 QPaintDevice 的绘图设备类,分别是:QPixmap、QBitmap、QImage和 QPicture。其中:

QPixmap专门为图像在屏幕上的显示做了优化;QBitmap是 QPixmap 的一个子类,它的色深限定为 1,你可以使用 QPixmap 的 isQBitmap() 函数来确定这个 QPixmap 是不是一个 QBitmap;QImage专门为图像的像素级访问做了优化;QPicture则可以记录和重现 QPainter 的各条命令;一、QPixmap

QPixmap 继承了 QPaintDevice,因此,可以使用 QPainter 直接在上面绘制图形。QPixmap 也可以接受一个字符串作为一个文件的路径来显示这个文件,比如想在程序之中打开 png、jpeg 之类的文件,就可以使用 QPixmap。使用 QPainter 的drawPixmap()函数可以把这个文件绘制到一个 QLabel、QPushButton 或者其他的设备上面。QPixmap 是针对屏幕进行特殊优化的,因此,它与实际的底层显示设备息息相关。注意,这里说的显示设备并不是硬件,而是操作系统提供的原生的绘图引擎。所以,在不同的操作系统平台下,QPixmap 的显示可能会有所差别。

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(50,50), 50, 50);// 保存pix.save(/*路径*/);}二、QBitmap

QBitmap 继承自 QPixmap,因此具有 QPixmap 的所有特性,提供单色图像。QBitmap 的色深始终为 1。色深这个概念来自计算机图形学,是指用于表现颜色的二进制的位数。计算机里面的数据都是使用二进制表示的,为了表示一种颜色,也会使用二进制,比如要表示 8 种颜色,需要用 3 个二进制位,这时就说色深是 3。因此,所谓色深为 1,也就是使用 1 个二进制位表示颜色。1 个位只有两种状态:0 和 1,因此它所表示的颜色就有两种,黑和白。所以说,QBitmap 实际上是只有黑白两色的图像数据。由于 QBitmap 色深小,因此只占用很少的存储空间,所以适合做光标文件和笔刷。

三、QImage

QPixmap 使用底层平台的绘制系统进行绘制,无法提供像素级别的操作,而 QImage 则是使用独立于硬件的绘制系统,实际上是自己绘制自己,因此提供了像素级别的操作,并且能够在不同系统之上提供一个一致的显示形式。

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget){ui->setupUi(this);// QImage绘图设备,可以对像素访问// 指定宽高QImage img(300, 300, QImage::Format_RGB32);// 填充颜色img.fill(Qt::white);// 创建画家,并画一个圆QPainter painter(&img);painter.setPen(QPen(Qt::green));painter.drawEllipse(QPoint(50,50), 50, 50);// 保存img.save(/*路径*/);}

使用 QImage 对像素进行访问:

void PaintWidget::paintEvent(QPaintEvent *){QPainter painter(this);// 利用QImage对像素进行修改QImage image(300, 300, QImage::Format_RGB32);//将图片背景填充为白色image.fill(Qt::white);//改变指定区域的像素点的值for(int i=50; i

相关推荐: