class QNdefFilter#

QNdefFilter类提供了一个匹配NDEF消息的过滤器。更多

概要#

方法#

注意

此文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译有问题,您也可以通过在https:/bugreports.qt.io/projects/PYSIDE创建工单来告知我们

详细描述#

QNdefFilter 封装了NDEF消息的结构,用于匹配具有特定结构的消息。

以下过滤器匹配包含单个智能海报记录的NDEF消息

QNdefFilter filter;
filter.append(QNdefRecord::NfcRtd, "Sp");

以下过滤器匹配包含URI、本地化文本和可选JPEG图像的NDEF消息。记录的顺序必须按照指定的顺序

QNdefFilter filter;
filter.setOrderMatch(true);
filter.appendRecord(QNdefRecord::NfcRtd, "U");
filter.appendRecord<QNdefNfcTextRecord>();
filter.appendRecord(QNdefRecord::Mime, "image/jpeg", 0, 1);

可以使用 match() 方法检查消息是否与过滤器匹配。

匹配算法#

过滤器行为取决于 orderMatch() 参数的值。

注意

在下面的讨论中,我们将考虑如果其 typeNameFormattype 参数匹配,则过滤器记录被认为是相等的。连接两个记录意味着分别添加它们的 minimummaximum 值。

无序匹配#

如果不考虑记录顺序,则可以将过滤器中的所有相等记录连接起来。生成的过滤器将仅包含具有更新后的 minimummaximum 值的唯一记录。

考虑以下示例

QNdefFilter filter;
filter.appendRecord<QNdefNfcTextRecord>(0, 1);
filter.appendRecord<QNdefNfcTextRecord>(0, 1);
filter.appendRecord(QNdefRecord::Mime, "", 1, 1);
filter.appendRecord<QNdefNfcTextRecord>(1, 1);
filter.setOrderMatch(false);

在无序匹配中,过滤器将简化为以下内容

QNdefFilter filter;
filter.appendRecord<QNdefNfcTextRecord>(1, 3);
filter.appendRecord(QNdefRecord::Mime, "", 1, 1);
filter.setOrderMatch(false);

一旦过滤器中只有唯一的记录,匹配算法将遍历消息,并计算每种类型的记录的实际数量。如果所有实际数量都适合对应的 [最小值,最大值] 范围内,则匹配算法返回 true

有序匹配#

如果记录顺序很重要,则应用不同的方法。在这种情况下,不能简单地将相等的记录连接起来。然而,可以连接连续的相等记录。然后,匹配算法遍历消息,这次还考虑了记录的位置。

处理过滤器记录中的空类型#

可以添加一个具有空 type 的过滤器记录。在这种情况下,空类型将作为任何类型的通配符。

例如,过滤器可以定义为以下内容

QNdefFilter filter;
filter.addRecord(QNdefRecord::Mime, "", 1, 1);

此过滤器指定消息必须恰好包含一个使用 Mime 类型名格式 () 和任何 type () 的 NDEF 记录。

处理消息中的额外记录

如果消息中包含不符合过滤器中任何记录的记录,匹配算法将返回 false

过滤器示例

下表中的每个过滤器记录由以下参数指定(按给定顺序)

  • typeNameFormat - 包含记录的 typeNameFormat ()。

  • type - 包含记录的 type ()。

  • minimum - 包含消息中记录出现的最小次数。

  • maximum - 包含消息中记录出现的最大次数。

过滤器包含多个记录。

消息由多个 QNdefRecord 组成。在下表中,仅显示每个记录的 typeNameFormat () 和 type (),因为其他参数对过滤不重要。

过滤器

消息

匹配结果

注释

空过滤器

空消息

匹配

空过滤器

非空消息

不匹配

非空过滤器

空消息

不匹配

[(NfcRtd , “T”, 1, 2), (Mime , “”, 1, 1), (Empty , “”, 0, 100)]

[( Mime , “image/jpeg”), ( Empty , “”), ( NfcRtd , “T”), ( Empty , “”), ( NfcRtd , “T”)]

无序:匹配

有序筛选未匹配,因为消息必须以一个 NfcRtd 记录开始,但它以 Mime 开始。

有序:不匹配

[( NfcRtd , “T”,0,2),( Mime , “”,1,1),( NfcRtd , “T”,1,1)]

[( NfcRtd , “T”),( NfcRtd , “T”),( Mime , “image/jpeg”)]

无序:匹配

有序筛选未匹配,因为预期在 Mime 之后出现一个 NfcRtd 记录,但消息中没有。

有序:不匹配

[( NfcRtd , “T”,0,2),( NfcRtd , “T”,1,1),( Mime , “”,1,1)]

[( NfcRtd , “T”),( Mime , “image/jpeg”)]

无序:匹配

两种情况都匹配,因为消息包含所需的最低记录数,并且顺序正确。

有序:匹配

__init__()链接到此处定义

构造一个新的NDEF过滤器。

__init__(other)
参数:

otherQNdefFilter

构造一个新的NDEF过滤器,它是对 other 的拷贝。

appendRecord(typeNameFormat, type[, min=1[, max=1]])链接到此处定义
参数:
返回类型:

bool

向NDEF过滤器中添加一个类型名为typeNameFormat和类型type的记录。此记录必须在NDEF消息中出现minmax次。

如果成功添加记录则返回 true 。否则返回 false

appendRecord(record)
参数:

recordRecord

返回类型:

bool

验证 record 并将其添加到NDEF过滤器。

如果成功添加记录则返回 true 。否则返回 false

clear()链接到此处定义

清除过滤器。

match(message)链接到此处定义
参数:

messageQNdefMessage

返回类型:

bool

如果 message 与给定过滤器匹配,则返回 true 。否则返回 false

有关匹配的更详细解释,请参阅 匹配算法

orderMatch()链接到此处定义
返回类型:

bool

如果过滤器在匹配时考虑NDEF记录的顺序,则返回 true 。否则返回 false

另请参阅

setOrderMatch()

recordAt(i)#
参数:

i – 整数

返回类型:

记录

返回索引为 i 的 NDEF 记录。

i 必须是一个有效索引(即 0 <= i < recordCount() )。

另请参阅

recordCount()

recordCount()#
返回类型:

整数

返回过滤器中的 NDEF 记录数量。

setOrderMatch(on)#
参数:

on – 布尔值

设置过滤器的排序要求。如果 ontrue,则过滤器只有在过滤器的记录顺序与 NDEF 消息中的记录顺序相匹配时才会匹配。如果 onfalse,则在匹配时不考虑记录顺序。

默认情况下,不考虑记录顺序。

另请参阅

orderMatch()