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 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:…...
Unity游戏配置管线实战:Luban Schema与Data分离设计
1. 为什么表格配置不是“偷懒”,而是Unity项目规模化生存的刚需在Unity游戏开发里,我见过太多团队把角色属性、武器参数、任务对话全写死在C#脚本里——刚上线时改个血量要改三处代码,策划提个新武器需求得等程序员下班后加字段,版…...
3个核心功能揭秘:JiYuTrainer如何让极域电子教室不再束缚你的学习自由
3个核心功能揭秘:JiYuTrainer如何让极域电子教室不再束缚你的学习自由 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 你是否曾在学校机房被极域电子教室的全屏广播困…...
如何在5分钟内掌握DistroAV网络视频传输:新手完整指南
如何在5分钟内掌握DistroAV网络视频传输:新手完整指南 【免费下载链接】obs-ndi DistroAV (formerly OBS-NDI): NDI integration for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-ndi 还在为复杂的直播布线烦恼吗?想要在不同设备…...
智慧无人机航拍巡检数据集 红外行人车辆识别数据集 行人车辆计数图像识别 红外建筑物识别 夜间低光环境下视觉感知算法 安防、交通等领域红外视觉任务 第10355期
深度学习数据集 README数据集核心信息总览维度详情数据类别目标检测类(建筑物、人们、车辆、路灯、通用物体、单个行人,共 6 类)数据数量图像样本共 60 张,包含训练、验证、测试所需的基础样本量数据集格式图像格式(支…...
WZLBadge最佳实践:解决徽章显示中的常见问题和性能优化
WZLBadge最佳实践:解决徽章显示中的常见问题和性能优化 【免费下载链接】WZLBadge //An one-line tool to show styles of badge for UIView 项目地址: https://gitcode.com/gh_mirrors/wz/WZLBadge WZLBadge是一款轻量级的iOS徽章显示工具,能够帮…...
如何优化鸿蒙 App 的启动速度?
子玥酱 (掘金 / 知乎 / CSDN / 简书 同名) 大家好,我是 子玥酱,一名长期深耕在一线的前端程序媛 👩💻。曾就职于多家知名互联网大厂,目前在某国企负责前端软件研发相关工作,主要聚…...
算法实例分析:使数组相等的最小开销
使数组相等的最小开销通过题意分析可知要让所有值相等,必然不需要超出数据的最大最小值,因此左右边界可以预先缩小范围。然后根据我们上面的分析不断缩小搜索边界范围。关于函数的计算,只要统计所有数据与的差值再乘上权重即可。最后注意&…...
大牛直播SDK(SmartMediaKit)Windows平台RTSP/RTMP直播播放SDK集成说明(C#版)
文档概述 本文介绍大牛直播SDK(SmartMediaKit)在 Windows 平台下 RTSP、RTMP 直播播放模块的集成方法,面向 Windows Forms、WPF 等 C# 客户端应用场景,重点说明 SDK 集成准备、播放器初始化、RTSP/RTMP 播放、播放参数配置、事件…...
对比使用Taotoken前后在模型API费用支出上的月度观察
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比使用Taotoken前后在模型API费用支出上的月度观察 作为一名个人开发者,我日常的开发工作离不开大语言模型的辅助&am…...
裁员风暴:从大厂骨干到失业边缘
2024年的春天,我在一家头部互联网公司担任测试主管的第八个年头,一场突如其来的裁员风暴打破了看似安稳的生活。公司战略收缩,测试部门首当其冲,我和近三成同事被列入优化名单。看着熟悉的工位被迅速清空,手里的离职证…...
