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

ops/2024/10/18 13:07:59/

基于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程序文件,详见代码内容:

//mainwindow.cpp文件#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QImage>
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}//3点击按钮 识别二维码内容
void MainWindow::on_pushButton_clicked()
{//2.识别二维码QImage img;//QString path= qApp->applicationDirPath()+"//file.png";//第一个参数:标准文件对话框的父窗口;第二个参数:标准文件对话框的标题;第三个参数:指定默认的目录;第四个参数:文件过滤器//QString path = QFileDialog::getOpenFileName(this,"open file dialog","/","png files(*.png);;jpg files(*.jpg)");//img.load(path);img = ui->label->pixmap()->toImage();if(img.isNull()){qDebug()<<"图片为空";return;}qDebug()<<"图片不为空";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);qDebug()<<"info"<<info;
//    ui->lineEdit_2->setText(info);ui->textEdit_2->setPlainText(info);
}//1点击按钮 获取单行文本内容生成二维码
void MainWindow::on_pushButton_2_clicked()
{//1.生成二维码QString text = ui->lineEdit->text();qDebug()<<"text"<<text;if(text.isEmpty()){qDebug()<<"text.isEmpty()"<<text.isEmpty();return;}qDebug()<<"text.isEmpty()********"<<text.isEmpty();QImage img = QZXing::encodeData(text,QZXing::EncoderFormat::EncoderFormat_QR_CODE,QSize(200,200),QZXing::EncodeErrorCorrectionLevel::EncodeErrorCorrectionLevel_H,true,false);//图片大小设置,与label大小适配//img = img.scaled(ui->label->width(), ui->label->height()); //图片适应label,有点变形,太丑qDebug()<<img;ui->label->setPixmap(QPixmap::fromImage(img));
}//2点击按钮 获取多行文本内容生成二维码
void MainWindow::on_pushButton_3_clicked()
{//1.生成二维码QString text = ui->textEdit->toPlainText();qDebug()<<"text"<<text;if(text.isEmpty()){qDebug()<<"text.isEmpty()"<<text.isEmpty();return;}qDebug()<<"text.isEmpty()********"<<text.isEmpty();QImage img = QZXing::encodeData(text,QZXing::EncoderFormat::EncoderFormat_QR_CODE,QSize(200,200),QZXing::EncodeErrorCorrectionLevel::EncodeErrorCorrectionLevel_H,true,false);//图片大小设置,与label大小适配//img = img.scaled(ui->label->width(), ui->label->height()); //图片适应label,有点变形,太丑qDebug()<<img;ui->label->setPixmap(QPixmap::fromImage(img));
}

四、Demo效果

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

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

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


http://www.ppmy.cn/ops/15751.html

相关文章

MySQL锁详解

之前的博客给小伙伴们分享了java中的锁&#xff0c;今天我们一起来看看mysql中有什么锁吧 一、图示 二、粒度分类 2.1、全局锁&#xff1a; 什么是全局锁&#xff1f; MySQL的锁定主要分为全局锁、表锁和行锁。现在我们来看看MySQL全局锁。 MySQL全局锁是针对整个数据库的锁…

API网关:微服务架构的关键组件

在构建微服务架构时&#xff0c;API网关是不可或缺的一个核心组件。它不仅简化了客户端与后端服务的交互&#xff0c;还优化了数据处理、服务聚合、流量管理等多个关键方面。本文将探讨API网关的概念、功能以及它在微服务架构中的重要作用。 什么是API网关&#xff1f; API网…

.NET高级面试指南专题二十五【 建造者模式介绍,将复杂对象的构建过程与其表示分离】

建造者模式是一种创建型设计模式&#xff0c;用于将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。它允许客户端通过指定要构建的类型和可选参数来构建对象&#xff0c;而不需要了解对象的具体构建细节。 优点&#xff1a; 将构建过程封装…

硬件知识学习 电感

1.电感的作用&#xff1a; 电感在电路中扮演着多样化的关键角色&#xff0c;其作用相当复杂且精细。以下是对电感作用的更详细解释&#xff1a; 滤波作用&#xff1a; 高频噪声抑制&#xff1a;电感能有效滤除电路中的高频噪声和杂波&#xff0c;使得输出端的信号更为平稳和稳定…

YMP实现Oracle迁移到YashanDB

迁移需求 ip地址 数据库信息 操作系统信息 源库 192.168.3.132 实例名topdh 用户密码TOPICIS/oracle 端口1521 Centos7.9 x86_64 目标库 192.168.3.175 实例名yasdb 用户密码topicist/opicis 端口1688 Centos7.9 x86_64 迁移前准备 YMP工具获取 根据实际需求向厂…

pandas保存dict字段再读取成DataFrame

背景&#xff1a; pandas DataFrame中有字段是dict类型&#xff0c;使用to_excel方法直接保存下次读取出来&#xff0c;dict字段会变成字符串&#xff0c;无法识别&#xff1b; 目标&#xff1a;保存dict字段&#xff0c;下次读出来还是dict 方法一&#xff1a;使用json.dum…

网络编程——TCP的特性之自动重传/流量控制/拥塞控制,一篇说清楚

文章目录 1. ARQ自动重传协议1.1 停止等待ARQ1.2 连续ARQ1.3 总结 2. TCP的流量控制3. TCP的拥塞控制3.1 慢开始算法3.2 拥塞避免算法3.3 快重传算法3.4 快恢复算法 1. ARQ自动重传协议 自动重传请求&#xff08;Automatic Repeat-reQuest&#xff09;&#xff0c;通过使用确认…

DC学习笔记

视频 数字逻辑综合工具实践 DC 01_哔哩哔哩_bilibili 一、DC工作模式&#xff08;此小节为搬运内容&#xff09; 原链接&#xff1a;Design_Compiler User Guide 随手笔记&#xff08;9&#xff09;Using Floorplan Information - 知乎 DC拥有四种工作模式&#xff1a; 工…