Qt结合libqrencode生成二维码的实现示例

目录
  • 0.前言
  • 1.编译 libqrencode
  • 2.Qt 中使用 libqrencode

0.前言

libqrencode 是一个生成二维码的 c 语言库,二维码的容量可达 7000 位或 4000 个字符,采用 LGPL-2.1 协议可放心食用,github 链接如下:

https://github.com/fukuchi/libqrencode

libqrencode 支持 JIS(日本工业标准)X0510:2004 或 ISO / IEC 18004 中描述的 QR Code 模型 2。该规范中的大多数功能都已实现,例如:

  • 可以嵌入数字,字母,日语汉字(Shift-JIS)或任何8位代码
  • 优化的字符串编码
  • 符号的结构化追加
  • Micro QR Code(实验性)

当前不支持以下功能:

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

1.编译 libqrencode

可以使用 vcpkg 安装该库,或者下载源码用 CMake 构建。下面使用 CMake + VS 来生成。

使用 CMake-gui 打开工程目录后点 Configure,勾上 BUILD_SHARED_LIBS 生成动态库而不是静态库,因为是 LGPL 协议。点 Add Entry 添加 CMAKE_DEBUG_POSTFIX 字段,类型为 String,值为 d,使 debug 模式生成结果带 d 后缀,去掉 WITH 那几个工具和测试相关的,用不着,而且有依赖。我这里还出现了 ICONV 依赖未找到的警告,直接忽略。配置好后点 Generate 生成 VS 工程文件。

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

分别生成 Debug 和 Release 版本的 dll,如果需要带调试信息 Release,可以选 RelWidthDebInfo 。编译完后,install 到指定的目录中去,include 和 lib 两个文件夹就是最终我们需要的头文件和库文件;或者直接从编译生成的目录找对应文件。

2.Qt 中使用 libqrencode

测试工程(Qt5 + MSVC2019):

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

主要代码:

/**
 * 从字符串创建一个符号。库自动解析输入字符串并在二维码符号中编码.
 * @warning 禁用pthread时线程不安全.
 * @param string NUL('\0')结尾的C字符串.
 * @param version 符号版本.越大可容纳的信息越多.0则按实际内容确定
 * @param level 纠错等级,枚举.
 * @param hint 编码模式,utf8用QR_MODE_8.
 * @param casesensitive 区分大小写(1) 不区分(0).
 * @return 返回QRcode类的实例。结果QRcode的版本可能是大于指定的版本.
 * 出现错误时,返回NULL,设置errno以指示错误.
 * @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; //放二维码图片结果
    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;
}

到此这篇关于Qt结合libqrencode生成二维码的实现示例的文章就介绍到这了,更多相关Qt libqrencode生成二维码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于PyQT5制作一个二维码生成器

    个性化二维码的exe桌面应用的获取方式我放在文章最后面了,注意查收.通过执行打包后的exe应用程序可以直接运行生成个性化二维码. 开始之前先来看一下通过二维码生成器是如何生成个性化二维码的. 其中使用的python包和之前的GUI应用制作使用的模块是一样的. # -*- coding:utf-8 -*- import os import sys from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore im

  • Qt结合libqrencode生成二维码的实现示例

    目录 0.前言 1.编译 libqrencode 2.Qt 中使用 libqrencode 0.前言 libqrencode 是一个生成二维码的 c 语言库,二维码的容量可达 7000 位或 4000 个字符,采用 LGPL-2.1 协议可放心食用,github 链接如下: https://github.com/fukuchi/libqrencode libqrencode 支持 JIS(日本工业标准)X0510:2004 或 ISO / IEC 18004 中描述的 QR Code 模型 2.

  • Qt实现字符串生成二维码功能

    目录 前言 开发环境 实现步骤 资源包数据 配置属性 二维码操作 总结 前言 最近在整理开发项目中遇到的知识点,发现了一个特别有意思的功能:使用字符串生成二维码操作. 下面是实现的效果图 开发环境 WIN10环境 + VS2017 + Qt 5.14.2 64位开发环境 实现步骤 资源包数据 说实话我的开发环境还真是挺麻烦的~ 想要使用Qt使用二维码功能,必须要外加 "qrencode"库.针对我目前用的环境使用cmake编译了一个dll库 编译出来的文件包含了两个:lib和src,如

  • PHP基于phpqrcode类生成二维码的方法示例详解

    HP QR Code是一个PHP二维码生成类库,利用它可以轻松生成二维码,官网提供了下载和多个演示demo,查看地址: http://phpqrcode.sourceforge.net/ 下载官网提供的类库后,只需要使用phpqrcode.php就可以生成二维码了,当然您的PHP环境必须开启支持GD2. phpqrcode.php提供了一个关键的png()方法,其中 参数$text表示生成二位的的信息文本: 参数$outfile表示是否输出二维码图片 文件,默认否: 参数$level表示容错率,

  • 利用java生成二维码工具类示例代码

    二维码介绍 二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理. 如下为java生成二维码工具类,可以选择生成文件,或者直接在页面生成,话不多说了,来一起看看详细的示例代码吧. 示例代码 import java.aw

  • Python实现将文本生成二维码的方法示例

    本文实例讲述了Python实现将文本生成二维码的方法.分享给大家供大家参考,具体如下: #coding:utf-8 ''' Python生成二维码 v1.0 主要将文本生成二维码图片 测试一:将文本生成白底黑字的二维码图片 测试二:将文本生成带logo的二维码图片 ''' __author__ = 'Xue' import qrcode from PIL import Image import os #生成二维码图片 def make_qr(str,save): qr=qrcode.QRCode

  • ASP.NET生成二维码的方法总结

    本文实例总结了ASP.NET生成二维码的方法.分享给大家供大家参考,具体如下: 分享一例c#生成二维码的代码,直接引用ThoughtWorks.QRCode.dll 类生成二维码,有需要的朋友参考下. 方法1.直接引用ThoughtWorks.QRCode.dll 类,生成二维码. 代码示例: ThoughtWorks.QRCode.Codec.QRCodeEncoder encoder = new QRCodeEncoder(); encoder.QRCodeEncodeMode = QRCo

  • Python及Django框架生成二维码的方法分析

    本文实例讲述了Python及Django框架生成二维码的方法.分享给大家供大家参考,具体如下: 一.包的安装和简单使用 1.1 用Python来生成二维码很简单,可以看 qrcode 这个包: pip install qrcode qrcode 依赖 Image 这个包: pip install Image 如果这个包安装有困难,可选纯Python的包来实现此功能,见下文. 1.2 安装后就可以使用了,这个程序带了一个 qr 命令: qr 'http://www.ziqiangxuetang.c

  • php生成二维码时出现中文乱码的解决方法

    本文实例讲述了php生成二维码时出现中文乱码的解决方法.分享给大家供大家参考.具体分析如下: 最近做了个扫描二维码得到vcard的项目,遇到一个问题,有一部分生成完的二维码,用android系统手机扫描后得到的vcard中的中文姓名是乱码,经过比对发现,这部分vcard中ORG这个类型没有内容,随即判断没内容就加上一个固定的字符串,这样乱码的问题得以解决. php生成二维码的几种方式 1.google开放api,代码如下: 复制代码 代码如下: $urlToEncode="http://www.

  • 详解ZXing-core生成二维码的方法并解析

    二维码无处不在,扫一扫有礼品哦,现在二维码这么流行,想必大家不是很清楚二维码是怎么生成的吧,现在小编通过给大家分享本文帮助大家学习二维码生成的方法. 其实主要是利用goggle发布的jar来使用的此功能. 1.二维码的生成 将Zxing-core.jar 包加入到classpath下. 二维码的生成需要借助MatrixToImageWriter类,该类是由Google提供的,可以将该类拷贝到源码中,这里我将该类的源码贴上,可以直接使用. 直接可以生成二维码的代码 public void test

  • Yii2.0实现生成二维码功能实例

    本文实例讲述了Yii2.0实现生成二维码功能.分享给大家供大家参考,具体如下: 通过composer安装: 1.下面的方法是通过composer加载 php composer.phar require "2amigos/yii2-qrcode-helper" "*" 或者添加 "2amigos/yii2-qrcode-helper" : "*" 到对应项目的composer.json文件中 通过归档文件安装: 不习惯用comp

随机推荐