QNdefFilter Class

Die Klasse QNdefFilter bietet einen Filter für passende NDEF-Nachrichten. 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)

Detaillierte Beschreibung

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

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

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

Der folgende Filter passt zu NDEF-Nachrichten, die einen URI, einen lokalisierten Text und ein optionales JPEG-Bild enthalten. Die Reihenfolge der Datensätze muss mit der angegebenen Reihenfolge übereinstimmen:

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

Die Methode match() kann verwendet werden, um zu prüfen, ob eine Nachricht dem Filter entspricht.

Übereinstimmende Algorithmen

Das Verhalten des Filters hängt von dem Wert des Parameters orderMatch() ab.

Hinweis: In der folgenden Diskussion werden die Filterdatensätze als gleich betrachtet, wenn ihre Parameter typeNameFormat und type übereinstimmen. Das Verbinden zweier Datensätze bedeutet, dass ihre Werte minimum und maximum addiert werden.

Ungeordnetes Matching

Wenn die Reihenfolge der Datensätze nicht berücksichtigt wird, können alle gleichen Datensätze im Filter verbunden werden. Der resultierende Filter enthält dann nur eindeutige Datensätze, jeweils mit dem aktualisierten Wert 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);

Mit dem ungeordneten Abgleich wird der Filter zu folgendem vereinfacht:

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

Sobald der Filter nur noch eindeutige Datensätze enthält, iteriert der Abgleichsalgorithmus durch die Nachricht und berechnet die tatsächliche Anzahl der Datensätze jedes Typs. Wenn alle tatsächlichen Beträge in die entsprechenden [Minimum, Maximum]-Bereiche passen, gibt der Abgleichsalgorithmus true zurück.

Geordneter Abgleich

Wenn die Reihenfolge der Datensätze wichtig ist, wird ein anderer Ansatz angewandt. In diesem Fall können die gleichen Datensätze nicht einfach zusammengefügt werden. Die aufeinanderfolgenden gleichen Datensätze können jedoch trotzdem verbunden werden. Dann durchläuft der Abgleichsalgorithmus die Nachricht, wobei diesmal auch die Positionen der Datensätze berücksichtigt werden.

Behandlung des leeren Typs im Filtersatz

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

Der Filter kann zum Beispiel wie folgt definiert werden:

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

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

Behandlung zusätzlicher Datensätze in der Nachricht

Wenn die Nachricht einige Datensätze enthält, die mit keinem Datensatz des Filters übereinstimmen, gibt der Abgleichsalgorithmus false zurück.

Filter-Beispiele

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

  • typeNameFormat - enthält den typeNameFormat() des Datensatzes.
  • type - enthält die type() des Datensatzes.
  • minimum - enthält die minimale Anzahl 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 nachstehenden Tabelle werden nur die typeNameFormat() und type() jedes Datensatzes angezeigt, da die anderen Parameter für die Filterung keine Rolle spielen.

FilterNachrichtErgebnis der ÜbereinstimmungKommentar
Leerer FilterLeere NachrichtTreffer
Leerer FilterNicht 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: ÜbereinstimmungGeordneter Filter passt nicht, da die Nachricht mit einem QNdefRecord::NfcRtd -Datensatz beginnen muss, dieser aber 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: ÜbereinstimmungGeordneter Filter stimmt nicht überein, da ein QNdefRecord::NfcRtd Datensatz nach QNdefRecord::Mime erwartet wird, die Nachricht ihn aber nicht enthält.
Geordnet: keine Übereinstimmung
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::NfcRtd, "T", 1, 1), (QNdefRecord::Mime, "", 1, 1)][(QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")]Ungeordnet: übereinstimmenBeide Fälle stimmen überein, da die Nachricht die erforderliche Mindestanzahl von Datensätzen in der richtigen Reihenfolge enthält.
Geordnet: übereinstimmen

Dokumentation der Mitgliedsfunktionen

QNdefFilter::QNdefFilter()

Konstruiert einen neuen NDEF-Filter.

QNdefFilter::QNdefFilter(const QNdefFilter &other)

Konstruiert einen neuen NDEF-Filter, der eine Kopie von other ist.

[noexcept] QNdefFilter::~QNdefFilter()

Zerstört den NDEF-Filter.

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

Überprüft die record und fügt sie an den NDEF-Filter an.

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 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 einen Datensatz mit dem Format des Typnamens typeNameFormat und dem Typ type an den NDEF-Filter an. Der Datensatz muss zwischen min und max 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 message mit dem angegebenen Filter übereinstimmt. Andernfalls wird false zurückgegeben.

Siehe Matching Algorithms für eine detailliertere Erklärung des Abgleichs.

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 mit dem 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 gleich true ist, wird der Filter nur dann übereinstimmen, wenn die Reihenfolge der Datensätze im Filter mit der Reihenfolge der Datensätze in der NDEF-Nachricht übereinstimmt. Wenn on gleich false 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 einen Verweis auf diesen Filter zurück.

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