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() パラメータの値に依存します。
注: 以下の説明では、typeNameFormat
とtype
のパラメータが一致する場合、フィルター・レコードは等しいと見なします。2つのレコードを結合するとは、それぞれ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 ()、およびtype() を含む NDEF レコードが 1 つだけ含まれていなければならないことを指定します。
メッセージ内の余分なレコードの処理
メッセージにフィルター内のどのレコードとも一致しないレコードが含まれている場合、マッチング・アルゴリズムはfalse
を返します。
フィルタの例
以下の表では、各フィルター・レコードは以下のパラメーター(指定された順)で指定されます:
typeNameFormat
- レコードの () を含む。typeNameFormattype
- レコードの () を含む。typeminimum
- メッセージ内のレコードの出現回数の最小値を含む。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)
フィルタの順序条件を設定する。on がtrue
の場合、フィルター内のレコードの順序が NDEF メッセージ内のレコードの順序と一致する場合にのみ、フィルターは一致する。on がfalse
の場合、マッチング時にレコードの順序は考慮されません。
デフォルトでは、レコードの順序は考慮されません。
orderMatch()も参照 。
QNdefFilter &QNdefFilter::operator=(const QNdefFilter &other)
このフィルターにother を割り当て、このフィルターへの参照を返します。
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。