300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 如何用Qt制作简单的鼠标绘图画板(支持导出图片)

如何用Qt制作简单的鼠标绘图画板(支持导出图片)

时间:2023-06-16 20:57:02

相关推荐

如何用Qt制作简单的鼠标绘图画板(支持导出图片)

文章目录

01 - 鼠标绘图效果02 - 基本思路03 - 代码widget.hwidget.cppUI

01 - 鼠标绘图效果

GIF没设置好,会有灰色阴影出现

02 - 基本思路

03 - 代码

widget.h

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>namespace Ui {class Widget;}class Widget : public QWidget{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void mousePressEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);void mouseMoveEvent(QMouseEvent *event);void paintEvent(QPaintEvent *event);private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::Widget *ui;bool press;QPoint point;QList<QPoint> point_list;};#endif // WIDGET_H

widget.cpp

#include "widget.h"#include "ui_widget.h"#include <QMouseEvent>#include <QPainter>#include <QSize>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);setMouseTracking(true);this->press = false;}Widget::~Widget(){delete ui;}//绘画,每次update的时候执行void Widget::paintEvent(QPaintEvent *event){QPainter painter(this); //创建画板,画板附着在对象this上,也就是Widget窗口QPen mypen; //创建画笔mypen.setWidth(15); //点的大小mypen.setColor(Qt::black);//点的颜色painter.setPen(mypen);//画板设置画笔int i = 0; //把每一次鼠标移动的地方进行画点while(point_list.size()!=0 && i != point_list.size()){painter.drawPoint(point_list.at(i));i++;}}//鼠标左键按下,开始记录坐标void Widget::mousePressEvent(QMouseEvent *event){if(event->button() == Qt::LeftButton){this->press = true;}}//鼠标移动事件void Widget::mouseMoveEvent(QMouseEvent *event){if(event->buttons() & Qt::LeftButton){if(this->press)//只有鼠标被按下的时候才记录坐标{point = event->pos(); //记录坐标point_list.append(point); //记录每一次移动的坐标update(); //更新,让画笔画画}}}//鼠标松开,停止记录void Widget::mouseReleaseEvent(QMouseEvent *event){if(event->button()==Qt::LeftButton){this->press = false;}}//确定按键void Widget::on_pushButton_clicked(){QPixmap pixmap = QPixmap::grabWidget(this);//把Widget窗口内容转为QPixmapQSize picSize(28,28); //设置修改的大小为28*28QPixmap ret = pixmap.scaled(picSize); //重新修改QPixmap的大小ret.save("C:\\Users\\Administrator\\Desktop\\num.png"); //保存QPixmap为png图片}//清除按键void Widget::on_pushButton_2_clicked(){point_list.clear();//清空鼠标坐标记录update();//更新,让画笔画画}

UI

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。