QNdefFilter Class

QNdefFilter 클래스는 NDEF 메시지와 일치하는 필터를 제공합니다. 더 보기...

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

공용 타입

struct Record

공용 함수

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)

상세 설명

QNdefFilter는 NDEF 메시지의 구조를 캡슐화하며 특정 구조를 가진 메시지를 일치시키는 데 사용됩니다.

다음 필터는 단일 스마트 포스터 레코드가 포함된 NDEF 메시지를 일치시킵니다:

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

다음 필터는 URI, 현지화된 텍스트 및 선택적 JPEG 이미지가 포함된 NDEF 메시지를 일치시킵니다. 레코드 순서는 지정된 순서에 따라야 합니다:

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

match() 메서드를 사용하여 메시지가 필터와 일치하는지 확인할 수 있습니다.

매칭 알고리즘

필터 동작은 orderMatch() 매개변수의 값에 따라 달라집니다.

참고: 아래 설명에서는 typeNameFormattype 매개 변수가 일치하는 경우 필터 레코드가 동일한 것으로 간주합니다. 두 레코드를 조인한다는 것은 각각 minimummaximum 값을 더하는 것을 의미합니다.

정렬되지 않은 일치

레코드 순서를 고려하지 않으면 필터의 모든 동일한 레코드가 조인될 수 있습니다. 결과 필터에는 각각 업데이트된 minimummaximum 값을 가진 고유한 레코드만 포함됩니다.

다음 예시를 살펴보겠습니다:

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

이 필터는 메시지에 Mime typeNameFormat () 및 type()가 포함된 NDEF 레코드가 정확히 하나만 포함되도록 지정합니다.

메시지의 추가 레코드 처리

메시지에 필터의 어떤 레코드와도 일치하지 않는 일부 레코드가 포함되어 있으면 일치 알고리즘이 false 을 반환합니다.

필터 예제

아래 표에서 각 필터 레코드는 다음 매개변수(주어진 순서대로)로 지정됩니다:

  • typeNameFormat - 레코드의 typeNameFormat()를 포함합니다.
  • type - 레코드의 type()를 포함합니다.
  • minimum - 메시지에서 레코드의 최소 발생 횟수를 포함합니다.
  • maximum - 메시지에서 레코드의 최대 발생 횟수를 포함합니다.

필터에 여러 개의 레코드가 포함되어 있습니다.

QNdefRecord아래 표에서는 다른 매개 변수는 필터링에 중요하지 않으므로 각 레코드의 typeNameFormat() 및 type()만 표시됩니다.

필터메시지일치 결과댓글
빈 필터빈 메시지Match
빈 필터비어 있지 않은 메시지일치하는 항목 없음
비어 있지 않은 필터빈 메시지일치하는 항목 없음
[(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()

새 NDEF 필터를 구축합니다.

QNdefFilter::QNdefFilter(const QNdefFilter &other)

other 의 복사본인 새 NDEF 필터를 구성합니다.

[noexcept] QNdefFilter::~QNdefFilter()

NDEF 필터를 삭제합니다.

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

record 을 확인하고 NDEF 필터에 추가합니다.

레코드가 성공적으로 추가되면 true 을 반환합니다. 그렇지 않으면 false 을 반환합니다.

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

템플릿 매개변수와 일치하는 레코드를 NDEF 필터에 추가합니다. 레코드는 NDEF 메시지에서 minmax 사이에 있어야 합니다.

레코드가 성공적으로 추가되면 true 을 반환합니다. 그렇지 않으면 false 을 반환합니다.

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

유형 이름 형식이 typeNameFormat, 유형이 type 인 레코드를 NDEF 필터에 추가합니다. 레코드는 NDEF 메시지에서 minmax 사이에 있어야 합니다.

레코드가 성공적으로 추가되면 true 을 반환합니다. 그렇지 않으면 false 을 반환합니다.

void QNdefFilter::clear()

필터를 지웁니다.

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

message 이 지정된 필터와 일치하면 true 을 반환합니다. 그렇지 않으면 false 을 반환합니다.

일치에 대한 자세한 설명은 Matching Algorithms 을 참조하세요.

이 함수는 Qt 6.2에 도입되었습니다.

bool QNdefFilter::orderMatch() const

필터가 일치시킬 때 NDEF 레코드 순서를 고려하는 경우 true 을 반환합니다. 그렇지 않으면 false 을 반환합니다.

setOrderMatch()도 참조하세요 .

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

인덱스 i 에 있는 NDEF 레코드를 반환합니다.

i 는 유효한 인덱스여야 합니다(즉, 0 <= i < recordCount()).

recordCount()도 참조하십시오 .

qsizetype QNdefFilter::recordCount() const

필터에 있는 NDEF 레코드 수를 반환합니다.

void QNdefFilter::setOrderMatch(bool on)

필터의 순서 요구 사항을 설정합니다. ontrue 인 경우 필터의 레코드 순서가 NDEF 메시지의 레코드 순서와 일치하는 경우에만 필터가 일치합니다. onfalse 인 경우 일치할 때 레코드 순서는 고려되지 않습니다.

기본적으로 레코드 순서는 고려되지 않습니다.

orderMatch()도 참조하세요 .

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

other 을 이 필터에 할당하고 이 필터에 대한 참조를 반환합니다.

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