使用QRencode做二维码QR码生成

简介: 使用QRencode做二维码QR码生成
//qr.h
#ifndef QR_H
#define QR_H
#include <qrencode.h>
#include <qimage.h>
#include <qstring.h>
class QR
{
public:
  QR();
  //生产二维码
   QImage produceQR(const QString &info);
public :
  static QImage produceQrTest(const QString &info);
};
#endif // QR_H
//qr.cpp
#include "qr.h"
#include <QPainter>
#include <QImage>
QR::QR()
{
}
QImage  QR::produceQrTest(const QString &info)
{
  
  //放置二维码
  QImage dst;
  //绘制方块大小
  int scale = 4;
  //将字符串转字符集合,同时定义编码格式为UTF8
  QByteArray info_date = info.toUtf8();
  //调用libqrencode库进行编码
  QRcode* qr = QRcode_encodeString(info_date.constData(), 0, QR_ECLEVEL_Q, QR_MODE_8, 1);
  //绘制
  if (qr && qr->width > 0)
  {
    //设置图像大小
    int img_width = qr->width * scale;
    //创建画布
    dst = QImage(img_width, img_width, QImage::Format_Mono);
    //创建油漆工
    QPainter painter(&dst);
    //填充白色背景
    painter.fillRect(0, 0, img_width, img_width, Qt::white);
    //设置画笔
    painter.setPen(Qt::NoPen);
    //设置黑色刷子
    painter.setBrush(Qt::black);
    //绘制二维码
    for (int y = 0; y < qr->width; y++)
    {
      for (int x = 0; x < qr->width; x++)
      {
        //绘制黑块
        if (qr->data[y*qr->width + x] & 1)
        {
          QRect r(x*scale, y*scale, scale, scale);
          painter.drawRect(r);
        }
      }
    }
    QRcode_free(qr);
  }
  return dst;
  
}
//调用
QImage qr = QR::produceQrTest(qstr);
int x = ui->label_QRCode->size().width() - 20;
int y = ui->label_QRCode->size().height() - 20;
QSize size = QSize(x, y);
m_QR_img = qr.scaled(size, Qt::KeepAspectRatio);
ui->label_QRCode->setPixmap(QPixmap::fromImage(m_QR_img));

QRencode库


相关文章
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
1552 0
AutoJs源码---神级大分享
AutoJs源码---神级大分享
561 0
|
Linux
如何使用 Linux `date` 命令来指定时区?
如何使用 Linux `date` 命令来指定时区?
1905 0
|
JavaScript API
Node.js:浏览器环境下使用qrcode生成二维码
Node.js:浏览器环境下使用qrcode生成二维码
831 0
Node.js:浏览器环境下使用qrcode生成二维码
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
883 0
|
自然语言处理 数据可视化
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo
|
存储 C++
webserver--Buffer类实现内存缓冲区读写(全代码)
webserver--Buffer类实现内存缓冲区读写(全代码)
|
C++
软件安装(一):VS2017安装和使用
本文主要介绍了如何下载和安装Visual Studio 2017,包括选择安装组件、修改安装位置以及解决安装过程中可能遇到的问题。
1017 3
软件安装(一):VS2017安装和使用
|
消息中间件 JavaScript Java
SpringBoot+Nacos+Kafka简单实现微服务流编排
SpringBoot+Nacos+Kafka简单实现微服务流编排
SpringBoot+Nacos+Kafka简单实现微服务流编排
|
Ubuntu 前端开发 Linux
Linux apt 命令
10月更文挑战第1天
390 4

热门文章

最新文章