qt二維碼示例

原創文章,引用請保證原文完整性,尊重做者勞動,原文地址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
ui

 
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
相關文章
相關標籤/搜索