Qt 详解QtNFC 读写模式
文章目录
- Qt NFC 读写模式详解
- 1. NFC 读写模式简介
- 1.1 什么是 NFC 读写模式?
- 主要功能:
- 1.2 常见应用场景
- 2. Qt NFC 读写模式原理
- 3. 配置 QtNFC 模块
- 4. NFC 读写操作实现
- 4.1 NFC 标签读取
- 代码示例
- 功能解析
- 4.2 NFC 标签写入
- 代码示例
- 功能解析
- 5. 使用注意事项
- 6. 总结
Qt NFC 读写模式详解
NFC(近场通信)是一种短距离无线通信技术,支持设备间在近距离内(10 厘米以内)交换信息。Qt 提供了强大的 QtNFC 模块,允许开发者轻松实现 NFC 的功能。在本文中,我们将聚焦于 NFC 的读写模式,详细介绍其工作原理以及如何在 Qt 中实现读写操作。
1. NFC 读写模式简介
1.1 什么是 NFC 读写模式?
NFC 读写模式是 NFC 三种工作模式之一。在这种模式下,主动设备(例如智能手机或 NFC 读卡器)可以读取被动设备(如 NFC 标签)上的数据,或者向其写入数据。
主要功能:
- 读取数据:主动设备扫描并读取 NFC 标签中的数据(如文本、URL 等)。
- 写入数据:主动设备向 NFC 标签写入数据,实现动态数据交互。
1.2 常见应用场景
- 扫描商品上的 NFC 标签以获取产品信息。
- 写入名片信息到 NFC 标签,实现快速分享。
- 更新 NFC 标签内容用于动态广告牌。
- 读取门禁卡或车票上的信息。
2. Qt NFC 读写模式原理
在 Qt 中,NFC 读写操作由 QNearFieldManager 和 QNearFieldTarget 类实现:
-
QNearFieldManager
管理 NFC 硬件设备的状态,负责扫描附近的 NFC 标签。 -
QNearFieldTarget
表示检测到的 NFC 标签,用于读取或写入数据。 -
NDEF 消息格式
NFC 数据交换格式(NDEF,NFC Data Exchange Format)是 NFC 标签中存储和交换数据的标准格式。Qt 提供了QNdefMessage和QNdefRecord类来处理 NDEF 数据。
3. 配置 QtNFC 模块
在使用 QtNFC 模块前,需要在 .pro 文件中添加模块依赖:
QT += nfc
在代码中包含头文件:
#include <QNdefMessage>
#include <QNdefRecord>
#include <QNearFieldManager>
#include <QNearFieldTarget>
4. NFC 读写操作实现
4.1 NFC 标签读取
以下是一个简单的 NFC 读取示例代码:
代码示例
#include <QApplication>
#include <QNearFieldManager>
#include <QNearFieldTarget>
#include <QNdefMessage>
#include <QNdefRecord>
#include <QDebug>class NfcReader : public QObject {Q_OBJECTpublic:NfcReader(QObject *parent = nullptr) {manager = new QNearFieldManager(this);connect(manager, &QNearFieldManager::targetDetected, this, &NfcReader::onTargetDetected);connect(manager, &QNearFieldManager::targetLost, this, &NfcReader::onTargetLost);manager->startTargetDetection();}~NfcReader() {manager->stopTargetDetection();}private slots:void onTargetDetected(QNearFieldTarget *target) {qDebug() << "NFC 标签已检测到!";// 读取 NDEF 消息connect(target, &QNearFieldTarget::ndefMessageRead, this, [=](const QNdefMessage &message) {for (const QNdefRecord &record : message) {qDebug() << "记录类型:" << record.typeNameFormat();qDebug() << "记录内容:" << record.payload();}target->deleteLater();});target->readNdefMessages();}void onTargetLost(QNearFieldTarget *target) {qDebug() << "NFC 标签已丢失!";target->deleteLater();}private:QNearFieldManager *manager;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);NfcReader reader;return app.exec();
}
功能解析
- 使用
QNearFieldManager开始目标检测。 - 当检测到 NFC 标签时,触发
targetDetected信号。 - 使用
readNdefMessages方法读取标签中的 NDEF 消息。 - 通过解析
QNdefMessage和QNdefRecord获取记录内容。
4.2 NFC 标签写入
以下是一个 NFC 写入示例代码:
代码示例
#include <QApplication>
#include <QNearFieldManager>
#include <QNearFieldTarget>
#include <QNdefMessage>
#include <QNdefRecord>
#include <QDebug>class NfcWriter : public QObject {Q_OBJECTpublic:NfcWriter(QObject *parent = nullptr) {manager = new QNearFieldManager(this);connect(manager, &QNearFieldManager::targetDetected, this, &NfcWriter::onTargetDetected);manager->startTargetDetection();}~NfcWriter() {manager->stopTargetDetection();}private slots:void onTargetDetected(QNearFieldTarget *target) {qDebug() << "NFC 标签已检测到,开始写入数据!";// 创建 NDEF 消息QNdefMessage message;QNdefRecord record(QNdefRecord::Mime);record.setPayload("Hello, NFC!".toUtf8());message.append(record);// 写入数据connect(target, &QNearFieldTarget::requestCompleted, this, []() {qDebug() << "数据写入成功!";});connect(target, &QNearFieldTarget::error, this, [](QNearFieldTarget::Error error) {qDebug() << "写入失败:" << error;});target->writeNdefMessages(message);}private:QNearFieldManager *manager;
};int main(int argc, char *argv[]) {QApplication app(argc, argv);NfcWriter writer;return app.exec();
}
功能解析
- 使用
QNdefMessage和QNdefRecord创建数据消息。 - 调用
writeNdefMessages方法向 NFC 标签写入数据。 - 监听
requestCompleted和error信号,判断写入结果。
5. 使用注意事项
-
硬件支持
NFC 功能依赖设备的硬件支持。在开发前,请确保目标设备具备 NFC 功能。 -
权限配置
在 Android 平台上,需要在AndroidManifest.xml文件中添加 NFC 权限:<uses-permission android:name="android.permission.NFC" /> -
NDEF 支持
并非所有 NFC 标签都支持 NDEF 消息。在操作 NFC 标签时,请确认其支持的协议。 -
数据安全
NFC 通信距离短,但仍需注意数据加密和防止标签克隆。
6. 总结
本文详细介绍了 NFC 的读写模式及其在 Qt 中的实现方法。通过 QtNFC 模块,开发者可以轻松实现 NFC 标签的读取和写入功能。NFC 读写模式在支付、身份验证和物联网设备交互等场景中具有广泛的应用。希望本文的示例代码和注意事项能为您开发 NFC 应用提供帮助!
相关文章:
Qt 详解QtNFC 读写模式
文章目录 Qt NFC 读写模式详解1. NFC 读写模式简介1.1 什么是 NFC 读写模式?主要功能: 1.2 常见应用场景 2. Qt NFC 读写模式原理3. 配置 QtNFC 模块4. NFC 读写操作实现4.1 NFC 标签读取代码示例功能解析 4.2 NFC 标签写入代码示例功能解析 5. 使用注意…...
增删改查文档
列表 : 列表包含 : 模糊查找 分页 列表jsp页面 : 一 :导入外部文件 (举例 : 用户点进来就可以看到菜单,这是预加载属于,使用文档就绪函数实现) 二 : body 上 ① : 文档就绪函数 ${ function() //获取条件查询的字段 //组装对象 //调用文档就绪函数 } ② : 封装ajax方…...
C语言蓝桥杯2023年省赛真题
文章目录 持续更新中...第一题题目描述输入格式输出格式样例输出提示 2 第二题题目描述 第三题题目描述输入格式输出格式样例输入样例输出 第四题题目描述输入格式输出格式样例输入样例输出提示 第四题题目描述输入格式输出格式样例输入样例输出提示 第五题题目描述输入格式输出…...
Python迭代器-大数据量的处理
一 生成器的实际使用(大量数据的导出) #分批导出数据然后分批写入excel import pandas as pd import openpyxl from openpyxl.utils.dataframe import dataframe_to_rowsdef execute_query(query):# 假设这是执行 SQL 查询的函数# 返回查询结果passdef …...
自动化包括态交互与感交互,而智能化包括势交互与知交互
“自动化包括态交互与感交互,而智能化包括势交互与知交互”交互框架将交互过程划分为不同类型,有助于更清晰地理解自动化和智能化的本质及其在未来agent应用中的差异与联系。 1. 自动化:态交互与感交互 自动化主要关注的是高效、无差错地执行…...
VideoBooth: Diffusion-based Video Generation with Image Prompts
VideoBooth: Diffusion-based Video Generation with Image Prompts 概括 文章提出了一个视频生成模型VideoBooth,输入一张图片和一个文本提示词,即可输出保持图片中物体且符合文本提示词要求的视频。 方法 粗-细两阶段设计:1)…...
模拟简单的iOT工作流
没有实际接触过iOT的流程,应该实际使用比这个接口返回要复杂,只是演示~希望能参与实际的接口接入,而不是只展示个假数据。 启动RabbitQ 使用的是3.8.5 启动命令 RabbitMQ Service - start RabbitMQ Command Prompt rabbitmqctl start_app …...
C++学习0.2: RAII
引用: 【代码质量】RAII在C编程中的必要性_raii 在c中的重要性-CSDN博客 C RAII典型应用之lock_guard和unique_lock模板_raii lock-CSDN博客 前言: 常用的线程间同步/通信(IPC)方式有锁(互斥锁、读写锁、自旋锁)、…...
k8s,进一步理解Pod
比如,凡是调度、网络、存储,以及安全相关的属性,基本上是Pod 级别的。 这些属性的共同特征是,它们描述的是“机器”这个整体,而不是里面运行的“程序”。比如,配置这个“机器”的网卡(即&#…...
MFC图形函数学习13——在图形界面输出文字
本篇是图形函数学习的最后一篇,相关内容暂告一段落。 在图形界面输出文字,涉及文字字体、大小、颜色、背景、显示等问题,完成这些需要系列函数的支持。下面做简要介绍。 一、输出文本函数 原型:virtual BOOL te…...
【Canvas与雷达】点鼠标可暂停金边蓝屏雷达显示屏
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>点鼠标可暂停金边蓝屏雷达显示屏 Draft1</title><style typ…...
React第十二节组件之间通讯之发布订阅模式(使用pubsub-js插件)
组件之间通讯常用方案 1、通过props 2、通过context 3、通过发布订阅模式 4、通过Redux 后面会有专栏介绍 1、安装 pubsub-js 插件 yarn add pubsub-js 常用的事件 a、发布事件:传入一个自定义事件名称(name),以及要发布的消息内…...
Vue3安装 运行教程
本文是综合了所有vue安装教程而成 更细化 更简略 希望对各位读者有所帮助! Vue安装 1. Vue-cli脚手架安装 安装vue的方式有很多 我们这里选择npm方式安装vue npm方式 npm方式安装vue,详细介绍见下文。 1.node.js安装和配置 安装npm 需要安装note.js&…...
MySQL:约束constraint
约束就是表中数据的限制条件. 表在设计的时候加入约束的目的是为了保证表中记录的完整性和有效性,如用户表有些列的值(手机号)不能为空,有些列的值(身份证号)不能重复。 主键约束(primary key) PK MySQL主…...
使用Rufus制作Ubuntu需要注意
在使用Rufus制作Ubuntu启动盘并进行BIOS设置时,需要注意以下几点: 关闭RST(英特尔 快速存储技术):在BIOS设置中,如果电脑启用了RST功能,需要将其关闭。因为Ubuntu可能无法检测到硬盘&a…...
探索Go语言的高级特性:性能分析与安全性
Go语言性能分析与安全性 引言 Go语言因其高效的并发特性、简洁的语法和强大的工具链而受到广泛欢迎。在实际开发中,性能分析和安全性是需要特别关注的两个方面。本文将深入探讨Go语言中的性能分析工具和安全性考虑,帮助开发者编写高效、安全的Go应用程…...
SearchSploit配合gcc的使用
渗透测试中,SearchSploit是一个非常有用的工具,用于在Exploit数据库中搜索漏洞利用代码。其使用方法如下: 安装SearchSploit:首先确保你的系统中已经安装了Kali Linux,因为SearchSploit是Kali Linux的一部分。如果没有…...
无人机设计:云台挂载!
一、无人机云台挂载设置 安装与固定 将云台固定到无人机的挂载点上,通常需要使用专用的固定架和螺丝等工具。 确保云台与无人机之间的连接牢固,避免在飞行过程中出现松动或脱落的情况。 连接与调试 将云台与无人机之间的连接线缆(如电源…...
Spring Native适用场景、代理使用及测试部署策略
文章目录 1. Spring Native 适用的应用程序2. 在 Spring Native 中使用代理3. 测试和部署 Spring Native 应用测试部署 1. Spring Native 适用的应用程序 微服务:微服务架构中每个服务都相对独立,快速启动时间和较低的资源消耗对于提高部署效率和服务响…...
LeetCode—11. 盛最多水的容器(中等)
题目描述: 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
