重写绘图事件
案例
代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QPainter"
#include "QTimer"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//实现点击按钮向右移动图片
// connect(ui->pushButton,&QPushButton::clicked,[=](){
// posX+=20;
// //如果手动调用绘图事件 用update更新
// update();
// });
//使用定时器向右移动图片
QTimer *timer = new QTimer(this);
timer->start(100);
connect(timer,&QTimer::timeout,[=](){
posX+=20;
//如果手动调用绘图事件 用update更新
update();
});
}
void MainWindow::paintEvent(QPaintEvent *pe)
{
/************************绘图基本设置**************************************/
QPainter painter(this);
//设置画笔颜色
QPen pen(QColor(255,0,0));
//设置画笔宽度
pen.setWidth(5);
//设置画笔的风格
pen.setStyle(Qt::DotLine);
//让画家使用笔
painter.setPen(pen);
//设置画刷
QBrush brush(Qt::cyan);
//设置画刷的风格
brush.setStyle(Qt::Dense5Pattern);
//让画家使用画刷
painter.setBrush(brush);
//画线
painter.drawLine(QPoint(0,0),QPoint(100,100));
//画圆 椭圆
painter.drawEllipse(QPoint(100,100),50,50);
//画矩形
painter.drawRect(QRect(QPoint(20,20),QSize(50,50)));
//画笔的画字的时候需要用font来指定大小,指定画笔的宽度没有用
QFont font = painter.font();
font.setPixelSize(36);
painter.setFont(font);
//画文字
painter.drawText(QRect(10,200,400,100),"好好学习\n天天向上");
/************************绘图高级设置**************************************/
QPainter pinter2(this);
pinter2.drawEllipse(QPoint(100,400),50,50);
//设置抗锯齿能力 效率低
pinter2.setRenderHint(QPainter::Antialiasing);
pinter2.drawEllipse(QPoint(200,400),50,50);
pinter2.drawRect(200,500,50,50);
//参考坐标发生改变 从0,0到100,0
pinter2.translate(100,0);
//保存画家的状态
pinter2.save();
pinter2.drawRect(200,500,50,50);
pinter2.translate(100,0);
//还原保存画家的状态
pinter2.restore();
//这个矩形会被重叠,参考点的位置没有发生改变
pinter2.drawRect(200,500,50,50);
/************************利用画家绘制资源图片**************************************/
QPainter pinter3(this);
//posX在头文件中,作为全局变量
//如果超出屏幕宽度 从初始值(400)开始
if(posX > this->width())
{
posX = 400;
}
pinter3.drawPixmap(posX,200,QPixmap(":img/icon/b1.png"));
}
MainWindow::~MainWindow()
{
delete ui;
}
演示