一、先创建一个widget窗口
二、包含头文件
#include <QPainter>
#include <QFont>
三、在widget.h中声明paintEvent函数
使用画家类在窗口中画图, 操作必须在paintEvent函数中完成
#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:
/*
* 此函数不需要调用, 再刷新的时候会自动调用
* 什么时候窗口刷新:
* 1. 窗口显示的时候
* 2. 最大化, 最小化
* 3. 窗口被这遮挡, 重新显示的时候
* 4. 用户强制刷新的时候
* 5. ...........
* 如果想使用画家类在窗口中画图, 操作必须在paintEvent函数中完成
*/
void paintEvent(QPaintEvent *);
private:
Ui::Widget *ui;
int x;
};
#endif // WIDGET_H
四、在paintEvent函数中画图与写字
创建画家类对象和创建新画笔
// 创建画家类对象
QPainter painter(this); // 指定绘图设备
// 画家要有画笔才能画画
// 创建新画笔 -- 轮廓
QPen pen;
pen.setColor(QColor(0, 255, 0)); /*Qt::green*/
pen.setWidth(10); // 像素
pen.setStyle(Qt::DotLine);
// 将新画笔设置给画家类
painter.setPen(pen);
画直线
painter.drawLine(QPoint(100, 100), QPoint(300, 500)); //从A点坐标到B点坐标
画椭圆
painter.drawEllipse(QPoint(200, 200), 100, 50); //中心点坐标,rx,ry
画矩形
painter.drawRect(400, 200, 200, 200); //矩形左上角坐标x,y,宽,高
写字
// 写字
QFont font("华文彩云", 48, 75, true);
painter.setFont(font);
painter.drawText(100, 600, "我是中国人, 我爱我的祖国!!!");
【运行结果】
画刷
// 闭合区域使用画刷
QBrush brush(QPixmap(":/Image/face.png"));
painter.setBrush(brush);
painter.drawRect(400, 200, 400, 400);
画背景图
painter.drawPixmap(0, 0, QPixmap(":/Image/xks.png"));
【运行结果】
五、刷新窗口调用paintEvent函数实现移动图像
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:
Ui::Widget *ui;
int x;
};
#endif // WIDGET_H
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QFont>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
x = 20;
ui->setupUi(this);
connect(ui->move, &QPushButton::clicked, this, [=]()
{
// 刷新窗口
update(); // 系统调用paintEvent 函数
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
// 创建画家类对象
QPainter painter(this); // 指定绘图设备
// 画家要有画笔才能画画
// 创建新画笔 -- 轮廓
QPen pen;
pen.setColor(QColor(0, 255, 0)); //Qt::green
pen.setWidth(10); // 像素
pen.setStyle(Qt::DotLine);
// 将新画笔设置给画家类
painter.setPen(pen);
/*
// 画直线
painter.drawLine(QPoint(100, 100), QPoint(300, 500));
// 画椭圆
painter.drawEllipse(QPoint(200, 200), 100, 50);
// 画矩形
painter.drawRect(400, 200, 200, 200);
// 写字
QFont font("华文彩云", 48, 75, true);
painter.setFont(font);
painter.drawText(100, 600, "我是中国人, 我爱我的祖国!!!");
*/
// 闭合区域使用画刷
QBrush brush(QPixmap(":/Image/face.png"));
painter.setBrush(brush);
painter.drawRect(400, 200, 400, 400);
// 画背景图
// painter.drawPixmap(0, 0, QPixmap(":/Image/xks.png"));
// 提供笑脸
x += 5;
//超出边框会自动回到原位
if(x > this->width())
{
x = 20;
}
painter.drawPixmap(x, 100, QPixmap(":/Image/sunny.png"));
}