QNdefFilter Class

QNdefFilter クラスは、NDEF メッセージにマッチするフィルタを提供する。詳細...

Header: #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 メッセージ内で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 を割り当て、このフィルターへの参照を返します。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。