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>()) { QNdefNfcTextRecordtextRecord(record);
    qDebug() << textRecord.text();
}

创建专门的 NDEF 记录类

使用Q_DECLARE_NDEF_RECORD() 和Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD() 宏可以轻松创建专门的 NDEF 记录类。下面的示例显示了封装了单个 int 属性 foo 的假设example.com:f记录类型的类声明。

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::Empty0x00空 NDEF 记录,记录不包含有效载荷
QNdefRecord::NfcRtd0x01NDEF 记录类型由 NFC RTD 规范定义
QNdefRecord::Mime0x02NDEF 记录类型遵循 RFC 2046 中描述的结构
QNdefRecord::Uri0x03NDEF 记录类型遵循 RFC 3986 中描述的结构
QNdefRecord::ExternalRtd0x04NDEF 记录类型遵循 NFC RTD 规范中描述的外部类型名称结构
QNdefRecord::Unknown0x05记录类型未知,应与 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 是专门类的名称, 是自定义类型的相应 , 是不带 NID 或 NSS 前缀的类型。即typeNameFormat QNdefRecord::TypeNameFormat type 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 是专门类的名称, 是自定义类型的相应 , 是不带 NID 或 NSS 前缀的类型。即typeNameFormat QNdefRecord::TypeNameFormat type example.com:f而不是 urn:nfc:ext:example.com:f。 是空记录的初始有效载荷,必须是 或可隐式转换为 的类型。initialPayload QByteArray QByteArray

详见Creating specialized NDEF record classes 章节。

另请参阅 Q_DECLARE_ISRECORDTYPE_FOR_NDEF_RECORD() 。

© 2025 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.