日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt绘制和保存成图片(手写签名)

發布時間:2024/9/27 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt绘制和保存成图片(手写签名) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

想要實現的是,手寫簽名的效果,最終把手寫的結果保存,也可以加上水印什么的。
在控件的 MouseButtonPress 和 MouseMove 事件中,保存繪制的路徑,然后再 Paint 重繪事件中繪制即可:

特別需要注意的是,QImage QPixmap構造時,只是分配了空間,但是沒有清空內存的,所以需要使用 fill() 填充圖像,否則可能會得到混亂的圖像.

QImage img(ui->widgetPaint->size(),QImage::Format_ARGB32);img.fill(Qt::white);


QPainter::setRenderHint((QPainter::Antialiasing,true))設置抗鋸齒.
QPen構造的參數可以設置繪制的線形、線條末端形狀、線條交匯處形狀等
.

QPainter painter(device);painter.setRenderHint(QPainter::Antialiasing,true);painter.setPen(QPen(Qt::black,7,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));


簡單的添加水印的代碼:
? ?

QImage img(ui->widgetPaint->size(),QImage::Format_ARGB32);img.fill(Qt::white);{//水印QImage bg("bg.png");QPainter painter(&img);int len = sqrt(img.width() * img.width() + img.height() * img.height());painter.rotate(-45);for(int i = -len / 2;i < len / 2;i += bg.width()){bool flag = true;for(int j = 0;j < len;j += bg.height()){painter.drawImage(flag ? i : i - bg.width() / 2,j,bg);flag = !flag;}}}Paint(&img);


加水印后保存的效果:


大概的代碼:
.h

?

#ifndef WIDGETSIGN_H #define WIDGETSIGN_H #include <QWidget> #include <vector> namespace Ui { class WidgetSign; } class WidgetSign : public QWidget {Q_OBJECT public:explicit WidgetSign(QWidget *parent = 0);~WidgetSign(); protected:bool eventFilter(QObject * obj, QEvent * event);void paintEvent(QPaintEvent *); private slots:void on_btnClear_clicked();void on_btnSave_clicked(); private:void Paint(QPaintDevice * device); private:Ui::WidgetSign * ui;QVector<QVector<QPoint> > vec_; }; #edif // WIDGETSIGN_H



.cpp

#include "WidgetSign.h" #include "ui_WidgetSign.h" #include "PublicStruct.h" #include <math.h> #include <QMouseEvent> #include <QPainter> #include <QBitmap> WidgetSign::WidgetSign(QWidget *parent) :QWidget(parent),ui(new Ui::WidgetSign) {ui->setupUi(this);ui->widgetPaint->installEventFilter(this); } WidgetSign::~WidgetSign() {delete ui; } bool WidgetSign::eventFilter(QObject * obj, QEvent * event) {if(obj == ui->widgetPaint){if(event->type() == QEvent::MouseButtonPress){vec_.push_back(QVector<QPoint>());vec_[vec_.size() - 1].push_back(((QMouseEvent *)event)->pos());ui->widgetPaint->update();}else if(event->type() == QEvent::MouseMove){vec_[vec_.size() - 1].push_back(((QMouseEvent *)event)->pos());ui->widgetPaint->update();}else if(event->type() == QEvent::Paint){Paint(ui->widgetPaint);}}return QWidget::eventFilter(obj,event); } void WidgetSign::on_btnClear_clicked() {vec_ = QVector<QVector<QPoint> >();ui->widgetPaint->update(); } void WidgetSign::on_btnSave_clicked() {if(vec_.size() <= 0){TOAST("請先簽名");return;}QImage img(ui->widgetPaint->size(),QImage::Format_ARGB32);img.fill(Qt::white);/*{//水印QImage bg("bg.png");QPainter painter(&img);int len = sqrt(img.width() * img.width() + img.height() * img.height());painter.rotate(-45);for(int i = -len / 2;i < len / 2;i += bg.width()){bool flag = true;for(int j = 0;j < len;j += bg.height()){painter.drawImage(flag ? i : i - bg.width() / 2,j,bg);flag = !flag;}}}*/Paint(&img);QString imgPath = "sign.png";bool ret = img.save(imgPath);TOAST(ret ? "簽名保存成功" : "簽名保存失敗"); } void WidgetSign::Paint(QPaintDevice * device) {QPainter painter(device);painter.setRenderHint(QPainter::Antialiasing,true);painter.setPen(QPen(Qt::black,7,Qt::SolidLine,Qt::RoundCap,Qt::RoundJoin));for(int i = 0;i < vec_.size();++i){for(int j = 0;j < vec_[i].size() - 1;++j){painter.drawLine(vec_[i][j],vec_[i][j + 1]);}} } void WidgetSign::paintEvent(QPaintEvent *) {QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }


————————————————
版權聲明:本文為CSDN博主「yangyang031213」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yangyang031213/article/details/102639958

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Qt绘制和保存成图片(手写签名)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。