Sur cette page

QUrlQuery Class

La classe QUrlQuery permet de manipuler des paires clé-valeur dans la partie « query » d'une URL. En savoir plus...

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

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

Comparaisons de QUrlQuery

CatégorieTypes comparables
égalitéQUrlQuery

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 sert à analyser les chaînes de requête présentes dans des URL telles que celle-ci :

Illustration d'une URL dont la partie située après le point d'interrogation est mise en évidence en tant que chaîne de requête.

Les chaînes de requête comme celle ci-dessus servent à transmettre des options dans l'URL et sont généralement décodées en plusieurs paires clé-valeur. Celle 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 adaptée à l'utilisation dans QUrl::setQuery() à partir des composants individuels de la requête.

La méthode la plus courante pour analyser une chaîne de requête consiste à l’initialiser dans le constructeur en lui transmettant ladite chaîne. Sinon, la méthode ` setQuery()` peut être utilisée pour définir la requête à analyser. Cette méthode peut également servir à analyser une requête comportant 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 récupérée à l'aide de la méthode query(). Celle-ci récupère tous les éléments stockés en interne et encode la chaîne à l'aide des délimiteurs.

Encodage

Toutes les méthodes getter de QUrlQuery prennent en charge un paramètre facultatif de type QUrl::ComponentFormattingOptions, y compris query(), qui détermine la manière d’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 encodée en pourcentage, car certaines valeurs ne peuvent pas être exprimées sous forme décodée (comme les caractères de contrôle ou les séquences d’octets non décodables en UTF-8). C’est pourquoi le caractère pourcentage est toujours représenté par la chaîne « %25 ».

Toutes les méthodes de définition et les méthodes de requête telles que ` hasQueryItem()` dans `QUrlQuery` n’acceptent que des formes encodées. Contrairement à ` QUrl`, il n’existe aucun paramètre facultatif permettant de spécifier que les chaînes transmises sont décodées. Si des chaînes mal encodées sont transmises aux méthodes de définition ou de requête, QUrlQuery tentera de les récupérer au lieu de renvoyer une erreur. Autrement dit, 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 compter sur le mode d’analyse « TolerantMode » pour corriger les chaînes. Il est notamment indispensable que toutes les entrées utilisateur soient d’abord encodées en pourcentage à l’aide de QUrl::toPercentEncoding() ou de fonctions similaires avant d’être transmises aux fonctions de cette classe.

Gestion des espaces et du signe « + »

Les navigateurs Web encodent généralement les espaces présents dans les éléments FORM HTML en signe « + » et les signes « + » en leur forme encodée en pourcentage (%2B). Cependant, les spécifications Internet régissant les URL ne considèrent pas les espaces et le signe « + » comme équivalents.

C’est pourquoi QUrlQuery n’encode jamais le caractère espace en « + » et ne décode jamais « + » en caractère espace. À la place, les caractères espace seront rendus sous la forme encodée « %20 ».

Afin de prendre en charge l’encodage similaire à celui des formulaires HTML, QUrlQuery ne décode jamais non plus la séquence « %2B » en signe « + » et n’encode jamais le signe « + ». En effet, toutes les séquences « %2B » ou « + » présentes dans les clés, les valeurs ou la chaîne de requête sont conservées telles quelles (à l’exception de la conversion en majuscules de « %2b » en « %2B »).

Décodage complet

Avec le formatage « QUrl::FullyDecoded », toutes les séquences encodées en pourcentage seront entièrement décodées et le caractère « % » sera utilisé pour se représenter lui-même. Le formatage « QUrl::FullyDecoded » doit être utilisé avec prudence, car il peut entraîner une perte de données. Consultez la documentation de QUrl::FullyDecoded pour savoir quelles données sont susceptibles d’être perdues.

Ce mode de formatage ne doit être utilisé que lorsque l'on traite du texte présenté à l'utilisateur dans des contextes où l'encodage en pourcentage n'est pas souhaité. Notez que les accesseurs et les méthodes de requête de QUrlQuery ne prennent pas en charge l'analyse correspondante d'QUrl::DecodedMode; ainsi, l'utilisation d'QUrl::FullyDecoded pour obtenir une liste de clés peut entraîner la non-détection de certaines clés dans l'objet.

Délimiteurs non standard

Par défaut, QUrlQuery utilise le signe égal (« = ») pour séparer une clé de sa valeur, et le signe « & » pour séparer les paires clé-valeur les unes des autres. Il est possible de modifier les délimiteurs utilisés par QUrlQuery pour l’analyse et la reconstruction de la requête en appelant la méthode setQueryDelimiters().

Les délimiteurs non standard doivent être choisis parmi ce que la RFC 3986 appelle les « 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 si vous avez passé un délimiteur valide.

Voir également QUrl.

Documentation des fonctions membres

QUrlQuery::QUrlQuery()

Crée un objet QUrlQuery vide. Une requête peut être définie par la suite en appelant la méthode setQuery() ou des éléments peuvent être ajoutés à l'aide de la méthode addQueryItem().

Voir également setQuery() et addQueryItem().

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

Crée 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 à l'aide d'autres délimiteurs, vous devez d'abord les définir à l'aide de ` setQueryDelimiters()` puis définir la requête avec ` setQuery()`.

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

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

Voir également QUrl::query().

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

Crée un objet QUrlQuery à partir de l'list e de paires clé/valeur.

QUrlQuery::QUrlQuery(const QUrlQuery &other)

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

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

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

Cette fonction a été introduite dans Qt 6.5.

[noexcept] QUrlQuery::~QUrlQuery()

Supprime cet objet de type « 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 ne remplace pas les éléments existants qui pourraient porter la même clé.

Remarque : cette méthode ne considère pas les espaces (ASCII 0x20) et les signes « + » comme équivalents, contrairement aux formulaires HTML. Si vous avez besoin que les espaces soient représentés par des signes « + », utilisez des signes « + » réels.

Remarque : les chaînes de caractères correspondant à la clé et à la valeur doivent être au format d'encodage en pourcentage. Cette fonction tentera de récupérer les données si des entrées mal encodées sont fournies, mais cela peut entraîner une perte de données. Voir QUrlQuery#Encoding pour plus d'informations.

Voir également hasQueryItem() et queryItemValue().

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

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

Remarque : la clé doit être au format d’encodage en pourcentage. Cette fonction tentera de récupérer les données si une entrée mal encodée est fournie, mais cela peut entraîner une perte de données. Voir QUrlQuery#Encoding pour plus d’informations.

Voir également 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 requête ont été modifiés, cette fonction conservera les nouvelles valeurs attribuées à ces délimiteurs.

Voir également isEmpty() et setQueryDelimiters().

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

Renvoie le caractère par défaut utilisé pour séparer les paires clé-valeur les unes des autres, à savoir l'esperluette (« & »).

Remarque : avant Qt 6, cette fonction renvoyait QChar.

Voir également setQueryDelimiters(), queryPairDelimiter() et defaultQueryValueDelimiter().

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

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

Remarque : avant Qt 6, cette fonction renvoyait « QChar ».

Voir également setQueryDelimiters(), queryValueDelimiter() et defaultQueryPairDelimiter().

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

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

Remarque : la clé doit être au format encodé en pourcentage. Cette fonction tentera de récupérer les données si une entrée mal encodée est fournie, mais cela peut entraîner une perte de données. Voir QUrlQuery#Encoding pour plus d’informations.

Voir également addQueryItem() et queryItemValue().

bool QUrlQuery::isEmpty() const

Renvoie ` true ` si cet objet ` QUrlQuery ` ne contient aucune paire clé-valeur, par exemple après une construction par défaut ou après l'analyse d'une chaîne de requête vide.

Voir également 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 à l'aide des options fournies par le paramètre ` encoding `.

Pour cette fonction, le seul délimiteur ambigu est le signe 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 d’origine.

Voir également setQuery(), QUrl::setQuery(), QUrl::fragment() et Encodage.

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

Renvoie la valeur de requête associée à la clé key issue de l'URL, en utilisant les options spécifiées dans encoding pour encoder la valeur renvoyée. 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 définie plusieurs fois, cette fonction renvoie la première trouvée, dans l’ordre où elles figuraient dans la chaîne de requête ou ont été ajoutées à l’aide de addQueryItem().

Remarque : la clé doit être au format d'encodage en pourcentage. Cette fonction tentera de récupérer les données si une entrée mal encodée est fournie, mais cela peut entraîner une perte de données. Voir QUrlQuery#Encoding pour plus d'informations.

Voir également 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 de la chaîne de requête ou que celui défini avec setQueryItems().

Voir également 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 également 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 la fonction query() ou lors de son analyse dans la fonction setQuery().

Voir également 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 au format encodé en pourcentage. Cette fonction tentera de récupérer les données si une entrée mal encodée est fournie, mais cela peut entraîner une perte de données. Voir QUrlQuery#Encoding pour plus d'informations.

Voir également removeQueryItem().

void QUrlQuery::removeQueryItem(const QString &key)

Supprime de l’URL la paire de chaîne de requête dont la clé est égale à key. S’il existe plusieurs éléments dont la clé est égale à key, la fonction supprime le premier élément dans l’ordre où ils apparaissent dans la chaîne de requête ou ont été ajoutés via addQueryItem().

Remarque : la clé doit être au format d'encodage en pourcentage. Cette fonction tentera de récupérer les données si une entrée mal encodée est fournie, mais cela peut entraîner une perte de données. Voir QUrlQuery#Encoding pour plus d'informations.

Voir également removeAllQueryItems().

void QUrlQuery::setQuery(const QString &queryString)

Analyse la chaîne de requête contenue dans ` queryString ` et attribue aux éléments internes les valeurs qui y sont trouvées. Si des délimiteurs ont été spécifiés à l'aide de la fonction ` setQueryDelimiters()`, celle-ci les utilisera à la place des délimiteurs par défaut pour analyser la chaîne.

Voir également 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. Par défaut, le délimiteur de valeur est « = » et le délimiteur de paire est « & ».

Illustration d'une URL dont la partie située après le point d'interrogation est mise en évidence en tant que chaîne de requête.

valueDelimiter sera utilisé pour séparer les clés des valeurs, et pairDelimiter sera utilisé pour séparer les paires clé-valeur. Toute occurrence de ces caractères de délimitation dans la représentation encodée des clés et des valeurs de la chaîne de requête est encodée en pourcentage lorsqu’elle est renvoyée par la fonction query().

Si ` valueDelimiter ` est défini sur « , » et ` pairDelimiter ` sur « ; », la chaîne de requête ci-dessus serait alors représentée comme suit :

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

Remarque : les délimiteursnon standard doivent être choisis parmi ce que la RFC 3986 appelle les « 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. Cette méthode ne vérifie pas que vous avez fourni un délimiteur valide.

Voir également queryValueDelimiter() et queryPairDelimiter().

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

Définit les éléments de cet objet ` QUrlQuery ` sur ` query`. L'ordre des éléments dans ` query ` est conservé.

Remarque : cette méthode ne considère pas les espaces (ASCII 0x20) et les signes « + » comme identiques, contrairement aux formulaires HTML. Si vous avez besoin que les espaces soient représentés par des signes « + », utilisez des signes « + » réels.

Remarque : les clés et les valeurs doivent être au format d'encodage en pourcentage. Cette fonction tentera de récupérer les données si des entrées mal encodées sont fournies, mais cela peut entraîner une perte de données. Consultez QUrlQuery#Encoding pour plus d'informations.

Voir également queryItems() et isEmpty().

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

Remplace cette instance de requête d'URL par other. Cette opération est très rapide et ne rencontre jamais d'échec.

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

Renvoie cette chaîne « QUrlQuery » sous la forme « QString ». L'argument « encoding » permet de spécifier l'encodage de la chaîne URL de la valeur renvoyée.

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

Cette commande affecte l'other à cette instance QUrlQuery.

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

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

Éléments non membres associés

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

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

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

Renvoie « true » si l'objet « QUrlQuery » rhs n'est pas égal à « lhs ». Sinon, 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.