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()<
实现不规则窗体,鼠标右键窗体关闭窗口,左键长按可以拖动窗口
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
}
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);
}