Qt使用二维码开源库实现字符串生成二维码

本文最后修改于 110 天前,部分内容可能已经过时!

近日,物联网界面设计课程进入验收阶段,其中二维码生成阶段有些许难搞,在我经过多方查阅资料,终于解决了这一难题,现在将方法分享给大家,话不多说,干货奉上。
qrencode源码下载地址

  • 进入上面的地址下载qrencode源码,解压缩之后,将文件夹中的config.h.in改名为config.h,然后将所有的.c和.h文件引入到你的工程之中。
  • 修改config.h,重新定义 MAJOR_VERSION、MICRO_VERSION、MINOR_VERSION、VERSION,重新定义的方法:找到#undef MAJOR_VERSION位置,在其下面定义#define MAJOR_VERSION 1,其他几个也这么定义。
  • 在QT的pro文件中添加DEFINES += HAVE_CONFIG_H 定义全局宏定义,然后编译,你的工程就可以用二维码相关的库了,下面贴出相关函数:
QPixmap OBSBasic::createQRCode(const QString &text)
{
 int margin = 2;
 if (text.length() == 0)
 {
  return QPixmap();
 }
 QRcode *qrcode = QRcode_encodeString(text.toLocal8Bit(), 2, QR_ECLEVEL_L, QR_MODE_8, 0);
 if (qrcode == NULL) {
  return QPixmap();
 }
 unsigned char *p, *q;
 p = NULL;
 q = NULL;
 int x, y, bit;
 int realwidth;

 realwidth = qrcode->width;
 QImage image = QImage(realwidth, realwidth, QImage::Format_Indexed8);
 QRgb value;
 value = qRgb(255, 255, 255);
 image.setColor(0, value);
 value = qRgb(0, 0, 0);
 image.setColor(1, value);
 image.setColor(2, value);
 image.fill(0);
 p = qrcode->data;
 for (y = 0; y<qrcode->width; y++) {
  bit = 7;
  q += margin / 8;
  bit = 7 - (margin % 8);
  for (x = 0; x<qrcode->width; x++) {
   if ((*p & 1) << bit)
    image.setPixel(x, y, 1);
   else
    image.setPixel(x, y, 0);
   bit--;
   if (bit < 0)
   {
    q++;
    bit = 7;
   }
   p++;
  }
 }
 return QPixmap::fromImage(image.scaledToWidth(200));
}

想要显示二维码,就在界面添加一个label,直接调用函数:

label->setPixmap(createQRCode(字符串));
Tags:Qt
上一篇
打赏
下一篇

添加新评论