0.前言
之前使用 libgrencode 生成二維碼,LGPL 協(xié)議實(shí)在不方便,所以需要找一個(gè) github 星星多的,代碼簡(jiǎn)單最好 header-only,協(xié)議最好是 MIT 或者兼容協(xié)議而不是 GPL 或者 LPGL。
QR-Code-generator 正好符合這個(gè)要求,而且還提供 C / C++ / Java / Python / JS / Rust?等 6 種語(yǔ)言實(shí)現(xiàn),直接把 qrcodegen.hpp / cpp 類文件放到我們項(xiàng)目里就能使用。
庫(kù)鏈接:https://github.com/nayuki/QR-Code-generator
庫(kù)官網(wǎng):https://www.nayuki.io/page/qr-code-generator-library
1.基本使用?
測(cè)試代碼鏈接:https://github.com/gongjianbo/MyTestCode/tree/master/Qt/TestQt_20230711_QRCodeGen
效果展示:
?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-554601.html
測(cè)試代碼:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-554601.html
void MainWindow::generate()
{
// 使用utf8編碼
QByteArray str = ui->lineEdit->text().toUtf8();
const char *text = str.constData();
// 二維碼有四個(gè)糾錯(cuò)等級(jí),從低到高:L-%7/M-%15/Q-%25/H-%30
const qrcodegen::QrCode::Ecc level = qrcodegen::QrCode::Ecc::MEDIUM;
// 生成二維碼
try
{
// 使用簡(jiǎn)易接口,默認(rèn) Version 范圍 min=1, max=40
// const qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(text, level);
// 也可以指定符號(hào)版本,越大可容納的信息越多,如果內(nèi)容超出容量范圍會(huì)拋異常
// 根據(jù)規(guī)范,Version1 是 21x21,Version2 是 25x25,每增加一個(gè)Version,就比前一版本每邊增加 4 個(gè)模塊
std::vector<qrcodegen::QrSegment> segs = qrcodegen::QrSegment::makeSegments(text);
const qrcodegen::QrCode qr = qrcodegen::QrCode::encodeSegments(segs, level, 1, 40);
const int size = qr.getSize();
// 填充位圖
QImage image = QImage(size, size, QImage::Format_Grayscale8);
for (int row = 0; row < size; ++row)
{
uchar *line_ptr = image.scanLine(row);
for (int col = 0; col < size; ++col)
{
line_ptr[col] = (uchar)(qr.getModule(row, col) ? 0x00 : 0xFF);
}
}
// 放大一點(diǎn)看得更清楚
image = image.scaled(image.width() * 5, image.height() * 5);
// 生成后可以用手機(jī)掃一掃識(shí)別文字內(nèi)容,注意內(nèi)容為空可能掃不出來(lái)
ui->label->setPixmap(QPixmap::fromImage(image));
}
catch(std::invalid_argument e)
{
// 參數(shù)異常,如 minVersion > maxVersion
qDebug() << "catch invalid_argument" << e.what();
}
catch(qrcodegen::data_too_long e)
{
// 內(nèi)容太長(zhǎng)
qDebug() << "catch data_too_long" << e.what();
}
}
到了這里,關(guān)于Qt + QR-Code-generator 生成二維碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!