使用QRencode生成二维码


一、QRencode介绍

QRencode 是一个用于生成QR码(二维码)的库,它支持多种编程语言的接口,包括C、C++、Python等。它能够生成不同版本和纠错级别的QR码,支持从最小的版本1(21x21的模块)到最高的版本40(177x177的模块),并且可以根据需要调整纠错等级(L、M、Q、H)。

支持生成多种格式的输出,包括PNG图片、SVG矢量图、ASCII文本形式的二维码等,这取决于库的具体实现和使用的接口。支持多种数据类型编码,如数字、字母、二进制数据、UTF-8文本、电子邮件地址、电话号码、URL等。

对于C++,QRencode提供了丰富的类和方法来方便地生成二维码。用户可以创建一个QRcode对象,向其中添加数据,然后将其渲染成所需的格式。

QRencode库是跨平台的,可以在多种操作系统上编译和使用,包括Windows、Linux、macOS等。在某些情况下,如生成PNG图片输出时,qrencode可能需要额外的依赖,如libpng和zlib库。

二、使用步骤

1、下载源码

下载地址:https://fukuchi.org/works/qrencode/,之后解压。在解压后的文件夹内新建 build 和 output 目录。

2、编译源码

打开 CMake,在 “Where is the source code” 中选择QRencode源码目录,在 “Where to build the binaries” 中选择构建目录(即 build 文件夹)。

点击 “Configure” 按钮,选择 “Visual Studio 16 2019” 作为生成器,选择平台为 “x64”(特别注意:这里选择的 Visual Studio 版本需要和使用这个库的工程同个版本)。

点击"Finish"。在 Configure 完成后,会看到一些红色的配置选项,主要确认以下选项:

  • BUILD_SHARED_LIBS,是否生成动态库
  • CMAKE_INSTALL_PREFIX,选择 output 文件夹
  • WITHOUT_PNG,勾选此项,表示不支持png
  • WITH_TOOLS,取消勾选此项,否则会报错

示例图片

然后点击”Generate“、”Open Project“ 打开Visual Studio。鼠标右键选择”ALL_BUILD“,点击”生成“,然后选择”INSTALL“,点击”生成“:

示例图片

在 output 下看到生成的库文件:

示例图片

3、生成二维码

现在可以利用QRencode库来生成二维码了:

#include "qrencode.h"
#pragma comment(lib, "qrencoded.lib")

void generateQRCode() {
    QString text = "123456789";
    // 使用QRencode生成二维码数据
    QRcode *qrCode = QRcode_encodeString(text.toUtf8().constData(),
                                         0,  // 版本
                                         QR_ECLEVEL_L,  // 纠错级别
                                         QR_MODE_8,  // 编码模式
                                         1);  // 是否使用大小写区分
    if (!qrCode) return;
    // 设置二维码图片大小
    int width = qrCode->width;
    int scale = 4;  // 放大倍数
    int margin = 10; // 边距
    int imageSize = width * scale + 2 * margin;
    // 创建QImage
    QImage image(imageSize, imageSize, QImage::Format_RGB32);
    image.fill(Qt::white);
    // 绘制二维码
    QPainter painter(&image);
    painter.setPen(Qt::NoPen);
    painter.setBrush(Qt::black);
    for(int y = 0; y < width; y++) {
        for(int x = 0; x < width; x++) {
            if(qrCode->data[y * width + x] & 1) {
                painter.drawRect(margin + x * scale, 
                                 margin + y * scale,
                                 scale, 
                                 scale);
            }
        }
    }

    // 在QLabel控件上显示二维码
    QLabel *imageLabel = new QLabel(this);
    imageLabel->setPixmap(QPixmap::fromImage(image));
        
    // 释放QRcode对象
    QRcode_free(qrCode);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值