Qt集成二维码工具
本文主要介绍如何在自己的程序内集成QrCode库,通过代码生成二维码,并提供了一种简单的封装
步骤1:下载源码
参考文章:
GitHub:QR Code generator library.
步骤2:将库引入工程
INCLUDEPATH += $$PWD/src/QRGenerator
HEADERS += \
$$PWD/src/QRGenerator/BitBuffer.hpp \
$$PWD/src/QRGenerator/QrCode.hpp \
$$PWD/src/QRGenerator/QrSegment.hpp
SOURCES += \
$$PWD/src/QRGenerator/BitBuffer.cpp \
$$PWD/src/QRGenerator/QrCode.cpp \
$$PWD/src/QRGenerator/QrSegment.cpp
步骤3:封装实例
下面是一个简单的封装实例:
头文件:
#ifndef QRCODEHELPER_H
#define QRCODEHELPER_H
#include "QRGenerator/QrCode.hpp"
using namespace qrcodegen;
namespace QRCodeHelper
{
//获取二维码Svg数据
QByteArray getQRCodeSvg(const QString &data, QrCode::Ecc ecc = QrCode::Ecc::MEDIUM);
//获取二维码图像
QImage getQRCodeSvgImage(const QString &data, const QSize &size, QrCode::Ecc ecc = QrCode::Ecc::MEDIUM);
}
#endif // QRCODEHELPER_H
源文件:
#include "qrcodehelper.h"
#include <QImage>
#include <QSvgRenderer>
#include <QPainter>
QByteArray QRCodeHelper::getQRCodeSvg(const QString &data, QrCode::Ecc ecc)
{
QrCode qr0 = QrCode::encodeText(data.toUtf8().constData(), ecc);
std::string svg = qr0.toSvgString(4);
return QByteArray::fromStdString(svg);
}
QImage QRCodeHelper::getQRCodeSvgImage(const QString &data, const QSize &size, QrCode::Ecc ecc)
{
QSvgRenderer renderer(getQRCodeSvg(data, ecc));
QImage image(size, QImage::Format_ARGB32);
QPainter painter(&image);
renderer.render(&painter);
return image;
}
调用:
QSvgWidget QRWidget = new QSvgWidget(this);
QString data = "hello world";
QRWidget->load(QRCodeHelper::getQRCodeSvg(data));