Qt生成二维码

news/2024/11/28 7:46:45/

首先需要了解的是,二维码就是以01矩阵图的形式存储的字符串而已,就像我们扫描的网址类型的二维码,扫出来通过解析器其实就是一个url链接。关于其他的说明就自己百度了。
此处使用的是开源库qrencode来进行测试,类似的还有zxing或者qt自带的qzxing库。
1)先下载相关文件:http://download.openpkg.org/components/cache/qrencode/
下载好后,解压到自己的工程文件夹中
然后将config.h.in文件的.in删去,并且在此文件底部添加

#define MAJOR_VERSION 1
#define MICRO_VERSION 1
#define MINOR_VERSION 1
#define VERSION 1

然后还要删除qrenc.c文件,因为里面有main函数会产生冲突
2)此外还需要在qt工程中添加所有.c和.h文件,否则无法正确读取到文件
3)在.pro文件中添加:INCLUDE+=qrencode//此处是你存放库文件的目录名称
DEFINES+=HAVE_CONFIG_H
现在就可以在项目中#include<qrencode.h>来使用了
下面是生成二维码的使用例:
大致流程:将str转为code->处理宽高->根据伪二维数组data(即二维码数据矩阵)来绘制实际图片

//此处tempstr就是要转成二维码的具体数据data,label是最终显示二维码
void Widget::GenerateQRcode(QString tempstr,QLabel* label)
{QRcode *qrcode; //二维码对象//将str转化为const char * |2-QR码版本为2 | QR_ECLEVEL_Q 容错等级 |QR_MODE_8 八字节数据 |1-区分大小写//这一步也就是将str转为了二维数据矩阵qrcode = QRcode_encodeString(tempstr.toStdString().c_str(), 2, QR_ECLEVEL_Q, QR_MODE_8, 1);//此处将二维码显示在label上,所以还有对缩放比例的处理,若不管这点则直接定义一个宽高即可qint32 temp_width=label->width(); //显示二维码所用的QLabel大小,也可以说是显示大小qint32 temp_height=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);//最终生成的image对象QPainter painter(&mainimg);//借助painter来生成imageQColor background(Qt::white);painter.setBrush(background);painter.setPen(Qt::NoPen);painter.drawRect(0, 0, temp_width, temp_height);QColor foreground(Qt::black);painter.setBrush(foreground);for( qint32 y = 0; y < qrcode_width; y ++)//qrcode->data实际是一个存了qrcode_width*qrcode_width个数据的一维数组//qrcode->data就是一个只含01的数组,0就是白,1就是黑//但这里要把这个一维数组以每行qrcode_width个数据、每列qrcode_width个数据的二维数组来使用{//绘制流程就是像遍历一个二维数组,每个点即变量b不是0就是1,0不绘制,1就绘制for(qint32 x = 0; x < qrcode_width; x++){unsigned char b = qrcode->data[y * qrcode_width + x];if(b & 0x01)//根据二维码中黑白点(1/0),以缩放比例画出二维码{QRectF r(x * scale_x, y * scale_y, scale_x, scale_y);painter.drawRects(&r, 1);}}}QPixmap mainmap=QPixmap::fromImage(mainimg);label->setPixmap(mainmap);label->setVisible(true);
}

http://www.ppmy.cn/news/455452.html

相关文章

全国行政区划数据(截止2019年3月)

省市区三级数据&#xff08;含港澳台钓鱼岛以及经济开发区&#xff09;和经纬度信息&#xff0c;准确有效&#xff01; 下载地址请扫码

全国省(23个)、直辖市(4个)、自治区(5个)、特别行政区(2个)

省(23):广东省&#xff08;粤&#xff09;湖南省&#xff08;湘&#xff09;江西省&#xff08;赣&#xff09;河北省&#xff08;冀&#xff09;浙江省&#xff08;浙&#xff09;湖北省&#xff08;鄂&#xff09;云南省&#xff08;云&#xff09;山西省&#xff08;晋&…

中国有多少个省?

中国共计34个省级行政区&#xff0c;包括23个省、5个自治区、4个直辖市、2个特别行政区。 23个省分别为&#xff1a;河北省、山西省、辽宁省、吉林省、黑龙江省、江苏省、浙江省、安徽省、福建省、江西省、山东省、河南省、湖北省、湖南省、广东省、海南省、四川省、贵州省、云…

天地图区域行政区划

我这边的写法是通过每个城市的orgID 如浙江省是330000&#xff0c;getEdgeMapInfo获取下面相对应的城市 然后通过接口返回的json数据 去请求json文件夹获取数据 drawLine(id) {let style {color: blue,weight: 3,opacity: 1,lineStyle: dashed, // 虚线fillColor: transprent…

34个省级行政区域,包括23个省,5个自治区,4个直辖市,2个特别行政区。

**我要干什么&#xff1f; 不要东摸摸西摸摸&#xff0c;最后啥也没干成。 静下心来搞科研。坐下来&#xff0c;静下心&#xff0c;钻进去。** 我国共有34个省级行政区域&#xff0c;包括23个省&#xff0c;5个自治区&#xff0c;4个直辖市&#xff0c;2个特别行政区。 23个省…

全国省市县三级行政区划excel文件

找遍全网&#xff0c;未见excel格式的。于是自己动手从民政部网站收集数据&#xff0c;整理成excel格式文件。送给需要的人。 网址&#xff1a;www.mca.gov.cn/article/sj/xzqh/2020/20201201.html 文件下载地址&#xff1a;https://download.csdn.net/download/aswkx/8558928…

334个地级市名单_中国各级行政区划数量,统计到乡镇一级

目前中国的行政区划分为省级、地市级、县区级、乡镇级(含街道办)四级行政架构&#xff0c;可能很少有人对各级行政区划具体的数量有一个了解。根据国家统计局发布的数据显示&#xff0c;对此进行了一个明确数量统计&#xff0c;我们一起来看看。注&#xff1a;其中副省级城市、…

2010-2020年31省第三产业占GDP比重(%)

2010-2020年31省第三产业占GDP比重(%) 1、时间&#xff1a;2010-2020年 2、范围&#xff1a;31省 3、来源&#xff1a;附在文件内 4、指标&#xff1a;第三产业占比 5、指标解释&#xff1a; 第三产业即各类服务业或商业。三产业的划分是世界上较为常用的产业结构分类&#xff…