百度网盘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.3function decode(preview) {imageToDecode.source = previewdecoder.decodeImageQML(imageToDecode);
}Image{id:imageToDecode
}QZXing{id: decoderenabledDecoders: QZXing.DecoderFormat_QR_CODE/// 可选tryHarderType: QZXing.TryHarderBehaviour_ThoroughScanning | QZXing.TryHarderBehaviour_RotateimageSourceFilter: 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_codeinclude(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.3TextField {id: inputFieldtext: "你好,世界!"
}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.3TextField {id: inputFieldtext: "你好,世界!"
}Image{source: "image://QZXing/encode/" + inputField.text +"?correctionLevel=M" +"&format=qrcode"sourceSize.width: 320sourceSize.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。

联系

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34314.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Ping32与天锐绿盾加密软件对比:哪款防泄密软件适合您的企业?

企业数据泄漏事故层出不穷&#xff0c;为了有效防止机密信息的泄露&#xff0c;选择一款合适的防泄密软件显得尤为重要。Ping32和天锐绿盾加密软件都是市场上比较受欢迎的防泄密工具&#xff0c;那么它们各自的优势和差异是什么呢&#xff1f;让我们一起来了解。 1. 安全性&…

PDF拆分之怎么对批量的PDF文件进行分割-免费PDF编辑工具分享

>>更多PDF文件处理应用技巧请前往 96缔盟PDF处理器 主页 查阅&#xff01; ——————————————————————————————————————— 当然了&#xff0c;单个文件或者其他任意的文件个数的拆分也是支持的&#xff01; 序言 我之前的文章也有…

简易url解码器(定义python单行函数工具)

被%编码的url如同天书&#xff0c;自拟一个单行函数解析还原&#xff0c;方便相认。 (笔记模板由python脚本于2024年12月05日 15:14:17创建&#xff0c;本篇笔记适合学习Url的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&…

JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)

前言 我们想要部署一个javaWeb项目到tomcat上&#xff0c;需要了解一些概念 什么是tomcat&#xff1f; Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;下的一个开源项目&#xff0c;主要用于实现 Java Servlet、JavaServer Pages&#xff08;…

【笔记2-5】ESP32:freertos消息队列

主要参考b站宸芯IOT老师的视频&#xff0c;记录自己的笔记&#xff0c;老师讲的主要是linux环境&#xff0c;但配置过程实在太多问题&#xff0c;就直接用windows环境了&#xff0c;老师也有讲一些windows的操作&#xff0c;只要代码会写&#xff0c;操作都还好&#xff0c;开发…

亚马逊云科技大语言模型加速OCR应用场景发展

目录 前言Amazon Bedrock关于OCR解决方案Amazon Bedrock进行OCR关键信息提取方案注册亚马逊账号API调用环境搭建 总结 前言 大语言模型是一种基于神经网络的自然语言处理技术&#xff0c;它能够学习和预测自然语言文本中的规律和模式&#xff0c;可以理解和生成自然语言的人工…

贪心算法 part03

文章参考来源代码随想录 134. 加油站 方法一分类讨论&#xff1a; 情况一&#xff1a;如果gas的总和小于cost总和&#xff0c;那么无论从哪里出发&#xff0c;一定是跑不了一圈的 情况二&#xff1a;rest[i] gas[i]-cost[i]为一天剩下的油&#xff0c;i从0开始计算累加到最…

【JAVA练习】力扣860.柠檬水找零

题目&#xff1a; 解题思路&#xff1a; 可能面临3种面额&#xff0c; 5美元&#xff0c;不找还&#xff0c;5美元钞票数量加110美元&#xff0c;找还5美元&#xff0c;5美元钞票数量减1&#xff0c;10美元钞票加120美元&#xff0c;找还15美元&#xff0c;分为一张10美元 一…

Telnet不安全?如何配置使用更安全的STelnet远程登录华为AR1000V路由器?

在上一篇文章中&#xff0c;我们介绍了如何配置一台全新的AR1000V&#xff0c;来实现通过Telnet远程登录设备&#xff08;如何配置使用Telnet远程登录华为AR1000V路由器&#xff1f;&#xff09;。其实&#xff0c;在之前的文章中&#xff0c;我们已经介绍过Telnet是一种不安全…

UE----Ios打包笔记

UE 打包 IOS 软件 1.前期准备 1.1. 首先我们需要 一台装有Xcode 的MAC笔记本&#xff08;知道开机密码 最好是空的笔记本 剩余内存要大 &#xff09; 1.2. 一台IOS手机 1.3. 一个申请了开发者账户的 Apple ID (苹果账号) 知晓账号与密码最好 因为很麻烦 1.4. UE 需要 的 兼…

计算机毕业设计Python轨道交通客流预测分析可视化 智慧交通 机器学习 深度学习 人工智能 爬虫 交通大数据

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

windows10电脑缺少dll文件的解决方案,系统缺少dll修复指南

在使用Windows 10操作系统时&#xff0c;有时会遇到由于缺少某些动态链接库&#xff08;Dynamic Link Library, 简称DLL&#xff09;文件而导致程序无法正常运行的问题。本指南将介绍几种解决此类问题的方法。 什么是DLL文件&#xff1f; DLL文件是Windows系统中的一种特殊类型…

并发编程(15)——基于同步方式的线程安全的栈和队列

文章目录 十四、day141. 线程安全的栈1.1 存在隐患的栈容器1.2 优化后的栈容器 2. 线程安全的队列2.1 基于智能指针的线程安全的队列2.2 不同互斥量管理队首、队尾的队列 十四、day14 在并发编程&#xff08;1&#xff09;并发编程&#xff08;5&#xff09;中&#xff0c;我们…

装箱问题的三种解法

有一个箱子容量为V&#xff08;正整数&#xff0c;0≤v≤20000&#xff09;&#xff0c;同时有n个物品&#xff08;0< n ≤30&#xff09;&#xff0c;每个物品有一个体积&#xff08;正整数&#xff09;。 要求n个物品中&#xff0c;任取若干个装入箱内&#xff0c;使箱子的…

万物可爬(以爬取浏览器井盖图片为例)

我们以爬取 井盖图片 这个链接中的图片为例&#xff1a; 点击F12 并选中其中一张图片 &#xff0c;得到它的信息。具体如下&#xff1a;我们可以编写对应的正则表达式&#xff1a; <img[^>]*src"(.*?)"[^>]*alt"井盖图片 的图像结果"[^>]*&g…

【AI系统】轻量级CNN模型新进展

CNN 模型小型化&#xff08;下&#xff09; 在本文会接着介绍 CNN 模型的小型化&#xff0c;除了第二篇文章提到的三个模型外&#xff0c;在本章节会继续介绍 ESPNet 系列&#xff0c;FBNet 系列&#xff0c;EfficientNet 系列和 GhostNet 系列。 ESPNet 系列 ESPNetV1 ESP…

Day06:缓存持久化

缓存持久化 redis做为缓存&#xff0c;数据的持久化是怎么做的&#xff1f; 在Redis中提供了两种数据持久化的方式&#xff1a;1、RDB 2、AOF 方式一&#xff1a;RDB RDB(Redis Database Backup file)&#xff0c;redis数据备份文件&#xff0c;也叫Redis数据快照&#xff…

msvcr100.dll 文件缺失要怎么解决?msvcr100.dll的多少修复方法分析

面对 msvcr100.dll 文件缺失引发的应用程序运行问题&#xff0c;实际上解决方案并不复杂。本文将提供几种直接有效的修复方法&#xff0c;帮助你迅速恢复文件完整性&#xff0c;确保应用程序能够顺利运行&#xff0c;从而轻松克服这一技术障碍。 一.msvcr100.dll主要特性和功能…

【机器学习】机器学习的基本分类-监督学习-梯度提升树(Gradient Boosting Decision Tree, GBDT)

梯度提升树是一种基于**梯度提升&#xff08;Gradient Boosting&#xff09;**框架的机器学习算法&#xff0c;通过构建多个决策树并利用每棵树拟合前一棵树的残差来逐步优化模型。 1. 核心思想 Boosting&#xff1a;通过逐步调整模型&#xff0c;使后续的模型重点学习前一阶段…

什么是CMMI

CMMI的定义与目的 CMMI&#xff08;Capability Maturity Model Integration&#xff0c;即能力成熟度模型集成模型&#xff09;是一种用于评估和改进组织在软件开发、系统集成、项目管理等方面过程能力的框架。它旨在帮助组织识别其当前的过程能力水平&#xff0c;并提供一个路…