制作二维码和识别二维码需要用到第三方库,制作需要用到QRenCode这个库,如果没
有的,大家可以在官网下载,或者去这个网址直接下载我编译好的两个库和头文件
[https://download.csdn.net/download/Pailugou/22253251] 下载下来用CMake进
行编译建立,如果报#include <getopt.h>这个头文件方面的不要管,将CMake建立
的工程打开,直接编译QRenCode就可以生成库,QZXing下载,可以用QCreater打开编
译生成库,部署到自己的工程中。#pragma once
#include "QRenCode/qrencode.h"
#include "include/QZXing.h"
#include "include/QZXing_global.h"
#include <QWidget>
#include <QLabel>
#include <QPainter>
#include <QPaintEvent>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QPushButton>//显示二维码的label
class RenderCodeLabel : public QLabel
{Q_OBJECT
public:explicit RenderCodeLabel(QWidget* parent = nullptr);void setRcode(QRcode* pRcode);
protected:void paintEvent(QPaintEvent* event);private:QRcode* m_pRcode;
};RenderCodeLabel::RenderCodeLabel(QWidget* parent): QLabel(parent), m_pRcode(nullptr)
{}
void RenderCodeLabel::setRcode(QRcode* pRcode)
{m_pRcode = pRcode;update();
}//用painter进行绘制二维码
void RenderCodeLabel::paintEvent(QPaintEvent* event)
{if (m_pRcode == nullptr)return;QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);QColor black(Qt::black);QColor white(Qt::white);painter.setBrush(white);painter.setPen(Qt::NoPen);painter.drawRect(0, 0, this->width(), this->height());painter.setBrush(black);const int rW = m_pRcode->width > 0 ? m_pRcode->width : 1;const double w = this->width();const double h = this->height();const double xScale = w / m_pRcode->width;const double yScale = h / m_pRcode->width;for (int y = 0; y<rW; y++) {const int yy = y*rW;for (int x = 0; x<rW; x++) {const int xx = yy + x;const unsigned char b = m_pRcode->data[xx];if (b & 0x01) {QRectF r(x*xScale, y*yScale, xScale, yScale );painter.drawRects(&r, 1);}}}QLabel::paintEvent(event);
}class RenCodeDialog : public QWidget
{Q_OBJECT
public:explicit RenCodeDialog(QWidget* parent = nullptr);private slots:void createRenCode_slot();void showRcodeSub_slot();
private:RenderCodeLabel* m_pImageLabel;QLineEdit* m_pRenCodeStr;QLineEdit* m_pShowCodeStr;QPushButton* m_pOkButton;QRcode* m_pRcode;
};RenCodeDialog::RenCodeDialog(QWidget* parent): QWidget(parent), m_pImageLabel(new RenderCodeLabel), m_pRenCodeStr(new QLineEdit), m_pShowCodeStr(new QLineEdit), m_pOkButton(new QPushButton(tr("确定"))), m_pRcode(nullptr)
{this->resize(400, 400);m_pRenCodeStr->setPlaceholderText(tr("请输入二维码内容"));m_pShowCodeStr->setPlaceholderText(tr("显示二维码内容"));QVBoxLayout* pVBox = new QVBoxLayout;pVBox->setMargin(0);pVBox->addWidget(m_pImageLabel);pVBox->addWidget(m_pRenCodeStr);pVBox->addWidget(m_pShowCodeStr);pVBox->addWidget(m_pOkButton);this->setLayout(pVBox);connect(m_pOkButton, &QPushButton::clicked, this, &RenCodeDialog::createRenCode_slot);
}void RenCodeDialog::createRenCode_slot()
{//创建二维码数据指针,将其传给显示labelQString recodeTr = m_pRenCodeStr->text();m_pRcode = QRcode_encodeString(recodeTr.toStdString().c_str(), 2, QR_ECLEVEL_Q, QR_MODE_8, 0);m_pImageLabel->setRcode(m_pRcode);//生成二维码,过一秒钟进行识别QTimer::singleShot(1000, this, SLOT(showRcodeSub_slot()));
}void RenCodeDialog::showRcodeSub_slot()
{QPixmap pixmap = QPixmap::grabWidget(m_pImageLabel, QRect(0, 0, m_pImageLabel->width(), m_pImageLabel->height()));QZXing zxing;zxing.setDecoder(QZXing::DecoderFormat_QR_CODE | QZXing::DecoderFormat_CODE_128);QString str = zxing.decodeImage(pixmap.toImage());m_pShowCodeStr->setText(str);
}效果图:
![在这里插入图片描述](https://img-blog.csdnimg.cn/bfaf69a998724e4fa15e79a852db45f3.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAUGFpbHVnb3U=,size_13,color_FFFFFF,t_70,g_se,x_16)

Qt利用QZXing和QRenCode识别二维码和制作二维码相关推荐

  1. zip压缩、生成二维码、制作二维码标签

    需要ZipArchive,GD,simplesoftwareio/qrcode public function batch_print(Request $request) {// TODO$query ...

  2. 二维码的制作与识别使用了什么技术?

    二维码的制作与识别使用了什么技术,有哪些优缺点,发展前景是怎样的? 我们通常只需要使用在线二维码生成器就可以制作二维码,但你知道它是怎么制作的吗?具体来讲,它所使用的技术就是计算机图像处理技术,在线二 ...

  3. 怎么做出长期有效的二维码?永久二维码如何在线制作?

    现在用二维码当载体来储存内容是很常用的一种方式,比如将图片.文件.链接等等生成二维码.那么怎么生成长期有效的二维码相信是很多小伙伴比较关心的一个问题,那么下面就让小编来给大家分享一下使用二维码生成器来 ...

  4. iOS 花式二维码生成和二维码识别

    iOS 原生的二维码识别非常之棒,反正比 ZXing 和 ZBar 效果都好些,所以以后打算尽量用原生的二维码识别,然后最近把原生的二维码生成也顺便做了一遍,并且在原有基础上加了一些样式参数,封了一个 ...

  5. 【二维码识别】基于matlab GUI灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】

    ⛄一.二维码生成与识别简介 如今,移动互联网技术日新月异,随着5G时代的来临,广泛应用于数据处理过程中的二维码信息安全日益成为人们越来越关注的问题.以QR码为代表的二维码,以其在信息存储.传输和识别技 ...

  6. C++Builder下利用TImage制作二维条码PDF417打印控件(一)

    PDF417二维条码的应用 现代社会,由于条码的使用,极大地提高了数据采集和信息处理的速度,提高了工作效率,为管理的科学化和现代化作出了很大贡献. 受信息容量的限制,一维条码必须依赖于后台的数据库才能 ...

  7. 利用mathematica制作二维码

    利用mathematica制作二维码 今天看到一篇文章讲mma来做二维码的,觉得挺有趣,就重新实现了一下,完善了一下. 主要就是两个函数 BarcodeImage[img,"QR" ...

  8. 太神奇了!使用C#实现自动核验健康码:(1)二维码识别

    前言 因为疫情的原因,无论是进入商场还是医院.车站,都需要出示健康码. 现在基本都是采取人工方式核验健康码,看到绿码就通过,否则就禁止进入. 但是,单靠人工核验健康码容易造成人员拥堵,增加病毒交叉感染 ...

  9. llqrcode.js识别二维码,解析二维码信息

    llqrcode.js具有扫描二维码功能,用来进行从图片中识别二维码,可解析二维码的信息. 直接上代码 <!DOCTYPE html> <html> <head>& ...

最新文章

  1. java 实现违章_基于JAVA的车辆违章查询数据调用代码实例
  2. WPF如何获得变量异步回调函数时产生的异步回调
  3. python资料百度云-Java+Python+前端 学习资料大全 百度云盘
  4. controller接收json数据_SpringBoot实战(二):SpringMvc接收xml请求
  5. flex布局导致拉伸的问题
  6. ssis lookup_SSIS中的LOOKUP转换概述
  7. 08-05-09pe_xscan 增加IE版本检测
  8. 备战数学建模48-数学规划模型终结篇(全)(攻坚战13)
  9. Python 2与Python 3对H5牌九棋牌搭建的区别
  10. ubuntu18下成功安装Remastersys备份当前系统成ISO文件
  11. P2P软件工作原理是什么?
  12. Spring Framework框架起步,小白都看得懂(官翻版)!
  13. skinsdog 狗网CSGO饰品皮肤开箱网站可取回的开箱网站
  14. 【路径优化】基于帝企鹅算法求解TSP问题(Matlab代码实现)
  15. JavaScript 面向对象(二)——案列篇
  16. 利用c++编写一个养成类小游戏
  17. 【开发日志-已归档】2021-11
  18. selenium进行QQ空间登录
  19. excel服务器系统怎么登录,Excel Server Tutorial
  20. html如何加载cad文件夹,CAD如何加载lsp,CAD自动加载lsp

热门文章

  1. 如何将微信公众号上的文章下载下来?
  2. 自引用结构兼谈Malloc和Free函数
  3. 人工智能基础——知识的概念
  4. 安全牛联合世平信息共同发布《数据防泄密 (DLP) 业务应用指南》
  5. 【LeetCode】初级算法:数组
  6. 视频服务器(4) webrtc-streamer(windows下卡住了)
  7. 抑郁症最新研究进展(2021年11月)
  8. 未知usb设备(设备描述请求失败)_USB 之传输事务
  9. asp.net新闻采集(wyz)
  10. Java实现Telegram机器人