widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMoveEvent>
#include <QPaintEvent>
#include <QPainter>
#include <QPoint> //点类
#include <QPixmap> //图像容器
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
//声明要重写的函数
void mouseMoveEvent(QMouseEvent *event)override;
void mousePressEvent(QMouseEvent *event)override;
void paintEvent(QPaintEvent *event)override;
private:
Ui::Widget *ui;
QPoint startPoint; //定义起始点坐标
QPixmap * pix; //定义一个图像容器
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//实例化一个图像容器
pix = new QPixmap(this->size());
pix->fill(Qt::white); //ui背景默认白色
}
Widget::~Widget()
{
delete ui;
}
//鼠标移动事件处理函数的定义
void Widget::mouseMoveEvent(QMouseEvent *event)
{
//定义一个画家,在pix上面作画
QPainter p1(pix);
//定义画笔
QPen pen1(Qt::SolidLine); //使用实线solidline
pen1.setColor(QColor(53,210,215)); //设置画笔颜色
pen1.setWidth(4); //设置画笔的粗细
//给画家设置画笔
p1.setPen(pen1);
//持续在两点之间画一条直线
p1.drawLine(startPoint,event->pos());
//更新起始点
startPoint = event->pos();
//调用update将刚刚绘制的图像映射到ui界面上
this->update();
}
//鼠标按压事件处理函数的定义
void Widget::mousePressEvent(QMouseEvent *event)
{
//获取鼠标的起始点位置
startPoint = event->pos();
}
//绘制事件处理函数定义
void Widget::paintEvent(QPaintEvent *event)
{
//定义第二个画家,在ui界面上作画
QPainter p2(this);
//将pix上面的图 画到ui界面上
p2.drawPixmap(this->rect(),*pix);
}
result