Qt涂鸦板

发布于:2024-07-05 ⋅ 阅读:(13) ⋅ 点赞:(0)

Qt版本:Qt6

具体代码:

  1. 头文件 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
  1. 源文件 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(); // 触发窗口的重绘--更新画板
    }
}
  1. 源文件 main.cpp
#include "dialog.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

网站公告

今日签到

点亮在社区的每一天
去签到