1. 程式人生 > >如何用Qt製作簡單的滑鼠繪圖畫板(支援匯出圖片)

如何用Qt製作簡單的滑鼠繪圖畫板(支援匯出圖片)

文章目錄


01 - 滑鼠繪圖效果

  GIF沒設定好,會有灰色陰影出現

02 - 基本思路

  

03 - 程式碼

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget
: public QWidget { Q_OBJECT public: 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視窗內容轉為QPixmap QSize picSize(28,28); //設定修改的大小為28*28 QPixmap 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