Qt + QR-Code-generator 生成二维码

0.前言

之前使用 libgrencode 生成二维码,LGPL 协议实在不方便,所以需要找一个 github 星星多的,代码简单最好 header-only,协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。

QR-Code-generator 正好符合这个要求,而且还提供 C / C++ / Java / Python / JS / Rust 等 6 种语言实现,直接把 qrcodegen.hpp / cpp 类文件放到我们项目里就能使用。

库链接:https://github.com/nayuki/QR-Code-generator

库官网:https://www.nayuki.io/page/qr-code-generator-library

1.基本使用 

测试代码链接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/TestQt_20230711_QRCodeGen

效果展示:

 

测试代码:

void MainWindow::generate()
{// 使用utf8编码QByteArray str = ui->lineEdit->text().toUtf8();const char *text = str.constData();// 二维码有四个纠错等级,从低到高:L-%7/M-%15/Q-%25/H-%30const qrcodegen::QrCode::Ecc level = qrcodegen::QrCode::Ecc::MEDIUM;// 生成二维码try{// 使用简易接口,默认 Version 范围 min=1, max=40// const qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(text, level);// 也可以指定符号版本,越大可容纳的信息越多,如果内容超出容量范围会抛异常// 根据规范,Version1 是 21x21,Version2 是 25x25,每增加一个Version,就比前一版本每边增加 4 个模块std::vector<qrcodegen::QrSegment> segs = qrcodegen::QrSegment::makeSegments(text);const qrcodegen::QrCode qr = qrcodegen::QrCode::encodeSegments(segs, level, 1, 40);const int size = qr.getSize();// 填充位图QImage image = QImage(size, size, QImage::Format_Grayscale8);for (int row = 0; row < size; ++row){uchar *line_ptr = image.scanLine(row);for (int col = 0; col < size; ++col){line_ptr[col] = (uchar)(qr.getModule(row, col) ? 0x00 : 0xFF);}}// 放大一点看得更清楚image = image.scaled(image.width() * 5, image.height() * 5);// 生成后可以用手机扫一扫识别文字内容,注意内容为空可能扫不出来ui->label->setPixmap(QPixmap::fromImage(image));}catch(std::invalid_argument e){// 参数异常,如 minVersion > maxVersionqDebug() << "catch invalid_argument" << e.what();}catch(qrcodegen::data_too_long e){// 内容太长qDebug() << "catch data_too_long" << e.what();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22395.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 用2D图片制作3D动态壁纸

如果想让我们的2D图片动起来可以使用stable-diffusion-webui-depthmap-script插件在SD中进行加工让图片动起来。 这是一个可以从单个图像创建深度图,现在也可以生成3D立体图像对的插件,无论是并排还是浮雕。生成的结果可在3D或全息设备(如VR耳机或Looking Glass显示器)上查…

git下载源码及环境搭建之前端(三)

学习目标&#xff1a; vue 新项目的 前端环境搭建 vue 项目在 使用 Visual Studio Code 开发前端项目环境的搭建及 相关文件的配置 操作步骤&#xff1a; 前端&#xff1a; 下图所示为开发时前端所用的编辑器 注意&#xff1a;在配置时 有时候 localhost 可能 不太好用&…

基于Tensorflow来重现GPT v1模型

OpenAI推出的ChatGPT模型让我们看到了通用人工智能的发展潜力&#xff0c;我也找了GPT的相关论文来进行研究。OpenAI在2017年的论文Improving Language Understanding by Generative Pre-Training提出了GPT的第一个版本&#xff0c;我也基于这个论文来用Tensorflow进行了复现。…

神经网络架构设计常见问题及解答

如果你是人工神经网络 (ANN) 的初学者&#xff0c;你可能会问一些问题。 比如要使用的隐藏层数量是多少&#xff1f; 每个隐藏层有多少个隐藏神经元&#xff1f; 使用隐藏层/神经元的目的是什么&#xff1f; 增加隐藏层/神经元的数量总是能带来更好的结果吗&#xff1f; 使用什…

信贷系统开发设计基础(二)

目录 架构演进篇 01 信贷架构演进概述 02 单体架构案例简介 03 单体系统群架构案例分析 04 微服务案例分析 架构演进篇 01 信贷架构演进概述 02 单体架构案例简介 03 单体系统群架构案例分析 04 微服务案例分析 总结&#xff1a; ---------------------------------------…

GPT-4的详细信息已经泄露

这位作者说GPT-4的详细信息已经泄露&#xff0c;不知道可信度如何。一些关键信息&#xff1a;- GPT-4的大小是GPT-3的10倍以上。我们认为它在120层中总共有大约1.8万亿个参数。- GPT-4是多个专家模型混合在一起&#xff0c;但不是之前说的8个专家&#xff0c;而是16个。研究人员…

【STM32】GPIO

一、GPIO简介 1. 基本介绍 GPIO是通用输入输出端口的简称&#xff0c;STM32芯片通过GPIO与外设连接&#xff0c;从而实现与外设的数据收发。 最基本的输出功能是由STM32控制引脚输出高、低电平&#xff0c;实现开关控制。如把GPIO引脚接入到LED灯控制LED亮灭&#xff0c;或者…

FCPX插件-复古老电影胶片边框幻灯片照片展示介绍动画 Emotion Slides

Emotion Slides是一款fcpx插件&#xff0c;可以制作复古老电影胶片边框幻灯片照片展示介绍动画&#xff0c;完全自定义任意数量的场景&#xff0c;完全定制的控制器&#xff0c;7个独特的场景准备&#xff0c;易使用简单&#xff0c;只需拖放。 Emotion Slides插件的主要功能包…

springboot留守儿童爱心网站

本系统主要是设计出留守儿童爱心网站&#xff0c;基于B/S构架&#xff0c;后台数据库采用了Mysql&#xff0c;可以使数据的查询和存储变得更加有效&#xff0c;可以确保留守儿童爱心管理的工作能够正常、高效的进行&#xff0c;从而提高工作的效率。总体的研究内容如下&#xf…

Windows下编译安装ARPACK

ARPACK采用Arnoldi算法求解大型稀疏矩阵特征值。本文拟记录在Windows下编译安装ARPACK的流程。 零、环境 操作系统Windows 10集成开发环境Visual Studio 2019 CommunityCMake3.24.2Intel oneAPI BaseKit w_BaseKit_p_2023.1.0.47256_offline Intel oneAPI HPCKitw_HPCKit_p…

设计模式之抽象工厂模式

写在前面 1&#xff1a;介绍 1.1&#xff1a;什么时候用工厂方法 当我们有若干个种类的对象需要创建&#xff0c;并且每个种类的对象需要由多个对象协调工作才能完成任务&#xff0c;此时可以考虑使用抽象工厂设计模式。 1.2&#xff1a;UML类图 工厂方法设计模式&#xf…

小红书运营推广

大家好&#xff0c;我是权知星球&#xff0c;今天给大家分享一下小红手运营推广的一些经验&#xff0c;希望能给大家运营小红书带来一些帮助。 这篇文章虽然是基于小红书的运营写的&#xff0c;但新媒体的东西都是相通的&#xff0c;相信这篇文章对运营其他媒体的同学也会有所…