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

相关文章

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

SpringBoot整合AOP及使用案例实战

《SpringBoot整合AOP及使用案例实战》本文详细介绍了SpringAOP中的切入点表达式,重点讲解了execution表达式的语法和用法,通过案例实战,展示了AOP的基本使用、结合自定义注解以... 目录一、 引入依赖二、切入点表达式详解三、案例实战1. AOP基本使用2. AOP结合自定义注解3.

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python使用Matplotlib和Seaborn绘制常用图表的技巧

《Python使用Matplotlib和Seaborn绘制常用图表的技巧》Python作为数据科学领域的明星语言,拥有强大且丰富的可视化库,其中最著名的莫过于Matplotlib和Seaborn,本篇... 目录1. 引言:数据可视化的力量2. 前置知识与环境准备2.1. 必备知识2.2. 安装所需库2.3

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

python中的flask_sqlalchemy的使用及示例详解

《python中的flask_sqlalchemy的使用及示例详解》文章主要介绍了在使用SQLAlchemy创建模型实例时,通过元类动态创建实例的方式,并说明了如何在实例化时执行__init__方法,... 目录@orm.reconstructorSQLAlchemy的回滚关联其他模型数据库基本操作将数据添