VS2017+QT QRencode库生成二维码

一、前言

二维码生成工具需要用到第三方QRencode库,我这里是VS2017+QT插件的开发环境。下面主要是介绍如何编译和使用QRencode库

二、如何编译QRencode库

这里需要下载QRencode库源码和Cmake编译工具

1. 下载QRencode库源码

下载地址:https://fukuchi.org/works/qrencode/

2. 下载Cmake编译工具并安装

下载地址:https://cmake.org/download/
20200627161547840

安装成功后将设置系统环境变量,添加CMake工具路径。设置后在Windows命令行输入:cmake --version,成功会显示当前版本。
在这里插入图片描述

3. 编译QRencode库
  • 解压qrencode-4.0.2.tar.gz,使用cmd命令打开命令行,进入该目录,使用以下cmake命令来生成解决方案:
    cmake . -DGETOPT_INCLUDE_DIR="库的头文件所在目录" -DGETOPT_LIBRARIES="库文件所在目录"

    注:-D代表定义变量,用法:-D变量名=变量值。
    因为该库的示例代码使用了libpng库生成二维码图片,而libpng库又依赖zlib库,所以你需要下载libpng和zlib

  • 不链接libpng和zlib,则直接使用命令:
    cmake . -DGETOPT_INCLUDE_DIR="" -DGETOPT_LIBRARIES=""

    虽然也报了找不到png的错误,但不重要,这个时候该目录下已经生成了QRencode.sln解决方案。
    为什么cmake命令要定义变量-DGETOPT_INCLUDE_DIR="" 和 -DGETOPT_LIBRARIES=""?
    因为不定义GETOPT_INCLUDE_DIR和GETOPT_LIBRARIES会报找不到这两个变量的错误。

    20200627163915193
  • 编译完成后,直接打开QRencode.sln解决方案
    里面包含了5个项目,我们需要编译qrencode静态库工程

    1: qrencode // qrencode是静态库工程,编译后生成qrencoded.lib库在Debug/Release目录下,使用该库的接口QRcode_encodeString就可以生成二维码信息。
    2: qrenc // qrenc是.exe windows应用程序工程,并且用了png库,直接编译会报错找不到头文件。我这里是QT项目未使用该工程,只需要 qrencode静态库。

    在这里插入图片描述在这里插入图片描述
    编译成功后,在路径qrencode-4.0.2\Release\qrencode.lib会生成我们需要的静态库。

二、如何使用QRencode库

我这里是使用VS2017+QT插件的方式,加载qrencode.lib静态库,编写的Windows应用程序。

1. QrencodeTools源码介绍
  • 在QrencodeTools构造函数调用setString方法,设置默认的二维码信息。
    setString("https://blog.csdn.net/ZHONGCAI0901/article/details/106983450");
    
  • 使用QRcode_encodeString生成二维码信息。
    void QrencodeTools::setString(QString str)
    {
          
          
      	string = str;
      	if (qr != NULL)
      	{
          
          
      		QRcode_free(qr);
      	}
      	qr = QRcode_encodeString(string.toStdString().c_str(),
      		1,
      		QR_ECLEVEL_L,
      		QR_MODE_8,
      		1);
      	update();
    }
    
  • 当点击Save Button时保存二维码图片
    bool QrencodeTools::saveImage(QString fileName, int size)
    {
          
          
      if (size != 0 && !fileName.isEmpty())
      {
          
          
      	QImage image(size, size, QImage::Format_ARGB32);
      	QPainter painter(&image);
      	QColor background(Qt::white);
      	painter.setBrush(background);
      	painter.setPen(Qt::NoPen);
      	painter.drawRect(0, 0, size, size);
      	if (qr != NULL)
      	{
          
          
      		draw(painter, size, size);
      	}
    
      	// change background
      	if (qrBtnGroup->checkedId() == QR_BKGD_ID_TRANSPARENT) {
          
          
      		union myrgb
      		{
          
          
      			uint rgba;
      			uchar rgba_bits[4];
      		};
      		myrgb* mybits = (myrgb*)image.bits();
      		int len = image.width()*image.height();
      		while (len-- > 0)
      		{
          
          
      			mybits->rgba_bits[3] = (mybits->rgba == 0xFFFFFFFF) ? 0 : 255;
      			mybits++;
      		}
      	}
      	return image.save(fileName);
      }
      else
      {
          
          
      	return false;
      }
    }
    
2. QrencodeTools应用程序
  • QrencodeTools功能

    1:背景设置 // 设置生成二维码的背景颜色为:白色、透明
    2:输入框 // 输入需要生成二维码的信息
    3:Show // 在QrencodeTools显示二维码图片
    4:Save // 保存二维码图片

    在这里插入图片描述

三、QrencodeTools相关的开发资料

猜你喜欢

转载自blog.csdn.net/ZHONGCAI0901/article/details/106983450