原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://blog.csdn.net/hiwubihe/article/details/38679621,qq:1269122125。

移动终端的普及,二维码的使用越来越广泛,最近小小的研究了一下QT下二维码的使用。
二维码(Two-dimensional code),又称二维条码,它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息数据的一把钥匙。在现代商业活动中,可实现的应用十分广泛,如:产品防伪/溯源、广告推送、网站链接、数据下载商品交易定位/导航电子凭证、车辆管理、信息传递、名片交流、wifi共享等。如今智能手机扫一扫(简称313)功能的应用使得二维码更加普遍。

QZXing:Qt包装ZXing的解码库。

更多参考:https://projects.developer.nokia.com/QZXing.  本文开发二维码的小工具采用的就是QZXing库。库的使用方法很简单,从上面网址上下载下来源代码,源代码根目录下有个pri文件,因为我是在VS2010中开发的,按道理是可以在VS工程中编译这包源码包的。但是编译总是失败。所以采用另外的方法,新建个QTcreator工程,在工程中把源码包拷贝进工程中,再在pro工程文件中加上include (QZXing/QZXing.pri)。编译即可生成dll文件。可能qtcreator采用的mingw编译器,编译生成的dll在msvc中不能静态加载。尝试了静态加载都是失败的,而采用QT自带的QLibrary加载DLL是成功的。

程序运行效果如下:

启动后

选择二维码图片后效果:

1.自定义一个窗体类QrCodeForm.h

 
typedef bool (*fpGetQrStr)(const char*, char*, int);
class CQrCodeForm : public UiBaseDialog
{
    Q_OBJECT
 
public:
    CQrCodeForm(QWidget *parent = 0);
    ~CQrCodeForm();
private slots:
    void slots_file_selected();
private:
    Ui::Form ui;
    QString m_fileName;
    QLibrary *pdllLib;
    fpGetQrStr GetQrStr;
};
  2.窗体类实现 QrCodeForm.cpp

 
CQrCodeForm::CQrCodeForm(QWidget *parent)
    : UiBaseDialog(parent)
{
    ui.setupUi(this);
    createTitleBar(ui.Title,WindowToolMin | WindowToolClose,tr("二维码识别"));
    QDesktopWidget *desk=QApplication::desktop();   
    int wd=desk->width();   
    int ht=desk->height();   
    this->move((wd-width())/2,(ht-height())/2);
    connect(ui.pushButton,SIGNAL(clicked()),this,SLOT(slots_file_selected()));
    pdllLib =new QLibrary("QTCode.dll");
    if(!pdllLib->load())
    {
         return ;
    }
    else
    {
        GetQrStr=(fpGetQrStr)pdllLib->resolve("GetQrStr");
        if(GetQrStr == NULL)
        {
            return ;
        }
    }
    return ;
 
}
 
CQrCodeForm::~CQrCodeForm()                                     
{
 
}
 
void CQrCodeForm::slots_file_selected()
{
    m_fileName = QFileDialog::getOpenFileName(this, 
                                            tr("二维码打开文件"),
                                            "C:\\",
                                            tr("任何文件(*.*)"
                                            ";;文本文件(*.png)"
                                            ));
    ui.lineEdit->setText(m_fileName);
    //
    
    char buffer[QRBUFSIZ] = {0};
    bool bResult = GetQrStr(m_fileName.toStdString().c_str(), buffer, QRBUFSIZ);
 
    //UTF-8编码
    QString ss = QTextCodec::codecForName("UTF-8")->toUnicode(buffer);
    if(bResult)
    {
        ui.textEdit->setText(ss);
        QImage* img=new QImage;
        //加载图像
        if(! ( img->load(m_fileName) ) ) 
        {
            QMessageBox::information(this,
                                     tr("打开图像失败"),
                                     tr("打开图像失败!"));
            delete img;
            return;
        }
        * img=img->scaled(ui.label->width(),ui.label->height(),Qt::KeepAspectRatio);
        ui.label->setPixmap(QPixmap::fromImage(*img));
    }
    else
    {
        ui.textEdit->setText(tr("图片不是合法二维图片"));
    }
}
 
qt版本:4.8.6,开发环境:vs2010 
源码下载地址:http://download.csdn.net/detail/hiwubihe/9542092
 
 

最新文章

  1. C#读取ini文件的方法
  2. 最近在做外贸网站的时候,需要大量的字体来充实页面,就学习了怎么引用Google Fonts
  3. [问题2014S08] 复旦高等代数II(13级)每周一题(第八教学周)
  4. 控制台(Console)报错:java.io.IOException: Broken pipe
  5. android开发 解决启动页空白或黑屏问题
  6. HTML5入门1---Canvas画布
  7. bzoj2241: [SDOI2011]打地鼠
  8. iOS开发(Objective-C)常用库索引
  9. MySQL学习笔记:MySQL: ERROR 1064(42000)
  10. WEB安全实战(五)XSS 攻击的第二种解决方式(推荐)
  11. 使用Servlet实现上传文件功能
  12. 树链剖分的一种妙用与一类树链修改单点查询问题的时间复杂度优化——2018ACM陕西邀请赛J题
  13. Hibernate工具类_抽取重复核心代码
  14. git常用命令介绍
  15. CITS1401 Computational Thinking with Python
  16. sql2008和sql2012混合安装后打开SQL Server 配置管理器查看出现“远程过程调用失败”0x800706be
  17. 1、eclipse
  18. ASP.NET Core MVC 概述
  19. python console 设立快捷键 学习源码 用到英语
  20. GitHub 新手教程 二,Windows 版 GitHub 安装

热门文章

  1. html里的table如何在表格内部保留表格横线的同时去掉表格里的竖线
  2. 【HDOJ】3085 Nightmare Ⅱ
  3. 【转】color颜色十六进制编码大全
  4. 数论(毕达哥拉斯定理):POJ 1305 Fermat vs. Pythagoras
  5. Android 开机自启动
  6. App自动更新之通知栏下载
  7. 关于TCP的粘包和拆包
  8. TCP内核源码分析笔记
  9. RabbitMQ-清空队列中(一个channel或连接中)的Unacknowledged状态的消息
  10. Lucene实例教程