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

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录

1.QRencode简介

2.编译qrencode

3.在Qt中直接使用QRencode源码

3.1.添加源码

3.2.用字符串生成二维码

3.3.用二进制数据生成二维码

3.4.界面设计

3.5.效果展示

4.注意事项

5.源码下载


1.QRencode简介

        QRencode是一个开源的库,专门用于生成二维码(QR Code)。它支持多种编程语言的接口,包括C、C++、Python等。QR码是一种矩阵式二维码,常用于存储网址、联系信息、文字信息等,广泛应用于各种场景,如产品追踪、广告宣传、文档管理等。

        QRencode的设计简洁高效,提供了易于使用的API接口,使得开发者能够轻松地在应用程序中集成QR码生成和处理功能。

        它的官网:libqrencode

        特性与优势

  1. 输出格式:库支持生成多种格式的输出,包括PNG图片、SVG矢量图、ASCII文本形式的二维码等,这取决于库的具体实现和使用的接口。
  2. C++接口:对于C++,qrencode提供了丰富的类和方法来方便地生成二维码。用户可以创建一个QRcode对象,向其中添加数据,然后将其渲染成所需的格式。
  3. 跨平台qrencode库是跨平台的,可以在多种操作系统上编译和使用,包括Windows、Linux、macOS等。
  4. 生成能力qrencode库能够生成不同版本和纠错级别的QR码,支持从最小的版本1(21x21的模块)到最高的版本40(177x177的模块),并且可以根据需要调整纠错等级(L、M、Q、H)。
  5. C接口:对于C语言使用者,qrencode也提供了函数接口,通过这些函数可以直接操作二维码数据结构,进行编码和输出。
  6. 依赖:在某些情况下,如生成PNG图片输出时,qrencode可能需要额外的依赖,如libpngzlib库。

2.编译qrencode

  1. 下载源代码
  2. 将qrencode-4.1.1解压后,创建一个build文件夹;

  3. 打开Cmake,将qrencode-4.1.1文件夹下的CMakeLists.txt文件拖入CMake中;

  4. 点击【Configure】;

  5. 这里我选择了MSVC2017-64编译器,点击【Finish】;

  6.如下图所示进行配置,配置不正确会由于没有准备依赖而报错;

  1. 设置编译后的安装路径为C:/Users/MHF/Downloads/qrencode-4.1.1/QRencode
  2. 勾选WITHOUT_PNG,表示不支持png;
  3. 取消勾选WITH_TOOLS,否则会报错。

  7.然后点击【Generate】、【Open Project】打开VS;

  8.鼠标右键选择【ALL_BUILD】,点击【生成】,然后选择【INSTALL】,点击【生成】;

  9.就可以在安装路径下生成编译好的文件了;

  在QT中引入编译为静态库的QRencode

  • 创建一个工程,将编译后的QRencode文件夹复制到工程中;

  • 在工程的pro文件中添加下列代码;

CONFIG(debug, debug|release): {
LIBS += -L$$PWD/QRencode/lib/ -lqrencoded
}else{
LIBS += -L$$PWD/QRencode/lib/ -lqrencode
}
INCLUDEPATH += $$PWD/QRencode/include
DEPENDPATH += $$PWD/QRencode/include

3.在Qt中直接使用QRencode源码

3.1.添加源码

  • 将qrencode-4.1.1文件夹中除了.h、.c、config.h.in外的文件删除,文件夹也删除,qrenc.c也删除;

  • config.h.in重命名为config.h

  • 在pro文件中添加所有.h 、.c文件

  • 注意:还需要添加DEFINES += HAVE_CONFIG_H

  • 编译后会报错error: C2065: “MAJOR_VERSION”: 未声明的标识符

  • 打开config.h文件,如下图所示;

  • MAJOR_VERSIONMICRO_VERSIONMINOR_VERSIONVERSION四项修改为如下所示,与自己下载的版本号相同;

  • 然后就可以正常编译了;

3.2.用字符串生成二维码

        使用 QRcode_encodeString 或其他相关函数来生成二维码数据。这个函数会返回一个 QRcode 结构体,其中包含了二维码的像素数据。将 QRcode 结构体中的数据转换为图像格式,以便在屏幕上显示或打印出来。通常,你会遍历二维码的每个像素,并根据像素值(0 或 1)来设置图像的对应像素为黑色或白色。

void QRCodeDemo::setCodeString(const QString& strCodeString)
{m_strCodeString = strCodeString;
}void QRCodeDemo::paintEvent(QPaintEvent *event)
{QRcode *qrcode;qrcode = QRcode_encodeString(m_strCodeString.toStdString().c_str(), 2, QR_ECLEVEL_Q, QR_MODE_8, 1);if (nullptr == qrcode){return QWidget::paintEvent(event);}qint32 temp_width = ui.label->width();qint32 temp_height = ui.label->height();qint32 qrcode_width = qrcode->width > 0 ? qrcode->width : 1;double scale_x = (double)temp_width / (double)qrcode_width;double scale_y = (double)temp_height / (double)qrcode_width;//QImage mainimg = QImage(temp_width, temp_height, QImage::Format_ARGB32);m_qrcodeImage = QImage(temp_width, temp_height, QImage::Format_ARGB32);QPainter painter(&m_qrcodeImage);QColor background(Qt::white);painter.setBrush(background);painter.setPen(Qt::NoPen);painter.drawRect(0, 0, temp_width, temp_height);QColor foreground(QColor("#002266")); // 二维码颜色painter.setBrush(foreground);qDebug()<<qrcode_width<<qrcode_width;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*scale_x, y*scale_y, scale_x, scale_y);painter.drawRects(&r, 1);}}}ui.label->setPixmap(QPixmap::fromImage(m_qrcodeImage));return QWidget::paintEvent(event);
}void QRCodeDemo::on_pushButton_clicked()
{setCodeString(ui.lineEdit->text());
}

        保存二维码图片:

void QRCodeDemo::on_pushButton_2_clicked()
{QString path("./12334434556.jpg");m_qrcodeImage.save(path);
}

3.3.用二进制数据生成二维码

        调用 QRcode_encodeData 可以把图片或其它二进制类型的数据转换为二维码,使用起来比较简单,在这里就不多距离了。

3.4.界面设计

通过Qt Designer设计程序界面,包括:

  • 一个输入框,用于接收用户输入的内容。

  • 一个按钮,用户点击后触发二维码生成。

  • 一个显示区域,用于实时展示生成的二维码。

  • 一个按钮,用户点击后保存二维码,这个按钮是动态生成的。

3.5.效果展示

程序运行效果如下图所示:

点击保存按钮,会在当前运行目录下生成相应的二维码图片:

4.注意事项

  • 二维码无法识别:可能是由于二维码生成时参数设置不当(如版本过低、容错率过低等)或二维码图像质量不佳(如模糊、破损等)导致的。解决方案是调整参数或提高图像质量。
  • 库依赖问题:在编译或运行QRencode时可能会遇到库依赖问题。解决方案是确保系统中已安装所有必要的库文件,并使用包管理器进行管理和更新。
  • 错误处理:在实际应用中,你应该添加更多的错误处理代码,比如检查QRcode_encodeString的返回值是否为NULL,以及处理任何可能的异常或错误情况。

5.源码下载

所有代码都是在QT5.12.12版本基础上编译的。

您可以通过以下链接下载本项目的源码:

通过网盘分享的文件:CreateQrcode_new.zip
链接: https://pan.baidu.com/s/1czmd-o_0Rcp06xDvJzKcVw?pwd=ben7 提取码: ben7

参考:

1.二维码的原理竟如此简单,第一次有人说的这么明白 

相关文章:

Qt中基于开源库QRencode生成二维码(附工程源码链接)

目录 1.QRencode简介 2.编译qrencode 3.在Qt中直接使用QRencode源码 3.1.添加源码 3.2.用字符串生成二维码 3.3.用二进制数据生成二维码 3.4.界面设计 3.5.效果展示 4.注意事项 5.源码下载 1.QRencode简介 QRencode是一个开源的库&#xff0c;专门用于生成二维码&…...

SpringBoot教程(三十二) SpringBoot集成Skywalking链路跟踪

SpringBoot教程&#xff08;三十二&#xff09; | SpringBoot集成Skywalking链路跟踪 一、Skywalking是什么&#xff1f;二、Skywalking与JDK版本的对应关系三、Skywalking下载四、Skywalking 数据存储五、Skywalking 的启动六、部署探针 前提&#xff1a; Agents 8.9.0 放入 …...

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手&#xff08;Copilot、DeepSeek、GPT-4o Mini&#xff09; &#x1f4ca; 引言 近年来&#xff0c;AI 编程助手已成为开发者的高效工具&#xff0c;它们可以加速代码编写、优化代码结构&#xff0c;并提供智能提示。本文介绍如何在 IntelliJ I…...

【机器学习】深入浅出KNN算法:原理解析与实践案例分享

在机器学习中&#xff0c;K-最近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;是一种既直观又实用的算法。它既可以用于分类&#xff0c;也可以用于回归任务。本文将简单介绍KNN算法的基本原理、优缺点以及常见应用场景&#xff0c;并通过一个简单案例帮助大家快速入…...

vscode的一些实用操作

1. 焦点切换(比如主要用到使用快捷键在编辑区和终端区进行切换操作) 2. 跳转行号 使用ctrl g,然后输入指定的文件内容&#xff0c;即可跳转到相应位置。 使用ctrl p,然后输入指定的行号&#xff0c;回车即可跳转到相应行号位置。...

JavaEE基础 Tomcat与Http (下)

目录 1.HTTP 协议 1.1 HTTP 协议概念 1.2. 无状态协议 1.3. HTTP1.0 和 HTTP1.1 1.4 请求协议和响应协议 ​编辑 1.5 请求协议 1.5.1 常见的请求协议 1.5.2 GET 请求 1.5.3 POST请求 1.5.4 响应协议 1.HTTP 协议 Http浏览器访问东西都是遵循的Http协议。 1.1 HTTP 协议…...

【Linux】【进程】epoll内核实现总结+ET和LT模式内核实现方式

【Linux】【网络】epoll内核实现总结ET和LT模式内核实现方式 1.epoll的工作原理 eventpoll结构 当某一进程调用epoll_create方法时&#xff0c;Linux内核会创建一个eventpoll结构体&#xff0c;这个结构体中有两个成员与epoll的使用方式密切相关. struct eventpoll{..../*红…...

英码科技基于昇腾算力实现DeepSeek离线部署

DeepSeek-R1 模型以其创新架构和高效能技术迅速成为行业焦点。如果能够在边缘进行离线部署&#xff0c;不仅能发挥DeepSeek大模型的效果&#xff0c;还能确保数据处理的安全性和可控性。 英码科技作为AI算力产品和AI应用解决方案服务商&#xff0c;积极响应市场需求&#xff0…...

测试常见问题汇总-检查表(持续完善)

WEB页面常见的问题 按钮功能的实现&#xff1a;返回按钮是否可以正常返回 信息保存提交后&#xff0c;系统是否给出“成功”的提示信息&#xff0c;列表数据是否自动刷新 没有勾选任何记录直接点【删除】&#xff0c;是否给出“请先选择记录”的提示 删除是否有删除确认框 …...

【SQL】SQL约束

&#x1f384;约束 &#x1f4e2;作用:是用于限制存储再表中的数据。可以再创建表/修改表时添加约束。 &#x1f4e2;目的:保证数据库中数据的正确、有效性和完整性。 &#x1f4e2;对于一个字段可以同时添加多个约束。 &#x1f384;常用约束: 约束分类 约束 描述关键字非…...

解决 `pip is configured with locations that require TLS/SSL` 错误

问题描述 在使用 pip 安装 Python 包时&#xff0c;可能会遇到以下错误&#xff1a; WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.这意味着 Python 的 ssl 模块未正确安装或配置&#xff0c;导致 p…...

如何commit后更新.gitignore实现push

目录 步骤 1: 更新 .gitignore 文件 步骤 2: 移除已追踪的大文件 步骤 3: 提交更改 步骤 4: 尝试推送 注意事项 如果已经执行了git commit&#xff0c;但后来意识到需要更新.gitignore文件以排除某些不应该被追踪的大文件或目录&#xff0c;并希望在不丢失现有提交记录的情…...

Python 面向对象的三大特征

前言&#xff1a;本篇讲解面向对象的三大特征&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff0c;还有比较细致的&#xff08;类属性类方法&#xff0c;静态方法&#xff09;&#xff0c;分步骤讲解&#xff0c;比较适合理清楚三大特征的思路 面向对象的…...

机器学习_18 K均值聚类知识点总结

K均值聚类&#xff08;K-means Clustering&#xff09;是一种经典的无监督学习算法&#xff0c;广泛应用于数据分组、模式识别和降维等领域。它通过将数据划分为K个簇&#xff0c;使得簇内相似度高而簇间相似度低。今天&#xff0c;我们就来深入探讨K均值聚类的原理、实现和应用…...

从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)

论文链接&#xff1a;https://arxiv.org/pdf/2502.05179 项目链接&#xff1a;https://github.com/FoundationVision/FlashVideo 亮点直击 提出了 FlashVideo&#xff0c;一种将视频生成解耦为两个目标的方法&#xff1a;提示匹配度和视觉质量。通过在两个阶段分别调整模型规模…...

Nuclei 使用手册

Nuclei 是一个开源的快速、高效的漏洞扫描工具&#xff0c;主要用于网络安全领域的漏洞检测。它由 go 语言开发&#xff0c;设计目的是为了高效地扫描 Web 应用程序、网络服务等目标&#xff0c;帮助安全研究人员、渗透测试人员以及红队成员发现潜在的漏洞。 下载链接&#xf…...

python学opencv|读取图像(六十七)使用cv2.convexHull()函数实现图像轮廓凸包标注

【1】引言 前序学习进程中&#xff0c;已经初步探索了对图像轮廓的矩形标注和圆形标注&#xff1a; python学opencv|读取图像&#xff08;六十五&#xff09;使用cv2.boundingRect()函数实现图像轮廓矩形标注-CSDN博客 但实际上&#xff0c;这两种标注方法都是大致的&#x…...

基于SpringBoot的“高校创新创业课程体系”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校创新创业课程体系”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统整体功能图 系统首页界面 个人中心界…...

前端带样式导出excel表格,html表格生成带样式的excel表格

众所周知&#xff0c;前端生成表格通常是用xlsx、excel.js等js库&#xff0c;但这些库想要生成时增加excel样式会很麻烦。 有这么一个js库把html表格连样式带数据一并导出为excel表格: html-table-to-excel npm install html-table-to-excel 使用 html表格&#xff1a; <…...

人形机器人 - 仿生机器人核心技术与大小脑

以下是针对仿生机器人核心技术的结构化总结,涵盖通用核心技术与**“大脑-小脑”专用架构**两大方向: 一、机器人通用核心技术 这些技术是仿生机器人实现功能的基础,与生物体的“身体能力”对应: 1. 感知与交互技术 多模态传感器融合 视觉:3D视觉(如RGB-D相机)、动态目…...

【Linux】【网络】Libevent 内核实现简略版

【Linux】【网络】Libevent 内核实现简略版 1 event_base结构–>相当于Reactor 在使用libevent之前&#xff0c;就必须先创建这个结构。 以epoll为例&#xff1a; 1.1evbase void* evbase-->epollop结构体&#xff08;以epoll为例&#xff09; libevent通过一个void…...

大数据学习(49) - Flink按键分区状态(Keyed State)

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

架构——LVS负载均衡主要模式及其原理、服务水平、优缺点

LVS&#xff08;Linux Virtual Server&#xff09;是一款高性能的开源负载均衡软件&#xff0c;支持多种负载均衡模式。以下是其主要模式及其原理、服务水平、优缺点&#xff1a; 1. NAT 模式&#xff08;Network Address Translation&#xff09; 原理&#xff1a; 请求流程…...

【React组件通讯双重视角】函数式 vs 类式开发指南

目录 前言 正文 父组件向子组件传值 函数式写法 类式写法 子组件向父组件传值 函数式写法 类式写法 兄弟组件通信 函数式写法 类式写法 跨层级通信&#xff08;使用Context&#xff09; 函数式写法 类式写法 进阶通讯方式&#xff08;补充说明&#xf…...

VScode内接入deepseek包过程(本地部署版包会)

目录 1. 首先得有vscode软件 2. 在我们的电脑本地已经部署了ollama&#xff0c;我将以qwen作为实验例子 3. 在vscode上的扩展商店下载continue 4. 下载完成后&#xff0c;依次点击添加模型 5. 在这里可以添加&#xff0c;各种各样的模型&#xff0c;选择我们的ollama 6. 选…...

Ubuntu虚拟机NDK编译ffmpeg

目录 一、ffmpeg源码下载1、安装git(用于下载ffmpeg源码)2、创建源码目录&#xff0c;下载ffmpeg源码 二、下载ubuntu对应的NDK&#xff0c;并解压到opt下1、下载并解压2、配置 ~/.bashrc 三、源码编译、1、创建编译脚本2、脚本文件内容3、设置可执行权限并运行4、编译的结果在…...

机器学习:k近邻

所有代码和文档均在golitter/Decoding-ML-Top10: 使用 Python 优雅地实现机器学习十大经典算法。 (github.com)&#xff0c;欢迎查看。 K 邻近算法&#xff08;K-Nearest Neighbors&#xff0c;简称 KNN&#xff09;是一种经典的机器学习算法&#xff0c;主要用于分类和回归任务…...

js第十二题

题十二&#xff1a;轮播图 要求&#xff1a; 1.鼠标不在图片上方时&#xff0c;进行自动轮播&#xff0c;并且左右箭头不会显示&#xff1b;当鼠标放在图片上方时&#xff0c;停止轮播&#xff0c;并且左右箭头会显示&#xff1b; 2.图片切换之后&#xff0c;图片中下方的小…...

讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。

在信息爆炸的时代&#xff0c;智能语音问答系统正以前所未有的速度融入我们的日常生活。然而&#xff0c;随着数据泄露事件的频发&#xff0c;用户对于隐私保护的需求日益增强。想象一下&#xff0c;一个无需联网、即可响应你所有问题的智能助手——这就是纯离线大模型智能语音…...

Day4 25/2/17 MON

【一周刷爆LeetCode&#xff0c;算法大神左神&#xff08;左程云&#xff09;耗时100天打造算法与数据结构基础到高级全家桶教程&#xff0c;直击BTAJ等一线大厂必问算法面试题真题详解&#xff08;马士兵&#xff09;】https://www.bilibili.com/video/BV13g41157hK?p4&v…...