绘图事件
//绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
//实例化画家对象 this指定的是绘图设备
QPainter painter(this);
//设置画笔
QPen pen(Qt::cyan);
//设置画笔宽度
pen.setWidth(2);
//设置画笔风格
pen.setStyle(Qt::DashLine);
//关联画笔
painter.setPen(pen);
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(0,0,100,100));
//画文字
painter.drawText(QRect(10,200,100,20),"努力学习");
}
设置抗锯齿
//绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawEllipse(QPoint(100,50),50,50);
//设置抗锯齿能力 效率较低
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,50),50,50);
}
移动初始位置 保存画家状态
//绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
//画矩形
painter.drawRect(QRect(20,20,50,50));
//画家水平移动100
painter.translate(100,0);
painter.drawRect(QRect(20,20,50,50));
//save painter state
painter.save();
//画家水平移动100
painter.translate(100,0);
//restore painter state
painter.restore();
painter.drawRect(QRect(20,20,50,50));
}
重绘事件
#include "widget.h"
#include "ui_widget.h"
#include "QPainter"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//点击按钮,移动图片
connect(ui->pushButton,&QPushButton::clicked,[=]()
{
//重绘事件会调用绘图事件
Widget::update();
});
}
Widget::~Widget()
{
delete ui;
}
//绘图事件
void Widget::paintEvent(QPaintEvent *event)
{
posX+=10;
QPainter painter(this);
painter.drawPixmap(posX,0,QPixmap(":/Liny.png"));
//创建QPixmap对象 缩放pixmap
QPixmap pixmap;
//加载图片
pixmap.load(":/PlayLevelSceneBg.png");
//绘制背景图
painter.drawPixmap(0,0,this->width(),this->height(),pixmap);
//加载标题
pixmap.load(":/Title.png");
//缩放图片
pixmap=pixmap.scaled(pixmap.width()*0.5,pixmap.height()*0.5);
//绘制标题
painter.drawPixmap(10,30,pixmap.width(),pixmap.height(),pixmap);
}
绘图设备
QPixmap:专门为不同平台做了优化
#include "widget.h"
#include "ui_widget.h"
#include "QPainter"
#include "QPixmap"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//pixmap绘图设备 指定绘图设备大小
QPixmap pix(300,300);
//填充颜色
pix.fill(Qt::white);
//申明画家,绘图设备指定QPixmap
QPainter painter(&pix);
painter.drawEllipse(QPoint(100,100),50,50);
//输出到了文件中 而不是在窗口上
pix.save("D:\\1.png");
}