QT窗口绘图,重写绘图事件QPaintEvent

如果在窗口绘图,必须在绘图事件里实现,绘图事件内部自动调用,窗口需要重绘的时候(状态改变)
widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include 
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();
private:
    Ui::Widget *ui;
    int x;
protected:
    //重写绘图事件,虚函数
    //如果在窗口绘图,必须放在绘图事件里实现
    //绘图事件内部自动调用,窗口需要重绘的时候(状态改变)
    void paintEvent(QPaintEvent *);
private slots:
    void on_pushButton_clicked();
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include
#include
#include

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    x=0;
}
Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
    //创建画家对象,并指定当前窗口为绘图设备
    QPainter p(this);

    //设置背景图片,../是上一级文件夹
    //p.drawPixmap(0,0,width(),height(),QPixmap("../images/bg.jpg"));
    //另一种写法,rect()获取矩形区域
    //p.drawPixmap(rect(),QPixmap("../images/bg.jpg"));
    //定义画笔
    QPen pen;
    pen.setWidth(5);//设置画笔宽度
    //pen.setColor(Qt::red);//设置画笔颜色
    pen.setColor(QColor(14,9,234));//RGB设置颜色
    pen.setStyle(Qt::DashLine);//设置风格(虚线)
    //定义画刷
    QBrush brush;
    brush.setColor(Qt::red);//设置颜色
    brush.setStyle(Qt::Dense1Pattern);//设置样式
    //把画刷交给画家
    p.setBrush(brush);
    //把画笔交给画家
    p.setPen(pen);
    //画直线
    p.drawLine(50,50,150,50);
    p.drawLine(50,50,50,150);
    //画矩形
    p.drawRect(150,150,100,50);

    //画圆形
    p.drawEllipse(QPoint(150,150),50,25);
    p.drawPixmap(x,200,80,80,QPixmap("../images/xiaolian.jpg"));
}
void Widget::on_pushButton_clicked()
{
    x += 20;
    if(x > width())
    {
        x=0;
    }
    //刷新窗口,让整个窗口重绘
    //间接调用paintEvent();
    update();
}

你可能感兴趣的:(QT)