C++ 实现二维码功能,自己手写全部实现,也是可以的,但本文介绍的是使用第三方库来实现,主要目的是介绍一种库文件,方便大家快速实现自己的想要的效果。
第一次发现,C++ 生成 二维码居然如此简单哟!~
1.首先借助 第三方库,libqrencode 地址。也可以自行百度。
2.将此库 包含在C++ 工程中,其中 有部分 编译错误,修改如下:
/**
* @deprecated
*/
extern _declspec(deprecated) void QRcode_clearCache(void);
3.STATIC_IN_RELEASE 修改为 static 即可。
4.附带Qt 下代码,Windows 下类似哦。
#define MAX_URI_LENGTH 255
#define QR_IMAGE_SIZE 300
void QtGuiApplication1::update()
{
ui.lblQRCode->setText("");
QString uri = "123456";
if (!uri.isEmpty())
{
// limit URI length
if (uri.length() > MAX_URI_LENGTH)
{
ui.lblQRCode->setText(tr("Resulting URI too long, try to reduce the text for label / message."));
}
else {
QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1);
if (!code)
{
ui.lblQRCode->setText(tr("Error encoding URI into QR Code."));
return;
}
QImage qrImage = QImage(code->width + 8, code->width + 8, QImage::Format_RGB32);
qrImage.fill(0xffffff);
unsigned char *p = code->data;
for (int y = 0; y < code->width; y++)
{
for (int x = 0; x < code->width; x++)
{
qrImage.setPixel(x + 4, y + 4, ((*p & 1) ? 0x0 : 0xffffff));
p++;
}
}
QRcode_free(code);
QImage qrAddrImage = QImage(QR_IMAGE_SIZE, QR_IMAGE_SIZE + 20, QImage::Format_RGB32);
qrAddrImage.fill(0xffffff);
QPainter painter(&qrAddrImage);
painter.drawImage(0, 0, qrImage.scaled(QR_IMAGE_SIZE, QR_IMAGE_SIZE));
QFont font("宋体", 10, QFont::Bold, true);
font.setPixelSize(12);
painter.setFont(font);
QRect paddedRect = qrAddrImage.rect();
paddedRect.setHeight(QR_IMAGE_SIZE + 12);
painter.drawText(paddedRect, Qt::AlignBottom | Qt::AlignCenter,uri);
painter.end();
ui.lblQRCode->setPixmap(QPixmap::fromImage(qrAddrImage));
}
}
}
其中,使用到库的代码就一句。
QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1);
附带截图!
