背景介绍

Libqrencode是一个快速、紧凑、开源、免费,并且非常好用的二维码编码库,由日本明治大学的教授 Kentaro Fukuchi 开发并维护。
Libqrencode的GitHub仓库

在QT中使用编译好的Libqrencode库

我已将Libqrencode库编好了,生成的库名为QRcode.lib,直接引用库和库的头文件即可。
头文件QtWidgetsApplication.h

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication.h"

class QtWidgetsApplication : public QMainWindow
{
    Q_OBJECT
    
public:
    QtWidgetsApplication(QWidget *parent = Q_NULLPTR);
    
private:
    Ui::QtWidgetsApplication1Class ui;
    void GenerateQRCode(QString data, int bulk, QImage &image);
};

源文件QtWidgetsApplication.cpp

#include "QtWidgetsApplication.h"
#include <qbitmap.h>
#include <qimage.h>
#include <qpainter.h>
#include <qtextcodec.h>
#include <qdebug.h>
//包含二维码库的头文件,这里设置的是项目目录的include目录下
#include "include/qrencode.h"
//引入lib目录下的QRcode.lib库
#pragma comment(lib, "lib/QRcode.lib")

QtWidgetsApplication::QtWidgetsApplication(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QString encodeString = QStringLiteral("https://www.ceveryc.com");
    QImage image;
    GenerateQRCode(encodeString, 8, image);
    QPixmap pixmap = QPixmap::fromImage(image);
    ui.label->setPixmap(pixmap);
}

//bulk 要绘制的点的边长(正方形的边长)
void QtWidgetsApplication::GenerateQRCode(QString data, int bulk, QImage &image)
{
    QRcode* qr = QRcode_encodeString(data.toUtf8(), 1, QR_ECLEVEL_Q, QR_MODE_8, 0);
    int allBulk = (qr->width) * bulk;
    image = QImage(allBulk, allBulk, QImage::Format_Mono);
    QPainter painter(&image);
    QColor fg("black");
    QColor bg("white");
    painter.setBrush(bg);
    painter.setPen(Qt::NoPen);
    painter.drawRect(0, 0, allBulk, allBulk);
    
    painter.setBrush(fg);
    for (int y = 0; y < qr->width; y++)
    {
        for (int x = 0; x < qr->width; x++)
        {
            if (qr->data[y * qr->width + x] & 1)
            {
                QRectF r(x * bulk, y * bulk, bulk, bulk);
                painter.drawRects(&r, 1);
            }
        }
    }
    QRcode_free(qr);
}

以上就是对Libqrencode库的简单使用。

最后修改:2023 年 08 月 04 日
如果觉得我的文章对你有用,请随意赞赏