Spec-Zone.ru › Qt

Класс QNdefFilter

Класс QNdefFilter предоставляет фильтр для сопоставления сообщений NDEF. Подробнее...

Заголовок: #include <QNdefFilter>
CMake: find_package(Qt6 COMPONENTS Nfc REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Nfc)
qmake: QT += nfc
С момента: Qt 5.2
  • Список всех членов, включая унаследованные

Типы public

Структура Запись

Функции public

QNdefFilter(const QNdefFilter &other)
QNdefFilter()
QNdefFilter & operator=(const QNdefFilter &other)
~QNdefFilter()
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)
bool appendRecord(const QNdefFilter::Record &record)
void clear()
bool match(const QNdefMessage &message) const
bool orderMatch() const
QNdefFilter::Record recordAt(qsizetype i) const
qsizetype recordCount() const
void setOrderMatch(bool on)

Подробное описание

QNdefFilter инкапсулирует структуру сообщения NDEF и используется для сопоставления сообщений, имеющих определенную структуру.

Следующий фильтр сопоставляет сообщения NDEF, содержащие одну запись smart poster:

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

Следующий фильтр сопоставляет сообщения NDEF, содержащие URI, локализованный текст и необязательное изображение JPEG. Порядок записей должен быть указанным:

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

Метод match() может использоваться для проверки соответствия сообщения фильтру.

Алгоритмы сопоставления

Поведение фильтра зависит от значения параметра orderMatch().

Примечание: В обсуждении ниже мы будем считать записи фильтра равными, если их typeNameFormat и type параметры совпадают. Объединение двух записей означает добавление их minimum и maximum значений соответственно.

Неупорядоченное сопоставление

Если порядок записей не учитывается, все одинаковые записи в фильтре могут быть объединены. Результирующий фильтр будет содержать только уникальные записи, каждая с обновленным minimum и maximum значением.

Рассмотрим следующий пример:

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

При неупорядоченном сопоставлении фильтр будет упрощен до следующего:

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

После того, как фильтр содержит только уникальные записи, алгоритм сопоставления проходит по сообщению и вычисляет фактическое количество записей каждого типа. Если все фактические количества подходят к соответствующим диапазонам [минимум, максимум], алгоритм сопоставления возвращает true.

Упорядоченное сопоставление

Если порядок записей важен, применяется другой подход. В этом случае одинаковые записи не могут быть просто объединены. Однако последовательные одинаковые записи все еще могут быть объединены. Затем алгоритм сопоставления проходит по сообщению, на этот раз также учитывая позиции записей.

Обработка пустого типа в записи фильтра

Можно добавить запись фильтра с пустым type. В этом случае пустой тип будет действовать как символ подстановки для любого типа.

Например, фильтр можно определить следующим образом:

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

Этот фильтр указывает, что сообщение должно содержать ровно одну запись NDEF с Mime typeNameFormat() и любым type().

Обработка дополнительных записей в сообщении

Если сообщение содержит некоторые записи, которые не соответствуют ни одной записи в фильтре, алгоритм сопоставления вернет false.

Примеры фильтров

В таблице ниже каждая запись фильтра задается следующими параметрами (в указанном порядке):

  • typeNameFormat - содержит typeNameFormat() записи.
  • type - содержит type() записи.
  • minimum - содержит минимальное количество вхождений записи в сообщении.
  • maximum - содержит максимальное количество вхождений записи в сообщении.

Фильтр содержит несколько записей.

Сообщение состоит из нескольких QNdefRecordов. В таблице ниже будут показаны только typeNameFormat() и type() каждой записи, потому что другие параметры не важны для фильтрации.

Фильтр Сообщение Результат сопоставления Комментарий
Пустой фильтр Пустое сообщение Соответствие
Пустой фильтр Непустое сообщение Не соответствует
Непустой фильтр Пустое сообщение Не соответствует
[(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")] Неупорядоченное: соответствует Упорядоченный фильтр не соответствует, потому что сообщение должно начинаться с записи QNdefRecord::NfcRtd, но оно начинается с QNdefRecord::Mime.
Упорядоченное: не соответствует
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::Mime, "", 1, 1), (QNdefRecord::NfcRtd, "T", 1, 1)] [(QNdefRecord::NfcRtd, "T"), (QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")] Неупорядоченное: соответствует Упорядоченный фильтр не соответствует, потому что после записи QNdefRecord::Mime ожидается запись QNdefRecord::NfcRtd, но в сообщении её нет.
Упорядоченное: не соответствует
[(QNdefRecord::NfcRtd, "T", 0, 2), (QNdefRecord::NfcRtd, "T", 1, 1), (QNdefRecord::Mime, "", 1, 1)] [(QNdefRecord::NfcRtd, "T"), (QNdefRecord::Mime, "image/jpeg")] Неупорядоченное: соответствует В обоих случаях соответствует, потому что сообщение содержит необходимое минимальное количество записей в правильном порядке.
Упорядоченное: соответствует

Документация по функциям-членам

QNdefFilter::QNdefFilter(const QNdefFilter &other)

Создает новый фильтр NDEF, являющийся копией other.

QNdefFilter::QNdefFilter()

Создает новый фильтр NDEF.

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

Присваивает other этому фильтру и возвращает ссылку на этот фильтр.

QNdefFilter::~QNdefFilter()

Удаляет фильтр NDEF.

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

Добавляет запись, соответствующую шаблону параметра, в фильтр NDEF. Запись должна встречаться от min до max раз в сообщении NDEF.

Возвращает true , если запись была добавлена успешно. В противном случае возвращает false.

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

Добавляет запись с форматом имени типа typeNameFormat и типом type в фильтр NDEF. Запись должна встречаться от min до max раз в сообщении NDEF.

Возвращает true , если запись была добавлена успешно. В противном случае возвращает false.

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

Проверяет запись record и добавляет её в фильтр NDEF.

Возвращает true , если запись была добавлена успешно. В противном случае возвращает false.

void QNdefFilter::clear()

Очищает фильтр.

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

Возвращает true , если сообщение message соответствует заданному фильтру. В противном случае возвращает false.

См. Алгоритмы сопоставления для более подробного объяснения сопоставления.

Эта функция была введена в Qt 6.2.

bool QNdefFilter::orderMatch() const

Возвращает true , если фильтр учитывает порядок записей NDEF при сопоставлении. В противном случае возвращает false.

См. также setOrderMatch().

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

Возвращает запись NDEF с индексом i.

i должен быть корректным индексом (т.е. 0 <= i < recordCount()).

См. также recordCount().

qsizetype QNdefFilter::recordCount() const

Возвращает количество записей NDEF в фильтре.

void QNdefFilter::setOrderMatch(bool on)

Устанавливает требования к порядку записей фильтра. Если on равно true, фильтр будет соответствовать только тогда, когда порядок записей в фильтре совпадает с порядком записей в сообщении NDEF. Если on равно false, порядок записей не учитывается при сопоставлении.

По умолчанию порядок записей не учитывается.

См. также orderMatch().

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qndeffilter.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API