为什么要下载QZXing库,而不直接使用编译好的库文件?因为每个人使用的编译环境是不一样的,使用的编译器也不尽相同,不同编译器编译出来的库放到不同编译器下则不一定能够使用(至少我是这么理解的,使用别人的也经常出现崩溃的问题)。
zxing 是一个开源的一维/二维条码图像处理库,目前的版本为 Java 语言开发
链接地址:https://github.com/zxing/zxing
QZXing的下载地址:GitHub - ftylitak/qzxing: Qt/QML wrapper library for the ZXing library. 1D/2D barcode image processing library
QZXing是对ZXing用qt封装过的,所以很方便使用,打开src文件夹里面的pro文件,直接构建(快捷键Ctrl+B),这里不要点绿色的运行按钮,因为这是编译库,而不是运行程序。如出现 无法找到执行文档,请指定一个 这个弹窗时,点击 构建 - 重新构建项目“xxx”。Qt 编译C++库时提示“无法找到执行文档,请指定一个”的解决方法。_SherryMirai的博客-CSDN博客_qt无法找到执行文档
编译过程中有的可能会出现各种错误,这里仅仅列出我出现的(我使用的是qt5.5,mingGW32编译)
错误1: error: 'uint8_t' does not name a type typedef uint8_t byte
大概是说c++用了c的代码,在错误上面添加 #include
错误2: error: '>>' should be '> >' within a nested template argument list
错误原因:使用C++11之前标准的编译器会将">>“视为移位符号。
解决方法:打开pro文件,添加 CONFIG += c++11 utf8_source
对于编译过程中出现的警告就不管了。然后打开debug的文件夹下debug文件夹,
将里面的.a文件跟dll文件复制出来,新建一个lib文件夹, 放到lib里面。
新建qt工程,普通qt widget app即可。
然后将lib放到工程根目录下
然后再pro中添加库引用,保存
#使用qzxing需要添加内容
LIBS += -L$$PWD/lib -lQZXing3 #添加库
DEFINES += ENABLE_ENCODER_GENERIC #开启二维码生成功能
然后在src文件夹里面复制出QZXing.h与QZXing_global.h,同样放到根目录下。
最后在你需要用到的源文件包含头文件
#include "QZXing.h"
即可正常使用
生成二维码示例:(encodeData好像说只能生成二维码,我没测试条码情况)
QImage img;
img = QZXing::encodeData(QString("12345"),QZXing::EncoderFormat_QR_CODE);
得到img的图片就是12345生成的二维码。
二维码或条码识别示例:
//开始解码
QImage img(fileName);
QZXing decoder;
//设置解码类型 -- 二维码或ean13的条码
decoder.setDecoder(QZXing::DecoderFormat_QR_CODE | QZXing::DecoderFormat_EAN_13 );
//可选设置
//decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal | QZXing::SourceFilter_ImageInverted);
decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
decoder.setTryHarderBehaviour(QZXing::TryHarderBehaviour_ThoroughScanning | QZXing::TryHarderBehaviour_Rotate);
//解码
QString result = decoder.decodeImage(img);
将文件完整路径给到fileName,生成的result就是识别到的内容