当前位置: 首页 > news >正文

使用QRencode生成二维码

文章目录

  • 一、QRencode介绍
  • 二、使用步骤
    • 1、下载源码
    • 2、编译源码
    • 3、生成二维码


一、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);
}

相关文章:

  • selenium基本使用(一)
  • 【微前端-致命隐患】主子应用异步加载
  • C++11QT复习 (三)
  • 【嵌入式学习2】c语言重点整理
  • Shiro漏洞攻略
  • c#处理算数溢出的情况
  • 【Android】我们是如何优化安卓应用大小至10MB以下的
  • 如何进行文件操作
  • 【QT】Qt creator快捷键
  • Ftrans飞驰云联受邀参加“2025汽车零部件CIO年会“并荣获智象奖
  • 【python】OpenCV—Hand Detection
  • Packaging Process
  • 【随手记】支持多模态输入的 AI Chatbot App
  • 抓包软件【Fiddler】
  • .Net SSO 单点登录方式
  • 软考笔记——操作系统
  • SAP GUI Script for C# SAP脚本开发快速指南与默认主题问题
  • 2、稳定排序二——插入排序
  • 注册中心之Nacos相较Eureka的提升分析
  • JavaScript中的宏任务和微任务
  • 猎金,游戏,诚不我欺
  • 在“蟑螂屋”里叠衣服,我看见人生百态
  • 重庆市大渡口区区长黄红已任九龙坡区政协党组书记
  • 侧记|“五五购物节”启动!最大力度补贴,买买买 “666”
  • 长三角议事厅| AI作曲时代:长三角如何奏响数字音乐乐章
  • 浪尖计划再出发:万亿之城2030课题组赴九城调研万亿产业