2022-9-2 QT实现画板(能改变画笔大小,颜色)

用QT实现画板功能,代码如下

首先是头文件部分代码

#ifndef MYWND_H
#define MYWND_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 


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 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    mywnd w;
    w.show();
    return a.exec();
}

下面是运行的内容

2022-9-2 QT实现画板(能改变画笔大小,颜色)_第1张图片2022-9-2 QT实现画板(能改变画笔大小,颜色)_第2张图片

 

 

你可能感兴趣的:(C,qt,开发语言,ui)