原创文章,引用请保证原文完整性,尊重作者劳动,原文地址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
 
 

qt二维码示例的更多相关文章

  1. Qt 二维码

    1.生成二维码 利用第三方库qrencode ,将qrencode源码添加到自己的程序中,直接调用使用. 参考http://blog.csdn.net/zhangxufei/article/detai ...

  2. C#生成二维码示例

    其实现在二维码越来越流行,网上也有很多生成二维码的类库.写一下WEB生成二维码注意事项吧! 目前C#生成二维码大部分都是使用ThoughtWorks.QRCode或者ZXing类库生成,主要说一下Th ...

  3. mui弹出二维码示例

    <div id="tap_popover" class="box mui-popover mui-popover-action mui-popover-bottom ...

  4. 通过CoreImage生成二维码

    从IOS7开始集成了二维码的生成和读取功能 生成二维码的步骤: 1.导入CoreImage框架 2.通过滤镜CIFilter生成二维码 二维码的内容(传统的条形码只能放数字): 纯文本 名片 URL ...

  5. jQuery生成QRcode二维码

    jQuery生成QRcode二维码示例 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...

  6. PHP生成QRCode二维码

    php生成QRCode二维码示例 <?php //引入 phpqrcode 类库 //phpqrcode下载地址:https://github.com/t0k4rt/phpqrcode //或从 ...

  7. QrCode C#生成二维码 及JavaScript生成二维码

    一 C#的二维码    示例: class Program { static void Main(string[] args) { QrEncoder qrEncoder = new QrEncode ...

  8. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  9. ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...

随机推荐

  1. Unity 技能按钮触发特效

    unity 版本:4.5.1 NGUI版本:3.6.5 首先,要导入特效资源包,导入应该是基本中的基础,但是对于初学者来说好像很少有这方面的介绍,也许是我现学现用书看的不够认真,因为导入这个问题卡了好 ...

  2. 构造函数语义学之Default Constructor构建操作

    一.Default Constructor的构建操作 首先大家要走出两个误区: 1).任何class如果没有定义default constructor,就会被合成一个来. 2).便以其合成出来的def ...

  3. linux下挂载另一系统硬盘。

    问题描述: Error mounting /dev/sda5 at /media/wangzheng/办公: Command-line `mount -t "ntfs" -o &q ...

  4. Shapely介绍及用户手册

    本文主要是基于shapely官方文档翻译而成 shapely主要是在笛卡尔平面对几何对象进行操作和分析. 性能 Shapely中所有的操作都是使用GEOS库.GEOS是用C++写的,也被用在许多应用程 ...

  5. SRM 390(1-250pt)

    DIV1 250pt 题意:给定整数n和k,问最少需要多少个n连接在一起形成的新整数t,使得t是k的倍数.如果不能形成倍数,输出-1.k <= 10^5,n <= 10^9. 解法:不断增 ...

  6. DNA Sequence - POJ 2778(AC自动机+矩阵乘法)

    题目大意:DNA序列是有 ATGC 组成的,现在知道一些动物的遗传片段有害的,那么如果给出这些有害的片段,能否求出来所有长度为 N 的基因中有多少是不包含这些有害片段的.   分析:也是断断续续做了一 ...

  7. hdoj 4552 怪盗基德的挑战书【求前缀在字符串中出现的次数之和】

    怪盗基德的挑战书 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Su ...

  8. loadView是干什么用的

    文/natewang(简书作者)原文链接:http://www.jianshu.com/p/f8d261d49615著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. viewContro ...

  9. zookeeper 删除snapshot和transaction log的源码解读

    转载请注明源地址http://www.cnblogs.com/dongxiao-yang/p/4910059.html zookeeper具有自动清除快照日志和事务日志的工能,可以在配置文件设置aut ...

  10. JDBC 之 事务

    1.概念:事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部不成功. 2.数据库开启事务的命令dtl: Start transaction开启事务 Rollback回滚事务(撤销) ...