Sur cette page

QUrlQuery Class

La classe QUrlQuery permet de manipuler des paires clé-valeur dans une requête d'URL. Plus d'informations...

En-tête : #include <QUrlQuery>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core

Cette classe est comparable à l'égalité.

Remarque : Toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

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)

Membres publics statiques

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)

Description détaillée

Cette classe est utilisée pour analyser les chaînes de requête trouvées dans les URL telles que les suivantes :

Illustration d'un URL dont la partie après le point d'interrogation est mise en évidence comme chaîne de requête.

Les chaînes de requête telles que celles mentionnées ci-dessus sont utilisées pour transmettre des options dans l'URL et sont généralement décodées en plusieurs paires clé-valeur. La chaîne ci-dessus contiendrait deux entrées dans sa liste, avec les clés "type" et "color". QUrlQuery peut également être utilisé pour créer une chaîne de requête utilisable dans QUrl::setQuery() à partir des composants individuels de la requête.

La façon la plus courante d'analyser une chaîne de requête est de l'initialiser dans le constructeur en lui transmettant la chaîne de requête. Sinon, la méthode setQuery() peut être utilisée pour définir la requête à analyser. Cette méthode peut également être utilisée pour analyser une requête contenant des délimiteurs non standard, après les avoir définis à l'aide de la fonction setQueryDelimiters().

La chaîne de requête encodée peut être obtenue à nouveau en utilisant query(). Cette fonction prend tous les éléments stockés en interne et encode la chaîne en utilisant les délimiteurs.

Encodage

Toutes les méthodes d'obtention de QUrlQuery supportent un paramètre optionnel de type QUrl::ComponentFormattingOptions, y compris query(), qui dicte comment encoder les données en question. À l'exception de QUrl::FullyDecoded, la valeur renvoyée doit toujours être considérée comme une chaîne codée en pourcentage, car certaines valeurs ne peuvent pas être exprimées sous forme décodée (comme les caractères de contrôle, les séquences d'octets non décodables en UTF-8). C'est pourquoi le caractère "pour cent" est toujours représenté par la chaîne "%25".

Toutes les méthodes setter et les méthodes de requête comme hasQueryItem() dans QUrlQuery ne prennent que des formes codées. Contrairement à QUrl, il n'y a pas de paramètre optionnel pour spécifier que les chaînes transmises sont décodées. Si des chaînes mal encodées sont transmises aux méthodes setter ou query, QUrlQuery tentera de les récupérer au lieu d'échouer. En d'autres termes, toutes les fonctions de cette classe analysent leurs arguments de type chaîne comme si le mode de décodage QUrl::TolerantMode avait été spécifié.

Le code de l'application doit s'efforcer de toujours garantir un encodage correct et ne pas se fier à l'analyse de TolerantMode pour réparer les chaînes. Notamment, toutes les entrées utilisateur doivent être codées en pourcentage à l'aide de QUrl::toPercentEncoding() ou de fonctions similaires avant d'être transmises aux fonctions de cette classe.

Traitement des espaces et des plus ("+")

Les navigateurs web codent généralement les espaces trouvés dans les éléments HTML FORM en un signe plus ("+") et les signes plus en leur forme codée en pourcentage (%2B). Toutefois, les spécifications Internet régissant les URL ne considèrent pas les espaces et le caractère plus comme équivalents.

C'est pourquoi QUrlQuery n'encode jamais le caractère espace en "+" et ne décode jamais "+" en caractère espace. Au lieu de cela, les caractères d'espace seront rendus "%20" sous forme codée.

Pour prendre en charge le codage comme celui des formulaires HTML, QUrlQuery ne décode jamais la séquence "%2B" en signe plus et n'encode pas non plus de signe plus. En fait, toutes les séquences "%2B" ou "+" trouvées dans les clés, les valeurs ou la chaîne de requête sont laissées telles quelles (à l'exception de la mise en majuscule de "%2b" en "%2B").

Décodage complet

Avec le formatage QUrl::FullyDecoded, toutes les séquences codées en pourcentage sont entièrement décodées et le caractère "%" est utilisé pour se représenter lui-même. QUrl::FullyDecoded doit être utilisé avec précaution, car il peut entraîner des pertes de données. Voir la documentation de QUrl::FullyDecoded pour plus d'informations sur les données qui peuvent être perdues.

Ce mode de formatage ne doit être utilisé que lorsqu'il s'agit de textes présentés à l'utilisateur dans des contextes où le codage en pourcentage n'est pas souhaité. Notez que les paramètres et les méthodes d'interrogation QUrlQuery ne prennent pas en charge l'analyse de contrepartie QUrl::DecodedMode, de sorte que l'utilisation de QUrl::FullyDecoded pour obtenir une liste de clés peut se traduire par des clés non trouvées dans l'objet.

Délimiteurs non standard

Par défaut, QUrlQuery utilise un signe égal ("=") pour séparer une clé de sa valeur, et une esperluette ("&") pour séparer les paires clé-valeur les unes des autres. Il est possible de changer les délimiteurs que QUrlQuery utilise pour l'analyse et la reconstruction de la requête en appelant setQueryDelimiters().

Les délimiteurs non standard doivent être choisis parmi ce que la RFC 3986 appelle des "sous-délimiteurs". Il s'agit des caractères suivants :

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

L'utilisation d'autres caractères n'est pas prise en charge et peut entraîner un comportement inattendu. QUrlQuery ne vérifie pas que vous avez passé un délimiteur valide.

Voir également QUrl.

Documentation des fonctions membres

QUrlQuery::QUrlQuery()

Construit un objet QUrlQuery vide. Une requête peut être définie par la suite en appelant setQuery() ou des éléments peuvent être ajoutés en utilisant addQueryItem().

Voir aussi setQuery() et addQueryItem().

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

Construit un objet QUrlQuery et analyse la chaîne de requête queryString, en utilisant les délimiteurs de requête par défaut. Pour analyser une chaîne de requête en utilisant d'autres délimiteurs, vous devez d'abord les définir à l'aide de setQueryDelimiters(), puis définir la requête à l'aide de setQuery().

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

Construit un objet QUrlQuery et analyse la chaîne de requête trouvée dans l'URL url, en utilisant les délimiteurs de requête par défaut. Pour analyser une chaîne de requête en utilisant d'autres délimiteurs, vous devez d'abord les définir à l'aide de setQueryDelimiters(), puis définir la requête à l'aide de setQuery().

Voir aussi QUrl::query().

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

Construit un objet QUrlQuery à partir de la paire clé/valeur list.

QUrlQuery::QUrlQuery(const QUrlQuery &other)

Copie le contenu de l'objet other QUrlQuery, y compris les délimiteurs de la requête.

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

Déplace le contenu de l'objet other QUrlQuery, y compris les délimiteurs de la requête.

Cette fonction a été introduite dans Qt 6.5.

[noexcept] QUrlQuery::~QUrlQuery()

Détruit cet objet QUrlQuery.

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

Ajoute la paire key = value à la fin de la chaîne de requête de l'URL. Cette méthode n'écrase pas les éléments existants qui pourraient avoir la même clé.

Remarque : cette méthode ne traite pas les espaces (ASCII 0x20) et les signes plus ("+") de la même manière, comme le font les formulaires HTML. Si vous avez besoin que les espaces soient représentés comme des signes plus, utilisez de vrais signes plus.

Remarque : les chaînes de clés et de valeurs doivent être codées en pourcentage.

Voir aussi hasQueryItem() et queryItemValue().

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

Renvoie la liste des valeurs de la chaîne de requête dont la clé est égale à key à partir de l'URL, en utilisant les options spécifiées dans encoding pour encoder la valeur de retour. Si la clé key n'est pas trouvée, cette fonction renvoie une liste vide.

Remarque : la clé doit être codée en pourcentage.

Voir aussi queryItemValue() et addQueryItem().

void QUrlQuery::clear()

Efface cet objet QUrlQuery en supprimant toutes les paires clé-valeur actuellement stockées. Si les délimiteurs de la requête ont été modifiés, cette fonction les laissera avec leurs valeurs modifiées.

Voir aussi isEmpty() et setQueryDelimiters().

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

Renvoie le caractère par défaut pour séparer les paires clé-valeur les unes des autres, une esperluette ("&").

Remarque : avant Qt 6, cette fonction renvoyait QChar.

Voir aussi setQueryDelimiters(), queryPairDelimiter() et defaultQueryValueDelimiter().

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

Renvoie le caractère par défaut pour séparer les clés des valeurs dans la requête, un signe égal ("=").

Remarque : avant Qt 6, cette fonction renvoyait QChar.

Voir aussi setQueryDelimiters(), queryValueDelimiter() et defaultQueryPairDelimiter().

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

Renvoie true s'il existe une paire de chaînes de requête dont la clé est égale à key dans l'URL.

Note : La clé doit être codée en pourcentage.

Voir aussi addQueryItem() et queryItemValue().

bool QUrlQuery::isEmpty() const

Renvoie true si cet objet QUrlQuery ne contient aucune paire clé-valeur, par exemple après avoir été construit par défaut ou après avoir analysé une chaîne de requête vide.

Voir aussi setQuery() et clear().

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

Renvoie la chaîne de requête reconstruite, formée à partir des paires clé-valeur actuellement stockées dans cet objet QUrlQuery et séparées par les délimiteurs de requête choisis pour cet objet. Les clés et les valeurs sont encodées en utilisant les options données par le paramètre encoding.

Pour cette fonction, le seul délimiteur ambigu est le dièse ("#"), car dans les URL, il est utilisé pour séparer la chaîne de requête du fragment qui peut suivre.

L'ordre des paires clé-valeur dans la chaîne renvoyée est exactement le même que dans la requête originale.

Voir aussi setQuery(), QUrl::setQuery(), QUrl::fragment(), et Encodage.

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

Renvoie la valeur de la requête associée à la clé key à partir de l'URL, en utilisant les options spécifiées dans encoding pour encoder la valeur de retour. Si la clé key n'est pas trouvée, cette fonction renvoie une chaîne vide. Si vous devez faire la distinction entre une valeur vide et une clé inexistante, vous devez d'abord vérifier la présence de la clé à l'aide de hasQueryItem().

Si la clé key est multipliée, cette fonction renvoie la première clé trouvée, dans l'ordre où elle est présente dans la chaîne de requête ou ajoutée à l'aide de addQueryItem().

Remarque : la clé doit être codée en pourcentage.

Voir aussi addQueryItem(), allQueryItemValues() et Encodage.

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

Renvoie la chaîne de requête de l'URL, sous la forme d'une carte de clés et de valeurs, en utilisant les options spécifiées dans encoding pour encoder les éléments. L'ordre des éléments est le même que celui trouvé dans la chaîne de requête ou défini avec setQueryItems().

Voir aussi setQueryItems() et Encodage.

QChar QUrlQuery::queryPairDelimiter() const

Renvoie le caractère utilisé pour délimiter les paires clé-valeur lors de la reconstruction de la chaîne de requête dans query() ou lors de l'analyse dans setQuery().

Voir aussi setQueryDelimiters() et queryValueDelimiter().

QChar QUrlQuery::queryValueDelimiter() const

Renvoie le caractère utilisé pour délimiter les clés et les valeurs lors de la reconstruction de la chaîne de requête dans query() ou lors de l'analyse dans setQuery().

Voir aussi setQueryDelimiters() et queryPairDelimiter().

void QUrlQuery::removeAllQueryItems(const QString &key)

Supprime de l'URL toutes les paires de chaînes de requête dont la clé est égale à key.

Remarque : la clé doit être codée en pourcentage.

Voir aussi removeQueryItem().

void QUrlQuery::removeQueryItem(const QString &key)

Supprime de l'URL la paire de chaînes de requête dont la clé est égale à key. S'il existe plusieurs éléments dont la clé est égale à key, le premier élément est supprimé dans l'ordre où il était présent dans la chaîne de requête ou ajouté avec addQueryItem().

Remarque : la clé doit être codée en pourcentage.

Voir aussi removeAllQueryItems().

void QUrlQuery::setQuery(const QString &queryString)

Analyse la chaîne de requête dans queryString et attribue aux éléments internes les valeurs trouvées dans cette chaîne. Si des délimiteurs ont été spécifiés avec setQueryDelimiters(), cette fonction les utilisera à la place des délimiteurs par défaut pour analyser la chaîne.

Voir aussi query().

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

Définit les caractères utilisés pour délimiter les clés et les valeurs, ainsi que les paires clé-valeur dans la chaîne de requête de l'URL. Le délimiteur de valeur par défaut est "=" et le délimiteur de paires par défaut est "&".

Illustration d'un URL dont la partie après le point d'interrogation est mise en évidence comme chaîne de requête.

valueDelimiter est utilisé pour séparer les clés des valeurs, et pairDelimiter est utilisé pour séparer les paires clé-valeur. Toutes les occurrences de ces caractères de délimitation dans la représentation codée des clés et des valeurs de la chaîne de requête sont codées en pourcentage lorsqu'elles sont renvoyées dans query().

Si la valeur de valueDelimiter est ',' et celle de pairDelimiter ';', la chaîne de requête ci-dessus serait représentée comme suit :

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

Remarque : les délimiteurs non standard doivent être choisis parmi ce que la RFC 3986 appelle des "sous-délimiteurs". Il s'agit des suivants :

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

L'utilisation d'autres caractères n'est pas prise en charge et peut entraîner un comportement inattendu. Cette méthode ne vérifie pas que vous avez passé un délimiteur valide.

Voir aussi queryValueDelimiter() et queryPairDelimiter().

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

Définit les éléments de l'objet QUrlQuery en query. L'ordre des éléments dans query est préservé.

Remarque : cette méthode ne traite pas les espaces (ASCII 0x20) et les signes plus ("+") de la même manière, comme le font les formulaires HTML. Si vous avez besoin que les espaces soient représentés comme des signes plus, utilisez de vrais signes plus.

Remarque : les clés et les valeurs sont censées être codées en pourcentage.

Voir aussi queryItems() et isEmpty().

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

Remplace cette instance de requête URL par other. Cette opération est très rapide et n'échoue jamais.

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

Renvoie cette QUrlQuery sous forme de QString. encoding peut être utilisé pour spécifier l'encodage de la chaîne URL de la valeur de retour.

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

Move-assigne other à cette instance QUrlQuery.

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

Copie le contenu de l'objet other QUrlQuery , y compris les délimiteurs de la requête.

Non-membres apparentés

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

Renvoie la valeur de hachage pour key, en utilisant seed comme base de calcul.

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

Renvoie true si l'objet QUrlQuery rhs n'est pas égal à lhs. Sinon, il renvoie false.

Voir aussi operator==().

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

Renvoie true si les objets QUrlQuery, lhs et rhs contiennent le même contenu, dans le même ordre, et utilisent les mêmes délimiteurs de requête.

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