基于 C++ 的 QR 码生成器:libqrencode 和 CQRcode

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

基于 C++ 的 QR 码生成器:完整指南



QR 码已成为现代网络和移动应用程序不可或缺的一部分。它们用于快速访问链接、传输联系信息、支付和身份验证。如果您使用 C++ 开发,并且需要一个内置的 QR 码生成器(无需外部服务或 API),那么这篇文章适合您。我们将介绍两个主要的库:libqrencode(底层、灵活)和 CQRcode(高层、支持输出 PNG)。



为什么要在 C++ 中生成 QR 码?

主要使用场景:

  • 在桌面应用程序中离线生成(库存管理、票务)。
  • 集成到基于 C++ 的服务器解决方案中(高性能)。
  • 在资源受限的环境中工作(嵌入式系统、微控制器)。
  • 完全控制编码和纠错过程。


libqrencode 库

libqrencode 是最流行的用于创建 QR 码的 C/C++ 库。它实现了 ISO/IEC 18004 标准,支持所有版本(1-40)和纠错级别(L, M, Q, H)。该库体积小巧,无需依赖,可在 Linux、macOS 和 Windows(通过 MinGW 或 MSVC)上运行。



安装

# Linux (Debian/Ubuntu)sudo apt install libqrencode-dev

# macOS (Homebrew)brew install libqrencode

# Windows (vcpkg)vcpkg install libqrencode


生成 QR 码到字节数组的示例(黑白图像)

#include <qrencode.h>#include <iostream>#include <vector>

int main() { // 为字符串 "https://pythonlib.ru" 创建 QR 码 QRcode *qr = QRcode_encodeString("https://pythonlib.ru", 0, QR_ECLEVEL_M, QR_MODE_8, 1); if (!qr) { std::cerr << "创建 QR 码时出错"; return 1; }

int width = qr->width; std::cout << "QR 码大小: " << width << "x" << width << "";

// 数据: qr->data — 字节数组 (0 或 1) for (int y = 0; y < width; ++y) { for (int x = 0; x < width; ++x) { bool black = (qr->data[y * width + x] & 0x01); std::cout << (black ? "██" : " "); } std::cout << ""; }

QRcode_free(qr); return 0;}

这段代码用字符在控制台输出 QR 码。要保存为 PNG 或 BMP,需要额外处理。



CQRcode 库

CQRcode 是 libqrencode 的一个封装,可以直接将结果保存为 PNG 文件。如果您需要现成的图形文件而无需额外代码,它非常理想。支持颜色、模块大小调整以及添加中心徽标。



安装

# 从 GitHub 下载源代码: https://github.com/rickyzhang82/CQRcode# 通过 CMake 构建:mkdir build && cd buildcmake ..makesudo make install


将 QR 码保存为 PNG 的示例

#include <CQRcode.h>

int main() { // 创建生成器对象 CQRcode qr; // 设置数据 (URL、文本或 vCard) qr.setData("BEGIN:VCARDVERSION:3.0FN:PythonLibURL:https://pythonlib.ruEND:VCARD"); // 配置参数 qr.setModuleSize(8); // 每个模块的像素大小 qr.setMargin(4); // 边距 (白色边框) qr.setCorrectionLevel(QR_ECLEVEL_H); // 最大纠错级别 // 保存到文件 if (qr.savePNG("pythonlib_qr.png")) { // 成功 } else { // 失败 } return 0;}


库对比

  • libqrencode — 极简,提供原始数据。需要

推荐