• 基于Qt的二维码生成与识别


    基于Qt的二维码生成与识别

    一、获取QZxing开源库

    1.通过封装的QZxing开源库生成和识别二维码,下载地址:GitCode - 开发者的代码家园icon-default.png?t=N7T8https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。

    2.下载解压后,使用Qt Creator xx(qt编程软件)打开src目录下的QZXing.pro文件并运行代码,在编译的debug路径下获取QZXing3.dll和libQZXing3.a库文件。

    二、添加封装的库文件

    1.在.pro文件夹下添加库文件qzxing文件夹,存放QZXing3.dll和libQZXing3.a库文件2个。

    2.添加头文件,可以直接拷贝到.pro同目录,即拷贝QZXing.h和QZXing_global.h。

    3.在.pro文件中添加如下圈红的部分。

    三、二维码生成与识别程序

    1.添加头文件:将QZXing.h和QZXing_global.h头文件条件到新建的程序中

    2.UI界面设计

    3.主程序设计代码--通过按钮触发信号槽进行演示,即创建3个按钮的.CPP程序文件,详见代码内容:

    1. //mainwindow.cpp文件
    2. #include "mainwindow.h"
    3. #include "ui_mainwindow.h"
    4. #include
    5. #include
    6. MainWindow::MainWindow(QWidget *parent)
    7. : QMainWindow(parent)
    8. , ui(new Ui::MainWindow)
    9. {
    10. ui->setupUi(this);
    11. }
    12. MainWindow::~MainWindow()
    13. {
    14. delete ui;
    15. }
    16. //3点击按钮 识别二维码内容
    17. void MainWindow::on_pushButton_clicked()
    18. {
    19. //2.识别二维码
    20. QImage img;
    21. //QString path= qApp->applicationDirPath()+"//file.png";
    22. //第一个参数:标准文件对话框的父窗口;第二个参数:标准文件对话框的标题;第三个参数:指定默认的目录;第四个参数:文件过滤器
    23. //QString path = QFileDialog::getOpenFileName(this,"open file dialog","/","png files(*.png);;jpg files(*.jpg)");
    24. //img.load(path);
    25. img = ui->label->pixmap()->toImage();
    26. if(img.isNull())
    27. {
    28. qDebug()<<"图片为空";
    29. return;
    30. }
    31. qDebug()<<"图片不为空";
    32. QZXing decode;
    33. decode.setDecoder(QZXing::DecoderFormat_QR_CODE);
    34. decode.setSourceFilterType(QZXing::TryHarderBehaviour_ThoroughScanning|QZXing::TryHarderBehaviour_Rotate);
    35. decode.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
    36. QString info = decode.decodeImage(img);
    37. qDebug()<<"info"<
    38. // ui->lineEdit_2->setText(info);
    39. ui->textEdit_2->setPlainText(info);
    40. }
    41. //1点击按钮 获取单行文本内容生成二维码
    42. void MainWindow::on_pushButton_2_clicked()
    43. {
    44. //1.生成二维码
    45. QString text = ui->lineEdit->text();
    46. qDebug()<<"text"<
    47. if(text.isEmpty())
    48. {
    49. qDebug()<<"text.isEmpty()"<isEmpty();
    50. return;
    51. }
    52. qDebug()<<"text.isEmpty()********"<isEmpty();
    53. QImage img = QZXing::encodeData(text
    54. ,QZXing::EncoderFormat::EncoderFormat_QR_CODE
    55. ,QSize(200,200)
    56. ,QZXing::EncodeErrorCorrectionLevel::EncodeErrorCorrectionLevel_H
    57. ,true
    58. ,false);
    59. //图片大小设置,与label大小适配
    60. //img = img.scaled(ui->label->width(), ui->label->height()); //图片适应label,有点变形,太丑
    61. qDebug()<
    62. ui->label->setPixmap(QPixmap::fromImage(img));
    63. }
    64. //2点击按钮 获取多行文本内容生成二维码
    65. void MainWindow::on_pushButton_3_clicked()
    66. {
    67. //1.生成二维码
    68. QString text = ui->textEdit->toPlainText();
    69. qDebug()<<"text"<
    70. if(text.isEmpty())
    71. {
    72. qDebug()<<"text.isEmpty()"<isEmpty();
    73. return;
    74. }
    75. qDebug()<<"text.isEmpty()********"<isEmpty();
    76. QImage img = QZXing::encodeData(text
    77. ,QZXing::EncoderFormat::EncoderFormat_QR_CODE
    78. ,QSize(200,200)
    79. ,QZXing::EncodeErrorCorrectionLevel::EncodeErrorCorrectionLevel_H
    80. ,true
    81. ,false);
    82. //图片大小设置,与label大小适配
    83. //img = img.scaled(ui->label->width(), ui->label->height()); //图片适应label,有点变形,太丑
    84. qDebug()<
    85. ui->label->setPixmap(QPixmap::fromImage(img));
    86. }

    四、Demo效果

    1.单行文本:二维码生成与识别

    2.多行文本:二维码生成与识别

    参考:Qt实现二维码生成和识别_qt 识别二维码-CSDN博客

  • 相关阅读:
    CCF CSP认证 历年题目自练Day26
    yolo增加Inner-IoU,一文搞定(Inner-SIoU,Inner-WIoU,Inner-EIoU,Inner-MPDIoU)
    技术管理进阶——如何设计并跟进不同层级同学的绩效
    影响mysql数据的三个性能指标(TPS\QPS\IOPS)
    新测试基准发布,最强开源Llama 3尴尬了
    安服-windows&linux日志分析
    整形数据和浮点型数据在内存中的存储差别
    Jeecg-Boot 低代码开发平台之路(一) —— 开始从零学起
    基于机器学习的搜索推荐系统
    Selenium + Python自动化测试入门
  • 原文地址:https://blog.csdn.net/jiangzubing520/article/details/137828350