QT+QZXing二维码(绘制文字)生成及解析

环境

Qt 5.4.2
QZXing

功能

QT 二维码生成及解析,二维码底部绘制文字

QZXing

  1. 下载QZXing 并使用QT 编译
    编译完成后需要的文件:
    在这里插入图片描述
    在这里插入图片描述

源码

1.引入库文件及H文件
在这里插入图片描述
2.修改 Pro 文件

新增:

  INCLUDEPATH +=$$PWD/qzxing/include
  LIBS +=$$PWD/qzxing/libQZXing3.a 
  DEFINES += ENABLE_ENCODER_GENERIC

3.mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT
private:
    QString sFilePath;
private:
    QImage TxtInfoImages(QString message);
    QImage QZXInfoImages(QString message);
    QImage MergeImages(QImage image1, QImage image2);
private slots:
    void on_pushButton_Encode_clicked();
    void on_pushButton_Save_clicked();
    void on_pushButton_load_clicked();
    void on_pushButton_Dncode_clicked();
};
#endif // MAINWINDOW_H

4.mainwindow.cpp

QImage MainWindow::TxtInfoImages(QString message)
{
    QImage txtImg(DEF_QRWIDTH, 20, QImage::Format_ARGB32);
    txtImg.fill(Qt::white);

    QPainter painter;  //绘制文字
    painter.begin(&txtImg);
    painter.setPen(QColor(0, 0, 0)); 
    QFont font = painter.font();
    font.setBold(true);
    font.setPointSize(12);
    painter.setFont(font);

    // 计算文字位置,此处为放在二维码右下角
    QRect textRect = txtImg.rect();
    textRect.setWidth(DEF_QRWIDTH); // 根据二维码大小调整文字宽度
    textRect.setHeight(20);         // 根据二维码大小调整文字高度
    textRect.moveBottomLeft(txtImg.rect().topLeft()+ QPoint(0, 15) ); // 设置文字位置
    painter.drawText(textRect, Qt::AlignCenter, message);
    painter.end();
    return txtImg;
}

QImage MainWindow::QZXInfoImages(QString message)
{
    QImage qzxImg = QZXing::encodeData(message
                                    ,QZXing::EncoderFormat_QR_CODE
                                    ,QSize(DEF_QRWIDTH,DEF_QRHEIGHT)
                                    ,QZXing::EncodeErrorCorrectionLevel_H
                                    ,true
                                    ,false);
    return qzxImg;
}


QImage MainWindow::MergeImages(QImage image1, QImage image2)
{
    QImage merged(QSize(image1.width(),image1.height() + image2.height()), QImage::Format_ARGB32);
    merged.fill(Qt::transparent);
    QPainter painter(&merged);
    painter.drawImage(QPoint(0, 0), image1);
    painter.drawImage(QPoint(0, image1.height()), image2);
    painter.end();
    return merged;
}

void MainWindow::on_pushButton_Encode_clicked()
{
    if(ui->textEdit_EMsg->toPlainText() == "") { return; }
    QImage image1 = QZXInfoImages(ui->textEdit_EMsg->toPlainText());
    QImage image2;
    QImage image3 = image1;
    if(ui->textEdit_TxtInf->toPlainText() != "")
    {
        image2 = TxtInfoImages(ui->textEdit_TxtInf->toPlainText());
        image3 = MergeImages(image1,image2);
    }
    ui->label_EImage->setPixmap(QPixmap::fromImage(image3));
}

void MainWindow::on_pushButton_Save_clicked()
{
    QString fileName = QFileDialog::getSaveFileName(this,
                                                    "Save File",
                                                     sFilePath,
                                                     "image Files (*.jpg *.png)");
    if("" != fileName)
    {
        sFilePath = fileName.mid(0,fileName.lastIndexOf("/")+1);
        QImage img = ui->label_EImage->pixmap()->toImage();
        img.save( fileName, 0, 100);
    }
}

void MainWindow::on_pushButton_load_clicked()
{
    QString sPath = QFileDialog::getOpenFileName(
                   this,//指定父窗口
                   "打开数据文件",//打开文件对话框的标题
                    sFilePath,//打开目录,"." 表示当前目录
                   "image Files (*.jpg *.png)"
                   );
       if("" != sPath)
       {
           sFilePath = sPath.mid(0,sPath.lastIndexOf("/")+1);
           QImage image;
           image.load(sPath);
           ui->label_DImage->setPixmap(QPixmap::fromImage(image));
       }
}

void MainWindow::on_pushButton_Dncode_clicked()
{
    QImage img = ui->label_DImage->pixmap()->toImage();

    if(img.isNull())
    {
        return;
    }

    QZXing decode;
    decode.setDecoder(QZXing::DecoderFormat_QR_CODE);
    decode.setSourceFilterType(QZXing::TryHarderBehaviour_ThoroughScanning|QZXing::TryHarderBehaviour_Rotate);
    decode.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
    QString info = decode.decodeImage(img);
    ui->textEdit_DMsg->setText(info);
}

运行

在这里插入图片描述
在这里插入图片描述

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值