绘图事件QPainter
绘图事件(需要重写的函数):paintEvent
声明一个画家对象 QPainter painter(this) 指定绘图设备
画线,画圆,画矩形,画文字
可设置画笔,画刷
#include <QPainter>
......
void paintEvent(QPaintEvent *);
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawLine(QPoint(0,0),QPoint(100,100));
painter.drawEllipse(QPoint(100,100),50,50);
painter.drawRect(QRect(20,20,50,50));
painter.drawText(QRect(10,200,100,50),"举例举例举例举例举例举例");
QPen pen(QColor(255,0,0));
painter.setPen(pen);
painter.drawRect(QRect(150,150,30,30));
QBrush brush(QColor(0,255,0));
painter.setBrush(brush);
painter.drawRect(QRect(300,300,30,30));
}

QPainter高级设置
1.抗锯齿,效率低,清晰度提高:
painter.setRenderHint(QPainter::Antialiasing);
2.对画家移动:painter.translate(100,0);
3.保存状态,还原状态
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawEllipse(QPoint(100,50),50,50);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawEllipse(QPoint(200,50),50,50);
painter.drawRect(QRect(200,200,30,30));
painter.translate(100,0);
painter.drawRect(QRect(200,200,30,30));
painter.translate(100,0);
painter.restore();
painter.drawRect(QRect(200,200,30,30));
}

手动调用绘图事件
先导入资源图片;
如果需要手动调用绘图事件,利用update
利用画家画图片 painter.drawPixmap()
void paintEvent(QPaintEvent *);
int PosX=0;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,&QPushButton::clicked,[=](){
PosX += 20;
update();
});
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
if(PosX>this->width())
{
PosX = 0;
}
painter.drawPixmap(PosX,100,QPixmap(":/1.jpg"));
}