Qt中使用Zint库显示二维码

Qt中使用Zint库显示二维码

先使用的是QtCreator 创建项目,但是会报错。

于是改用VS2022创建Qt项目,然后然后添加相关的库,就能调用Zint库中的函数生成二维码了。

第一步加载Zint库:

先把Zint源码中的include文件夹、lib文件夹、复制到项目目录下、Zint.dll、libpng16.dll放到运行目录下,如下图:

第二步:项目属性中添加Zint相关文件,如下图:

第三步:项目源代码

c++ 复制代码
#pragma once

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

class QZintLibTest : public QMainWindow
{
    Q_OBJECT

public:
    QZintLibTest(QWidget *parent = nullptr);
    ~QZintLibTest();

    void on_pushButton_Clicked();

private:
    Ui::QZintLibTestClass ui;
};
C++ 复制代码
#include "QZintLibTest.h"
#include<QObject>
#include<QMessageBox>
#include"include/zint.h"

QZintLibTest::QZintLibTest(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);
    QObject::connect(ui.pushButton, &QPushButton::clicked, this, &QZintLibTest::on_pushButton_Clicked);
}

QZintLibTest::~QZintLibTest()
{
}
void QZintLibTest::on_pushButton_Clicked()
{
    QString strText = ui.lineEdit->text();
    if (strText.isEmpty())
    {
        QMessageBox::warning(this, "提示", "输入内容不能为空!");
        return;
    }

    struct zint_symbol* symbol = ZBarcode_Create();
    if (symbol == nullptr)
    {
        QMessageBox::critical(this, "错误", "创建Zint条码对象失败!");
        return;
    }

    // 1. 配置Zint二维码参数(保留你的原有配置)
    symbol->scale = 2;          // 缩放比例
    symbol->option_1 = 3;       // QR码版本等参数
    symbol->option_2 = 5;
    symbol->symbology = BARCODE_QRCODE;  // 二维码类型
    symbol->output_options = 0;
    symbol->show_hrt = 0;       // 不显示下方文字
    symbol->input_mode = DATA_MODE;

    // 2. 安全设置输出图片名(统一大小写,无缓冲区溢出)
    strcpy_s(symbol->outfile,256, "QR.bmp");  // 推荐写法
    // 若需指定绝对路径(可选,生成到程序运行目录)
    // QString imgPath = QCoreApplication::applicationDirPath() + "/QR.bmp";
    // strcpy(symbol->outfile, imgPath.toLocal8Bit().constData());

    // 3. 转换输入内容为Zint支持的UTF-8格式
    QByteArray ba = strText.toUtf8();
    const char* pText = ba.constData();
    int nRet = ZBarcode_Encode(symbol, (const unsigned char*)pText, strlen(pText));

    if (nRet != 0)
    {
        QString strErr(symbol->errtxt);
        QMessageBox::critical(this, "编码错误", strErr);
        ZBarcode_Delete(symbol);
        return;
    }

    // 4. 核心修复:调用ZBarcode_Print生成图片文件(必须执行!)
    nRet = ZBarcode_Print(symbol, 0);  // 0=不旋转图片
    if (nRet != 0)
    {
        
        ZBarcode_Delete(symbol);
        return;
    }

    // 5. 加载图片并校验有效性(统一文件名,增加isNull判断)
    QPixmap pixTMP("QR.bmp");
    if (pixTMP.isNull())
    {
     
        ZBarcode_Delete(symbol);
        return;
    }

    // 6. 缩放图片并显示到QLabel(保持宽高比,避免变形)
    QPixmap pix = pixTMP.scaled(ui.label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui.label->setPixmap(pix);
    // 可选:设置QLabel对齐方式,让二维码居中显示
    ui.label->setAlignment(Qt::AlignCenter);

    // 7. 释放Zint资源,避免内存泄漏
    ZBarcode_Delete(symbol);
}

项目运行效果:

好了,项目就介绍到这里了。

相关推荐
谁刺我心1 小时前
qt源码、qt在线安装器镜像下载
开发语言·qt
金刚狼883 小时前
在qt creator中创建helloworld程序并构建
开发语言·qt
扶尔魔ocy20 小时前
【转载】QT使用linuxdeployqt打包
开发语言·qt
YxVoyager1 天前
在VS2017中使用Qt的foreach宏,IntelliSense无法正确识别函数定义
c++·qt
轩情吖1 天前
Qt的事件
开发语言·qt·事件·qt事件·qkeyevent·qmoveevent
小老鼠不吃猫1 天前
Qt C++稳定职业规划
开发语言·c++·qt
轩情吖1 天前
Qt的文件
开发语言·c++·qt·文件·qfileinfo·桌面级开发·qt文件操作
一晌小贪欢1 天前
PyQt5 实战:批量图片添加水印工具(带右侧实时预览)(附代码及下载链接)
开发语言·qt·添加水印·图片添加水印·蹄片水印
小老鼠不吃猫2 天前
深入浅出(十三)QWT库——高稳定二维绘图
c++·qt·二维图