下载源码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 就是我们常用的二维码,用微信可以扫出字符