C/C++二维码生成库qrencode编译与使用

2024-08-31 16:36

本文主要是介绍C/C++二维码生成库qrencode编译与使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 qrencode介绍

  • qrencode 是一个用于生成 QR 码(Quick Response Code)的工具和库。QR 码是一种矩阵条形码或二维条形码,能够在水平和垂直方向上存储信息。qrencode 支持多种编码方式,并能够生成不同复杂度和错误校正级别的 QR 码。

2 资源

  • gitub
  • 官网

3 编译

  • 如果不想自己编译,可以跳过此章节。我分别编译了Windows和Linux平台的静态和动态库,可直接使用
  • 工程地址
  • 这里以 4.1.0版本为例

3.1 Windows平台编译

  • 找到cmake的安装目录的 bin目录下,双击打开cmake ui界面cmake-gui.exe
  • 分别选择qrencode代码根目录和编译目录,可创建一个build目录,在build目录中编译
    • 在这里插入图片描述
  • 点击Configure后,会弹出一个对话框,分别选择编译器和架构。然后点击Finish,等待配置生成。
    • 在这里插入图片描述
  • 等待配置生成后,会出现一些选项。默认是生成静态库,勾选BUILD_SHARED_LIBS会生成动态库,CMAKE_INSTALL_PREFIX选择安装目录,默认会安装到C:/Program Files (x86)/QRencode目录下
    • 在这里插入图片描述
  • 选项设置完成后,点击Genrate
  • 如果出现以下报错,不用管,进入qrencode源代码根目录下的build目录,双击打开QRencode.sln,用visual studio编译。
    • 在这里插入图片描述
  • 先选择qrencode工程,点击生成,会生成头文件和库,再点击INSTALL,点击生成,会进行安装。这样在build目录下会生成includelib目录,其中就是生成的头文件和库文件。
    • 在这里插入图片描述

3.2 Linux平台编译

  • 进入源代码根目录,在根目录下创建build文件夹,在build目录下执行cmake ..
  • 接下来需要打开Linux平台的cmake gui工具,在build目录下执行ccmake .,如果没有此命令,执行apt install cmake-curses-gui安装Linux平台的cmake gui工具。
  • 执行ccmake .后会打开一个页面
    • 在这里插入图片描述
  • 和Windows一样,BUILD_SHARED_LIBS 代表是否生成动态库。点击上下按钮可以移动光标,点击回车可以修改值。CMAKE_INSTALL_PREFIX表示安装目录,光标选到这一项后,先点击回车,输入目录地址,再点击回车。全部修改完成后,点击c进行保存,点击q退出。
    • 在这里插入图片描述
  • 然后执行make进行编译,如果出现以下报错,可能是系统缺少libpng库
    • 在这里插入图片描述
  • libpng库 在这里选择一个编译安装。
  • 编译完成后,再执行make install进行安装。同样在build目录下会生成include和lib目录,里面是对应的头文件和库文件。

4 qrencode使用

4.1 API介绍

  • qrencode核心API就一个
    •   /** 函数功能: 用于将给定的字符串编码为二维码* 参数string: 要编码成二维码的数据字符串。* 参数version: 二维码的版本,范围从1到40。*                              1是最小的版本,可以容纳26个字节的数据*                              40是最大的版本,可以容纳最多2953个字节的数据*                              如果设为0,则自动选择合适的版本。* 参数level: 错误修正级别。有以下四个取值,即二维码可以接收的数据损坏程度。*                             QR_ECLEVEL_L = 0,  -  7%*								QR_ECLEVEL_M,      -  15%*								QR_ECLEVEL_Q,      -  25%*								QR_ECLEVEL_H       -  30%* 参数hint: 数据编码模式* 参数casesensitive: 如果为非零值,则在编码时区分大小写,否则不区分大小写。* 返回值:指向 QRcode 结构体指针的指针。*               成功编码后,这个指针会被设置为指向新创建的 QRcode 结构体,该结构体包含了生成的 QR 码信息。*/QRcode *QRcode_encodeString(const char *string, int version, QRecLevel level, QRencodeMode hint, int casesensitive);
      

4.2 在QT中使用

  • 接下来就演示下如何在Qt中使用qrencode。
  • 首先创建一个QT工程,然后将qrencode的头文件和库文件拷贝到QT工程目录下,这里是Windows平台动态库为例。
  • 打开pro文件,右击选择添加库,选择外部库。
    • 在这里插入图片描述
  • 只勾选Windows,选择动态库,选择对应的库文件。然后下一步点击完成即可。
    • 在这里插入图片描述
  • 在QT窗口中需要添加一个QLabel控件,用于显示二维码信息。
  • 代码如下
    •   #include "widget.h"#include "ui_widget.h"#include "qrencode.h"#include <QPainter>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);createQR("Hello qrencode");}Widget::~Widget(){delete ui;}void Widget::createQR(char *data){// 生成二维码QRcode *qrcode = QRcode_encodeString(data, 0, QR_ECLEVEL_L, QR_MODE_8, 0);if(qrcode == NULL){return;}QImage image(qrcode->width, qrcode->width, QImage::Format_ARGB32);QPainter painter(&image);painter.setBrush(Qt::white);painter.setPen(Qt::NoPen);painter.setRenderHint(QPainter::Antialiasing, false);painter.drawRect(0, 0, qrcode->width, qrcode->width);painter.setBrush(Qt::black);// 绘制二维码for(qint32 y = 0; y < qrcode->width; y++){for(qint32 x = 0; x < qrcode->width; x++){unsigned char b = qrcode->data[y * qrcode->width + x];if(b & 0x01){QRectF r(x, y, 1, 1);painter.drawRect(r);}}}QRcode_free(qrcode);// 图片显示到控件ui->label->setPixmap(QPixmap::fromImage(image));ui->label->setScaledContents(true);}
      
  • 效果演示。编译运行后就会生成一个二维码。
    • 在这里插入图片描述

这篇关于C/C++二维码生成库qrencode编译与使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1124425

相关文章

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

C++中零拷贝的多种实现方式

《C++中零拷贝的多种实现方式》本文主要介绍了C++中零拷贝的实现示例,旨在在减少数据在内存中的不必要复制,从而提高程序性能、降低内存使用并减少CPU消耗,零拷贝技术通过多种方式实现,下面就来了解一下... 目录一、C++中零拷贝技术的核心概念二、std::string_view 简介三、std::stri

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM