QZXing 的编译和使用

QZXing 的编译和使用

QZxing 是对 zxing 的一个封装,用于在 Qt 程序中加入条形码和二维码识别的功能。这里就讲讲如何编译和使用这个库。
前几年 QZXing 的代码是放到 sourceforge.net 上的,现在迁移到了 github.com。所以下载最新的代码要去:http://https://github.com/ftylitak/qzxing/

可以用git 来下载,也可以直接下载打包的 zip 文件。下载下来有 150M 左右,里面主要是有很多测试图片,真正的代码其实并不多。

下载解压之后里面有个 src 目录。里面就是我们需要的代码了。

我用的是 Win10 + VS2015 + Qt5.9.1

可以用 Qtcreator 打开 QZXing.pro,或者直接:

qmake QZXing.pro
nmake

直接编译会报错:

zxing\zxing\qrcode\encoder\MaskUtil.cpp(89): error C2039: “max”: 不是“std”的成员
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\iostream(12): note: 参见“std”的声明
zxing\zxing\qrcode\encoder\MaskUtil.cpp(89): error C3861: “max”: 找不到标识符
zxing\zxing\qrcode\encoder\MaskUtil.cpp(90): error C2039: “min”: 不是“std”的成员
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\iostream(12): note: 参见“std”的声明
zxing\zxing\qrcode\encoder\MaskUtil.cpp(90): error C3861: “min”: 找不到标识符
zxing\zxing\qrcode\encoder\MaskUtil.cpp(101): error C2039: “max”: 不是“std”的成员
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\iostream(12): note: 参见“std”的声明
zxing\zxing\qrcode\encoder\MaskUtil.cpp(101): error C3861: “max”: 找不到标识符
zxing\zxing\qrcode\encoder\MaskUtil.cpp(102): error C2039: “min”: 不是“std”的成员
D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\INCLUDE\iostream(12): note: 参见“std”的声明
zxing\zxing\qrcode\encoder\MaskUtil.cpp(102): error C3861: “min”: 找不到标识符

大概的意思就是不认识 std::min 和 std::max。
出这个错是因为代码中忘记包含这两函数所在的头文件了。在 MaskUtil.cpp 的开头加一行:

#include <algorithm>

再编译就没有问题了。成功的生成dll 和对应的 lib 文件。为了使用方便,我将 QZXing.pro 做了点小的修改:

TARGET = x86_QZXing

这样改之后生成的 dll 和 lib 文件的名字是:

  • x86_QZXing2.dll
  • x86_QZXing2.lib

这样改是为了与 64 位的库文件区别。有了这两个文件,我们还需要两个头文件:

  • QZXing.h
  • QZXing_global.h

QZXing readme.md 文件中给的例子是这样的:

#include <QZXing.h>
int main(int argc, char *argv[])
{
    QImage imageToDecode("d:/file.png");
    QZXing decoder;
    decoder.setDecoder( DecoderFormat_QR_CODE | DecoderFormat_EAN_13 );
    QString result = decoder.decodeImage(imageToDecode);
}

这个例子编译也会报错,需要做一点小修改:

#include <QZXing.h>
int main(int argc, char *argv[])
{
    QImage imageToDecode("d:/file.png");
    QZXing decoder;
    decoder.setDecoder( QZXing::DecoderFormat_QR_CODE | QZXing::DecoderFormat_EAN_13 );
    QString result = decoder.decodeImage(imageToDecode);
}

上面的介绍中省略了如何在 qt 项目中加入第三方的库,如果用 qtcreator 那么很简单,右键弹出菜单中点选 添加库,然后按照提示一步步操作就可以了。这块就不多介绍了。

总体来说 QZXing 的安装和使用都很简单,但是 QZXing 的作者提供的代码和文档有点小错误,直接编译通不过,所以我才写了这篇博客,帮大家快速的搭建起这个库来。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值