QNdefRecord Class
QNdefRecord 类提供了一个 NFC NDEF 记录。更多内容...
| 标题: | #include <QNdefRecord> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Nfc) target_link_libraries(mytarget PRIVATE Qt6::Nfc) |
| qmake: | QT += nfc |
| 被继承者: | QNdefNfcIconRecord、QNdefNfcSmartPosterRecord 、QNdefNfcTextRecord 以及QNdefNfcUriRecord |
公共类型
| enum | TypeNameFormat { Empty, NfcRtd, Mime, Uri, ExternalRtd, Unknown } |
公共函数
| QNdefRecord() | |
| QNdefRecord(const QNdefRecord &other) | |
| ~QNdefRecord() | |
(since 6.2) void | clear() |
| QByteArray | id() const |
| bool | isEmpty() const |
| bool | isRecordType() const |
| QByteArray | payload() const |
| void | setId(const QByteArray &id) |
| void | setPayload(const QByteArray &payload) |
| void | setType(const QByteArray &type) |
| void | setTypeNameFormat(QNdefRecord::TypeNameFormat typeNameFormat) |
| QByteArray | type() const |
| QNdefRecord::TypeNameFormat | typeNameFormat() const |
| bool | operator!=(const QNdefRecord &other) const |
| QNdefRecord & | operator=(const QNdefRecord &other) |
| bool | operator==(const QNdefRecord &other) const |
宏
| Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD(className, typeNameFormat, type) | |
| Q_DECLARE_NDEF_RECORD(className, typeNameFormat, type, initialPayload) |
详细说明
QNdefRecord 及其派生类用于解析NDEF messages 中的内容并创建新的 NDEF 消息。
使用typeNameFormat() 和setTypeNameFormat() 来获取和设置 NDEF 记录的类型名称格式。
使用type() 和setType() 来获取和设置 NDEF 记录的类型。
使用id() 和setId() 来获取和设置 NDEF 记录的 ID。
使用payload() 和setPayload() 获取和设置 NDEF 记录的有效载荷。可使用isEmpty() 检测有效载荷是否为空。
QNdefRecord 是一个隐式共享类。这意味着您可以高效地在 QNdefRecord 与专用记录类之间进行转换。可使用isRecordType() 模板函数来测试转换是否可行。以下示例演示了如何测试一个 QNdefRecord 是否为 NFC RTD 文本记录,并从中提取文本信息。
if(record.isRecordType<QNdefNfcTextRecord>()) {
QNdefNfcTextRecord textRecord(record);
qDebug() << textRecord.text();
}创建专用 NDEF 记录类
使用Q_DECLARE_NDEF_RECORD() 和Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD() 宏可以轻松创建专用 NDEF 记录类。以下示例展示了假想的example.com:f记录类型的类声明,该类型封装了一个名为 foo 的 int 属性。
class ExampleComF : public QNdefRecord
{
public:
Q_DECLARE_NDEF_RECORD(ExampleComF, QNdefRecord::ExternalRtd, "example.com:f",
QByteArray(sizeof(int), char(0)))
int foo() const;
void setFoo(int v);
};
Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD(ExampleComF, QNdefRecord::ExternalRtd, "example.com:f")开发人员只需为foo() 和setFoo() 函数提供实现,这些函数分别用于解析和设置 NDEF 记录有效载荷的内容。
成员类型文档
enum QNdefRecord::TypeNameFormat
此枚举描述了 NDEF 记录的类型名称格式。
| 常量 | 值 | 描述 |
|---|---|---|
QNdefRecord::Empty | 0x00 | 一个空的 NDEF 记录,该记录不包含有效载荷 |
QNdefRecord::NfcRtd | 0x01 | 该 NDEF 记录类型由 NFC RTD 规范定义 |
QNdefRecord::Mime | 0x02 | 该 NDEF 记录类型遵循 RFC 2046 中描述的结构 |
QNdefRecord::Uri | 0x03 | 该 NDEF 记录类型遵循 RFC 3986 中描述的结构 |
QNdefRecord::ExternalRtd | 0x04 | 该 NDEF 记录类型遵循 NFC RTD 规范中描述的外部类型名称结构 |
QNdefRecord::Unknown | 0x05 | 该记录的类型未知,在缺乏进一步上下文的情况下,应将其视为 MIME 类型为 'application/octet-stream' 的内容 |
成员函数文档
QNdefRecord::QNdefRecord()
创建一个新的空NDEF记录。
QNdefRecord::QNdefRecord(const QNdefRecord &other)
创建一个新的 NDEF 记录,该记录是other 的副本。
[noexcept] QNdefRecord::~QNdefRecord()
删除 NDEF 记录。
[since 6.2] void QNdefRecord::clear()
清除 NDEF 记录。
调用isEmpty() 会返回已清除记录的true 。记录的type() 字段被设置为Empty 。
该函数在 Qt 6.2 中引入。
QByteArray QNdefRecord::id() const
返回 NDEF 记录的 ID。
另请参阅 setId()。
bool QNdefRecord::isEmpty() const
如果 NDEF 记录包含空有效载荷,则返回 `true `;否则返回 `false`。
这等同于调用payload().isEmpty() 。
template <typename T> bool QNdefRecord::isRecordType() const
如果 NDEF 记录属于指定的记录类型,则返回true ;否则返回false 。
QByteArray QNdefRecord::payload() const
返回 NDEF 记录的有效载荷。
另请参阅 setPayload()。
void QNdefRecord::setId(const QByteArray &id)
将 NDEF 记录的 ID 设置为id 。
另请参阅 id()。
void QNdefRecord::setPayload(const QByteArray &payload)
将 NDEF 记录的有效载荷设置为payload 。
另请参阅 payload()。
void QNdefRecord::setType(const QByteArray &type)
将NDEF记录的类型设置为type 。
另请参阅 type()。
void QNdefRecord::setTypeNameFormat(QNdefRecord::TypeNameFormat typeNameFormat)
将 NDEF 记录的类型名称格式设置为typeNameFormat 。
另请参阅 typeNameFormat()。
QByteArray QNdefRecord::type() const
返回 NDEF 记录的类型。
另请参阅 setType()。
QNdefRecord::TypeNameFormat QNdefRecord::typeNameFormat() const
返回 NDEF 记录的类型名称格式。
另请参阅 setTypeNameFormat()。
bool QNdefRecord::operator!=(const QNdefRecord &other) const
如果该 NDEF 记录不等于other ,则返回true ;否则返回false 。
QNdefRecord &QNdefRecord::operator=(const QNdefRecord &other)
将此 NDEF 记录分配给other 。
bool QNdefRecord::operator==(const QNdefRecord &other) const
如果 `other ` 与该 NDEF 记录相同,则返回 `true `;否则返回 `false`。
宏文档
Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD(className, typeNameFormat, type)
该宏为QNdefRecord::isRecordType()函数声明了一个模板特化。
该宏应在头文件中,紧跟在已特化的 NDEF 记录类的定义之后使用。
className 是特化类的名称,typeNameFormat 是该自定义类型的相应QNdefRecord::TypeNameFormat ,而type 是未带 NID 或 NSS 前缀的类型。也就是说,应为example.com:f,而非urn:nfc:ext:example.com:f。
详情请参阅关于Creating specialized NDEF record classes 的章节。
另请参阅 Q_DECLARE_NDEF_RECORD()。
Q_DECLARE_NDEF_RECORD(className, typeNameFormat, type, initialPayload)
该宏为特化的 NDEF 记录类声明了默认构造函数和复制构造函数。
className 是特化类的名称,typeNameFormat 是该自定义类型的相应QNdefRecord::TypeNameFormat ,而type 则是未带 NID 或 NSS 前缀的类型。 即example.com:f,而不是urn:nfc:ext:example.com:f。initialPayload 是空记录的初始有效载荷,它必须是QByteArray 或可隐式转换为QByteArray 的类型。
详情请参阅Creating specialized NDEF record classes 相关章节。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.