QUrlQuery Class
Die Klasse QUrlQuery bietet eine Möglichkeit, Schlüssel-Wert-Paare in einer URL-Abfrage zu manipulieren. Mehr...
Kopfzeile: | #include <QUrlQuery> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QUrlQuery ist Teil von Input/Output and Networking, Network Programming API und Implicitly Shared Classes.
Diese Klasse ist gleichwertig-vergleichbar.
Hinweis: Alle Funktionen in dieser Klasse sind reentrant.
Öffentliche Funktionen
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) |
Statische öffentliche Mitglieder
char16_t | defaultQueryPairDelimiter() |
char16_t | defaultQueryValueDelimiter() |
Verwandte Nicht-Mitglieder
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) |
Detaillierte Beschreibung
Diese Klasse wird verwendet, um die Abfragezeichenfolgen in URLs wie den folgenden zu analysieren:
Abfragezeichenfolgen wie die obige werden verwendet, um Optionen in der URL zu übermitteln und werden normalerweise in mehrere Schlüssel-Wert-Paare dekodiert. Die obige Abfrage enthält zwei Einträge in ihrer Liste, mit den Schlüsseln "type" und "color". QUrlQuery kann auch verwendet werden, um aus den einzelnen Komponenten der Abfrage einen für die Verwendung in QUrl::setQuery() geeigneten Abfrage-String zu erstellen.
Die gebräuchlichste Art, einen Query-String zu parsen, ist, ihn im Konstruktor zu initialisieren, indem man ihm den Query-String übergibt. Andernfalls kann die Methode setQuery() verwendet werden, um die zu parsende Abfrage festzulegen. Diese Methode kann auch verwendet werden, um eine Abfrage mit nicht standardmäßigen Begrenzungszeichen zu analysieren, nachdem diese mit der Funktion setQueryDelimiters() gesetzt wurden.
Die kodierte Abfragezeichenfolge kann wiederum mit query() abgerufen werden. Dies nimmt alle intern gespeicherten Elemente und kodiert die Zeichenkette unter Verwendung der Begrenzungszeichen.
Kodierung
Alle Getter-Methoden in QUrlQuery unterstützen einen optionalen Parameter vom Typ QUrl::ComponentFormattingOptions, einschließlich query(), der vorgibt, wie die betreffenden Daten zu kodieren sind. Mit Ausnahme von QUrl::FullyDecoded muss der zurückgegebene Wert immer noch als prozentual kodierte Zeichenkette betrachtet werden, da es bestimmte Werte gibt, die nicht in dekodierter Form ausgedrückt werden können (z. B. Steuerzeichen, Bytefolgen, die nicht in UTF-8 dekodierbar sind). Aus diesem Grund wird das Prozentzeichen immer durch die Zeichenkette "%25" dargestellt.
Alle Setter-Methoden und die Abfragemethoden wie hasQueryItem() in QUrlQuery nehmen nur kodierte Formen an. Anders als in QUrl gibt es keinen optionalen Parameter, der angibt, dass die übergebenen Zeichenketten dekodiert werden. Wenn nicht korrekt kodierte Strings an die Setter- oder Query-Methoden übergeben werden, versucht QUrlQuery, den Fehler zu beheben, anstatt zu scheitern. Das heißt, alle Funktionen in dieser Klasse parsen ihre String-Argumente so, als ob der Dekodierungsmodus QUrl::TolerantMode angegeben wurde.
Der Anwendungscode sollte sich bemühen, immer eine korrekte Kodierung zu gewährleisten und sich nicht darauf verlassen, dass das Parsen durch TolerantMode die Zeichenketten repariert. Insbesondere müssen alle Benutzereingaben zunächst mit QUrl::toPercentEncoding() oder ähnlichen Funktionen prozentual kodiert werden, bevor sie an die Funktionen dieser Klasse übergeben werden.
Behandlung von Leerzeichen und Plus ("+")
Webbrowser kodieren Leerzeichen in HTML FORM-Elementen normalerweise in ein Pluszeichen ("+") und Pluszeichen in ihre prozentual kodierte Form (%2B). In den Internet-Spezifikationen für URLs werden Leerzeichen und das Pluszeichen jedoch nicht als gleichwertig betrachtet.
Aus diesem Grund kodiert QUrlQuery das Leerzeichen niemals in "+" und dekodiert "+" niemals in ein Leerzeichen. Stattdessen werden Leerzeichen in kodierter Form als "%20" wiedergegeben.
Um eine Kodierung wie die von HTML-Formularen zu unterstützen, dekodiert QUrlQuery auch niemals die "%2B"-Sequenz zu einem Pluszeichen und kodiert auch kein Pluszeichen. Tatsächlich werden alle "%2B"- oder "+"-Sequenzen, die in den Schlüsseln, Werten oder Abfragezeichenfolgen gefunden werden, genau so belassen, wie sie geschrieben wurden (mit Ausnahme der Großschreibung von "%2b" zu "%2B").
Vollständige Dekodierung
Bei der Formatierung QUrl::FullyDecoded werden alle prozentual kodierten Sequenzen vollständig dekodiert und das Zeichen "%" wird verwendet, um sich selbst darzustellen. QUrl::FullyDecoded sollte mit Vorsicht verwendet werden, da es zu Datenverlusten führen kann. Siehe die Dokumentation von QUrl::FullyDecoded für Informationen darüber, welche Daten verloren gehen können.
Dieser Formatierungsmodus sollte nur verwendet werden, wenn es sich um Text handelt, der dem Benutzer in Kontexten präsentiert wird, in denen keine Prozentkodierung erwünscht ist. Beachten Sie, dass QUrlQuery Setter und Abfragemethoden das Gegenstück QUrl::DecodedMode parsing nicht unterstützen, so dass die Verwendung von QUrl::FullyDecoded, um eine Liste von Schlüsseln zu erhalten, zu Schlüsseln führen kann, die nicht im Objekt gefunden werden.
Nicht-Standard Begrenzungszeichen
Standardmäßig verwendet QUrlQuery ein Gleichheitszeichen ("="), um einen Schlüssel von seinem Wert zu trennen, und ein kaufmännisches Und ("&"), um Schlüssel-Wert-Paare voneinander zu trennen. Es ist möglich, die Begrenzungszeichen zu ändern, die QUrlQuery für das Parsen und die Rekonstruktion der Abfrage verwendet, indem man setQueryDelimiters() aufruft.
Nicht-standardmäßige Begrenzungszeichen sollten aus dem ausgewählt werden, was RFC 3986 "sub-delimiters" nennt. Diese sind:
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
Die Verwendung von anderen Zeichen wird nicht unterstützt und kann zu unerwartetem Verhalten führen. QUrlQuery prüft nicht, ob Sie ein gültiges Trennzeichen übergeben haben.
Siehe auch QUrl.
Dokumentation der Mitgliedsfunktionen
QUrlQuery::QUrlQuery()
Konstruiert ein leeres QUrlQuery-Objekt. Eine Abfrage kann anschließend durch den Aufruf von setQuery() gesetzt werden, oder Elemente können mit addQueryItem() hinzugefügt werden.
Siehe auch setQuery() und addQueryItem().
[explicit]
QUrlQuery::QUrlQuery(const QString &queryString)
Konstruiert ein QUrlQuery-Objekt und analysiert den Abfrage-String queryString unter Verwendung der Standard-Abfragebegrenzer. Um einen Abfrage-String mit anderen Begrenzungszeichen zu analysieren, sollten Sie diese zuerst mit setQueryDelimiters() und dann die Abfrage mit setQuery() setzen.
[explicit]
QUrlQuery::QUrlQuery(const QUrl &url)
Konstruiert ein QUrlQuery-Objekt und analysiert den in der URL url gefundenen Abfrage-String unter Verwendung der Standard-Abfragebegrenzer. Um einen Abfrage-String mit anderen Begrenzungszeichen zu analysieren, sollten Sie diese zuerst mit setQueryDelimiters() und dann die Abfrage mit setQuery() setzen.
Siehe auch QUrl::query().
QUrlQuery::QUrlQuery(std::initializer_list<std::pair<QString, QString>> list)
Konstruiert ein QUrlQuery-Objekt aus dem list von Schlüssel/Wert-Paar.
QUrlQuery::QUrlQuery(const QUrlQuery &other)
Kopiert den Inhalt des Objekts other QUrlQuery, einschließlich der Abfragebegrenzer.
[noexcept, since 6.5]
QUrlQuery::QUrlQuery(QUrlQuery &&other)
Verschiebt den Inhalt des other QUrlQuery-Objekts, einschließlich der Abfragebegrenzer.
Diese Funktion wurde in Qt 6.5 eingeführt.
[noexcept]
QUrlQuery::~QUrlQuery()
Zerstört dieses QUrlQuery Objekt.
void QUrlQuery::addQueryItem(const QString &key, const QString &value)
Hängt das Paar key = value an das Ende des Abfrage-Strings der URL an. Diese Methode überschreibt keine vorhandenen Elemente, die möglicherweise mit demselben Schlüssel vorhanden sind.
Hinweis: Diese Methode behandelt Leerzeichen (ASCII 0x20) und Pluszeichen ("+") nicht gleich, wie dies bei HTML-Formularen der Fall ist. Wenn Sie benötigen, dass Leerzeichen als Pluszeichen dargestellt werden, verwenden Sie echte Pluszeichen.
Hinweis: Es wird erwartet, dass die Schlüssel- und Wertestrings in prozentual kodierter Form vorliegen.
Siehe auch hasQueryItem() und queryItemValue().
QStringList QUrlQuery::allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Gibt eine Liste von Abfrage-Stringwerten zurück, deren Schlüssel gleich key aus der URL ist, wobei die in encoding angegebenen Optionen zur Kodierung des Rückgabewerts verwendet werden. Wenn der Schlüssel key nicht gefunden wird, gibt diese Funktion eine leere Liste zurück.
Hinweis: Es wird erwartet, dass der Schlüssel in prozentual kodierter Form vorliegt.
Siehe auch queryItemValue() und addQueryItem().
void QUrlQuery::clear()
Löscht dieses QUrlQuery Objekt, indem alle derzeit gespeicherten Schlüssel-Wert-Paare entfernt werden. Wenn die Abfragebegrenzer geändert wurden, belässt diese Funktion sie mit ihren geänderten Werten.
Siehe auch isEmpty() und setQueryDelimiters().
[static constexpr noexcept]
char16_t QUrlQuery::defaultQueryPairDelimiter()
Gibt das Standardzeichen zum Trennen von Schlüssel-Wert-Paaren zurück, ein kaufmännisches Und ("&").
Hinweis: Vor Qt 6 gab diese Funktion QChar zurück.
Siehe auch setQueryDelimiters(), queryPairDelimiter(), und defaultQueryValueDelimiter().
[static constexpr noexcept]
char16_t QUrlQuery::defaultQueryValueDelimiter()
Gibt das Standardzeichen zum Trennen von Schlüsseln und Werten in der Abfrage zurück, ein Gleichheitszeichen ("=").
Hinweis: Vor Qt 6 gab diese Funktion QChar zurück.
Siehe auch setQueryDelimiters(), queryValueDelimiter(), und defaultQueryPairDelimiter().
bool QUrlQuery::hasQueryItem(const QString &key) const
Gibt true
zurück, wenn es ein Query-String-Paar gibt, dessen Schlüssel mit key aus der URL übereinstimmt.
Hinweis: Es wird erwartet, dass der Schlüssel in prozentual kodierter Form vorliegt.
Siehe auch addQueryItem() und queryItemValue().
bool QUrlQuery::isEmpty() const
Gibt true
zurück, wenn dieses QUrlQuery Objekt keine Schlüssel-Wert-Paare enthält, z. B. nach einer Standardkonstruktion oder nach dem Parsen einer leeren Abfragezeichenfolge.
Siehe auch setQuery() und clear().
QString QUrlQuery::query(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Gibt die rekonstruierte Abfragezeichenfolge zurück, die aus den derzeit in diesem QUrlQuery Objekt gespeicherten Schlüssel-Wert-Paaren gebildet und durch die für dieses Objekt gewählten Abfragebegrenzer getrennt wurde. Die Schlüssel und Werte werden mit den im Parameter encoding angegebenen Optionen kodiert.
Bei dieser Funktion ist das einzige mehrdeutige Trennzeichen die Raute ("#"), da sie in URLs verwendet wird, um den Abfrage-String von dem eventuell folgenden Fragment zu trennen.
Die Reihenfolge der Schlüssel-Wert-Paare in der zurückgegebenen Zeichenkette ist genau dieselbe wie in der ursprünglichen Abfrage.
Siehe auch setQuery(), QUrl::setQuery(), QUrl::fragment(), und Encoding.
QString QUrlQuery::queryItemValue(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Gibt den mit dem Schlüssel key verbundenen Abfragewert aus der URL zurück, wobei die in encoding angegebenen Optionen zur Kodierung des Rückgabewerts verwendet werden. Wenn der Schlüssel key nicht gefunden wird, gibt diese Funktion eine leere Zeichenkette zurück. Wenn Sie zwischen einem leeren Wert und einem nicht existierenden Schlüssel unterscheiden müssen, sollten Sie das Vorhandensein des Schlüssels zuerst mit hasQueryItem() überprüfen.
Wenn der Schlüssel key mehrfach definiert ist, gibt diese Funktion den ersten gefundenen Schlüssel zurück, und zwar in der Reihenfolge, in der sie in der Abfragezeichenfolge vorhanden waren oder mit addQueryItem() hinzugefügt wurden.
Hinweis: Es wird erwartet, dass der Schlüssel in prozentual kodierter Form vorliegt.
Siehe auch addQueryItem(), allQueryItemValues(), und Encoding.
QList<std::pair<QString, QString>> QUrlQuery::queryItems(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Gibt die Abfragezeichenkette der URL als Karte von Schlüsseln und Werten zurück, wobei die in encoding angegebenen Optionen zur Kodierung der Elemente verwendet werden. Die Reihenfolge der Elemente entspricht derjenigen, die in der Abfragezeichenfolge gefunden oder mit setQueryItems() festgelegt wurde.
Siehe auch setQueryItems() und Encoding.
QChar QUrlQuery::queryPairDelimiter() const
Gibt das Zeichen zurück, das zur Abgrenzung zwischen Schlüssel-Wert-Paaren bei der Rekonstruktion der Abfragezeichenfolge in query() oder beim Parsen in setQuery() verwendet wird.
Siehe auch setQueryDelimiters() und queryValueDelimiter().
QChar QUrlQuery::queryValueDelimiter() const
Gibt das Zeichen zurück, das zur Abgrenzung zwischen Schlüsseln und Werten bei der Rekonstruktion der Abfragezeichenfolge in query() oder beim Parsen in setQuery() verwendet wird.
Siehe auch setQueryDelimiters() und queryPairDelimiter().
void QUrlQuery::removeAllQueryItems(const QString &key)
Entfernt alle Abfrage-String-Paare, deren Schlüssel gleich key ist, aus der URL.
Hinweis: Es wird erwartet, dass der Schlüssel in prozentual kodierter Form vorliegt.
Siehe auch removeQueryItem().
void QUrlQuery::removeQueryItem(const QString &key)
Entfernt das Abfragezeichenfolgenpaar, dessen Schlüssel gleich key ist, aus der URL. Wenn es mehrere Elemente mit einem Schlüssel gleich key gibt, wird das erste Element in der Reihenfolge entfernt, in der sie in der Abfragezeichenfolge vorhanden waren oder mit addQueryItem() hinzugefügt wurden.
Hinweis: Es wird erwartet, dass der Schlüssel in prozentual kodierter Form vorliegt.
Siehe auch removeAllQueryItems().
void QUrlQuery::setQuery(const QString &queryString)
Analysiert die Abfragezeichenfolge in queryString und setzt die internen Elemente auf die dort gefundenen Werte. Wenn mit setQueryDelimiters() Begrenzungszeichen angegeben wurden, verwendet diese Funktion diese anstelle der Standardbegrenzungszeichen zum Parsen der Zeichenkette.
Siehe auch query().
void QUrlQuery::setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter)
Legt die Zeichen fest, die zur Abgrenzung zwischen Schlüsseln und Werten sowie zwischen Schlüssel-Wert-Paaren im Abfrage-String der URL verwendet werden. Das Standard-Wert-Trennzeichen ist '=' und das Standard-Paar-Trennzeichen ist '&'.
valueDelimiter wird verwendet, um Schlüssel von Werten zu trennen, und pairDelimiter wird verwendet, um Schlüssel-Wert-Paare zu trennen. Alle Vorkommen dieser Begrenzungszeichen in der kodierten Darstellung der Schlüssel und Werte der Abfragezeichenfolge werden in Prozent kodiert, wenn sie in query() zurückgegeben werden.
Wenn valueDelimiter auf ',' gesetzt ist und pairDelimiter ';' ist, würde die obige Abfragezeichenfolge stattdessen wie folgt dargestellt werden:
http://www.example.com/cgi-bin/drawgraph.cgi?type,pie;color,green
Hinweis: Nicht standardmäßige Begrenzungszeichen sollten aus dem ausgewählt werden, was RFC 3986 als "Sub-Delimiters" bezeichnet. Diese sind:
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
Die Verwendung von anderen Zeichen wird nicht unterstützt und kann zu unerwartetem Verhalten führen. Diese Methode überprüft nicht, ob Sie ein gültiges Begrenzungszeichen übergeben haben.
Siehe auch queryValueDelimiter() und queryPairDelimiter().
void QUrlQuery::setQueryItems(const QList<std::pair<QString, QString>> &query)
Setzt die Elemente in diesem QUrlQuery Objekt auf query. Die Reihenfolge der Elemente in query bleibt erhalten.
Hinweis: Diese Methode behandelt Leerzeichen (ASCII 0x20) und Pluszeichen ("+") nicht als gleichwertig, wie es bei HTML-Formularen der Fall ist. Wenn Sie benötigen, dass Leerzeichen als Pluszeichen dargestellt werden, verwenden Sie echte Pluszeichen.
Hinweis: Es wird erwartet, dass die Schlüssel und Werte in prozentual kodierter Form vorliegen.
Siehe auch queryItems() und isEmpty().
[noexcept]
void QUrlQuery::swap(QUrlQuery &other)
Tauscht diese URL-Abfrageinstanz mit other aus. Dieser Vorgang ist sehr schnell und schlägt nie fehl.
QString QUrlQuery::toString(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Gibt diese QUrlQuery als QString zurück. encoding kann verwendet werden, um die URL-String-Kodierung des Rückgabewerts anzugeben.
[noexcept]
QUrlQuery &QUrlQuery::operator=(QUrlQuery &&other)
Verschieben - weist other dieser QUrlQuery Instanz zu.
QUrlQuery &QUrlQuery::operator=(const QUrlQuery &other)
Kopiert den Inhalt des Objekts other QUrlQuery , einschließlich der Abfragebegrenzer.
Verwandte Nicht-Mitglieder
[noexcept]
size_t qHash(const QUrlQuery &key, size_t seed = 0)
Gibt den Hash-Wert für key zurück, wobei seed als Startwert für die Berechnung verwendet wird.
[noexcept]
bool operator!=(const QUrlQuery &lhs, const QUrlQuery &rhs)
Gibt true
zurück, wenn das Objekt QUrlQuery rhs nicht gleich lhs ist. Andernfalls wird false
zurückgegeben.
Siehe auch operator==().
[noexcept]
bool operator==(const QUrlQuery &lhs, const QUrlQuery &rhs)
Gibt true
zurück, wenn die Objekte QUrlQuery lhs und rhs den gleichen Inhalt in der gleichen Reihenfolge enthalten und die gleichen Abfragebegrenzer verwenden.
© 2025 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.