用QT实现画板功能,代码如下
首先是头文件部分代码
#ifndef MYWND_H
#define MYWND_H
#include <QWidget>
#include <QPixmap>
#include <QPoint>
#include <QMouseEvent>
#include <QPen>
#include <QPaintEvent>
#include <QPainter>
#include <QPushButton>
#include <QFont>
#include <QFontDialog>
#include <QColor>
#include <QColorDialog>
#include <QDebug>
#include <QMessageBox>
#include <QString>
#include <QChar>
QT_BEGIN_NAMESPACE
namespace Ui { class mywnd; }
QT_END_NAMESPACE
class mywnd : public QWidget
{
Q_OBJECT
signals:
void signal_1();
public slots:
void showMes();
void say_mes();
void chg_pen();
public:
mywnd(QWidget *parent = nullptr);
~mywnd();
void mousePressEvent(QMouseEvent *e); //鼠标按下事件
void mouseMoveEvent(QMouseEvent *e); //鼠标移动事件
void paintEvent(QPaintEvent *e); //绘制事件
private:
Ui::mywnd *ui;
QPixmap *myPix; //定义绘制类的指针
QPoint startPoint; //画笔的起始位置
QPushButton *btn1; //用于更改颜色
QPushButton *btn2; //用于关闭画板
QPushButton *btn3; //用于调整画笔粗细
QColor color; //画笔颜色
QFont font; //画笔粗细
QString text1;
double pensize; //画笔粗细调整
// Ui::Widget *ui;
};
#endif // MYWND_H
后面是mywnd.cpp部分的代码
#include "mywnd.h"
#include "ui_mywnd.h"
void mywnd::showMes()
{
//btn1->setEnabled(false);
color =QColorDialog::getColor(Qt::white,this); //选择画笔颜色
}
//处理自定义信号的槽函数
void mywnd::say_mes()
{
// speech.say(btn2->text());
this->close();
}
//负责改变画笔的粗细
void mywnd::chg_pen()
{
QString str=ui->lineEdit->text();
this->pensize=str.toDouble();
}
mywnd::mywnd(QWidget *parent)
: QWidget(parent)
, ui(new Ui::mywnd)
{
ui->setupUi(this);
//设置画板尺寸
this->setFixedSize(1024,768);
//this->setMaximumSize(1000,500);
//this->setMinimumSize(500,400);
myPix = new QPixmap(this->size()); //将自定义的绘制版大小设置为画板大小
myPix->fill(Qt::white); //默认将自定义绘制版填充为白色
//this->setBackgroundRole(QPalette::ColorRole(""));
//this->setStyleSheet("background-image:url(:/image/7.jpg);");
//设置按钮1负责更改画笔颜色
btn1 = new QPushButton(this);
btn1->resize(100,50);
btn1->setParent(this);
btn1->move(0,height()-50);
btn1->setText("更改画笔颜色");
//连接按钮1
connect(btn1,&QPushButton::clicked,this,&mywnd::showMes);
//设置按钮2负责关闭画板
btn2 = new QPushButton(this);
btn2->move(btn1->width(),height()-50);
btn2->resize(btn1->size());
btn2->setText("关闭画板");
//连接按钮2
connect(btn2,&QPushButton::clicked,this,&mywnd::say_mes);
//设置按钮三负责更改画笔粗细
btn3 = new QPushButton("改变粗细",this);
btn3->resize(btn1->size());
btn3->move(btn1->width()+btn2->width(),height()-50);
//连接按钮3
connect(btn3,&QPushButton::clicked,this,&mywnd::chg_pen);
//发射信号
connect(btn3,&QPushButton::clicked,[&]()
{
emit signal_1();
});
//将自定义的信号连接到自定义槽
connect(this,&mywnd::signal_1,this,&mywnd::chg_pen);
}
mywnd::~mywnd()
{
delete ui;
}
void mywnd::mousePressEvent(QMouseEvent *e) //鼠标按下事件
{
startPoint=e->pos();
}
void mywnd::mouseMoveEvent(QMouseEvent *e) //鼠标移动事件
{
//申请一个画家类
QPainter painter(myPix); //依附于自定义的画板
QPen pen;
//此处需要添加画板自定义颜色
//pen.setColor(Qt::green);
pen.setColor(color);
//此处需要设置画笔粗细
//pen.setWidth(10);
pen.setWidth(pensize);
//pen.setStyle()
painter.setPen(pen);
//开始画线
painter.drawLine(startPoint,e->pos());
//将当前点设为新的起点
startPoint =e->pos();
//实时更新
update();
}
void mywnd::paintEvent(QPaintEvent *) //绘制事件
{
//1.请一个画家,依附于this画板
QPainter painter(this);
//2.将自定义的绘制版
painter.drawPixmap(0,0,*myPix);
}
最后是main.cpp部分的代码
#include "mywnd.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
mywnd w;
w.show();
return a.exec();
}
下面是运行的内容
文章来源地址https://www.toymoban.com/news/detail-544321.html文章来源:https://www.toymoban.com/news/detail-544321.html
到了这里,关于2022-9-2 QT实现画板(能改变画笔大小,颜色)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!