このページでは

QUrlQuery Class

QUrlQuery クラスは、URL のクエリに含まれるキーと値のペアを操作する手段を提供します。詳細...

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

注:このクラスのすべての関数は再入可能です。

QUrlQuery の比較

カテゴリ比較可能な型
等価性QUrlQuery

パブリック関数

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の図。

上記のようなクエリ文字列は、URL内でオプションを伝達するために使用され、通常は複数のキーと値のペアにデコードされます。上記の例では、リストに「type」と「color」という2つのキーが含まれます。また、QUrlQueryを使用すると、クエリの個々の構成要素から、QUrl::setQuery()で利用可能な形式のクエリ文字列を作成することもできます。

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

エンコードされたクエリ文字列は、query() を使用して再度取得できます。これにより、内部に保存されているすべての項目が取得され、指定された区切り文字を使用して文字列がエンコードされます。

エンコード

QUrlQuery のすべてのゲッターメソッドは、QUrl::ComponentFormattingOptions 型のオプションパラメータをサポートしています。これには、query() も含まれ、このパラメータによって、対象データのエンコード方法が指定されます。QUrl::FullyDecoded を除き、返される値は依然としてパーセントエンコードされた文字列と見なす必要があります。これは、デコードされた形式では表現できない特定の値(制御文字や、UTF-8にデコードできないバイトシーケンスなど)が存在するためです。そのため、パーセント記号は常に文字列「%25」で表されます。

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

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

スペースおよびプラス記号(「+」)の取り扱い

Webブラウザは通常、HTMLのFORM要素に含まれるスペースをプラス記号(「+」)に、プラス記号をパーセントエンコード形式(%2B)に変換します。しかし、URLを規定するインターネット仕様では、スペースとプラス記号は同等とは見なされていません。

そのため、QUrlQueryはスペース文字を「+」にエンコードすることはなく、「+」をスペース文字にデコードすることもありません。代わりに、スペース文字はエンコードされた形式「%20」として表現されます。

HTMLフォームと同様のエンコードをサポートするため、QUrlQueryは「%2B」シーケンスをプラス記号にデコードしたり、プラス記号をエンコードしたりすることもありません。 実際、キー、値、またはクエリ文字列内で見つかった「%2B」または「+」のシーケンスは、記述されたままの状態で残されます(「%2b」が「%2B」に大文字化される場合を除く)。

完全なデコード

QUrl::FullyDecoded 形式では、すべてのパーセントエンコードされた文字列が完全にデコードされ、「%」文字はそれ自体を表すために使用されます。QUrl::FullyDecoded はデータの損失を引き起こす可能性があるため、注意して使用する必要があります。どのようなデータが失われる可能性があるかについては、QUrl::FullyDecoded のドキュメントを参照してください。

このフォーマットモードは、パーセントエンコーディングが望ましくないコンテキストでユーザーに表示されるテキストを扱う場合にのみ使用してください。なお、QUrlQueryのセッターおよびクエリメソッドは、対応するQUrl::DecodedMode の解析をサポートしていないため、QUrl::FullyDecoded を使用してキーの一覧を取得すると、オブジェクト内に存在しないキーが返される可能性があります。

非標準の区切り文字

デフォルトでは、QUrlQueryはキーと値を区切るのに等号(「=」)を、キーと値のペア同士を区切るのにアンパサンド(「&」)を使用します。setQueryDelimiters() を呼び出すことで、QUrlQueryがクエリの解析および再構築に使用する区切り文字を変更することが可能です。

非標準の区切り文字は、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)とプラス記号(「+」)を同一のものとして扱いません。スペースをプラス記号として表現する必要がある場合は、実際のプラス記号を使用してください。

注: キーおよび値の文字列は 、パーセントエンコードされた形式であることが想定されています。この関数は、不適切にエンコードされた入力が提供された場合に復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

関連項目: hasQueryItem() およびqueryItemValue()。

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

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

注:キーは パーセントエンコード形式である必要があります。この関数は、不適切にエンコードされた入力が指定された場合でも復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

関連項目: 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()

クエリ内でキーと値を区切るためのデフォルトの文字(等号「=」)を返します。

注: Qt 6以前では 、この関数は `QChar` を返していました。

関連項目: setQueryDelimiters()、queryValueDelimiter()、およびdefaultQueryPairDelimiter()。

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

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

注:キーは パーセントエンコード形式であることが想定されています。この関数は、不適切なエンコードが施された入力が与えられた場合でも復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

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()、および「エンコーディング」も参照してください 。

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

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

キーkey が複数定義されている場合、この関数は、クエリ文字列に含まれている順序、またはaddQueryItem() を使用して追加された順序で、最初に検出されたものを返します。

注:キーは パーセントエンコード形式である必要があります。この関数は、不適切なエンコードが施された入力が与えられた場合でも復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

関連項目: addQueryItem()、allQueryItemValues()、および「エンコーディング」。

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

URLのクエリ文字列を、キーと値のマップとして返します。この際、encoding で指定されたオプションを使用して各項目をエンコードします。要素の順序は、クエリ文字列に含まれる順序、またはsetQueryItems()で設定された順序と同じになります。

setQueryItems() および「エンコーディング」も参照してください 。

QChar QUrlQuery::queryPairDelimiter() const

query() でクエリ文字列を再構築する際、またはsetQuery() でクエリ文字列を解析する際に、キーと値のペアを区切るために使用される文字を返します。

setQueryDelimiters() およびqueryValueDelimiter()も参照してください 。

QChar QUrlQuery::queryValueDelimiter() const

query() でクエリ文字列を再構築する際、またはsetQuery() でクエリ文字列を解析する際に、キーと値を区切るために使用される文字を返します。

setQueryDelimiters() およびqueryPairDelimiter()も参照してください 。

void QUrlQuery::removeAllQueryItems(const QString &key)

URLから、キーが「key 」に等しいすべてのクエリ文字列のペアを削除します。

注:キーは パーセントエンコード形式である必要があります。この関数は、不適切なエンコードがされた入力が与えられた場合でも復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

removeQueryItem()も参照してください 。

void QUrlQuery::removeQueryItem(const QString &key)

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

注:キーは パーセントエンコード形式であることが想定されています。この関数は、不適切にエンコードされた入力が指定された場合に復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

removeAllQueryItems()も参照してください 。

void QUrlQuery::setQuery(const QString &queryString)

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

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

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

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

クエスチョンマークの後の部分がクエリ文字列として強調表示された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)とプラス記号(「+」)を同一のものとして扱いません。スペースをプラス記号として表現する必要がある場合は、実際のプラス記号を使用してください。

注:キーと値は パーセントエンコード形式である必要があります。この関数は、不適切にエンコードされた入力が与えられた場合に復元を試みますが、その際にデータが失われる可能性があります。詳細については、QUrlQuery#Encoding を参照してください。

queryItems() およびisEmpty()も参照してください 。

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

このURLクエリのインスタンスを、other と置き換えます。この操作は非常に高速で、失敗することはありません。

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

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

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

other をこのQUrlQuery インスタンスに割り当てます。

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

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

関連する非メンバー

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

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

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

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

operator==()も参照してください 。

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

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

© 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.