qt二维码示例

移动终端的普及,二维码的使用越来越广泛,最近小小的研究了一下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

注:
     技术在于交流、沟通,转载请注明出处并保持作品的完整性。
     作者: 程序人生  
    原
文: http://blog.csdn.net/hiwubihe/article/details/38679621 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值