Qt+QZXing编写识别二维码的程序
2017-01-25 23:01
375 查看
本人最近在用Qt编写程序,需要用编写二维码识别功能。在网上搜寻一番,找到了QZXing。配置过程中确实出了一大把汗,这里我写这篇文章记录配置方法,替后人省一把汗吧!
我的开发环境:MSVC2010 + Qt5
从这里下载最新版的QZXing_sourceV2.3.zip,解压之后得到的是源代码,里面有一个QZXing.pri文件。理论上用MSVC加载这个pri文件之后这个库的代码就会出现在工程的代码列表中,但是理论归理论,实际上msvc在加载pri的过程中,弹出一大堆错误信息,完全不知所云,网上找遍了,也没找出个所以然来。后来发现在Qt Creator中使用QZXing.pri文件就很容易,只要在pro文件,也就是Qt Creator的工程文件中加入
include(QZXing_Sourcev2.3/QZXing.pri)
即可。
于是我使用的办法是,用Qt Creator创建一个dll,msvc2010调用这个dll就可以了。
QT += core
TARGET = Qr
TEMPLATE = lib(之前这里是app)
SOURCES += main.cpp
include (QZXing/QZXing.pri)
TEMPLATE=lib是关键,它表示你创建的是库文件,而不是exe文件。
然后编写识别二维码的函数,将main.cpp里的内容改为:
#include <QtCore>
#include <cstring>
#include <string>
#include "QZXing.h"
extern "C" Q_DECL_EXPORT bool GetQrStr(const char* file, char* buffer, int buffer_size)
{
QZXing dec;
dec.setDecoder(QZXing::DecoderFormat_QR_CODE);
QString strTmp = dec.decodeImageFromFile(file);
if (strTmp.length())
{
strcpy_s(buffer, buffer_size, strTmp.toStdString().c_str());
return true;
}
return false;
}
执行qmake,然后构建。
typedef bool (*fpGetQrStr)(const char*, char*, int);
QLibrary lib("qr.dll");
fpGetQrStr GetQrStr = (fpGetQrStr)lib.resolve("GetQrStr");
if (GetQrStr)
{
char buffer[BUFSIZ] = {0};
if (GetQrStr(QR_IMAGE_PATH, buffer, BUFSIZ))
{
qDebug() << "Content is:" << buffer;
}
else
{
qDebug() << "resolve failure";
}
}
2、我的Qt Creator调用的编译器也是msvc2010.
2、QZXing+Opencv+Qt Creater实现二维码,一维码的识别
http://ju.outofmemory.cn/entry/78826
我的开发环境:MSVC2010 + Qt5
从这里下载最新版的QZXing_sourceV2.3.zip,解压之后得到的是源代码,里面有一个QZXing.pri文件。理论上用MSVC加载这个pri文件之后这个库的代码就会出现在工程的代码列表中,但是理论归理论,实际上msvc在加载pri的过程中,弹出一大堆错误信息,完全不知所云,网上找遍了,也没找出个所以然来。后来发现在Qt Creator中使用QZXing.pri文件就很容易,只要在pro文件,也就是Qt Creator的工程文件中加入
include(QZXing_Sourcev2.3/QZXing.pri)
即可。
于是我使用的办法是,用Qt Creator创建一个dll,msvc2010调用这个dll就可以了。
用Qt Creator创建dll
随便什么工程,这个工程不需要界面文件。把配置文件里的内容改为:QT += core
TARGET = Qr
TEMPLATE = lib(之前这里是app)
SOURCES += main.cpp
include (QZXing/QZXing.pri)
TEMPLATE=lib是关键,它表示你创建的是库文件,而不是exe文件。
然后编写识别二维码的函数,将main.cpp里的内容改为:
#include <QtCore>
#include <cstring>
#include <string>
#include "QZXing.h"
extern "C" Q_DECL_EXPORT bool GetQrStr(const char* file, char* buffer, int buffer_size)
{
QZXing dec;
dec.setDecoder(QZXing::DecoderFormat_QR_CODE);
QString strTmp = dec.decodeImageFromFile(file);
if (strTmp.length())
{
strcpy_s(buffer, buffer_size, strTmp.toStdString().c_str());
return true;
}
return false;
}
执行qmake,然后构建。
在MSVC2010中调用编写好的dll
调用方式有很多种,这里我使用的是QLibrary,使用方式如下:typedef bool (*fpGetQrStr)(const char*, char*, int);
QLibrary lib("qr.dll");
fpGetQrStr GetQrStr = (fpGetQrStr)lib.resolve("GetQrStr");
if (GetQrStr)
{
char buffer[BUFSIZ] = {0};
if (GetQrStr(QR_IMAGE_PATH, buffer, BUFSIZ))
{
qDebug() << "Content is:" << buffer;
}
else
{
qDebug() << "resolve failure";
}
}
注意事项
1、编写类似GetQrStr函数的时候,它的参数以及返回值要是C语言中基本的数据类型,不然可能会引起崩溃。2、我的Qt Creator调用的编译器也是msvc2010.
相关链接
1、QT实现截图功能并识别其中的二维码2、QZXing+Opencv+Qt Creater实现二维码,一维码的识别
http://ju.outofmemory.cn/entry/78826
相关文章推荐
- 【opencv学习之六】opencv+Qt+Qzxing调取本地摄像头识别二维码
- 用QTDesigner编写Linux的图形界面程序
- Eclipse + CDT + MinGW 下编写QT程序
- windows下如何使用QT编写dll程序
- 用QT编写的程序,怎样在申请资源失败后,关闭所有窗口,退出程序?
- Qt编写串口通信程序全程图文讲解
- 编写一个最有代表意义的qt程序
- Qt_Creator编写多窗口程序
- Qt编写串口通信程序全程图文讲解(完整)
- VS编写Qt界面程序如何不出现控制台
- 在海思3515芯片移植qt-embedded(三)----手工编写qte程序的Makefile
- 参照《精通QT4编程》编写第一个QT程序总是失败
- Hello,Qt——Linux下编写Qt程序的详细步骤
- Qt编写串口通信程序全程图文讲解
- Qt编写串口通信程序全程图文讲解
- 在Visual C++ 6.0的环境下,编写Qt程序
- Qt编写Mplayer前端程序
- Windows下如何使用QT编写dll程序
- 使用Qt编写服务器端程序(包括Http传输服务器端)的方法
- Qt编写串口通信程序全程图文讲解