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 のパラメータが一致する場合、フィルター・レコードは等しいと見なします。2つのレコードを結合するとは、それぞれ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 レコードが 1 つだけ含まれていなければならないことを指定します。

メッセージ内の余分なレコードの処理

メッセージにフィルター内のどのレコードとも一致しないレコードが含まれている場合、マッチング・アルゴリズムは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")].順序なし:マッチメッセージには必要最小限のレコードが正しい順序で含まれているので、どちらのケースもマッチする。
ORDERED: MATCH

メンバー関数ドキュメント

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)

型名フォーマットtypeNameFormat 、タイプtype のレコードをNDEFフィルターに追加する。このレコードは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)

フィルターの順序条件を設定する。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.