Qt简易绘画版

.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);//将自定义的绘画板的画画到窗口上

}

测试结果:

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傾语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值