QNdefFilter Class
La clase QNdefFilter proporciona un filtro para emparejar mensajes NDEF. Más...
| Cabecera: | #include <QNdefFilter> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Nfc)target_link_libraries(mytarget PRIVATE Qt6::Nfc) |
| qmake: | QT += nfc |
Tipos Públicos
| struct | Record |
Funciones Públicas
| 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) |
Descripción detallada
QNdefFilter encapsula la estructura de un mensaje NDEF y se utiliza para buscar mensajes que tengan una estructura determinada.
El siguiente filtro coincide con los mensajes NDEF que contienen un único registro de cartel inteligente:
QNdefFilter filter; filter.append(QNdefRecord::NfcRtd, "Sp");
El siguiente filtro coincide con mensajes NDEF que contienen un URI, un texto localizado y una imagen JPEG opcional. El orden de los registros debe ser el especificado:
QNdefFilter filter; filter.setOrderMatch(true); filter.appendRecord(QNdefRecord::NfcRtd, "U"); filter.appendRecord<QNdefNfcTextRecord>(); filter.appendRecord(QNdefRecord::Mime, "image/jpeg", 0, 1);
El método match() puede utilizarse para comprobar si un mensaje coincide con el filtro.
Algoritmos de concordancia
El comportamiento del filtro depende del valor del parámetro orderMatch().
Nota: En la discusión que sigue consideraremos que los registros del filtro son iguales si sus parámetros typeNameFormat y type coinciden. Unir dos registros significa sumar sus valores minimum y maximum, respectivamente.
Coincidencia desordenada
Si no se tiene en cuenta el orden de los registros, se pueden unir todos los registros iguales del filtro. El filtro resultante contendrá sólo registros únicos, cada uno con el valor minimum y maximum actualizado.
Considere el siguiente ejemplo:
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);
Con la concordancia desordenada, el filtro se simplificará a lo siguiente:
QNdefFilter filter; filter.appendRecord<QNdefNfcTextRecord>(1, 3); filter.appendRecord(QNdefRecord::Mime, "", 1, 1); filter.setOrderMatch(false);
Una vez que el filtro contiene sólo los registros únicos, el algoritmo de correspondencia itera a través del mensaje y calcula la cantidad real de registros de cada tipo. Si todas las cantidades reales encajan en los rangos [mínimo, máximo] correspondientes, el algoritmo de correspondencia devuelve true.
Correspondencia ordenada
Si el orden de los registros es importante, se aplica un enfoque diferente. En este caso, los registros iguales no pueden unirse sin más. Sin embargo, los registros iguales consecutivos sí pueden unirse. A continuación, el algoritmo de correspondencia itera a través del mensaje, esta vez también teniendo en cuenta las posiciones de los registros.
Tratamiento de un tipo vacío en un registro de filtro
Es posible añadir un registro de filtro con un type vacío. En este caso, el tipo vacío actuará como comodín para cualquier tipo.
Por ejemplo, el filtro puede definirse de la siguiente manera:
QNdefFilter filter; filter.addRecord(QNdefRecord::Mime, "", 1, 1);
Este filtro especifica que el mensaje debe contener exactamente un registro NDEF con Mime typeNameFormat (), y cualquier type().
Tratamiento de registros adicionales en el mensaje
Si el mensaje contiene algunos registros que no coinciden con ningún registro del filtro, el algoritmo de coincidencia devolverá false.
Ejemplos de filtros
En la tabla siguiente, cada registro del filtro se especifica mediante los siguientes parámetros (en el orden indicado):
typeNameFormat- contiene el typeNameFormat() del registro.type- contiene el type() del registro.minimum- contiene el número mínimo de apariciones del registro en el mensaje.maximum- contiene el número máximo de apariciones del registro en el mensaje.
El filtro contiene varios registros.
El mensaje consta de varios QNdefRecords. En la tabla siguiente, sólo se mostrarán los typeNameFormat() y type() de cada registro, porque los demás parámetros no importan para el filtrado.
| Filtro | Mensaje | Resultado | Comentario |
|---|---|---|---|
| Filtro vacío | Mensaje vacío | Coincidencia | |
| Filtro vacío | Mensaje no vacío | Sin coincidencia | |
| Filtro no vacío | Mensaje vacío | Sin coincidencia | |
| [(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")] | Desordenado: coincidencia | El filtro ordenado no coincide porque el mensaje debe empezar por un registro QNdefRecord::NfcRtd, pero empieza por QNdefRecord::Mime. |
| Ordenado: no coincide | |||
| [(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::Mime, "", 1, 1), (QNdefRecord::NfcRtd, "T", 1, 1)] | [(QNdefRecord::NfcRtd, "T"), (QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")] | Desordenado: coincidencia | El filtro ordenado no coincide porque se espera un registro QNdefRecord::NfcRtd después de QNdefRecord::Mime, pero el mensaje no lo tiene. |
| Ordenado: no coincide | |||
| [(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::NfcRtd, "T", 1, 1), (QNdefRecord::Mime, "", 1, 1)] | [(QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")] | Desordenado: coincidencia | Ambos casos coinciden porque el mensaje contiene el mínimo requerido de registros en el orden correcto. |
| Ordenado: coincide |
Documentación de las funciones miembro
QNdefFilter::QNdefFilter()
Crea un nuevo filtro NDEF.
QNdefFilter::QNdefFilter(const QNdefFilter &other)
Construye un nuevo filtro NDEF que es una copia de other.
[noexcept] QNdefFilter::~QNdefFilter()
Destruye el filtro NDEF.
bool QNdefFilter::appendRecord(const QNdefFilter::Record &record)
Verifica la dirección record y la añade al filtro NDEF.
Devuelve true si el registro se ha añadido correctamente. En caso contrario, devuelve false.
template <typename T> bool QNdefFilter::appendRecord(unsigned int min = 1, unsigned int max = 1)
Añade al filtro NDEF un registro que coincida con el parámetro de plantilla. El registro debe aparecer entre min y max en el mensaje NDEF.
Devuelve true si el registro se ha añadido correctamente. En caso contrario, devuelve false.
bool QNdefFilter::appendRecord(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, unsigned int min = 1, unsigned int max = 1)
Añade un registro con formato de nombre de tipo typeNameFormat y tipo type al filtro NDEF. El registro debe aparecer entre min y max en el mensaje NDEF.
Devuelve true si el registro se ha añadido correctamente. En caso contrario, devuelve false.
void QNdefFilter::clear()
Borra el filtro.
[since 6.2] bool QNdefFilter::match(const QNdefMessage &message) const
Devuelve true si message coincide con el filtro dado. En caso contrario, devuelve false.
Véase Matching Algorithms para una explicación más detallada de las coincidencias.
Esta función se introdujo en Qt 6.2.
bool QNdefFilter::orderMatch() const
Devuelve true si el filtro tiene en cuenta el orden de los registros NDEF al realizar las coincidencias. En caso contrario, devuelve false.
Véase también setOrderMatch().
QNdefFilter::Record QNdefFilter::recordAt(qsizetype i) const
Devuelve el registro NDEF en el índice i.
i debe ser un índice válido (es decir, 0 <= i < recordCount()).
Véase también recordCount().
qsizetype QNdefFilter::recordCount() const
Devuelve el número de registros NDEF en el filtro.
void QNdefFilter::setOrderMatch(bool on)
Establece los requisitos de ordenación del filtro. Si on es true, el filtro sólo coincidirá si el orden de los registros en el filtro coincide con el orden de los registros en el mensaje NDEF. Si on es false, el orden de los registros no se tiene en cuenta a la hora de establecer las coincidencias.
Por defecto, no se tiene en cuenta el orden de los registros.
Véase también orderMatch().
QNdefFilter &QNdefFilter::operator=(const QNdefFilter &other)
Asigna other a este filtro y devuelve una referencia a este filtro.
© 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.