QPixmap 类是一种可用作绘制设备的屏幕外图像表示形式。
QPixmap可以使用QLabel或QAbstractButton的子类之一可以轻松显示在屏幕上
QPixmap 对象可以按值传递,因为 QPixmap 类使用隐式数据共享,也可以流式传输。
- QPixmap 转 QImage 使用 toImage函数
- QImage 转 QPixmap 使用QPainter::fromImage
构造函数:

常用函数:
| size() | 图像大小 |
| width() | 宽度 |
| height() | 高度 |
| toImage() | 转换为QImage |
| setDevicePixeRatio() | 设置像素映射的设备像素比率 |
| scroll() | 滚动矩阵 |
| scaled() | 对图像进行缩放 |
| load() | 打开文件 |
| save() | 保存文件 |
| fill() | 填充 |
| depth() | 图像深度 |
| setMask() | 使用 |
- QLabel *label=new QLabel(this);
- label->resize(303,303);//设置大小
- QPixmap pixmap(":/image/456.png");
- pixmap.scaled(label->width(),label->height());
- label->setPixmap(pixmap);

- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- QImage image("D:/456.png");
- image.setDevicePixelRatio(3);
- painter.drawImage(0,0,image);
- QPixmap pixmap=QPixmap::fromImage(image);//QImage转QPixmap
- painter.drawPixmap(100,100,pixmap);
- painter.drawImage(200,200,pixmap.toImage());//QPixmap转QImage
- }

- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- QPixmap pixmap("D:/456.png");
- qDebug()<<pixmap.size();//图片大小
- qDebug()<<pixmap.width();//图片宽度
- qDebug()<<pixmap.height();//图片高度
- qDebug()<<pixmap.depth();//图片深度
- pixmap.scaled(400,400);//缩放
- pixmap.fill(Qt::gray);//设置填充
- painter.drawPixmap(0,0,pixmap);
- }

实现不规则窗体,鼠标右键窗体关闭窗口,左键长按可以拖动窗口
widget.h文件添加:
- protected:
- void paintEvent(QPaintEvent *event);//画家事件
- void mousePressEvent(QMouseEvent *event);//鼠标点击事件
- void mouseMoveEvent(QMouseEvent *event);//鼠标移动事件
- QPoint point;//点位
widget.cpp中实现:
- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- QPixmap pixmap(":/image/456.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
- this->setMask(pixmap.mask());//需要添加头文件#include<QBitmap>
- }
- void Widget::mousePressEvent(QMouseEvent *event)
- {
- if(event->button()==Qt::RightButton)//右键点击 关闭窗口
- {
- close();
- }
- point=event->globalPos()-frameGeometry().topLeft();//获取差值
- event->accept();
- }
- void Widget::mouseMoveEvent(QMouseEvent *event)
- {
- if(event->buttons()&Qt::LeftButton)
- {
- move(event->globalPos()-point);
- event->accept();
- }
-
- }

QPixmap的底色默认为黑色,可以自己使用fill()添加底色。
- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter;
- QPixmap pixmap(200,200);//设置图片大小
- painter.begin(&pixmap);//给pixmap绘制
- painter.setPen(Qt::red);
- painter.setBrush(Qt::cyan);
- painter.drawRect(0,0,100,100);
- painter.drawEllipse(100,100,100,100);
- painter.end();
- painter.begin(this);
- painter.drawPixmap(100,100,pixmap);
-
- }

QPicture 类是一种绘制设备,用于记录和重播QPainter命令。QPicture与分辨率无关,即QPicture可以显示在不同的设备上
QPicture绘制图形:
- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter;
- QPicture picture;
- painter.begin(&picture);
- painter.drawRect(0,0,100,100);
- painter.drawEllipse(100,100,100,100);
- painter.end();
- painter.begin(this);
- painter.drawPicture(0,0,picture);
-
- }

重播图片:
注意重播只能使用.pic文件
先绘制一个图形,保存为.pic文件
- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter;
- QPicture picture;
- painter.begin(&picture);
- painter.drawEllipse(100,100,100,100);
- painter.end();
- picture.save("D:/picture.pic");
- painter.begin(this);
- painter.drawPicture(0,0,picture);
- }
然后进行重播
- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter;
- QPicture picture;
- picture.load("D:/picture.pic");
- painter.begin(this);
- painter.drawPicture(0,0,picture);
- }
QBitmap 类是一种单色屏幕外绘画设备,主要用于创建自定义QCursor和QBrush对象、构造QRegion对象以及为像素图和小部件设置蒙版。
QBitmap绘制图形:
- void Widget::paintEvent(QPaintEvent *event)
- {
- QPainter painter;
- QBitmap bitmap(200,200);
- painter.begin(&bitmap);
- painter.setBrush(Qt::cyan);
- painter.drawRect(0,0,100,100);
- painter.end();
- painter.begin(this);
- painter.drawPixmap(0,0,bitmap);
- }
