QZXing二维码库使用完全指南
QZXing是一个基于Qt/QML的二维码处理库,它为著名的ZXing图像处理库提供了便捷的封装接口,支持一维码和二维码的快速解码与编码功能。该库设计精巧,分为不同的依赖层级,能够满足从核心功能到QML交互的各种需求。
项目概述与核心特性
QZXing库专注于为Qt开发者提供简单高效的二维码处理解决方案。通过集成QtCore和QtGui模块,确保了基础的图像处理能力,同时也考虑到了向后兼容性,提供了对Quick的支持。
支持的解码格式:
- UPC-A、UPC-E
- EAN-8、EAN-13
- ITF、Code 39、Code 93、Code 128 (GS1)
- Codabar、QR Code、Data Matrix
- Aztec (beta)、PDF 417
支持的编码格式:
- QR Code
项目集成与配置
获取项目源码
首先克隆项目到本地:
git clone https://gitcode.com/gh_mirrors/qz/qzxing
集成方式选择
QZXing提供两种集成方式:
1. 源码集成方式 将QZXing源代码文件夹复制到项目根目录,在.pro文件中添加:
include(QZXing/QZXing.pri)
2. 外部库编译方式 打开QZXing项目(QZXing.pro)并编译。如需编译为静态库,在.pro文件中取消注释:
CONFIG += staticlib
依赖控制配置
项目支持三个级别的依赖配置:
核心功能 (QZXing core) 仅需要QtCore和QtGui模块,提供基本的二维码处理能力。
核心 + QML功能 如需使用QML功能,在.pro文件中添加:
CONFIG += qzxing_qml
QZXingFilter多媒体支持 提供实时视频流解码功能,需要多媒体模块:
CONFIG += qzxing_multimedia
核心功能使用详解
解码操作
C++/Qt使用示例:
#include "QZXing.h"
int main()
{
QImage imageToDecode("file.png");
QZXing decoder;
decoder.setDecoder(DecoderFormat_QR_CODE | DecoderFormat_EAN_13);
// 可选设置
decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
decoder.setTryHarderBehaviour(QZXing::TryHarderBehaviour_ThoroughScanning | QZXing::TryHarderBehaviour_Rotate);
QString result = decoder.decodeImage(imageToDecode);
}
Qt Quick使用示例: 首先在C++中注册QML类型:
#include "QZXing.h"
int main()
{
...
QZXing::registerQMLTypes();
...
}
然后在QML文件中使用:
import QZXing 3.3
function decode(preview) {
imageToDecode.source = preview
decoder.decodeImageQML(imageToDecode);
}
Image{
id:imageToDecode
}
QZXing{
id: decoder
enabledDecoders: QZXing.DecoderFormat_QR_CODE
onDecodingStarted: console.log("Decoding of image started...")
onTagFound: console.log("Barcode data: " + tag)
onDecodingFinished: console.log("Decoding finished " + (succeeded==true ? "successfully" : "unsuccessfully"))
}
编码操作
启用编码功能: 如果使用QZXing.pri,编码功能已自动启用。如果使用QZXing-components.pri,需在.pro文件中添加:
CONFIG += enable_encoder_qr_code
include(QZXing/QZXing-components.pri)
C++/Qt编码示例:
#include "QZXing.h"
int main()
{
QString data = "text to be encoded";
QImage barcode = QZXing::encodeData(data);
}
自定义编码设置:
QString data = "text to be encoded";
QImage barcode = QZXing::encodeData(data, QZXing::EncoderFormat_QR_CODE,
QSize(width.toInt(), height.toInt()), QZXing::EncodeErrorCorrectionLevel_H);
Qt Quick编码示例: 首先注册图像提供者:
QQmlApplicationEngine engine;
QZXing::registerQMLTypes();
QZXing::registerQMLImageProvider(engine);
默认设置使用:
import QZXing 3.3
TextField {
id: inputField
text: "Hello world!"
}
Image{
source: "image://QZXing/encode/" + inputField.text;
cache: false;
}
自定义设置使用:
import QZXing 3.3
TextField {
id: inputField
text: "Hello world!"
}
Image{
source: "image://QZXing/encode/" + inputField.text +
"?correctionLevel=M" +
"&format=qrcode"
sourceSize.width: 320
sourceSize.height: 320
}
实际应用场景
实时扫码应用
在移动或桌面应用中,利用QZXing结合摄像头功能,实现即时二维码扫描,优化用户体验。建议采用非阻塞方式处理解码任务,确保UI的流畅性。
数据采集自动化
在仓储管理、票务系统等场景中,QZXing可以作为读取商品条码或电子票据的关键技术,快速接入数据库系统。
示例项目说明
项目提供了多个示例应用,包括:
- QZXingLive:实时摄像头二维码扫描应用
- BarcodeEncoder:二维码生成器应用
- QMLBarcodeScanner:QML条码扫描器
- QZXingDragNDropTest:拖放解码测试应用
性能优化建议
- 采用异步处理机制避免界面卡顿
- 合理设置图像预处理参数
- 优化内存使用,提升处理效率
- 根据具体需求选择合适的解码格式
通过本指南,您已经掌握了QZXing库的核心使用方法。这个强大的二维码处理工具能够帮助您在Qt项目中快速集成专业的二维码扫描和生成功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



