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() 매개변수의 값에 따라 달라집니다.
참고: 아래설명에서는 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);이 필터는 메시지에 Mime typeNameFormat ()를 가진 NDEF 레코드가 정확히 하나 포함되어야 하며, 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()
새로운 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 메시지 내에서 min 과 max 사이의 횟수만큼 나타나야 합니다.
레코드가 성공적으로 추가된 경우 true 을 반환합니다. 그렇지 않은 경우 false 을 반환합니다.
bool QNdefFilter::appendRecord(QNdefRecord::TypeNameFormat typeNameFormat, const QByteArray &type, unsigned int min = 1, unsigned int max = 1)
NDEF 필터에 유형 이름이 typeNameFormat 형식이고 유형이 type 인 레코드를 추가합니다. 이 레코드는 NDEF 메시지 내에서 min 과 max 사이의 횟수만큼 나타나야 합니다.
레코드가 성공적으로 추가된 경우 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)
필터의 정렬 요구 사항을 설정합니다. ‘ on ’가 ‘ true ’인 경우, 필터 내 레코드의 순서가 NDEF 메시지 내 레코드의 순서와 일치할 때만 필터가 일치합니다. ‘ on ’가 ‘ false ’인 경우, 일치 여부를 판단할 때 레코드의 순서는 고려되지 않습니다.
기본적으로 레코드 순서는 고려되지 않습니다.
orderMatch()도 참조하십시오 .
QNdefFilter &QNdefFilter::operator=(const QNdefFilter &other)
이 필터에 other 을 할당하고, 이 필터에 대한 참조를 반환합니다.
© 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.