Qt zint (生成一维码/二维码)

下载源码1: (笔者下载最新的zint-master.zip(20210126),不清楚是不是官方维护的github仓库)
https://github.com/woo-j/zint

下载源码2: (最后zint-2.9.1,生成DM码黑白之间会有一条灰色线,没去掉,只能使用最新的zint-master)
https://sourceforge.net/projects/zint/files/zint/

我没用 zlib
https://zlib.net/fossils/
我没用 libpng
https://sourceforge.net/projects/libpng/files/libpng16/

编译

编译?不存在的,对于源代码少的开源项目都是加入源代码,简单粗暴

源码添加到工程

按选中的文件摆放文件目录,忽视未选中的文件,那那是为编译静态库,动态库写的,这里不讲
加粗样式
backend_qt.pri


INCLUDEPATH += $$PWD/backend

DEFINES += ZINT_VERSION="\\\"2.9.1\\\""

DEFINES += NO_PNG

!contains(DEFINES, NO_PNG) {
    INCLUDEPATH += ../../lpng
    INCLUDEPATH += ../../zlib
}

contains(DEFINES, QR_SYSTEM){
    LIBS += -lqrencode
}

contains(DEFINES, QR){

INCLUDEPATH += qrencode

HEADERS += qrencode/bitstream.h \
           qrencode/mask.h \
           qrencode/qrencode.h \
           qrencode/qrencode_inner.h \
           qrencode/qrinput.h \
           qrencode/qrspec.h \
           qrencode/rscode.h \
           qrencode/split.h 

SOURCES += qrencode/bitstream.c \
           qrencode/mask.c \
           qrencode/qrencode.c \
           qrencode/qrinput.c \
           qrencode/qrspec.c \
           qrencode/rscode.c \
           qrencode/split.c 
}

HEADERS +=  $$PWD/backend/aztec.h \
            $$PWD/backend/bmp.h \
            $$PWD/backend/channel_precalcs.h \
            $$PWD/backend/code128.h \
            $$PWD/backend/code49.h \
            $$PWD/backend/common.h \
            $$PWD/backend/composite.h \
            $$PWD/backend/dmatrix.h \
            $$PWD/backend/eci.h \
            $$PWD/backend/font.h \
            $$PWD/backend/gb18030.h \
            $$PWD/backend/gb2312.h \
            $$PWD/backend/gridmtx.h \
            $$PWD/backend/gs1.h \
            $$PWD/backend/hanxin.h \
            $$PWD/backend/large.h \
            $$PWD/backend/maxicode.h \
            $$PWD/backend/output.h \
            $$PWD/backend/pcx.h \
            $$PWD/backend/pdf417.h \
            $$PWD/backend/reedsol.h \
            $$PWD/backend/rss.h \
            $$PWD/backend/sjis.h \
            $$PWD/backend/stdint_msvc.h \
            $$PWD/backend/zint.h \
            $$PWD/qzint.h

SOURCES += $$PWD/backend/2of5.c \
           $$PWD/backend/auspost.c \
           $$PWD/backend/aztec.c \
           $$PWD/backend/bmp.c \
           $$PWD/backend/codablock.c \
           $$PWD/backend/code.c \
           $$PWD/backend/code128.c \
           $$PWD/backend/code16k.c \
           $$PWD/backend/code49.c \
           $$PWD/backend/common.c \
           $$PWD/backend/composite.c \
           $$PWD/backend/dmatrix.c \
           $$PWD/backend/dotcode.c \
           $$PWD/backend/eci.c \
           $$PWD/backend/emf.c \
           $$PWD/backend/gb18030.c \
           $$PWD/backend/gb2312.c \
           $$PWD/backend/general_field.c \
           $$PWD/backend/gif.c \
           $$PWD/backend/gridmtx.c \
           $$PWD/backend/gs1.c \
           $$PWD/backend/hanxin.c \
           $$PWD/backend/imail.c \
           $$PWD/backend/large.c \
           $$PWD/backend/library.c \
           $$PWD/backend/mailmark.c \
           $$PWD/backend/maxicode.c \
           $$PWD/backend/medical.c \
           $$PWD/backend/output.c \
           $$PWD/backend/pcx.c \
           $$PWD/backend/pdf417.c \
           $$PWD/backend/plessey.c \
           $$PWD/backend/postal.c \
           $$PWD/backend/ps.c \
           $$PWD/backend/raster.c \
           $$PWD/backend/reedsol.c \
           $$PWD/backend/rss.c \
           $$PWD/backend/sjis.c \
           $$PWD/backend/svg.c \
           $$PWD/backend/telepen.c \
           $$PWD/backend/tif.c \
           $$PWD/backend/ultra.c \
           $$PWD/backend/upcean.c \
           $$PWD/backend/vector.c \
           $$PWD/backend/qr.c \
           $$PWD/backend/dllversion.c \
           $$PWD/backend/code1.c \
           $$PWD/backend/png.c \
           $$PWD/qzint.cpp

VERSION = 2.9.1

使用直接在.pro中添加

include($$PWD/zint-2.9.1/backend_qt/backend_qt.pri);

生成一维码

#include "zint-2.9.1/backend_qt/qzint.h"
void QRcodeDialog::on_pushButton_barCode_clicked()
{
    Zint::QZint bc;
    Zint::QZint::AspectRatioMode ar = Zint::QZint::KeepAspectRatio;
    //init
    bc.setSymbol(BARCODE_CODE128);//BARCODE_QRCODE二维码
    bc.setSecurityLevel(0);
	//一维码内容
    bc.setText(ui->textEdit_barCode->toPlainText());
    //绘制一维码
    QImage image(ui->label_barCode->size(),QImage::Format_RGB32);
    QPainter painter(&image);
    bc.render(painter,image.rect(),ar);
    ui->label_barCode->setPixmap(QPixmap::fromImage(image));
}

默认条形码的文字是在下面的
在这里插入图片描述

可以通过修改
在这里插入图片描述
效果
在这里插入图片描述

生成DM码

#include "zint-2.9.1/backend_qt/qzint.h"

/** 创建 DM 二维码
 * @brief QRcodeDialog::createDMCode
 * @param text
 * @param size  二维码尺寸
 * @param penWidth 画笔宽度
 * @return
 */
QImage  QRcodeDialog::createDMCode(const QSize &size,const QString &text,int penWidth) const
{
    Zint::QZint bc;
    Zint::QZint::AspectRatioMode ar = Zint::QZint::KeepAspectRatio;//IgnoreAspectRatio,KeepAspectRatio
    //init
    bc.setSymbol(BARCODE_DATAMATRIX);//BARCODE_QRCODE二维码
    bc.setBorderWidth(0);
    bc.setBgColor(QColor(255,255,255,255));

    bc.setText(text);
    QImage image(size,QImage::Format_RGB32);
    QPainter painter(&image);
    painter.fillRect(image.rect(),Qt::white);
    //绘制黑色外壳
    painter.setPen(QPen(QColor(0,0,0,255),penWidth,Qt::SolidLine,Qt::FlatCap,Qt::MiterJoin));
    QRect rect1(penWidth/2,penWidth/2,image.rect().width()-penWidth,image.rect().height()-penWidth);
    painter.drawRect(rect1);
	//二维码绘制区域, 外壳和二维码绘制中空余了白色的边框
    penWidth = penWidth + penWidth ;
    QRect rect2(penWidth,penWidth,image.rect().width()-penWidth*2,image.rect().height()-penWidth*2);
    bc.render(painter,rect2,0,ar);
    return image;
}

在这里插入图片描述
把上面的 bc.setSymbol(BARCODE_DATAMATRIX); 换成 BARCODE_QRCODE 就是我们常用的二维码,用微信可以扫出字符

DM码识别

https://blog.csdn.net/u012020854/article/details/113182386

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,需要安装 Zint 库。可以在 Ubuntu 上使用以下命令安装: ``` sudo apt-get install libzint-dev ``` 或者在 Windows 上下载编译好的库文件并添加到项目中。 接下来,在 Qt Creator 中创建一个新的 Qt Widgets 应用程序项目。 在项目中添加 Zint 库,方法是在 .pro 文件中添加以下行: ``` LIBS += -lzint ``` 在 Qt Designer 中创建一个窗口,添加一个文本编辑器和一个按钮。 在代中添加以下行,以便在按钮点击时生成二维码: ```cpp #include <zint.h> void Widget::on_pushButton_clicked() { char* barcode_data = ui->textEdit->toPlainText().toUtf8().data(); int barcode_length = strlen(barcode_data); struct zint_symbol* barcode = ZBarcode_Create(); barcode->symbology = BARCODE_QRCODE; barcode->input_mode = UNICODE_MODE; barcode->output_options = READER_INIT | ECI_MODE | GS1_MODE; barcode->eci = 65001; barcode->scale = 1; barcode->option_1 = 5; // ECC level, 5 = highest barcode->option_2 = 1; // minimum version ZBarcode_Encode(barcode, (unsigned char*)barcode_data, barcode_length); QImage barcode_image(barcode->bitmap, barcode->width, barcode->height, QImage::Format_Mono); ui->label->setPixmap(QPixmap::fromImage(barcode_image)); ui->label->setScaledContents(true); ZBarcode_Delete(barcode); } ``` 这段代首先从文本编辑器中获取输入的文本数据,并将其转换为 UTF-8 格式。 接下来,创建一个 Zint 符号,并设置它的属性。在本例中,选择的二维码类型为 QR Code,输入模式为 UNICODE_MODE,输出选项为 READER_INIT、ECI_MODE 和 GS1_MODE,ECI 值为 65001,比例为 1,ECC 等级为 5(最高),最小版本为 1。 然后,使用 Zint 库的 ZBarcode_Encode 函数生成二维码。将生成的位图转换为 QImage,并将其显示在 QLabel 控件中。 最后,使用 ZBarcode_Delete 函数释放 Zint 符号。 现在,运行程序并在文本编辑器中输入一些文本,然后单击按钮。将会生成一个二维码并显示在程序窗口中。 希望这可以帮助你实现使用 Qt Creator 和 Zint生成二维码
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值