首先在.h文件中声明绘图事件,alt+enter进入widget进行声明。
void Widget::paintEvent(QPaintEvent *event)
{
//实例化一个画家对象
//在当前widget窗口下进行画画
QPainter painter(this);
//设置画刷
QBrush brush(Qt::cyan);
painter.setBrush(brush);
//设置画笔颜色
QPen pen(QColor(255,152,152));
//设置画笔风格
pen.setStyle(Qt::DotLine);
//设置画笔宽度
pen.setWidth(3);
//让画家使用这个笔
painter.setPen(pen);
//画线
painter.drawLine(QPoint(0,0),QPoint(200,400));
//画圆
painter.drawEllipse(QPoint(100,100),60,60);
//画矩形
painter.drawRect(QRect(QPoint(100,100),QSize(100,20)));
//画文字
painter.drawText(QRect(20,20,20,20),"123");
}
绘图事件高级设置
高质量抗锯齿
QPainter painter(this);
QPen pen;
pen.setWidth(3);
painter.setPen(pen);
painter.drawEllipse(QPoint(100,100),50,50);
painter.setRenderHint(QPainter::HighQualityAntialiasing);//高质量抗锯齿
painter.drawEllipse(QPoint(200,200),50,50);
保存画家状态、恢复画家状态
QPainter painter(this);
QPen pen;
pen.setWidth(3);
painter.setPen(pen);
//画矩形
painter.drawRect(20,20,20,20);
painter.translate(50,0);
//保存画家状态
painter.save();
painter.drawRect(20,20,20,20);
painter.translate(200,0);
painter.drawRect(20,20,20,20);
//恢复画家状态
painter.restore();
painter.drawRect(50,50,50,50);
保存画家状态,painter.save();保存当前画家的状态,以便后面之间回到原先的状态
恢复画家状态,painter.restore();恢复到画家保存时的状态。
在(50,0)的时候保存了画家的状态,画家在(50,0)的位置,在3矩形画完的时候进行画家状态恢复,从(50,0)开始画的第四个矩形。
利用QPainter画资源图片
QPainter painter(this);
painter.drawPixmap(posX,0,QPixmap(":/image/Pre employment management.png"));
1.添加按键,按键按下时图片移动
2.使用定时器,进行自动移动
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QTimer * timer = new QTimer(this);//定时器
//按钮按下图片移动
connect(ui->pushButton,&QPushButton::clicked,[=](){
posX+=20;
update();
});
//通过定时器开始自动移动
timer->start(50);
connect(timer,&QTimer::timeout,[=](){
posX+=20;
update();
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(posX,0,QPixmap(":/image/Pre employment management.png"));
if(posX>this->width())
{
posX = 0;
}
}
绘图设备:
1.QPixmap
定义一张名为pix的纸,将背景填充为白色,声明一个画家在pix上进行画画,画家画一个圆,将这个图片保存为E盘名为231.png的文件。
//在纸上画,得有纸的宽度长度
QPixmap pix(300,300);
pix.fill(Qt::white);//白色背景
//声明画家
QPainter painter(&pix);//往pix上画
painter.drawEllipse(QPoint(100,100),50,50);
//保存
pix.save("E:/image/231.png");
}
2.QImage(可以对像素点进行操作)
将图片加载到窗口中,在窗口中进行画画,
QPainter painter(this);
QImage img;
img.load(":/image/Pre employment management.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);
3.QPicture
QPicture是一个可以记录和重现QPainter命令的绘图设备
1.在构造函数中进行记录并保存
QPicture pic;
QPainter painter;//可以先不指定往哪里画
painter.begin(&pic);//开始往pic上画
painter.setPen(QPen(Qt::cyan));
painter.drawEllipse(QPoint(100,100),50,50);//画一个圆
painter.end();
pic.save("E:/image/231.zfc");//保存在E盘,后缀名可以随便写
2.在绘图事件里进行重现
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPicture pic;
pic.load("E:/image/231.zfc");
painter.drawPicture(100,100,pic);
}