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.
Filter | Nachricht | Ergebnis der Übereinstimmung | Kommentar |
---|---|---|---|
Leerer Filter | Leere Nachricht | Treffer | |
Leerer Filter | Nicht leere Nachricht | Keine Übereinstimmung | |
Nicht leerer Filter | Leere Nachricht | Keine Ü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: Übereinstimmung | Geordneter 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: Übereinstimmung | Geordneter 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: übereinstimmen | Beide 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.