Qt版本:Qt6
具体代码:
- 头文件 dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui {
class Dialog;
}
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
private:
QPixmap pix;
QPoint lastPoint;//记录鼠标位置
QPoint endPoint;//记录鼠标位置
protected:
void paintEvent(QPaintEvent *);
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
void mouseReleaseEvent(QMouseEvent *);
};
#endif // DIALOG_H
- 源文件 dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include <QPixmap>
#include <QPoint>
#include <QPainter>
#include <QMouseEvent>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
//设置窗口大小
resize(600, 500);
//设置画布大小和背景
pix = QPixmap(200, 200);
pix.fill(Qt::white);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.drawPixmap(0, 0, pix); // 将绘制的图像绘制到窗口上
}
void Dialog::mousePressEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton)//==:鼠标事件的掩码信息与LeftButton标记信息相等即表示鼠标坐点击
{
lastPoint = e->pos(); // 记录鼠标点击的起始点
}
}
void Dialog::mouseMoveEvent(QMouseEvent *e)
{
if (e->buttons() & Qt::LeftButton)//&:鼠标事件的掩码信息中包含有LeftButton标记信息即表示鼠标在移动
{
QPainter painter(&pix); // 创建一个QPainter对象,并将其绑定到pix上
painter.setPen(QPen(Qt::black, 3)); // 设置画笔颜色和线宽
painter.drawLine(lastPoint, e->pos()); // 在pixmap上绘制线条
lastPoint = e->pos(); // 更新lastPoint为当前鼠标位置
update(); // 触发窗口的重绘--更新画板
}
}
void Dialog::mouseReleaseEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton)
{
QPainter painter(&pix); // 创建一个QPainter对象,并将其绑定到pix上
painter.setPen(QPen(Qt::black, 3)); // 设置画笔颜色和线宽
painter.drawLine(lastPoint, e->pos()); // 在pixmap上绘制线条
update(); // 触发窗口的重绘--更新画板
}
}
- 源文件 main.cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}