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