最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例

 更新時(shí)間:2022年01月13日 11:20:07   作者:龔建波  
本文主要介紹了Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

0.前言

libqrencode 是一個(gè)生成二維碼的 c 語言庫,二維碼的容量可達(dá) 7000 位或 4000 個(gè)字符,采用 LGPL-2.1 協(xié)議可放心食用,github 鏈接如下:

https://github.com/fukuchi/libqrencode

libqrencode 支持 JIS(日本工業(yè)標(biāo)準(zhǔn))X0510:2004 或 ISO / IEC 18004 中描述的 QR Code 模型 2。該規(guī)范中的大多數(shù)功能都已實(shí)現(xiàn),例如:

  • 可以嵌入數(shù)字,字母,日語漢字(Shift-JIS)或任何8位代碼
  • 優(yōu)化的字符串編碼
  • 符號(hào)的結(jié)構(gòu)化追加
  • Micro QR Code(實(shí)驗(yàn)性)

當(dāng)前不支持以下功能:

  • ECI 和 FNC1 模式
  • QR Code 模型 1(不建議使用)

1.編譯 libqrencode

可以使用 vcpkg 安裝該庫,或者下載源碼用 CMake 構(gòu)建。下面使用 CMake + VS 來生成。

使用 CMake-gui 打開工程目錄后點(diǎn) Configure,勾上 BUILD_SHARED_LIBS 生成動(dòng)態(tài)庫而不是靜態(tài)庫,因?yàn)槭?LGPL 協(xié)議。點(diǎn) Add Entry 添加 CMAKE_DEBUG_POSTFIX 字段,類型為 String,值為 d,使 debug 模式生成結(jié)果帶 d 后綴,去掉 WITH 那幾個(gè)工具和測試相關(guān)的,用不著,而且有依賴。我這里還出現(xiàn)了 ICONV 依賴未找到的警告,直接忽略。配置好后點(diǎn) Generate 生成 VS 工程文件。

在指定的生成目錄下(上圖的 build),找到 sln 工程文件,用 VS 打開。

分別生成 Debug 和 Release 版本的 dll,如果需要帶調(diào)試信息 Release,可以選 RelWidthDebInfo 。編譯完后,install 到指定的目錄中去,include 和 lib 兩個(gè)文件夾就是最終我們需要的頭文件和庫文件;或者直接從編譯生成的目錄找對應(yīng)文件。

2.Qt 中使用 libqrencode 

測試工程(Qt5 + MSVC2019):

MyTestCode2021/Qt/QtQRencodeVS2019 at master · gongjianbo/MyTestCode2021 · GitHub

主要代碼: 

/**
 * 從字符串創(chuàng)建一個(gè)符號(hào)。庫自動(dòng)解析輸入字符串并在二維碼符號(hào)中編碼.
 * @warning 禁用pthread時(shí)線程不安全.
 * @param string NUL('\0')結(jié)尾的C字符串.
 * @param version 符號(hào)版本.越大可容納的信息越多.0則按實(shí)際內(nèi)容確定
 * @param level 糾錯(cuò)等級,枚舉.
 * @param hint 編碼模式,utf8用QR_MODE_8.
 * @param casesensitive 區(qū)分大小寫(1) 不區(qū)分(0).
 * @return 返回QRcode類的實(shí)例。結(jié)果QRcode的版本可能是大于指定的版本.
 * 出現(xiàn)錯(cuò)誤時(shí),返回NULL,設(shè)置errno以指示錯(cuò)誤.
 * @throw EINVAL invalid input object.
 * @throw ENOMEM unable to allocate memory for input objects.
 * @throw ERANGE input data is too large.
 */
//extern QRcode *QRcode_encodeString(const char *string, int version, QRecLevel level,
//                                   QRencodeMode hint, int casesensitive);
QImage MainWindow::qrEncode(const QString &info)
{
    QImage ret; //放二維碼圖片結(jié)果
    int scale = 4; //方塊繪制大小
    QByteArray info_data = info.toUtf8();
    QRcode* qr = QRcode_encodeString(info_data.constData(), 0, QR_ECLEVEL_Q, QR_MODE_8, 1);
    if (qr && qr->width > 0)
    {
        int img_width = qr->width * scale;
        ret = QImage(img_width, img_width, QImage::Format_Mono); //mono位圖
        QPainter painter(&ret);
        painter.fillRect(0, 0, img_width, img_width, Qt::white);//背景填充白色
        painter.setPen(Qt::NoPen);
        painter.setBrush(Qt::black); //黑色方塊
        for (int y = 0; y < qr->width; y++) //行
        {
            for (int x = 0; x < qr->width; x++) //列
            {
                if (qr->data[y * qr->width + x] & 1) //1表示黑塊
                {
                    QRect r(x * scale, y * scale, scale, scale);
                    painter.drawRect(r);
                }
            }
        }
        QRcode_free(qr);
    }
    return ret;
}

到此這篇關(guān)于Qt結(jié)合libqrencode生成二維碼的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)Qt libqrencode生成二維碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言SetConsoleCursorPosition函數(shù)使用方法

    C語言SetConsoleCursorPosition函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleCursorPosition函數(shù)的使用方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • 海量數(shù)據(jù)處理系列之:用C++實(shí)現(xiàn)Bitmap算法

    海量數(shù)據(jù)處理系列之:用C++實(shí)現(xiàn)Bitmap算法

    本篇文章是對用C++實(shí)現(xiàn)Bitmap算法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析

    C++ 在堆上開辟與釋放二維、三維指針詳細(xì)解析

    一維指針其實(shí)就相當(dāng)于一維數(shù)組,不用去看書上所說的數(shù)組在內(nèi)存中的首地址這些晦澀的話,以此類推 二維指針就相當(dāng)于二維數(shù)組,新手對一維數(shù)組的開辟與釋放比較容易熟悉
    2013-09-09
  • OpenCV Matlab生成視頻倒放功能

    OpenCV Matlab生成視頻倒放功能

    這篇文章主要介紹了OpenCV Matlab生成視頻倒放功能,大家都知道不少帶聲音視頻的后綴名往往都是.mp4,那么如何獲取里面的音頻呢?本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-01-01
  • Qt學(xué)習(xí)之容器的使用詳解

    Qt學(xué)習(xí)之容器的使用詳解

    Qt容器主要優(yōu)點(diǎn)就是在所有的平臺(tái)上的運(yùn)行都表現(xiàn)的一致,并且它們都是隱含共享的,這篇文章就來和大家講講Qt中容器的具體用法吧,希望對大家有所幫助
    2023-03-03
  • CFile與CStdioFile的文件讀寫使用方法詳解

    CFile與CStdioFile的文件讀寫使用方法詳解

    以下是對CFile與CStdioFile的文件讀寫使用方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • C和C++ const的聲明差異

    C和C++ const的聲明差異

    本文給大家簡單匯總了下C語言的const與C++的const的聲明差異,非常的簡單,也很實(shí)用,有需要的小伙伴可以參考下
    2016-03-03
  • 如何利用tinyxml操縱xml及注意問題

    如何利用tinyxml操縱xml及注意問題

    這篇博客,我們詳細(xì)講述如何利用tinyxml操縱xml。以及在操作的過程中,我們應(yīng)該注意的問題
    2013-01-01
  • C++重載運(yùn)算符你真的了解嗎

    C++重載運(yùn)算符你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++重載運(yùn)算符,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C++解決TCP粘包的問題實(shí)現(xiàn)

    C++解決TCP粘包的問題實(shí)現(xiàn)

    本文主要介紹了C++解決TCP粘包的問題實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評論

梁山县| 德钦县| 旌德县| 凉山| 宁武县| 彰武县| 珲春市| 松溪县| 柘城县| 慈溪市| 邹平县| 兴安盟| 搜索| 丁青县| 泾阳县| 云南省| 绥阳县| 防城港市| 盈江县| 邵东县| 多伦县| 保康县| 东乌珠穆沁旗| 南皮县| 祁阳县| 阿合奇县| 达孜县| 正蓝旗| 灵宝市| 庆城县| 夏邑县| 渭南市| 木兰县| 邓州市| 石渠县| 伊宁县| 杭州市| 白玉县| 子长县| 新河县| 柘荣县|