百度网盘qzxing-master.zip

qzxing

 

 

 

这是一个针对 ZXing 条形码图像处理库的 Qt/QML 封装库。

支持以下类型的条形码解码:

  • UPC-A
  • UPC-E
  • EAN-8
  • EAN-13
  • ITF
  • Code 39
  • Code 93
  • Code 128(GS1)
  • Codabar
  • 二维码
  • 数据矩阵
  • Aztec(测试版)
  • PDF 417

支持以下类型的条形码编码:

  • 二维码

目录

  1. 如何引入
    1. 嵌入源代码
    2. 作为外部库编译
    3. 控制依赖项
      1. QZXing(核心)
      2. QZXing(核心+QML)
      3. QZXing + QZXingFilter
  2. 如何使用
    1. 解码操作
      1. C++/Qt
      2. Qt Quick
    2. 编码操作
      1. C++/Qt
      2. Qt Quick
    3. 编码文本格式信息
  3. 单元测试依赖项
  4. Qt 6 的限制
  5. 联系方式

如何引入

项目有两种使用方式:

嵌入源代码。

将 QZXing 源代码文件夹复制到你的项目的根目录下。在你的 .pro 文件中添加以下行。更多信息请参阅 这里

include(QZXing/QZXing.pri)

作为外部库编译

打开 QZXing 项目(QZXing.pro)并编译。如果需要编译为静态库,取消 .pro 文件中的以下行的注释:

CONFIG += staticlib

控制依赖项

现在项目文件配置标记已经引入,可以根据需要控制库的依赖关系。 依赖性的三个层次是:

QZXing(核心)

通过包含 QZXing.pri 或构建 QZXing.pro,你将获取 QZXing 的核心功能,它只需要 QtCore 和 QtGui(因为使用了 QImage)。

警告!截至 2017 年 3 月 20 日,初始默认配置包括 qzxing_qml。这个标记一旦添加就不能删除,因此需要从默认设置中移除。

QZXing(核心+QML)

如果应用程序打算使用 QML 功能,现在可以添加对此的依赖。这可以通过在其项目 .pro 文件中添加以下行来完成:

CONFIG += qzxing_qml

QZXing + QZXingFilter

QZXing 包含 QZXingFilter,一个用于向解码库提供实时馈送的实现。它也自动包含 QML 实现。 此选项需要“多媒体”Qt 模块,这就是为什么将其视为单独的配置。可以在项目的 .pro 文件中添加以下行以使用该选项:

CONFIG += qzxing_multimedia

有关如何使用 QZXingFilter 组件的更多详细说明,建议查看 QZXingLive 示例项目。对于 Qt 5.x 版本,请检查 main.qml 文件,而对 Qt 6.2(或更高版本),请检查 main_qt6_2.qml

(待办事项:应编写一篇维基页面以更好地解释 QZXingFilter 组件的使用方法)

如何使用

下面是一些简短的代码片段,简要展示了库的使用。有关更详细的说明,请参阅存储库中包含的示例和 维基

解码操作

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 | QZXing::SourceFilter_ImageInverted);
        decoder.setSourceFilterType(QZXing::SourceFilter_ImageNormal);
        decoder.setTryHarderBehaviour(QZXing::TryHarderBehaviour_ThoroughScanning | QZXing::TryHarderBehaviour_Rotate);

        // 触发解码
	QString result = decoder.decodeImage(imageToDecode);
}

Qt Quick

首先在 QML 引擎中注册 QZXing 类型。

#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

        /
        // 可选
        tryHarderType: QZXing.TryHarderBehaviour_ThoroughScanning | QZXing.TryHarderBehaviour_Rotate

        imageSourceFilter: QZXing.SourceFilter_ImageNormal //| QZXing.SourceFilter_ImageInverted
        /

	onDecodingStarted: console.log("开始解码图像...")
	
	onTagFound: console.log("条形码数据:" + tag)
	
	onDecodingFinished: console.log("解码完成 " + (succeeded==true ? "成功" : "失败"))
}

编码操作

首先确保启用了编码器功能。如果使用了QZXing.pri,该功能已经启用。如果你的项目使用的是QZXing-compoents.pri,则需要在你的.pro文件中添加以下CONFIG:

CONFIG += enable_encoder_qr_code

include(QZXing/QZXing-components.pri)

C++/Qt

编码函数已写为静态,因为它不依赖于除参数提供的数据以外的其他数据。

使用默认设置的编码函数:

  • 格式:二维码
  • 尺寸:240x240
  • 错误校正级别:低(L)
#include "QZXing.h"

int main()
{
    QString data = "待编码的文本";
    QImage barcode = QZXing::encodeData(data);
}

或者,使用自定义设置的编码函数:

QString data = "待编码的文本";
QImage barcode = QZXing::encodeData(data, QZXing::EncoderFormat_QR_CODE,
								 QSize(width.toInt(), height.toInt()), QZXing::EncodeErrorCorrectionLevel_H);

Qt Quick

通过QZXing的图像提供者“image://QZXing/encode/<待编码的数据>”可以轻松地在QML中使用编码功能。与C++示例一样,它既可以用默认设置也可以用自定义设置。

首先在main.cpp中注册自定义图像提供者:

QQmlApplicationEngine engine;

QZXing::registerQMLTypes();
QZXing::registerQMLImageProvider(engine);

默认设置:

import QZXing 3.3

TextField {
	id: inputField
	text: "你好,世界!"
}

Image{
	source: "image://QZXing/encode/" + inputField.text;
	cache: false;
}

或者,使用可选的自定义设置,这些设置像URL查询参数一样传递:

属性名描述
bordertrue, false图像是否有边框(白色1px)
correctionLevelL, M, Q, H错误校正级别
formatqrcode编码格式。目前仅支持二维码。
transparenttrue, false黑色像素是否透明
explicitSizeint若提供,则为二维码矩形的大小

可以通过Image QML元素的Image.sourceWidth和Image.sourceHeight属性调整图像尺寸。

import QZXing 3.3

TextField {
	id: inputField
	text: "你好,世界!"
}

Image{
	source: "image://QZXing/encode/" + inputField.text +
					"?correctionLevel=M" +
					"&format=qrcode"
	sourceSize.width: 320
	sourceSize.height: 320
}

已编码文本格式信息

以下是已编码并经过测试可被Android ZXing解码应用识别的内容列表: 二维码编码wiki页面

单元测试依赖项

为了运行/test文件夹中的单元测试,需要初始化并/或更新包含测试资源的git子模块:

cd qzxing
git submodule update --init --recursive

Qt 6限制

在Qt 6上,一些模块已被移除或尚未支持。删除的模块列表 包括两个直接影响QZXing的重要特性:

文本编解码器

QZXing使用QTextCodec重新解释解析的字符串到其正确的编码。在Qt6中,QTextCodec已移动到core5compat模块。 经过测试,如果在Qt 6中通过core5compat使用QTextCodec,它不再支持许多在Qt 5中支持的编码(例如Shift-JIS编码)。 为了避免对额外模块的依赖(并且该模块也不按预期工作),QZXing仅在构建为Qt 6时使用QStringDecoder代替。如果QZXing为Qt 5构建,仍会使用QTextCodec。

联系

如有错误报告或功能请求,请随时打开一个问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值