首页 > 作文

Qt实现字符串生成二维码功能

更新时间:2023-04-04 17:41:50 阅读: 评论:0

目录
前言开发环境实现步骤资源包数据配置属性二维码操作总结

前言

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

下面是实现的效果图

开发环境

win10环境 + vs2017 + qt 5.14.2 64位开发环境

实现步骤

资源包数据

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

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

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

配置属性

1:头文件设置

2:静态库设置

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

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

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

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

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

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

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

qstring qexepath = qcoreapplication::applicationdirpath();qdir::tcurrent(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::f毕业证查询系统ormat_rgb32);image.fill(qcolor("#000000"));

qimage存储根据设置的nsize大小的宽度高度构造一幅图像,程序会自动根据图像格式对齐数据,使用32位rgb格式的图像(0xffrrggbb)

2.2:构造绘图指针

qpainter painter(&image);if (!painter.isactive()){return image;}

构造qpainter绘制指针,一般当传入的qsize数据为0时,是无法进行后续操作的,也就是isactiva = fal

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.tbrush(colorforbackground);painter.tpen(qt::nopen);painter.drawrect(0, 0, image.width(), image.height());painter.tbrush(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) ? imageflash作品欣赏.height() : image.width()) / s;for (int y = 0; y < s; ++y){con单身汉的睡帽st 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.trenderhint(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->tpixmap(qpixmap::fromimage(img));

总结

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

以上就是qt实现字符串生成二维码功能的详细内容,更多关于qt字符串生成二维码的资料请关注www.887551.com其它相关文章!

本文发布于:2023-04-04 17:41:48,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/43ce23c8164aafe9e57c92c36f6b4163.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Qt实现字符串生成二维码功能.doc

本文 PDF 下载地址:Qt实现字符串生成二维码功能.pdf

下一篇:返回列表
标签:二维码   环境   字符串   图形
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图