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 = 0);
~Widget();
protected:
//重写绘图事件
//如果在窗口绘图,必须放在绘图事件里面实现
//绘图事件内部自动调用,窗口需要重绘的时候(状态改变)
void paintEvent(QPaintEvent *);
private slots:
void on_pushButton_clicked();//按钮事件,点击按钮,页面刷新
private:
Ui::Widget *ui;
int x;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QPaintEvent>
#include <QPen>//画笔
#include <QBrush>//填充颜色
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
x=0;
}
void Widget::paintEvent(QPaintEvent *){
//方法一:QPainter p(this);
//方法二:
QPainter p;//创建画画对象
p.begin(this);//指定当前窗口为绘图设备
//绘图操作
//绘制背景图
p.drawPixmap(0,0,width(),height(),QPixmap("C:\\Users\\19a405\\Desktop\\pic\\pic1.jpg"));
//或
//p.drawPixmap(rect(),QPixmap("C:\\Users\\19a405\\Desktop\\pic\\pic1.jpg"));
//定义画笔
QPen pen;
pen.setWidth(2);//设置线宽
pen.setStyle(Qt::DashLine);
pen.setColor(QColor(150,100,50));
p.setPen(pen);//把画笔交给画家
//设置填充色
QBrush brush;
brush.setColor(Qt::lightGray);
brush.setStyle(Qt::Dense4Pattern);
//把填充给画家
p.setBrush(brush);
//画直线
p.drawLine(50,50,150,50);
p.drawLine(50,50,50,150);
//画矩形
p.drawRect(50,50,100,100);
//画圆形
p.drawEllipse(QPoint(100,100),50,50);
//画笑脸
p.drawPixmap(x,50,50,45,QPixmap("../picture/1645759305696.jpg"));//上一级信息
p.end();
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
x+=20;
if(x>width())
x=0;
//刷新窗口,让窗口重绘,整个窗口刷新
update();//间接调用paintEvent()方法
}