实现简单画板
widget.cpp文件
#include "widget.h"
#include "ui_widget.h"
#include <QPixmap>
#include <QMouseEvent>
#include <QPainter>
#include <QPaintEvent>
#include <QPen>
#include <QColorDialog>
#include <QFontDialog>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->pushButton->setIcon(QIcon(":/icon/color.png"));
ui->pushButton_1->setIcon(QIcon(":/icon/font.png"));
//设置画笔尺寸
this->setFixedSize(1024,768);
//将自定义的绘制板设置为画笔大小
mypix=new QPixmap(this->size());
mypix->fill(Qt::white); //默认白色
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousePressEvent(QMouseEvent *e)
{
startpoint = e->pos();
}
void Widget::mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons()==Qt::LeftButton) //左键画图
{
//申请一个画家类
QPainter painter(mypix); // 依附于自定义的绘制板
//pen.setStyle();
//画笔给画家
painter.setPen(pen);
//开始绘制
painter.drawLine(startpoint,e->pos());
//当前点设置为新起点
startpoint=e->pos();
//实时更新
update();
}
else if(e->buttons()==Qt::RightButton) //右键变成橡皮擦,默认粗细是30
{
//申请一个画家类
QPainter painter(mypix);// 依附于自定义的绘制板
QPen pen1;
pen1.setColor(Qt::white);
pen1.setWidth(30);
//pen.setStyle();
//画笔给画家
painter.setPen(pen1);
//开始绘制
painter.drawLine(startpoint,e->pos());
//当前点设置为新起点
startpoint=e->pos();
//实时更新
update();
}
}
void Widget::paintEvent(QPaintEvent *)
{
//请一个画家依附于this画图板
QPainter painter(this);
//将自定义的绘制板画到画图板上
painter.drawPixmap(0,0,*mypix);
}
void Widget::on_pushButton_clicked() //按钮1修改线条颜色
{
QColor color = QColorDialog::getColor(Qt::black,this);
if(color.isValid())
{
pen.setColor(color);
}
}
void Widget::on_pushButton_1_clicked() //按钮2修改线条粗细
{
bool ok;
QFont font=QFontDialog::getFont(&ok,this);
if(ok)
{
pen.setWidth(font.pointSize()); //font.pointSize为字选择板块选定的size参数
}
}
void Widget::on_pushButton_2_clicked() //按钮3一键清屏
{
mypix->fill(Qt::white);
update();
}
widget.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPixmap>
#include <QPoint>
#include <QMouseEvent>
#include <QPen>
#include <QColorDialog>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
void mousePressEvent(QMouseEvent *e);
void mouseMoveEvent(QMouseEvent *e);
void paintEvent(QPaintEvent *);
private slots:
void on_pushButton_clicked();
void on_pushButton_1_clicked();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
QPixmap *mypix; //定义绘制类的指针
QPoint startpoint; //画笔的起始位置
QPen pen; //设置一个画笔
};
#endif // WIDGET_H
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
Ui界面