Qt+QZXing编写识别二维码的程序
本人最近在用Qt编写程序,需要用编写二维码识别功能。在网上搜寻一番,找到了QZXing。配置过程中确实出了一大把汗,这里我写这篇文章记录配置方法,替后人省一把汗吧!
我的开发环境:MSVC2010 + Qt5
从这里下载最新版的QZXing_sourceV2.3.zip,解压之后得到的是源代码,里面有一个QZXing.pri文件。理论上用MSVC加载这个pri文件之后这个库的代码就会出现在工程的代码列表中,但是理论归理论,实际上msvc在加载pri的过程中,弹出一大堆错误信息,完全不知所云,网上找遍了,也没找出个所以然来。后来发现在Qt Creator中使用QZXing.pri文件就很容易,只要在pro文件,也就是Qt Creator的工程文件中加入
即可。
于是我使用的办法是,用Qt Creator创建一个dll,msvc2010调用这个dll就可以了。
用Qt Creator创建dll
随便什么工程,这个工程不需要界面文件。把配置文件里的内容改为:
TARGET = Qr
TEMPLATE = lib(之前这里是app)
SOURCES += main.cpp
include (QZXing/QZXing.pri)
TEMPLATE=lib是关键,它表示你创建的是库文件,而不是exe文件。
然后编写识别二维码的函数,将main.cpp里的内容改为:
#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,使用方式如下:
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
Qt+QZXing编写识别二维码的程序的更多相关文章
- Pyqt+QRcode 生成 识别 二维码
1.生成二维码 python生成二维码是件很简单的事,使用第三方库Python QRCode就可生成二维码,我用Pyqt给QRcode打个壳 一.python-qrcode介绍 python-qrco ...
- PHP 生成、识别二维码及安装相关扩展/工具
2018-02-20 00:30:26 更新:推荐新扩展(极力推荐) 这篇文章里用的两个二维码扩展都有些问题和麻烦:phpqrcode(生成二维码)的源码有点小 bug: 而 php-zbarcod ...
- day111:MoFang:邀请好友流程&生成邀请好友二维码&第三方应用识别二维码&本地编译测试&记录邀请人信息
目录 1.邀请业务逻辑流程图 2.邀请好友-前端 3.邀请好友-后端接口(生成二维码) 4.前端获取后端生成的二维码 5.前端长按页面,保存图片到相册 6.客户端通过第三方识别微信二维码,服务端提供对 ...
- PHP识别二维码(php-zbarcode)
PHP识别二维码(php-zbarcode) 标签: php二维码扩展 2015-11-06 17:12 609人阅读 评论(0) 收藏 举报 分类: PHP(1) Linux 版权声明:本文为博 ...
- python实现树莓派生成并识别二维码
python实现树莓派生成并识别二维码 参考来源:http://blog.csdn.net/Burgess_Liu/article/details/40397803 设备及环境 树莓派2代 官方系统R ...
- HTML5实现扫描识别二维码/生成二维码
扫描识别二维码 思路: 1. 操作摄像头,获取图片.HTML5 WEBRTC的navigator.getUserMedia方法去实时获取摄像头资源. 2. 利用canvas使用相关算法分析图片识别图 ...
- iOS--iOS7摄像头识别二维码功能
iOS–iOS7摄像头识别二维码功能 属性介绍: AVFoundation 框架基于以下几个类实现图像捕捉 ,通过这些类可以访问来自相机设备的原始数据并控制它的组件. AVCaptureDevice ...
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
- spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题
spa(单页应用,vue)中,使用history模式时,微信长按识别二维码在ios下失效的问题. 触发条件: spa单页应用: 路由模式 history 从其他页面跳转到带有微信二维码识别的页面(不是 ...
随机推荐
- Oracle数据库的基本概念(转)
一.数据库 我们在安装Oracle数据库时,全局数据库名:就是一个数据库的标识,在安装时就要想好,以后一般不修改,修改起来也麻烦,因为数据库一旦安装,数据库名就写进了控制文件,数据库表,很多地方都会用 ...
- MSYS是一个小型的GNU环境,包括基本的bash,make等等,与Cygwin大致相当(双击“D:\MinGW\msys\1.0\msys.bat”,启动MinGW终端)
1 简介 MinGW,是Minimalist GNUfor Windows的缩写.它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和 ...
- Linux SVNserver建立
1. Ubuntu PC一个.最好是最新的Ubuntu稳定的版本号 2. 运行以下命令来安装subversion: sudo apt-get update sudo apt-get install s ...
- Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产(使用cef 内核)
Go 在 Windows 上用户图形界面 GUI 解决方案 Go-WinGUI 国产 Go 在服务端的优势不容置疑,但是在桌面应用上却没有好的 GUI 支持,本项目是 Go 语言在 Windows 上 ...
- [Linux] ssh秘钥对免密码登陆
准备两台linux服务器 a和b , 在a上使用ssh命令登陆b服务器 , 并且不用 输入密码 1.在a服务器上,比如是root用户 ,进去/root/.ssh目录 ,没有就创建, 就是进入家目录的. ...
- Android-apktool反汇编异常-Input file (XXX) was not found or was not readable.
问题描述: 原因: 在apptool 2.0以后命令发生了变化,不能再使用 apktool d <apk_path> <outfile_path> 解决方法:解决方法: 使用命 ...
- c语言学习笔记(8)——函数
学完c语言的函数可以理解面向过程的语言 函数是c语言的重点 一.为什么需要函数? 1.避免了重复性操作 2.有利于程序的模块化(每一个功能可以用不同函数去实现) 二.什么叫做函数? 逻辑上:能够完成特 ...
- C#中的DataGridView
关键字:C# DataGridView作者:peterzb来源:http://www.cnblogs.com/peterzb 1.DataGridView实现课程表 testcontrol.rar 2 ...
- WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式
原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控件,有些业务需要此类的控件.这篇文章介绍在WPF中实现PropertyGr ...
- GDI+ Bitmap与WPF BitmapImage的相互转换
原文:GDI+ Bitmap与WPF BitmapImage的相互转换 using System.Windows.Interop; //... // Convert BitmapImage to Bi ...