Sur cette page

QNdefFilter Class

La classe QNdefFilter fournit un filtre permettant de faire correspondre des messages NDEF. En savoir plus...

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 QNdefFilter encapsule la structure d'un message NDEF et sert à faire correspondre les messages présentant une structure particulière.

Le filtre suivant correspond aux messages NDEF contenant un seul enregistrement « smart poster » :

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

Le filtre suivant correspond aux messages NDEF contenant une URI, un texte localisé et une image JPEG facultative. L’ordre des enregistrements doit respecter 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() permet de 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 additionner respectivement leurs valeurs minimum et maximum.

Correspondance non ordonnée

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

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 mise en 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 plus que les enregistrements uniques, l’algorithme de mise en correspondance parcourt le message et calcule le nombre réel d’enregistrements de chaque type. Si tous ces nombres réels s’inscrivent dans les plages [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 identiques ne peuvent pas être simplement regroupés. Cependant, les enregistrements identiques consécutifs peuvent toujours être regroupés. L’algorithme de mise en correspondance parcourt alors le message, en tenant cette fois-ci également compte des positions des enregistrements.

Gestion d’un type vide dans un enregistrement de filtre

Il est possible d’ajouter un enregistrement de filtrage avec un « type » vide. Dans ce cas, le type vide fera office de caractère générique 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 l’ Mime typeNameFormat (), et n’importe quel type().

Gestion des enregistrements supplémentaires dans le message

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

Exemples de filtres

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

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

Le filtre contient plusieurs enregistrements.

Le message est composé de plusieurs QNdefRecords. Dans le tableau ci-dessous, seules les valeurs « typeNameFormat » () et « type » () de chaque enregistrement seront affichées, car les autres paramètres n’ont pas d’importance pour le filtrage.

FiltreMessageRésultat de la correspondanceCommentaire
Filtre videMessage videMatch
Vider le filtreMessage non videAucune correspondance
Filtre non videMessage videAucun résultat
[(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é : correspondanceLe filtre ordonné ne correspond pas, car le message doit commencer par un enregistrement « QNdefRecord::NfcRtd », alors qu'il commence par « QNdefRecord::Mime ».
Ordonné : aucune 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é : correspondanceLe filtre ordonné ne correspond pas car un enregistrement QNdefRecord::NfcRtd est attendu après QNdefRecord::Mime, mais le message ne le contient pas.
Ordonné : aucune correspondance
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::NfcRtd, "T", 1, 1), (QNdefRecord::Mime, "", 1, 1)][(QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")]Non ordonné : correspondanceLes deux cas correspondent car le message contient le nombre minimum requis d'enregistrements dans le bon ordre.
Ordonné : correspondance

Documentation des fonctions membres

QNdefFilter::QNdefFilter()

Crée un nouveau filtre NDEF.

QNdefFilter::QNdefFilter(const QNdefFilter &other)

Crée un nouveau filtre NDEF qui est une copie de other.

[noexcept] QNdefFilter::~QNdefFilter()

Supprime le filtre NDEF.

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

Vérifie la valeur « record » et l'ajoute au filtre NDEF.

Renvoie « true » si l'ajout de l'enregistrement a réussi. Sinon, 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 de modèle. Cet enregistrement doit apparaître entre min et max fois dans le message NDEF.

Renvoie « true » si l'ajout de l'enregistrement a réussi. Sinon, renvoie « false ».

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

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

Renvoie true si l’ajout de l’enregistrement a réussi. Sinon, renvoie false.

void QNdefFilter::clear()

Efface le filtre.

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

Renvoie « true » si l'message correspond au filtre indiqué. Sinon, 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, renvoie « false ».

Voir également setOrderMatch().

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

Renvoie l'enregistrement NDEF à l'index i.

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

Voir également recordCount().

qsizetype QNdefFilter::recordCount() const

Renvoie le nombre d'enregistrements NDEF présents dans le filtre.

void QNdefFilter::setOrderMatch(bool on)

Définit les exigences de classement du filtre. Si l'option « on » est définie sur « true », le filtre ne trouvera de correspondance que si l'ordre des enregistrements dans le filtre correspond à celui des enregistrements dans le message NDEF. Si l'option « on » est définie sur « false », l'ordre des enregistrements n'est pas pris en compte lors de la recherche de correspondance.

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

Voir également orderMatch().

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

Attribue la valeur « 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.