美文网首页
2018-11-20 Qt使用二维码开源库实现字符串生成二维码

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

作者: 回不去的温柔 | 来源:发表于2018-11-20 16:04 被阅读0次

    近日,物联网界面设计课程进入验收阶段,其中二维码生成阶段有些许难搞,在我经过多方查阅资料,终于解决了这一难题,现在将方法分享给大家,话不多说,干货奉上。
    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(字符串));
    

    相关文章

      网友评论

          本文标题:2018-11-20 Qt使用二维码开源库实现字符串生成二维码

          本文链接:https://www.haomeiwen.com/subject/qrjxqqtx.html