QUrlQuery Class

QUrlQueryクラスは、URLのクエリでキーと値のペアを操作する方法を提供します。詳細...

Header: #include <QUrlQuery>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core

このクラスは等価比較可能です。

注意:このクラスの関数はすべてリエントラントです。

パブリック関数

QUrlQuery()
QUrlQuery(const QString &queryString)
QUrlQuery(const QUrl &url)
QUrlQuery(std::initializer_list<std::pair<QString, QString>> list)
QUrlQuery(const QUrlQuery &other)
(since 6.5) QUrlQuery(QUrlQuery &&other)
~QUrlQuery()
void addQueryItem(const QString &key, const QString &value)
QStringList allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
void clear()
bool hasQueryItem(const QString &key) const
bool isEmpty() const
QString query(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
QString queryItemValue(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
QList<std::pair<QString, QString>> queryItems(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
QChar queryPairDelimiter() const
QChar queryValueDelimiter() const
void removeAllQueryItems(const QString &key)
void removeQueryItem(const QString &key)
void setQuery(const QString &queryString)
void setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter)
void setQueryItems(const QList<std::pair<QString, QString>> &query)
void swap(QUrlQuery &other)
QString toString(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
QUrlQuery &operator=(QUrlQuery &&other)
QUrlQuery &operator=(const QUrlQuery &other)

静的パブリック・メンバ

size_t qHash(const QUrlQuery &key, size_t seed = 0)
bool operator!=(const QUrlQuery &lhs, const QUrlQuery &rhs)
bool operator==(const QUrlQuery &lhs, const QUrlQuery &rhs)

詳細説明

この関数は、以下のような URL に含まれるクエリ文字列を解析するために使用されます:

上記のようなクエリ文字列は、URL内のオプションを送信するために使用され、通常は複数のキーと値のペアにデコードされます。上記のものは、"type "と "color "をキーとする2つのエントリーを含んでいます。QUrlQueryは、クエリの個々のコンポーネントから、QUrl::setQuery ()で使用するのに適したクエリ文字列を作成するために使用することもできます。

クエリー文字列をパースする最も一般的な方法は、コンストラクタでクエリー文字列を渡して初期化することです。そうでない場合は、setQuery() メソッドを使用して、パースするクエリを設定します。このメソッドは、setQueryDelimiters() 関数を使用して非標準の区切り文字を設定した後に、それを使用してクエリをパースすることもできます。

エンコードされたクエリー文字列は、query() を使って再び取得することができる。これは、内部に格納されているすべての項目を取り出し、区切り文字を使用して文字列をエンコードします。

エンコード

QUrlQuery のすべてのゲッター・メソッドは、query() を含むQUrl::ComponentFormattingOptions 型のオプション・パラメータをサポートしています。QUrl::FullyDecoded を除き、返される値はパーセント符号化された文字列とみなされます。これは、復号化された形式で表現できない値があるためです(制御文字やUTF-8に復号化できないバイト列など)。そのため、パーセント文字は常に"%25 "という文字列で表されます。

QUrlQuery のすべてのセッター・メソッドとhasQueryItem() のようなクエリー・メソッドは、エンコードされた形式のみを取ります。QUrl とは異なり、渡される文字列がデコードされていることを指定するオプションのパラメータはありません。不適切にエンコードされた文字列がセッターやクエリー・メソッドに渡された場合、QUrlQueryは失敗する代わりに回復を試みます。つまり、このクラスのすべての関数は、QUrl::TolerantMode デコード・モードが指定されたかのように文字列引数を解析します。

アプリケーション・コードは、TolerantModeの解析による文字列の修正に依存せず、常に適切なエンコードを保証するように努める必要があります。特に、すべてのユーザー入力は、このクラスの関数に渡される前に、まずQUrl::toPercentEncoding() または同様の関数を使用してパーセントエンコードされなければなりません。

スペースとプラス("+")の処理

ウェブ・ブラウザは通常、HTMLのFORM要素にあるスペースをプラス記号("+")に、プラス記号をパーセント・エンコードした形(%2B)にエンコードします。しかし、URLに関するインターネットの仕様では、スペースとプラス記号は等価とはみなされません。

そのため、QUrlQueryはスペース文字を "+"にエンコードすることはなく、"+"をスペース文字にデコードすることもありません。代わりに、スペース文字はエンコードされた状態で"%20 "と表示されます。

HTMLフォームのようなエンコーディングをサポートするために、QUrlQueryは"%2B "シーケンスをプラス記号にデコードすることも、プラス記号をエンコードすることもありません。実際、キー、値、クエリ文字列で見つかった"%2B "または "+"シーケンスは、("%2B "を"%2B "に大文字にすることを除いて)正確に記述されたままになります。

完全なデコード

QUrl::FullyDecoded フォーマットでは、パーセントエンコードされたシーケンスはすべて完全にデコードされ、'%'文字はそれ自身を表すために使用されます。QUrl::FullyDecoded の使用には注意が必要です。データが失われる可能性があるからです。どのようなデータが失われるかについては、QUrl::FullyDecoded のドキュメントを参照のこと。

このフォーマット・モードは、パーセント・エンコーディングが望まれないコンテキストでユーザーに表示されるテキストを扱う場合にのみ使用されるべきです。QUrlQueryのセッターとクエリーメソッドは、対応するQUrl::DecodedMode 構文解析をサポートしていないので、QUrl::FullyDecoded を使用してキーのリストを取得すると、オブジェクト内に見つからないキーが生じる可能性があることに注意してください。

非標準の区切り文字

デフォルトでは、QUrlQueryは等号("=")でキーと値を区切り、アンパサンド("&")でキーと値のペアを区切ります。QUrlQuery が解析やクエリの再構築に使用する区切り記号は、setQueryDelimiters() を呼び出すことで変更できます。

非標準の区切り文字は、RFC 3986で "サブ区切り文字 "と呼ばれているものから選択する必要があります。それらは以下の通りである:

sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

それ以外の文字の使用はサポートされておらず、予期せぬ動作を引き起こす可能性があります。QUrlQueryは、有効な区切り文字を渡したかどうかを確認しません。

QUrlも参照してください

メンバ関数の説明

QUrlQuery::QUrlQuery()

空のQUrlQueryオブジェクトを構築します。その後、setQuery() をコールしてクエリを設定したり、addQueryItem() を使用して項目を追加したりすることができます。

setQuery() およびaddQueryItem()も参照してください

[explicit] QUrlQuery::QUrlQuery(const QString &queryString)

QUrlQuery オブジェクトを構築し、デフォルトのクエリ区切り文字を使用してqueryString クエリ文字列を解析します。他の区切り文字を使用してクエリ文字列を解析するには、まずsetQueryDelimiters() で区切り文字を設定し、次にsetQuery() でクエリを設定します。

[explicit] QUrlQuery::QUrlQuery(const QUrl &url)

QUrlQueryオブジェクトを構築し、デフォルトのクエリー区切り文字を使用して、url URLで見つかったクエリー文字列を解析します。他の区切り文字を使用してクエリ文字列を解析するには、まずsetQueryDelimiters() で区切り文字を設定し、次にsetQuery() でクエリを設定します。

QUrl::query()も参照してください

QUrlQuery::QUrlQuery(std::initializer_list<std::pair<QString, QString>> list)

キー/値ペアのlist から QUrlQuery オブジェクトを構築します。

QUrlQuery::QUrlQuery(const QUrlQuery &other)

クエリの区切り文字を含め、other QUrlQuery オブジェクトの内容をコピーします。

[noexcept, since 6.5] QUrlQuery::QUrlQuery(QUrlQuery &&other)

other QUrlQuery オブジェクトの内容を、クエリの区切り文字を含めて移動します。

この関数は Qt 6.5 で導入されました。

[noexcept] QUrlQuery::~QUrlQuery()

このQUrlQuery オブジェクトを破棄します。

void QUrlQuery::addQueryItem(const QString &key, const QString &value)

URL のクエリー文字列の最後にkey =value のペアを追加します。このメソッドは、同じキーを持つ既存のアイテムを上書きしません。

注意: このメソッドは、HTML フォームがそうであるように、スペース (ASCII 0x20) とプラス ("+") 記号を同じものとして扱いません。スペースをプラス記号として表現する必要がある場合は、実際のプラス記号を使用してください。

注意: キー文字列と値文字列は、パーセント符号化された形式であることが期待されます。

hasQueryItem() およびqueryItemValue()も参照

QStringList QUrlQuery::allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const

URL から、キーがkey に等しいクエリ文字列値のリストを返します。encoding で指定したオプションを使用して、返り値をエンコードします。キーkey が見つからない場合、この関数は空のリストを返します。

注意: キーはパーセントエンコード形式であることが期待される。

queryItemValue() およびaddQueryItem()も参照

void QUrlQuery::clear()

現在格納されているすべてのキーと値のペアを削除することにより、このQUrlQuery オブジェクトをクリアします。クエリの区切り文字が変更された場合、この関数は、変更後の値で区切り文字を残します。

isEmpty() およびsetQueryDelimiters()も参照

[static constexpr noexcept] char16_t QUrlQuery::defaultQueryPairDelimiter()

キーと値のペアを互いに区切るためのデフォルトの文字、アンパサンド("&")を返します。

注意: Qt 6 より前のバージョンでは、この関数はQChar を返していました。

setQueryDelimiters()、queryPairDelimiter()、defaultQueryValueDelimiter()も参照してください

[static constexpr noexcept] char16_t QUrlQuery::defaultQueryValueDelimiter()

query関数は、クエリのキーと値を区切るデフォルトの文字、等号("=")を返します。

注意: Qt 6 より前のバージョンでは、この関数はQChar を返していました。

setQueryDelimiters()、queryValueDelimiter()、defaultQueryPairDelimiter()も参照してください

bool QUrlQuery::hasQueryItem(const QString &key) const

URL から、キーがkey と等しいクエリ文字列ペアが存在する場合、true を返します。

注意: キーはパーセントエンコード形式であることが期待される。

addQueryItem() およびqueryItemValue()も参照

bool QUrlQuery::isEmpty() const

このQUrlQuery オブジェクトにキーと値のペアが含まれていない場合、例えばデフォルトで 構築された後や空のクエリ文字列をパースした後などにはtrue を返します。

setQuery() およびclear()も参照

QString QUrlQuery::query(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const

このQUrlQuery オブジェクトに現在格納されているキーと値のペアを、このオブジェクト用に選択されたクエリ区切り文字で区切って再構成したクエリ文字列を返します。キーと値は、encoding パラメータで与えられたオプションを使用してエンコードされます。

この関数では、唯一のあいまいな区切り文字はハッシュ("#")です。これは、URLにおいて、クエリー文字列とそれに続くフラグメントを区切るために使われるからです。

返される文字列のキーと値のペアの順番は、元のクエリとまったく同じです。

setQuery()、QUrl::setQuery()、QUrl::fragment() およびEncodingも参照

QString QUrlQuery::queryItemValue(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const

encoding で指定したオプションを使用して返り値をエンコードし、 URL からキーkey に関連付けられたクエリ値を返します。キーkey が見つからない場合、この関数は空の文字列を返します。空の値と存在しないキーを区別する必要がある場合は、まずhasQueryItem() を使用してキーの存在を確認する必要があります。

キーkey が複数定義されている場合、この関数は、最初に見つかったものを、クエリ文字列中に存在した順、あるいはaddQueryItem() を使用して追加した順に返します。

注意: キーは、パーセントエンコードされた形式でなければなりません。

addQueryItem()、allQueryItemValues()、Encodingも参照

QList<std::pair<QString, QString>> QUrlQuery::queryItems(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const

URL のクエリ文字列を、encoding で指定したオプションを使用して項目をエンコードしたキーと値のマップとして返します。要素の順番は、クエリ文字列で見つかったもの、あるいはsetQueryItems() で設定されたものと同じです。

setQueryItems() およびEncodingも参照

QChar QUrlQuery::queryPairDelimiter() const

query() でクエリ文字列を再構築する際、あるいはsetQuery() でパースする際に、 キーと値のペアの区切りに使用する文字を返します。

setQueryDelimiters() およびqueryValueDelimiter()も参照

QChar QUrlQuery::queryValueDelimiter() const

query() でのクエリ文字列の再構築時およびsetQuery() でのパース時に、 キーと値のペアの区切りに使用する文字を返します。

setQueryDelimiters() およびqueryPairDelimiter()も参照のこと

void QUrlQuery::removeAllQueryItems(const QString &key)

キーがkey と等しいすべてのクエリー文字列ペアを URL から削除する。

注意: キーはパーセントエンコード形式であることが期待されます。

removeQueryItem()も参照

void QUrlQuery::removeQueryItem(const QString &key)

キーがkey に等しいクエリ文字列ペアを URL から削除します。キーがkey に等しい項目が複数ある場合、クエリ文字列内に存在する順、あるいはaddQueryItem() で追加された順に、最初の項目を削除する。

注意: キーは、パーセントエンコード形式であることが期待される。

removeAllQueryItems()も参照

void QUrlQuery::setQuery(const QString &queryString)

queryString のクエリ文字列を解析し、そこで見つかった値を内部項目に設定する。setQueryDelimiters() で区切り文字が指定されている場合は、デフォルトの区切り文字ではなく それを使用して文字列をパースします。

query()も参照

void QUrlQuery::setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter)

URL のクエリ文字列のキーと値、およびキーと値のペアの間の区切りに使用する文字を設定します。デフォルトの値の区切り文字は '=' で、デフォルトのペアの区切り文字は '&' です。

valueDelimiter はキーと値の区切りに使われ、 はキーと値のペアの区切りに使われます。クエリ文字列のキーと値のエンコード表現にこれらの区切り文字があると、 () で返されるときにパーセントエンコードされます。pairDelimiter query

valueDelimiter を ',' に設定し、pairDelimiter を ';' に設定すると、上記のクエリー文字列はこのように表現されます:

http://www.example.com/cgi-bin/drawgraph.cgi?type,pie;color,green

注: 非標準の区切り記号は、RFC 3986が「サブ区切り記号」と呼ぶものの中から選ぶべきである。それらは以下の通りです:

sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="

他の文字の使用はサポートされておらず、予期せぬ動作を引き起こす可能性がある。このメソッドは、有効な区切り文字を渡したかどうかを検証しません。

queryValueDelimiter() およびqueryPairDelimiter()も参照

void QUrlQuery::setQueryItems(const QList<std::pair<QString, QString>> &query)

このQUrlQuery オブジェクトの項目をquery に設定します。query の要素の順序は保持されます。

注意: このメソッドは、HTML フォームのようにスペース (ASCII 0x20) とプラス ("+") 記号を同じものとして扱いません。スペースをプラス記号として表現する必要がある場合は、実際のプラス記号を使用してください。

注意: キーと値はパーセントエンコード形式であることが期待される。

queryItems() およびisEmpty()も参照のこと

[noexcept] void QUrlQuery::swap(QUrlQuery &other)

このURLクエリーインスタンスをother と交換する。この関数は非常に高速で、失敗することはない。

QString QUrlQuery::toString(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const

このQUrlQueryQString として返します。encoding を使用して、返り値の URL 文字列エンコーディングを指定できます。

[noexcept] QUrlQuery &QUrlQuery::operator=(QUrlQuery &&other)

Move-other をこのQUrlQuery インスタンスに代入する。

QUrlQuery &QUrlQuery::operator=(const QUrlQuery &other)

other QUrlQuery オブジェクトの内容を、クエリ区切り文字を含めてコピーします。

関連する非会員

[noexcept] size_t qHash(const QUrlQuery &key, size_t seed = 0)

seed を計算のシードに使用して、key のハッシュ値を返します。

[noexcept] bool operator!=(const QUrlQuery &lhs, const QUrlQuery &rhs)

QUrlQuery オブジェクトrhslhs と等しくない場合はtrue を返します。それ以外の場合はfalse を返します。

operator==()も参照

[noexcept] bool operator==(const QUrlQuery &lhs, const QUrlQuery &rhs)

QUrlQuery オブジェクトlhsrhs が同じ内容を同じ順序で含み、同じクエリ区切り文字を使用している場合、true を返します。

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