Qt版本:Qt6
具體代碼:
- 頭文件 dialog.h
#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>QT_BEGIN_NAMESPACE
namespace Ui {
class Dialog;
}
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic: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();
}