QZXing 快速入门:5 步搞定 Qt 项目二维码扫描功能 QZXing 快速入门5 步搞定 Qt 项目二维码扫描功能【免费下载链接】qzxingQt/QML wrapper library for the ZXing library. 1D/2D barcode image processing library项目地址: https://gitcode.com/gh_mirrors/qz/qzxing想给 Qt 应用加上二维码扫描功能又不想从零实现图像识别算法QZXing 就是为此而生的开源利器。它是著名条码识别库 ZXing 的 Qt/QML 封装提供开箱即用的二维码识别、一维条码识别和二维码生成能力。本文用 5 个实战步骤带你快速在 Qt 项目中集成 QZXing从工程配置到摄像头实时扫码一次讲透新手也能轻松上手。QZXing 是什么为什么用它做二维码扫描QZXing 是一个轻量级的 Qt/QML 封装库核心源码位于src/zxing/目录对外暴露简洁的 C 接口src/QZXing.h和 QML 组件让开发者完全不用接触底层图像算法。它支持识别的条码类型非常丰富类型说明QR Code二维码最常用Data Matrix数据矩阵码EAN-13 / EAN-8商品条码UPC-A / UPC-E北美商品条码Code 39 / 93 / 128工业条码Codabar、ITF物流/图书条码PDF 417、Aztec证件/票据类条码除了识别QZXing 还支持生成二维码识别与生成一条龙非常适合做票务、物流、商品管理、移动支付等场景。✅第一步获取 QZXing 源码并集成到工程集成方式有两种任选其一方式一直接克隆仓库git clone https://gitcode.com/gh_mirrors/qz/qzxing方式二只复制核心源码把克隆下来的src/目录整体复制到你的 Qt 工程根目录下即可QZXing 没有第三方运行时依赖复制即用。如果想要编译成独立的静态库也可以直接用 Qt Creator 打开根目录的QZXing.pro在文件里启用CONFIG staticlib后编译之后链接使用。第二步在 .pro 工程文件中引入 QZXing这是最关键的一步只需在工程的.pro文件里加一行include(QZXing/QZXing.pri)引入后QZXing 会默认启用全部解码与编码功能。如果你用的是更细粒度的QZXing-components.pri还可以按需裁剪依赖CONFIG 选项作用qzxing_qml启用 QML 组件支持qzxing_multimedia启用摄像头实时扫码需 Qt Multimedia 模块enable_encoder_qr_code启用二维码生成功能依赖控制很灵活核心识别功能只需要 QtCore QtGuiQML 功能需要 QtQuick实时扫码才需要 Multimedia。这样打出来的安装包可以做到尽量精简。第三步在 main.cpp 中注册 QML 类型要在 QML 里使用 QZXing需要先在入口文件注册类型。打开你的main.cpp加入两行代码#include QZXing.h // 在创建 QML 引擎之后调用 QZXing::registerQMLTypes(); QZXing::registerQMLImageProvider(engine);registerQMLTypes()负责注册QZXing这个 QML 组件registerQMLImageProvider()则注册图片提供器后面生成二维码时会用到。注册完成后QML 代码中就可以import QZXing 3.3直接使用了。第四步在 QML 中编写二维码识别逻辑现在进入正题。在 QML 文件顶部引入模块然后声明一个QZXing解码器import QZXing 3.3 QZXing { id: decoder enabledDecoders: QZXing.DecoderFormat_QR_CODE onTagFound: console.log(识别结果: tag) onDecodingFinished: console.log(解码完成是否成功: succeeded) }几个核心概念你需要知道enabledDecoders指定要识别的条码类型用|可组合多种例如DecoderFormat_QR_CODE | DecoderFormat_EAN_13。只开启需要的类型能明显提升识别速度。decodeImageQML()对一张图片发起解码配合Image元素即可识别静态图片。onTagFound识别成功回调tag参数就是解码出的字符串内容。如果只是识别一张已存在的图片用decoder.decodeImageQML(image)一行就能触发解码非常适合选择图片 → 识别的简单场景。✨第五步接入摄像头实现实时扫码静态图片识别只是入门大多数应用需要的是摄像头实时扫码。QZXing 为此提供了QZXingFilter组件源码见src/QZXingFilter.h可以直接挂载到VideoOutput上作为视频滤镜边预览边识别。第一步在.pro中开启多媒体支持CONFIG qzxing_multimedia然后参考官方示例examples/QZXingLive/main.qml的写法在 QML 中这样组合VideoOutput { source: camera filters: [ zxingFilter ] } QZXingFilter { id: zxingFilter decoder { enabledDecoders: QZXing.DecoderFormat_QR_CODE onTagFound: console.log(扫码结果: tag) } }这样摄像头画面会实时经过滤镜分析一旦扫到二维码立刻触发onTagFound无需手动拍照。你还可以通过captureRect属性限定屏幕中央的扫描区域体验和主流扫码 App 完全一致。小提示QZXingFilter的实时摄像头功能依赖 Qt Multimedia 模块在 Qt 6 中该模块曾一度被移除因此官方示例中 Qt 5 使用main.qml、Qt 6.2 使用main_qt6_2.qml新项目建议直接基于 Qt 6.2 的写法。进阶彩蛋一行代码生成二维码QZXing 不只识码还能生成二维码这在做扫码兑奖票据生成等双向功能时非常实用。C 方式QImage qrImage QZXing::encodeData(要编码的内容);QML 方式更简单直接把内容拼到图片地址里Image { source: image://QZXing/encode/ Hello QZXing }还可以通过 URL 参数定制纠错等级和尺寸例如?correctionLevelH。完整的编码示例可参考examples/BarcodeEncoder/目录。常见问题与避坑指南Q1为什么识别速度慢只保留你需要的解码格式例如仅DecoderFormat_QR_CODE不要开启全部类型对低清图片可配合tryHarder选项平衡速度与准确率。Q2Qt 6 下能不能用可以。QZXing 在 Qt 6 下会自动把 Qt 5 的QTextCodec替换为QStringDecoder处理字符编码整体接口保持不变。唯一要注意的是实时摄像头滤镜对 Qt Multimedia 模块的依赖情况。Q3识别中文内容乱码怎么办QZXing 已处理字符集问题识别结果可通过charSet()查看字符编码若仍异常优先确认 Qt 版本与 QZXing 版本是否匹配。Q4如何在多个页面复用扫码功能把QZXingFilter封装成一个独立的 QML 组件通过信号把tag结果抛给调用方即可参考examples/QMLBarcodeScanner/的组件化写法。总结QZXing 用 5 步就能完成 Qt 项目的二维码扫描集成拉取源码 → 引入 .pri → 注册 QML 类型 → 编写解码逻辑 → 接入摄像头。它同时支持 13 种条码识别和二维码生成接口简洁、依赖可控还提供了 Live、BarcodeEncoder 等可直接运行的示例工程是 Qt 生态里性价比极高的扫码解决方案。现在就去examples/目录跑一跑官方示例把第一个扫一扫功能加上吧【免费下载链接】qzxingQt/QML wrapper library for the ZXing library. 1D/2D barcode image processing library项目地址: https://gitcode.com/gh_mirrors/qz/qzxing创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考