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 メッセージの構造をカプセル化しており、特定の構造を持つメッセージの照合に使用されます。
次のフィルターは、1つのスマートポスターレコードを含む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()であるNDEFレコードが正確に1つ含まれており、かつ任意の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.