目录

功能实现

资源包数据

配置属性

1:头文件设置

2:静态库设置

二维码操作

1:创建QR操作类用于绘制QImage图形

2:生成二维码图形QImage

2.1:定义QImage对象存储生成内容

2.2:构造绘图指针

2.3:根据字符串获取QRcode类实例

2.4:设置点画刷以及背景画刷

2.5:绘制图形

2.6:释放QRcode指针

2.7:添加二维码图形

2.8:结束绘制

3:二维码函数调用

总结


最近在整理开发项目中遇到的知识点,发现了一个特别有意思的功能:使用字符串生成二维码操作。

功能实现

开发环境:WIN10环境 + VS2017 + Qt 5.14.2 64位开发环境

资源包数据

说实话我的开发环境还真是挺麻烦的~

想要使用Qt使用二维码功能,必须要外加 "qrencode"库。针对我目前用的环境使用cmake编译了一个dll库

编译出来的文件包含了两个:lib和src,如果跟我的开发环境不一致的,可以自行编译,也是很快的(我发现camke真是一个好工具呀~)

配置属性

1:头文件设置

2:静态库设置

说明:根据上述三张图片中红色区域部分进行设置。

大家可以发现我设置的时候都有一个相同点,全部使用了相对路径。

一般多个人在做规模庞大的项目时,都会采用相对路径,即使每个人将项目放到了不同磁盘,也不会发生数据读取的问题。

说到了这里,那么我就接着来说一些关于配置的题外话吧~希望对你有帮助哦!

题外话:既然如此,我们生成的exe也会放到一个单独的目录中,假设我们叫做bin文件

在VS中默认生成的exe会根据是debug或者release环境生成到对应的文件夹中。当前要将两个环境合并需要修改配置属性中的常规操作

最后,也需要在代码中设置,将exe的生成目录设置成当前路径,否则在程序中使用相对路径时,无法找到对应文件!

QString qExePath = QCoreApplication::applicationDirPath();
QDir::setCurrent(qExePath);

这两句话最好放到main.cpp中,让整个项目生效。

二维码操作

接下来便是我们的重头戏了,如何使用字符串生成二维码啦

1:创建QR操作类用于绘制QImage图形

定义类:QORCodeOperation

#include <QPainter>
#include <xstring>
class CQRCodeOperation
{
public:CQRCodeOperation();~CQRCodeOperation();QImage GeneratedGraphics(std::string sData, QSize nsize); //生成图形
private:QPixmap m_imgIcon;
};

函数(GeneratedGraphics)

传入指定的字符串以及二维码的宽度高度,返回图形的QImage值。

一般情况下我们会将QIamge赋值到QLable上展示。

参数(m_imgIcon)

QPximap类型的成员变量,主要是绘制图形,在最开始的显示效果生可以看出二维码中间添加了一张图片,主要用于显示图片的。

2:生成二维码图形QImage

2.1:定义QImage对象存储生成内容

QImage image(nsize, QImage::Format_RGB32);
image.fill(QColor("#000000"));

2.2:构造绘图指针

QPainter painter(&image);
if (!painter.isActive())
{return image;
}

构造QPainter绘制指针,一般当传入的QSize数据为0时,是无法进行后续操作的,也就是isActiva = false

2.3:根据字符串获取QRcode类实例

QRcode *qrCode = QRcode_encodeString(sData.c_str(), 1, QR_ECLEVEL_L, QR_MODE_8, 1);

2.4:设置点画刷以及背景画刷

QColor colorForPoint("#FFB6C1");
QColor colorForBackground("#ffffff");painter.setBrush(colorForBackground);
painter.setPen(Qt::NoPen);
painter.drawRect(0, 0, image.width(), image.height());painter.setBrush(colorForPoint);

2.5:绘制图形

const double &&s = (qrCode->width > 0) ? (qrCode->width) : (1);
const double &&aspect = image.width() / image.height();
const double &&scale = ((aspect > 1.0) ? image.height() : image.width()) / s;for (int y = 0; y < s; ++y)
{const int &&yy = static_cast<int>(y * s);for (int x = 0; x < s; ++x){const int &&xx = yy + x;const unsigned char &b = qrCode->data[xx];if (b & 0x01){const double rx1 = x * scale, ry1 = y * scale;QRectF r(rx1, ry1, scale, scale);painter.drawRects(&r, 1);}}
}

这里为了偷懒再判断宽度值时采用了三目运算符操作。

2.6:释放QRcode指针

QRcode_free(qrCode);

2.7:添加二维码图形

其实我们在中间展示的图片比较小,直接覆盖到二维码上就可以了

painter.setRenderHint(QPainter::Antialiasing, true); //抗锯齿
int nLeft = (nsize.width() - 30) / 2;
int nTop = (nsize.height() - 30) / 2;
QRect rectPng(nLeft, nTop,30,30);
painter.drawPixmap(rectPng, m_imgIcon);

2.8:结束绘制

painter.end();

到这里具体的二维码绘制已经完成了,对外我们只需要返回存储绘制数据的QImage就可以了。

3:二维码函数调用

CQRCodeOperation dlg;
QImage img = dlg.GeneratedGraphics(sText, QSize(250, 250));
ui.labPng->setPixmap(QPixmap::fromImage(img));

总结

到这里字符串生成二维码功能就讲解完成了,难度不是很大,只要将环境配置成功就完成了一般的功能了,剩下的就是根据你的想法,想要如何展示了。

我是糯诺诺米团,一名C++开发程序媛~

Qt字符串生成二维码功能相关推荐

  1. 【vue生成二维码】1.将后端返回的二维码字符串生成二维码;2.下载功能

    vue使用qrcode插件 一.只展示一张图的效果 一.效果图: 二.具体代码: 1.安装 npm i qrcodejs2 --save 2.在页面使用 2.1.html <div id=&qu ...

  2. android 分享二维码图片到微信QQ(url地址字符串生成二维码图片、分享二维码图片到微信QQ)

    主要用到的功能 1.url地址字符串生成二维码图片 2.分享二维码图片到微信QQ 所需的依赖包 implementation 'com.google.zxing:core:3.0.1' 代码 1.将U ...

  3. 微信小程序业务-字符串生成二维码(weapp-qrcode)

    微信小程序业务-字符串生成二维码(weapp-qrcode) 前言 邂逅weapp-qrcode 基本使用 详细参数 小程序组件中使用 image属性详解 想使用网络图片? 参考地址 前言 在小程序项 ...

  4. 【在web项目jsp页面自动生成二维码功能】

    在web项目jsp页面自动生成二维码功能 原文: http://www.cnblogs.com/gczmn/. https://www.jq22.com/jquery-info294/. 先将下面的文 ...

  5. 微信小程序实现生成二维码功能并下载到本地

    微信小程序实现生成二维码功能并下载到本地 背景 实现 备注 背景 有这样一个需求,后台返回了url地址,微信小程序将url地址转成二维码图片,展示在页面上,并且该二维码图片可下载到用户手机相册中 实现 ...

  6. 字符串生成二维码并且批量打包下载

    所需依赖包 qrcode 二维码生成的插件库 jszip 用来打包压缩的一个库 file-saver 文件保存下载的插件库 npm install jszip npm install file-sav ...

  7. javascript和java两种方式实现生成二维码功能

    java实现过程 使用maven工程实现生成二维码功能 pom.xml文件引入依赖 <!-- https://mvnrepository.com/artifact/com.google.zxin ...

  8. 微信小程序自定义弹框+生成二维码功能

    最近在做小程序的功能,需求是弹框生成二维码功能,所以根据需求自定义了一个弹框组件,后续其他地方也可以用到. 最后效果图如下 dialog部分 <!--components/dialog/dial ...

  9. 字符串生成二维码图像(C++,Qt)

    字符串转换二维码图像

  10. 【小沐学qt】生成二维码

    目录 一.功能简介 二.本地生成二维码 1.第三方库Libqrencode 2.编写Qt程序代码,生成本地二维码 三.在线生成二维码 1.浏览器chrome 2.Google API 3.搜狐视频 A ...

最新文章

  1. Linux Test Project 测试套件说明
  2. 清华大学微纳脑机接口与机器人实验室:微纳系统机械设计研发工程师招聘
  3. 【正一专栏】瓜迪奥拉就是一座无可匹及的丰碑
  4. coreldraw的线条怎么变成圆头_别再穿到处撞的小白鞋了,这五款春夏小皮鞋,不管怎么搭配都好看...
  5. MyBatis-学习笔记04【04.自定义Mybatis框架基于注解开发】
  6. HelloGitHub
  7. [leetcode]104.二叉树的最大深度
  8. 常见问题摘要(生活篇)
  9. Java 字符串匹配的KMP算法
  10. 快应用不会取代 App,未来将赋能 IoT!
  11. DjangoForm 之创建FORM模板进行验证
  12. D3.js学习(一)
  13. 玉柴spn码故障对照表_玉柴共轨电喷发动机故障码一览表
  14. 市场对计算机专业的需求是怎么样的,计算机专业的行业需求分析
  15. 乳清白蛋白纳米粒修饰生物素
  16. 解决teamviewer访问超时限制的问题
  17. BT5的U盘完整安装
  18. VS2022背景图片设置
  19. 淘宝开通恶意评价维权通道 客服24小时内处理
  20. 物联网IoT应用技术有哪些?

热门文章

  1. web页面PC端和移动端的区别
  2. CentOS后门入侵检测工具
  3. Jetpack Compose - Modifier入门篇
  4. 计算机函数sumifs应用题型难,在SUMIFS函数语句中使用Vlookup时遇到问题
  5. 【一文带你读懂机器学习】逻辑回归原理
  6. openssl 自建ca之脚本自动签发
  7. TLS Lab(Transport Layer Security Lab,SEED实验)基于PKI实验内容进行中间人攻击实验
  8. Shamir密钥分享算法简析
  9. mysql如何查看bufferpool_查看Buffer Pool使用情况--[转]
  10. Ubuntu上安装Firefox浏览器