zoukankan      html  css  js  c++  java
  • Qt+QZXing编写识别二维码的程序

    本人最近在用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 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

  • 相关阅读:
    计算机视觉、机器学习相关领域论文和源代码大集合【转载】
    一试真伪:可以在12306上选择上中下卧铺吗
    给企业研发人员列一张数学清单【转载】
    向“生物力学之父”冯元桢先生学习什么?【转载】
    热消融影像引导
    Computer assisted surgery
    ASM, AAM
    Linux 下编译安装MySQL
    Linux下搭建FTP服务器
    自己瞎捣腾的Win7下Linux安装之路-----理论篇
  • 原文地址:https://www.cnblogs.com/findumars/p/6350235.html
Copyright © 2011-2022 走看看