.h文件
#ifndef MYWIN_H
#define MYWIN_H
#include <QWidget>
#include <QPixmap>
#include <QMouseEvent>
#include <QPainter>
#include <QPaintEvent>
#include <QPen>
#include <QPushButton>
#include <QColor>
#include <QColorDialog>
#include <QFont>
#include <QFontDialog>
class MyWin : public QWidget
{
Q_OBJECT
public slots:
void my_color();//设置颜色的槽函数
void my_font();//设置字体的槽函数
public:
MyWin(QWidget *parent = nullptr);
~MyWin();
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void paintEvent(QPaintEvent *);
private:
QPixmap * myPix;//绘制类指针
QPoint startPoint;//起始位置
QPushButton* color_btn;//选择颜色按键
QPushButton* font_btn;//选择字体按键
QColor color;//颜色
QFont font;//字体
};
#endif // MYWIN_H
.cpp文件
#include "mywin.h"
//设置颜色的槽函数
void MyWin::my_color()
{
this->color = QColorDialog::getColor(Qt::white, this);
}
//设置字体的槽函数
void MyWin::my_font()
{
bool ok;
this->font = QFontDialog::getFont(&ok, this);
}
MyWin::MyWin(QWidget *parent)
: QWidget(parent)
{
this->resize(1024,768);//设置画板大小
// this->setFixedSize(1024,768);
myPix = new QPixmap(this->size());//将自定义的绘制板大小设置为画板大小
myPix->fill(Qt::white);//填充为白色
//设置颜色按键属性
color_btn = new QPushButton(this);
color_btn->setText("颜色");//名字
color_btn->resize(70,30);//大小
color_btn->move(this->width()-70,0);//位置
//设置字体按键属性
font_btn = new QPushButton(this);
font_btn->setText("字体");
font_btn->resize(70,30);
font_btn->move(width()-70, 30);
//连接对应槽函数
connect(color_btn, &QPushButton::clicked, this, &MyWin::my_color);
connect( font_btn, &QPushButton::clicked, this, &MyWin::my_font);
}
MyWin::~MyWin()
{
}
//鼠标移动事件
void MyWin::mousePressEvent(QMouseEvent *event)
{
startPoint = event->pos();//记录起点
}
void MyWin::mouseMoveEvent(QMouseEvent *event)
{
QPainter painter(myPix);//申请一个画家,在自定义的绘画板作画
QPen pen;//申请笔
pen.setColor(this->color);//设置笔的颜色
//设置笔的大小,单位是磅,因为最小字体还是有点粗,所以我给它减了6
pen.setWidth(this->font.pointSize()-6);
painter.setPen(pen);//给画家笔
painter.drawLine(startPoint, event->pos());//从起始位置到终止位置画直线
startPoint = event->pos();//更新起始位置
update();//刷新
}
//绘画事件
void MyWin::paintEvent(QPaintEvent *)
{
QPainter paiter(this);//申请一个画家,直接在窗口上画
paiter.drawPixmap(0,0,*myPix);//将自定义的绘画板的画画到窗口上
}
测试结果: