Sur cette page

QNdefFilter Class

La classe QNdefFilter fournit un filtre pour les messages NDEF. Plus d'informations...

En-tête : #include <QNdefFilter>
CMake : find_package(Qt6 REQUIRED COMPONENTS Nfc)
target_link_libraries(mytarget PRIVATE Qt6::Nfc)
qmake : QT += nfc

Types publics

struct Record

Fonctions publiques

QNdefFilter()
QNdefFilter(const QNdefFilter &other)
~QNdefFilter()
bool appendRecord(const QNdefFilter::Record &record)
bool appendRecord(unsigned int min = 1, unsigned int max = 1)
bool appendRecord(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, unsigned int min = 1, unsigned int max = 1)
void clear()
(since 6.2) bool match(const QNdefMessage &message) const
bool orderMatch() const
QNdefFilter::Record recordAt(qsizetype i) const
qsizetype recordCount() const
void setOrderMatch(bool on)
QNdefFilter &operator=(const QNdefFilter &other)

Description détaillée

Le filtre QNdefFilter encapsule la structure d'un message NDEF et est utilisé pour faire correspondre les messages qui ont une structure particulière.

Le filtre suivant correspond aux messages NDEF qui contiennent un seul enregistrement d'affiche intelligente :

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

Le filtre suivant correspond aux messages NDEF qui contiennent un URI, un texte localisé et une image JPEG facultative. L'ordre des enregistrements doit être conforme à l'ordre spécifié :

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

La méthode match() peut être utilisée pour vérifier si un message correspond au filtre.

Algorithmes de correspondance

Le comportement du filtre dépend de la valeur du paramètre orderMatch().

Remarque : dans la discussion ci-dessous, nous considérerons que les enregistrements du filtre sont égaux si leurs paramètres typeNameFormat et type correspondent. Joindre deux enregistrements signifie ajouter leurs valeurs minimum et maximum, respectivement.

Correspondance non ordonnée

Si l'ordre des enregistrements n'est pas pris en compte, tous les enregistrements égaux du filtre peuvent être fusionnés. Le filtre résultant ne contiendra que des enregistrements uniques, chacun avec les valeurs minimum et maximum mises à jour.

Prenons l'exemple suivant :

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);

Avec la correspondance non ordonnée, le filtre sera simplifié comme suit :

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

Une fois que le filtre ne contient que des enregistrements uniques, l'algorithme de correspondance parcourt le message et calcule la quantité réelle d'enregistrements de chaque type. Si tous les montants réels sont compris dans les fourchettes [minimum, maximum] correspondantes, l'algorithme de mise en correspondance renvoie true.

Correspondance ordonnée

Si l'ordre des enregistrements est important, une approche différente est appliquée. Dans ce cas, les enregistrements égaux ne peuvent pas être simplement réunis. Cependant, les enregistrements égaux consécutifs peuvent toujours être réunis. L'algorithme de mise en correspondance parcourt ensuite le message en tenant compte, cette fois, de la position des enregistrements.

Gestion du type vide dans l'enregistrement filtre

Il est possible d'ajouter un enregistrement filtre avec un type vide type. Dans ce cas, le type vide agira comme un joker pour n'importe quel type.

Par exemple, le filtre peut être défini comme suit :

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

Ce filtre spécifie que le message doit contenir exactement un enregistrement NDEF avec Mime typeNameFormat (), et n'importe quel type().

Traitement des enregistrements supplémentaires dans le message

Si le message contient des enregistrements qui ne correspondent à aucun enregistrement du filtre, l'algorithme de correspondance renvoie false.

Exemples de filtres

Dans le tableau ci-dessous, chaque enregistrement du filtre est spécifié par les paramètres suivants (dans l'ordre indiqué) :

  • typeNameFormat - contient le typeNameFormat() de l'enregistrement.
  • type - contient le type() de l'enregistrement.
  • minimum - contient le nombre minimum d'occurrences de l'enregistrement dans le message.
  • maximum - contient le nombre maximum d'occurrences de l'enregistrement dans le message.

Le filtre contient plusieurs enregistrements.

Le message se compose de plusieurs QNdefRecords. Dans le tableau ci-dessous, seuls les typeNameFormat() et type() de chaque enregistrement sont affichés, car les autres paramètres n'ont pas d'importance pour le filtrage.

FiltreMessageRésultat de la correspondanceCommentaire
Filtre videMessage videCorrespondance
Filtre videMessage non videPas de correspondance
Filtre non videMessage videPas de correspondance
[(QNdefRecord::NfcRtd, "T", 1, 2), (QNdefRecord::Mime, "", 1, 1), (QNdefRecord::Empty, "", 0, 100)][(QNdefRecord::Mime, "image/jpeg"), (QNdefRecord::Empty, ""), (QNdefRecord::NfcRtd, "T"), (QNdefRecord::Empty, ""), (QNdefRecord::NfcRtd, "T")]Non ordonné : correspondLe filtre Ordered ne correspond pas car le message doit commencer par un enregistrement QNdefRecord::NfcRtd, mais il commence par QNdefRecord::Mime.
Ordonné : pas de correspondance
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::Mime, "", 1, 1), (QNdefRecord::NfcRtd, "T", 1, 1)][(QNdefRecord::NfcRtd, "T"), (QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")]Non ordonné : correspondLe filtre ordonné ne correspond pas car un enregistrement QNdefRecord::NfcRtd est attendu après QNdefRecord::Mime, mais le message ne le contient pas.
Ordonné : pas de correspondance
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::NfcRtd, "T", 1, 1), (QNdefRecord::Mime, "", 1, 1)][(QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")]Non ordonné : matchLes deux cas correspondent car le message contient le minimum requis d'enregistrements dans le bon ordre.
Ordonné : correspond

Documentation des fonctions membres

QNdefFilter::QNdefFilter()

Construit un nouveau filtre NDEF.

QNdefFilter::QNdefFilter(const QNdefFilter &other)

Construit un nouveau filtre NDEF qui est une copie de other.

[noexcept] QNdefFilter::~QNdefFilter()

Détruit le filtre NDEF.

bool QNdefFilter::appendRecord(const QNdefFilter::Record &record)

Vérifie le site record et l'ajoute au filtre NDEF.

Renvoie true si l'enregistrement a été ajouté avec succès. Dans le cas contraire, il renvoie false.

template <typename T> bool QNdefFilter::appendRecord(unsigned int min = 1, unsigned int max = 1)

Ajoute au filtre NDEF un enregistrement correspondant au paramètre du modèle. L'enregistrement doit apparaître entre min et max dans le message NDEF.

Renvoie true si l'enregistrement a été ajouté avec succès. Dans le cas contraire, il renvoie false.

bool QNdefFilter::appendRecord(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, unsigned int min = 1, unsigned int max = 1)

Ajoute au filtre NDEF un enregistrement ayant le format de nom de type typeNameFormat et le type type. L'enregistrement doit apparaître entre min et max dans le message NDEF.

Renvoie true si l'enregistrement a été ajouté avec succès. Dans le cas contraire, il renvoie false.

void QNdefFilter::clear()

Efface le filtre.

[since 6.2] bool QNdefFilter::match(const QNdefMessage &message) const

Renvoie true si le site message correspond au filtre donné. Sinon, il renvoie false.

Voir Matching Algorithms pour une explication plus détaillée de la correspondance.

Cette fonction a été introduite dans Qt 6.2.

bool QNdefFilter::orderMatch() const

Renvoie true si le filtre tient compte de l'ordre des enregistrements NDEF lors de la mise en correspondance. Sinon, il renvoie false.

Voir aussi setOrderMatch().

QNdefFilter::Record QNdefFilter::recordAt(qsizetype i) const

Renvoie l'enregistrement NDEF à l'index i.

i doit être un index valide (c'est-à-dire 0 <= i < recordCount()).

Voir aussi recordCount().

qsizetype QNdefFilter::recordCount() const

Renvoie le nombre d'enregistrements NDEF dans le filtre.

void QNdefFilter::setOrderMatch(bool on)

Définit les exigences du filtre en matière d'ordre. Si on est true, le filtre ne correspondra que si l'ordre des enregistrements dans le filtre correspond à l'ordre des enregistrements dans le message NDEF. Si on est false, l'ordre des enregistrements n'est pas pris en compte lors de la correspondance.

Par défaut, l'ordre des enregistrements n'est pas pris en compte.

Voir aussi orderMatch().

QNdefFilter &QNdefFilter::operator=(const QNdefFilter &other)

Attribue other à ce filtre et renvoie une référence à ce filtre.

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