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.
| Filtre | Message | Résultat de la correspondance | Commentaire |
|---|---|---|---|
| Filtre vide | Message vide | Match | |
| Vider le filtre | Message non vide | Aucune correspondance | |
| Filtre non vide | Message vide | Aucun 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é : correspondance | Le 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é : correspondance | Le 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é : correspondance | Les 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.