如果在窗口绘图,必须在绘图事件里实现,绘图事件内部自动调用,窗口需要重绘的时候(状态改变)
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
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<QPainter>
#include<QPen>
#include<QBrush>
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();
}