完整的运行截图可以楼主知乎看,CSDN判定带有二维码的为违规
https://zhuanlan.zhihu.com/p/490532151
一.前言
楼主最近新接触了一个第三方库QZXing,这是一个用Qt封装的Zxing二维码解码库,楼主就初次简单使用该库做一个记录。
附:
zxing 是一个开源的一维/二维条码图像处理库,目前的版本为 Java 语言开发
链接地址:https://github.com/zxing/zxing
QZXing的下载地址:https://github.com/ftylitak/qzxing
二.编译与使用
1.下载并解压,解压之后如图所示
2.编译,
2.1用qtcreator打开打开src里面的pro文件
2.2根据需要选择对应的编译器,楼主这里选择的是minGw32,记得debug和release各来一次
2.3开始编译,时间有点长(只要不是错误,警告不用理)
在对应的文件夹找到QZXing3.dll 、libQZXing3.a
msvc编译器编译的就是QZXing3.dll QZXing3.lib
3.配置
3.1 将以下头文件放入工程目录下的include文件夹
3.2pro配置
INCLUDEPATH +=$$PWD/QZXingWidget/include
LIBS +=$$PWD/QZXingWidget/libQZXing3.a
# 使用生成二维码功能需要加这一句
DEFINES += ENABLE_ENCODER_GENERIC
4.编解码使用举例
备注:需要把QZXing3.dll 放到exe所在的目录下,不然就会出现程序可以编译通过,但是使用编解码的时候,程序闪退
4.1生成二维码
#include "QZXingWidget.h"
#include "ui_QZXingWidget.h"
#include "./include/QZXing.h"
QZXingWidget::QZXingWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::QZXingWidget)
{
ui->setupUi(this);
setWindowTitle(QStringLiteral("QZXing例子"));
}
QZXingWidget::~QZXingWidget()
{
delete ui;
}
void QZXingWidget::on_pushButton_encode_clicked()
{
QString text = ui->textEdit->toPlainText();
if(text.isEmpty())
return;
QImage img = QZXing::encodeData(text
,QZXing::EncoderFormat::EncoderFormat_QR_CODE
,QSize(200,200)
,QZXing::EncodeErrorCorrectionLevel::EncodeErrorCorrectionLevel_H
,true
,false);
ui->label->setPixmap(QPixmap::fromImage(img));
}
4.2解析二维码
void QZXingWidget::on_pushButton_decode_clicked()
{
QImage img;
QString path= qApp->applicationDirPath()+"//file.png";
img.load(path);
if(img.isNull())
{
qDebug()<<"图片为空";
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->setText(info);
}
三.其他
1.该文章只是简单实现了生成二维码与解析二维码的功能,了解还是属于比较浅的,不喜勿喷
2.附编译好的几个动态库,需要自取,目录如下
下载链接