Auf dieser Seite

QNdefFilter Class

Die Klasse „QNdefFilter“ stellt einen Filter zum Abgleichen von NDEF-Nachrichten bereit. Mehr...

Kopfzeile: #include <QNdefFilter>
CMake: find_package(Qt6 REQUIRED COMPONENTS Nfc)
target_link_libraries(mytarget PRIVATE Qt6::Nfc)
qmake: QT += nfc

Öffentliche Typen

struct Record

Öffentliche Funktionen

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)

Ausführliche Beschreibung

Der QNdefFilter kapselt die Struktur einer NDEF-Nachricht und dient zum Abgleich von Nachrichten, die eine bestimmte Struktur aufweisen.

Der folgende Filter findet NDEF-Nachrichten, die einen einzelnen Smart-Poster-Datensatz enthalten:

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

Der folgende Filter findet NDEF-Nachrichten, die eine URI, einen lokalisierten Textabschnitt und ein optionales JPEG-Bild enthalten. Die Reihenfolge der Datensätze muss der angegebenen Reihenfolge entsprechen:

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

Mit der Methode ` match()` kann überprüft werden, ob eine Nachricht dem Filter entspricht.

Abgleichalgorithmen

Das Verhalten des Filters hängt vom Wert des Parameters ` orderMatch()` ab.

Hinweis: In der folgenden Erörterung betrachten wir Filterdatensätze als gleich, wenn ihre Parameter „ typeNameFormat “ und „ type “ übereinstimmen. Das Verknüpfen zweier Datensätze bedeutet, ihre Werte für „ minimum “ bzw. „ maximum “ zu addieren.

Unsortiertes Abgleichen

Wird die Reihenfolge der Datensätze nicht berücksichtigt, können alle identischen Datensätze im Filter zusammengeführt werden. Der resultierende Filter enthält dann nur noch eindeutige Datensätze, jeweils mit den aktualisierten Werten für „ minimum “ und „ maximum “.

Betrachten Sie das folgende Beispiel:

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

Bei der ungeordneten Zuordnung wird der Filter wie folgt vereinfacht:

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

Sobald der Filter nur noch die eindeutigen Datensätze enthält, durchläuft der Abgleichalgorithmus die Nachricht und berechnet die tatsächliche Anzahl der Datensätze jedes Typs. Wenn alle tatsächlichen Anzahlen in die entsprechenden [Minimum, Maximum]-Bereiche passen, gibt der Abgleichalgorithmus „ true “ zurück.

Geordnete Zuordnung

Wenn die Reihenfolge der Datensätze wichtig ist, wird ein anderer Ansatz angewendet. In diesem Fall können die identischen Datensätze nicht einfach zusammengefügt werden. Aufeinanderfolgende identische Datensätze können jedoch weiterhin zusammengefügt werden. Anschließend durchläuft der Abgleichalgorithmus die Nachricht und berücksichtigt dabei auch die Positionen der Datensätze.

Behandlung eines leeren Typs im Filterdatensatz

Es ist möglich, einen Filterdatensatz mit einem leeren „ type “ hinzuzufügen. In diesem Fall fungiert der leere Typ als Platzhalter für jeden beliebigen Typ.

Beispielsweise kann der Filter wie folgt definiert werden:

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

Dieser Filter legt fest, dass die Nachricht genau einen NDEF-Datensatz mit dem Typ „ Mime “ typeNameFormat() und einen beliebigen Typ „ type “ () enthalten muss.

Behandlung zusätzlicher Datensätze in der Nachricht

Enthält die Nachricht Datensätze, die keinem Datensatz im Filter entsprechen, gibt der Abgleichalgorithmus „ false “ zurück.

Filterbeispiele

In der folgenden Tabelle wird jeder Filterdatensatz durch die folgenden Parameter (in der angegebenen Reihenfolge) spezifiziert:

  • typeNameFormat - enthält den Wert „ typeNameFormat()“ des Datensatzes.
  • type - enthält den Wert „ type “ () des Datensatzes.
  • minimum - enthält die Mindestanzahl der Vorkommen des Datensatzes in der Nachricht.
  • maximum - enthält die maximale Anzahl der Vorkommen des Datensatzes in der Nachricht.

Der Filter enthält mehrere Datensätze.

Die Nachricht besteht aus mehreren „ QNdefRecords“. In der folgenden Tabelle werden nur die „ typeNameFormat “ () und die „ type “ () jedes Datensatzes angezeigt, da die anderen Parameter für die Filterung keine Rolle spielen.

FilterNachrichtÜbereinstimmungsergebnisKommentar
Leerer FilterLeere NachrichtSpiel
Filter leerenNicht-leere NachrichtKeine Übereinstimmung
Nicht-leerer FilterLeere NachrichtKeine Übereinstimmung
[(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")]Ungeordnet: ÜbereinstimmungDer geordnete Filter liefert keine Übereinstimmung, da die Nachricht mit einem „ QNdefRecord::NfcRtd “-Eintrag beginnen muss, sie jedoch mit „ QNdefRecord::Mime “ beginnt.
Geordnet: keine Übereinstimmung
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::Mime, "", 1, 1), (QNdefRecord::NfcRtd, "T", 1, 1)][(QNdefRecord::NfcRtd, „T“), (QNdefRecord::NfcRtd, „T“), (QNdefRecord::Mime, „image/jpeg“)]Ungeordnet: ÜbereinstimmungDer geordnete Filter liefert keine Übereinstimmung, da nach QNdefRecord::Mime ein Eintrag für QNdefRecord::NfcRtd erwartet wird, der in der Nachricht jedoch fehlt.
Geordnet: keine Übereinstimmung
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::NfcRtd, "T", 1, 1), (QNdefRecord::Mime, "", 1, 1)][(QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")]Unsortiert: ÜbereinstimmungBeide Fälle stimmen überein, da die Nachricht die erforderliche Mindestanzahl an Datensätzen in der richtigen Reihenfolge enthält.
Geordnet: Übereinstimmung

Dokumentation der Member-Funktionen

QNdefFilter::QNdefFilter()

Erstellt einen neuen NDEF-Filter.

QNdefFilter::QNdefFilter(const QNdefFilter &other)

Erstellt einen neuen NDEF-Filter, der eine Kopie von „ other “ ist.

[noexcept] QNdefFilter::~QNdefFilter()

Löscht den NDEF-Filter.

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

Überprüft die „ record “ und fügt sie dem NDEF-Filter hinzu.

Gibt „ true “ zurück, wenn der Datensatz erfolgreich angehängt wurde. Andernfalls wird „ false “ zurückgegeben.

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

Fügt dem NDEF-Filter einen Datensatz hinzu, der dem Vorlagenparameter entspricht. Der Datensatz muss in der NDEF-Nachricht zwischen min und max Mal vorkommen.

Gibt „ true “ zurück, wenn der Datensatz erfolgreich angehängt wurde. Andernfalls wird „ false “ zurückgegeben.

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

Fügt dem NDEF-Filter einen Datensatz mit dem Namen im Format „ typeNameFormat “ und dem Typ „ type “ hinzu. Der Datensatz muss zwischen min und max Mal in der NDEF-Nachricht vorkommen.

Gibt „ true “ zurück, wenn der Datensatz erfolgreich angehängt wurde. Andernfalls wird „ false “ zurückgegeben.

void QNdefFilter::clear()

Löscht den Filter.

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

Gibt „ true “ zurück, wenn die Adresse „ message “ dem angegebenen Filter entspricht. Andernfalls wird „ false “ zurückgegeben.

Eine ausführlichere Erläuterung zur Übereinstimmung finden Sie unter Matching Algorithms.

Diese Funktion wurde in Qt 6.2 eingeführt.

bool QNdefFilter::orderMatch() const

Gibt „ true “ zurück, wenn der Filter beim Abgleich die Reihenfolge der NDEF-Datensätze berücksichtigt. Andernfalls wird „ false “ zurückgegeben.

Siehe auch setOrderMatch().

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

Gibt den NDEF-Datensatz am Index i zurück.

i muss ein gültiger Index sein (d. h. 0 <= i < recordCount()).

Siehe auch ` recordCount()`.

qsizetype QNdefFilter::recordCount() const

Gibt die Anzahl der NDEF-Datensätze im Filter zurück.

void QNdefFilter::setOrderMatch(bool on)

Legt die Anforderungen an die Reihenfolge des Filters fest. Wenn „ on “ auf „ true “ gesetzt ist, liefert der Filter nur dann Treffer, wenn die Reihenfolge der Datensätze im Filter mit der Reihenfolge der Datensätze in der NDEF-Nachricht übereinstimmt. Wenn „ on “ auf „ false “ gesetzt ist, wird die Reihenfolge der Datensätze beim Abgleich nicht berücksichtigt.

Standardmäßig wird die Reihenfolge der Datensätze nicht berücksichtigt.

Siehe auch orderMatch().

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

Weist diesem Filter „ other “ zu und gibt eine Referenz auf diesen Filter zurück.

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