1. 程式人生 > >QT 二維碼庫

QT 二維碼庫

一、簡介

        二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維方向上)分佈的黑白相間的圖形記錄資料符號資訊的,其應用廣泛,如:產品防偽/溯源、廣告推送、網站連結、資料下載、商品交易、定位/導航、電子憑證、車輛管理、資訊傳遞、名片交流、wifi共享等。
     一維碼是用條空在水平方向上表達資訊的條碼,外形更接近矩形;二維碼可以說是正方形,在其內部有三個“回”字型的定位點,可以幫助條碼裝置對焦,便於讀取資料。一維碼的資訊部分只能是字母和數字,它的資料容量較小一般只可容納30個字元左右。二維碼的資訊承載量很大,最大資料含量可達1850個字元,資訊內容可包含,字母,數字,漢字,字元,片假名等。一維碼的常用碼制包括:EAN碼、39碼、交叉25碼、UPC碼、128碼、93碼,ISBN碼,及Codabar(庫德巴碼)等;二維碼常用的碼制有:PDF417二維條碼,Datamatrix二維條碼,QR Code,Code 49,Code 16K,Code one等。



二、詳解

1、libqrencode庫(生成二維碼)

(1)qrcodewidget.h

  1. #ifndef QRCODE_H  
  2. #define QRCODE_H  
  3. #include <QWidget>
  4. #include <QTextCodec>
  5. namespace Ui {  
  6. class QRCode;  
  7. }  
  8. class QRCodeWidget : public QWidget  
  9. {  
  10.     Q_OBJECT  
  11. public:  
  12.     explicit QRCodeWidget(QWidget *parent
     = 0);  
  13.     ~QRCodeWidget();  
  14. private slots:  
  15.     void on_pushButton_clicked();  
  16. private:  
  17.     Ui::QRCode *ui;  
  18. };  
  19. #endif // QRCODE_H  

(2)qrcodewidget.cpp

  1. #include <QPicture>
  2. #include "qrcodewidget.h"  
  3. #include "ui_qrcode.h"  
  4. #include "qrencode.h"  
  5. #include "qrenc.c"  
  6. QRCodeWidget::QRCodeWidget(QWidget *parent) :  
  7.     QWidget(parent, Qt::Dialog),  
  8.     ui(new Ui::QRCode)  
  9. {  
  10.     QTextCodec *codec = QTextCodec::codecForName("utf8");  
  11.     QTextCodec::setCodecForLocale(codec);  
  12.     QTextCodec::setCodecForCStrings(codec);  
  13.     QTextCodec::setCodecForTr(codec);  
  14.     ui->setupUi(this);  
  15. }  
  16. QRCodeWidget::~QRCodeWidget()  
  17. {  
  18.     delete ui;  
  19. }  
  20. void QRCodeWidget::on_pushButton_clicked()  
  21. {  
  22.     QString info = ui->lineEdit->text();  
  23.     if (info.isEmpty()) {  
  24.         return;  
  25.     }  
  26.     char outfile[] = "output.png";  
  27.     margin = 2;  
  28.     ::size = 7;  
  29.     version = 2;  
  30.     //QRcode *qrcode = QRcode_encodeString(info.toStdString().data(), 2, QR_ECLEVEL_L, QR_MODE_8, 0);  
  31.     //writePNG(qrcode, outfile);  
  32.     qrencode((unsigned char *)info.toStdString().data(), info.length(), outfile);  
  33.     ui->label_3->setPixmap(QPixmap(outfile));  
  34. }  

(3)main.cpp

  1. #include "qrcodewidget.h"  
  2. #include <QApplication>
  3. int main(int argc, char *argv[])  
  4. {  
  5.     QApplication a(argc, argv);  
  6.     QRCodeWidget w;  
  7.     w.show();  
  8.     return a.exec();  
  9. }  

(4)執行

           

       也可是使用QrenCode 的命令列工具生成二維碼,在centos6.6下執行# yum install qrencode(或下載qrencode-3.4.4.tar.gz使用./configure、make、make install安裝);使用qrencode -o output.png https://www.baidu.com/即可在當前目錄下生成百度的二維碼圖片output.png;若想自定義尺寸的話,加上 -s 引數,比如 -s 6 表示尺寸為 6x6 平方像表大小,qrencode -s 6 -o output.png https://www.baidu.com/。命令列下識別二維碼的是#yum install libdecodeqr-examples,libdecodeqr-simpletest <二維碼圖片>。安裝zbar-0.10.tar.bz2,也可一識別二維碼。

      

2、zbar庫(識別二維碼)

/usr/local/include下,庫檔案在/usr/local/lib。
(1)qrcodezbar.h
  1. #ifndef QRCODEZBAR_H  
  2. #define QRCODEZBAR_H  
  3. #include <QWidget>
  4. #include <QTextCodec>
  5. #include <QFileDialog>
  6. #include <zbar/QZBar.h>
  7. namespace Ui {  
  8. class QZbar;  
  9. }  
  10. class QRCodeZbar : public QWidget  
  11. {  
  12.     Q_OBJECT  
  13. public:  
  14.     QRCodeZbar(QWidget *parent = 0);  
  15.     ~QRCodeZbar();  
  16. private:  
  17. private slots:  
  18.     void on_pushButton_clicked();  
  19. private:  
  20.     Ui::QZbar *ui;  
  21.     zbar::QZBar *qz;  
  22. };  
  23. #endif // QRCODEZBAR_H  
(2)qrcodezbar.cpp
  1. #include "qrcodezbar.h"  
  2. #include "ui_qzbar.h"  
  3. #include "scanimage.h"  
  4. #ifdef QRDECODE  
  5.     #include "scanimagemagick.h"  
  6. #endif  
  7. QRCodeZbar::QRCodeZbar(QWidget *parent)  
  8.     : QWidget(parent, Qt::Dialog)  
  9.     , ui(new Ui::QZbar)  
  10. {  
  11.     QTextCodec *codec = QTextCodec::codecForName("utf8");  
  12.     QTextCodec::setCodecForLocale(codec);  
  13.     QTextCodec::setCodecForCStrings(codec);  
  14.     QTextCodec::setCodecForTr(codec);  
  15.     ui->setupUi(this);  
  16. }  
  17. QRCodeZbar::~QRCodeZbar()  
  18. {  
  19. }  
  20. void QRCodeZbar::on_pushButton_clicked()  
  21. {  
  22.     QString fileName = QFileDialog::getOpenFileName(this, tr("choose a picture"),  
  23.                                                     QApplication::applicationDirPath(),  
  24.                                                     tr("all Files (*.*)"));  
  25.     ui->lineEdit->setText(fileName);  
  26.     ui->label_3->setPixmap(QPixmap(ui->lineEdit->text()));  
  27.     char result[1024] = {0};  
  28.     #ifdef QRDECODE  
  29.         scanimagemagick(ui->lineEdit->text().toStdString().data(), result);  
  30.     #else  
  31.         scanimage(ui->lineEdit->text().toStdString().data(), result);  
  32.     #endif  
  33.     ui->textEdit->setText(result);  
  34. }  
(3)scanimagemagick.h

    相關推薦

    QT

    一、簡介         二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規律在平面(二維方向上)分佈的黑白相間的圖形記錄資料符號資訊的,其應用廣泛,如:產品防偽/溯源、廣告推送、網站連結、資料下載、商品交易、定位/導航、電子憑證、車輛管理、資訊傳遞、

    開源libqrencode

    http://www.myleftstudio.org/viewtopic.php?f=37&t=2558 編譯安裝 tar zxvf qrencode-3.4.2.tar.gz cd qrencode-3.4.2 ./configure make make ins

    解碼器Zbar+VS2010開發環境配置(使用opencv

    nbsp () imread cfg 如何配置 lib eight ann dev Zbar條碼解碼器是一個開源的二維碼(包括條形碼)解碼器,可以識別來至於視頻流,圖像文件、手持掃碼器和視頻設備(如攝像頭)等二維碼識別,支持EAN-13/UPC-A, UPC-E, EAN-

    c# 使用ZXing.dll生成

    下載地址 style 工具 wid apach 點擊下載 bitmatrix 寬度 nbsp 最近工作中有需要一個需求,就是把一個服務地址生成二維碼,可以用來掃碼分享,網上找了下方法也比較多,我這裏po一下調用ZXing.dll庫生成二維碼的方法吧。先簡單介紹一下 ZXin

    開源ZBar-MDK STM32F429移植

    section ini scn eat ret 代碼 mode exec $$ 前兩篇文章已經實現ZBar在Windows平臺下的編譯和使用,本文將介紹如何把ZBar移植到STM32F429,IDE使用MDK。 1. MDK工程設置 (1)不勾選Use MicroLIB ,

    如何在條碼標簽打印軟件中導入數據並做出彩色

    F5 Oz tex 嘗試 二維 技術分享 多功能 對象 dbf 我們現在看到的二維碼大部分都是黑白相間的,但是二維碼也是有彩色的,那麽彩色二維碼是怎麽做出來的呢,如果有txt的數據文件,如何實現導入數據庫生成可變的彩色二維碼,接下來我們就在我們的中瑯條碼標簽軟件中為大家演示

    Javascript 生成:QRCode

    ctype sca stat assets ret asset lang UNC .org <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

    基於PHP類PHPqrCode生成帶LOGO

    PHPqrCode是一個PHP二維碼生成類庫,利用它可以輕鬆生成二維碼,官網提供了下載和多個演示demo,檢視地址:http://phpqrcode.sourceforge.net/。下載官網提供的類庫後,只需要使用phpqrcode.php就可以生成二維碼了,當然您的PHP環境必須開啟支援GD2。

    開源zint學習

    一、資源下載 zint本來是可以不需要任何其他庫(libpng和zlib)的支援,但是如果希望zint能夠生成PNG格式的圖片,那麼就需要libpng的支援,而libpng需要zlib的支援。 zint下載:https://github.com/zint/zint libpng庫下載

    PHP 使用GD合成和海報

    PHP 使用GD庫合成二維碼和海報 在做微信專案開發過程中,經常會遇到圖片合成的問題,比如將使用者的二維碼合成到宣傳海報中,那麼,遇到這種情況,利用PHP的GD庫也是很容易實現的,實現步驟如下 1、首先是將二維碼縮小為300*300,因為使用微信公眾號介面獲取的二維碼尺寸為430*430,圖片有點大,所以

    Android掃描zxing的使用

    Android二維碼的使用: 1.匯入依賴: compile 'com.journeyapps:zxing-android-embedded:3.3.0' 2.建立ScannerAcvitity,在佈局中使用以下控制元件: <com.journeyapps.

    使用python3調用MyQR生成動態(附源代

    就是 帶圖片 git int 大小 產生 小問題 中文版 暫時 可生成普通二維碼、帶圖片的藝術二維碼(黑白與彩色)、動態二維碼(黑白與彩色)。 GitHub:https://github.com/sylnsfar/qrcode 中文版:https://githu

    Qt生成或解析

    以上生成和解析二維碼用了兩個庫:(QRCode、QZXing) 這兩個庫可以自行下載。說一下引用,在pro中增加對應pri的路徑: include(QRCode/QRCode.pri) incl

    thinkPHP5引入endroid/qr-code類生成指定(本例生成指定網址)

    我在專案開發中需要使用到的常見的一些類庫,基本都是Packagist / Composer 中國全量映象上找到,然後使用composer直接安裝。 廢話不多說開始吧! 在搜尋框中輸入endroid/qr-code, 點選第一個連結進入, 下滑找到這句話

    Qt專案實戰3:生成器

    qrtool專案簡介 二維碼(Qrcode)現在越來越常用,掃碼支付、掃碼新增好友、掃碼乘坐公交車和地鐵,我們的生活已經與二維碼息息相關。這裡我們使用qt軟體+qrencode開源庫來生成、顯示、儲存二維碼圖片,並且支援簡單的二維碼容錯率修改和大小修改。 ui效

    開源QR CODE編碼/解碼 識別

    在很近很近的未來,城市疏導局(前身是城市管理局)實行新政,秉持“用高科技提升城市形象”的原則,要給辦證從業人員開闢專門的廣告塗鴉牆,條件是:不得使用手工噴塗的字型,而必須改用工整的、不影響大眾視覺的二維碼。 上面的訊息,是“未來的我”給“現在的我”的提醒,看完條訊息,發財無門的我很興奮,辦證是一個多

    WIndow下使用QT C++開發生成帶Logo的的程式

    現在二維碼很流行,大街小巷大小商品廣告上的二維碼標籤都隨處可見,而且大都不是簡單的純二維碼,而是中間有個性圖示的二維碼。網上比較少介紹基於windows下的C++二維碼編碼實現的文章,最近正好在windows平臺下使用QT開發了一個簡單的生成帶LOGO的二維碼小程式,特

    QT中實現圖片生成

    Linux環境下QT中實現二維碼生成有兩種方法,這兩種方法都需要用到開源的程式碼--qrencode。第一種方法是下載qrencode原始碼後,將其移植到目標板子上,然後在程式中包含其路徑進行使用;第二種方法是將qrencode原始碼新增到自己的程式中,直接呼叫使用。本文使用的第二種方法進行生成二維

    python生成(qrcode)簡介和例項

    使用該庫時,需要安裝image庫,而image庫依賴於django、olefile、pillow庫。 使用pip安裝的命令如下: pip install qrcode pip install image安裝成功的圖示: 在命令列使用 在命令列使用語句: qr "som

    編碼與解碼類ThoughtWorks.QRCode

    有原始碼和示例程式 支援二維碼編碼(生成)和解碼(識別) 似乎不支援中文,不過可以自己修改原始碼的編碼格式來支援中文 我比較關注二維碼識別功能,所以比較詳細的測試了 1、非居中、帶LOGO、彩色二維碼均能識別 2、有大量干擾的情況下識別失敗 3、將二維碼旋轉到15度左右