代码如下:
PaintToolWindow.h
#ifndef PAINTTOOLWINDOW_H
#define PAINTTOOLWINDOW_H
#include <QMainWindow>
#include <QPainter>
#include <QMouseEvent>
#include <QFileDialog>
namespace Ui {
class PaintToolWindow;
}
class PaintToolWindow : public QMainWindow
{
Q_OBJECT
public:
explicit PaintToolWindow(QWidget *parent = nullptr);
~PaintToolWindow();
//添加回调函数
virtual void mousePressEvent(QMouseEvent *event);
virtual void mouseMoveEvent(QMouseEvent *event);
virtual void mouseReleaseEvent(QMouseEvent *event);
virtual void paintEvent(QPaintEvent *event);
virtual void resizeEvent(QResizeEvent *event);
private:
Ui::PaintToolWindow *ui;
//添加类对象
QImage image;
bool drawing;
QPoint lastPoint;
int brushSize;
QColor brushColor;
private slots:
void on_actionSave_triggered();
void on_actionClear_triggered();
void on_action2px_triggered();
void on_action5px_triggered();
void on_action10px_triggered();
void on_actionBlack_triggered();
void on_actionWhite_triggered();
void on_actionRed_triggered();
void on_actionGreen_triggered();
void on_actionBlue_triggered();
};
#endif // PAINTTOOLWINDOW_H
PaintToolWindow.cpp
#include "painttoolwindow.h"
#include "ui_painttoolwindow.h"
#include <QDebug>
PaintToolWindow::PaintToolWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::PaintToolWindow)
{
ui->setupUi(this);
//初始化
image = QImage(this->size(), QImage::Format_RGB32);
image.fill(Qt::white);
drawing = false;
brushColor = Qt::black;
brushSize = 2;
}
PaintToolWindow::~PaintToolWindow()
{
delete ui;
}
void PaintToolWindow::mousePressEvent(QMouseEvent *event)
{
qDebug() << "mouse press";
if(event->button() == Qt::LeftButton){
drawing = true;
lastPoint = event->pos();
}
}
void PaintToolWindow::mouseMoveEvent(QMouseEvent *event)
{
qDebug() << "mouse move";
if((event->buttons() & Qt::LeftButton) && drawing)
{
qDebug() << "mouse move and paint";
QPainter painter(&image);
painter.setPen(QPen(brushColor, brushSize, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
painter.drawLine(lastPoint, event->pos());
lastPoint = event->pos();
this->update();
}
}
void PaintToolWindow::mouseReleaseEvent(QMouseEvent *event)
{
qDebug() << "mouse release";
if(event->button() == Qt::LeftButton)
{
drawing = false;
}
}
void PaintToolWindow::paintEvent(QPaintEvent *event)
{
QPainter canvasPainter(this);
canvasPainter.drawImage(this->rect(), image, image.rect());
}
void PaintToolWindow::resizeEvent(QResizeEvent *event)
{
}
void PaintToolWindow::on_actionSave_triggered()
{
QString filePath = QFileDialog::getSaveFileName(this, "保存图像", "", "PNG(*.png);;JPEG(*.jpg *.jpeg);;All files(*.*)");
if(filePath == "")
return;
image.save(filePath);
}
void PaintToolWindow::on_actionClear_triggered()
{
image.fill(Qt::white);
this->update();
}
void PaintToolWindow::on_action2px_triggered()
{
brushSize = 2;
}
void PaintToolWindow::on_action5px_triggered()
{
brushSize = 5;
}
void PaintToolWindow::on_action10px_triggered()
{
brushSize = 10;
}
void PaintToolWindow::on_actionBlack_triggered()
{
brushColor = Qt::black;
}
void PaintToolWindow::on_actionWhite_triggered()
{
brushColor = Qt::white;
}
void PaintToolWindow::on_actionRed_triggered()
{
brushColor = Qt::red;
}
void PaintToolWindow::on_actionGreen_triggered()
{
brushColor = Qt::green;
}
void PaintToolWindow::on_actionBlue_triggered()
{
brushColor = Qt::blue;
}
PaintToolWindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>PaintToolWindow</class>
<widget class="QMainWindow" name="PaintToolWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Paint Tool</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>26</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
<property name="title">
<string>File</string>
</property>
<addaction name="actionSave"/>
<addaction name="actionClear"/>
</widget>
<widget class="QMenu" name="menuBrush_Size">
<property name="title">
<string>Brush Size</string>
</property>
<addaction name="action2px"/>
<addaction name="action5px"/>
<addaction name="action10px"/>
</widget>
<widget class="QMenu" name="menuBrush_Color">
<property name="title">
<string>Brush Color</string>
</property>
<addaction name="actionBlack"/>
<addaction name="actionWhite"/>
<addaction name="actionRed"/>
<addaction name="actionGreen"/>
<addaction name="actionBlue"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuBrush_Size"/>
<addaction name="menuBrush_Color"/>
</widget>
<widget class="QStatusBar" name="statusbar"/>
<action name="actionSave">
<property name="text">
<string>Save</string>
</property>
</action>
<action name="actionType_Here">
<property name="text">
<string>Type Here</string>
</property>
</action>
<action name="actionAdd_Separator">
<property name="text">
<string>Add Separator</string>
</property>
</action>
<action name="action2px">
<property name="text">
<string>2px</string>
</property>
</action>
<action name="action5px">
<property name="text">
<string>5px</string>
</property>
</action>
<action name="action10px">
<property name="text">
<string>10px</string>
</property>
</action>
<action name="actionType_Here_2">
<property name="text">
<string>Type Here</string>
</property>
</action>
<action name="actionAdd_Separtor">
<property name="text">
<string>Add Separtor</string>
</property>
</action>
<action name="actionBlack">
<property name="text">
<string>Black</string>
</property>
</action>
<action name="actionWhite">
<property name="text">
<string>White</string>
</property>
</action>
<action name="actionRed">
<property name="text">
<string>Red</string>
</property>
</action>
<action name="actionGreen">
<property name="text">
<string>Green</string>
</property>
</action>
<action name="actionBlue">
<property name="text">
<string>Blue</string>
</property>
</action>
<action name="actionClear">
<property name="text">
<string>Clear</string>
</property>
</action>
</widget>
<resources/>
<connections/>
</ui>
运行结果如下:
多谢,亲爱的美美。