Die Änderungen an Qt Network
Qt 6 sind das Ergebnis des bewussten Bemühens, das Framework effizienter und benutzerfreundlicher zu gestalten.
Wir versuchen, die Binär- und Quellcodekompatibilität für alle öffentlichen APIs in jeder Version zu erhalten. Einige Änderungen waren jedoch unvermeidlich, um Qt zu einem besseren Framework zu machen.
In diesem Thema fassen wir diese Änderungen unter Qt Network zusammen und geben eine Anleitung zu deren Handhabung.
API-Änderungen
Mehrdeutige Namensüberladungen
Mehrere zweideutige überladene Funktionen wurden entfernt. Das error()-Signal wird durch errorOccurred() in QAbstractSocket und seinen Erben (QTcpSocket, QUdpSocket, QLocalSocket und QSslSocket) sowie in QNetworkReply ersetzt. Code wie z.B.:
connect(socket, qOverload<QAbstractSocket::SocketError>(&QAbstractSocket::error), this, &SomeClass::errorSlot);
muss daher geändert werden in:
connect(socket, &QAbstractSocket::errorOccurred, this, &SomeClass::errorSlot);
In QSslSocket wird die Funktion, die eine Liste der während des TLS-Handshake aufgetretenen Fehler zurückgibt:
wird umbenannt in sslHandshakeErrors():
const auto tlsErrors = socket.sslHandshakeErrors();
Die Bearer-Verwaltung wurde entfernt.
Die Klassen QNetworkConfiguration und QNetworkConfigurationManager werden in Qt 6 entfernt. Folglich werden auch die folgenden Memberfunktionen von QNetworkAccessManager entfernt:
void setConfiguration(const QNetworkConfiguration &config); QNetworkConfiguration configuration() const; QNetworkConfiguration activeConfiguration() const; void setNetworkAccessible(NetworkAccessibility accessible); NetworkAccessibility networkAccessible() const; void networkSessionConnected();
QNetworkInformationDie Klasse QNetworkConfigurationManager, die ursprünglich in Qt 6.1 eingeführt wurde, zielt darauf ab, einige Aspekte der Bearer-Management-API zu ersetzen. Sie funktioniert, indem sie eine einheitliche API bereitstellt, die Änderungen im Netzwerk, die vom Betriebssystem gemeldet werden, abonniert.
QNetworkInformation::reachabilityDie Funktion QNetworkAccessManager::networkAccessible(), die in Qt 6.1 eingeführt wurde, ersetzt die Funktion QNetworkAccessManager::networkAccessible() und fügt gleichzeitig detailliertere Informationen über die Erreichbarkeit des Netzwerks hinzu. Siehe die Dokumentation für weitere Details.
In Qt 6.2 QNetworkInformation wurde die Fähigkeit hinzugefügt, unverschlüsselte Portale zu erkennen.
In Qt 6.3 erhielt QNetworkInformation die Funktionen QNetworkInformation::transportMedium() und QNetworkInformation::isMetered().
Gelöschte Aufzählungszeichen
Mehrere Aufzählungszeichen wurden in QtNetwork entfernt. Dazu gehören Konstanten für nicht mehr unterstützte Protokolle und Funktionen:
- QSsl::SslV2;
- QSsl::SslV3;
- QSsl::TlsV1SslV3;
- QNetworkRequest::SpdyAllowedAttribute;
- QNetworkRequest::SpdyWasUsedAttribute;
- QNetworkAccessManager::UnknownAccessibility;
- QNetworkAccessManager::NotAccessible;
- QNetworkAccessManager::Accessible
und Enumeratoren, deren Namen nicht den korrekten Namenskonventionen folgten:
- QSsl::TlsV1 (QSsl::TlsV1_0 ist der richtige Name);
- QNetworkRequest::HTTP2AllowedAttribute ( QNetworkRequest::Http2AllowedAttribute verwenden);
- QNetworkRequest::HTTP2WasUsedAttribute (verwenden Sie QNetworkRequest::Http2WasUsedAttribute).
QNetworkRequest::FollowRedirectsAttribute wurde in Qt 6 entfernt, siehe den Abschnitt über die Behandlung von Weiterleitungen weiter unten.
QSslSocket konfigurieren
Die folgenden veralteten Funktionen wurden in Qt 6 entfernt:
QList<QSslCipher> ciphers() const; void setCiphers(const QList<QSslCipher> &ciphers); void setCiphers(const QString &ciphers); static void setDefaultCiphers(const QList<QSslCipher> &ciphers); static QList<QSslCipher> defaultCiphers(); static QList<QSslCipher> supportedCiphers(); QList<QSslCipher> ciphers() const; void setCiphers(const QList<QSslCipher> &ciphers); void setCiphers(const QString &ciphers); static void setDefaultCiphers(const QList<QSslCipher> &ciphers); static QList<QSslCipher> defaultCiphers(); static QList<QSslCipher> supportedCiphers(); bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString); void addCaCertificate(const QSslCertificate &certificate); void addCaCertificates(const QList<QSslCertificate> &certificates); void setCaCertificates(const QList<QSslCertificate> &certificates); QList<QSslCertificate> caCertificates() const; static bool addDefaultCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem, QRegExp::PatternSyntax syntax = QRegExp::FixedString); static void addDefaultCaCertificate(const QSslCertificate &certificate); static void addDefaultCaCertificates(const QList<QSslCertificate> &certificates); static void setDefaultCaCertificates(const QList<QSslCertificate> &certificates); static QList<QSslCertificate> defaultCaCertificates(); static QList<QSslCertificate> systemCaCertificates();
Verwenden Sie QSslConfiguration und seine Mitgliedsfunktionen, um diese Parameter zu setzen, z.B.:
auto sslConfiguration = QSslConfiguration::defaultConfiguration(); sslConfiguration.setCiphers("ECDHE-ECDSA-AES256-SHA384"); // Set other parameters here ... socket.setSslConfiguration(sslConfiguration);
Änderungen im Standardverhalten von QNetworkAccessManager
Redirect-Richtlinien
In Qt 6 wurde die standardmäßige Umleitungsrichtlinie von manuell auf QNetworkRequest::NoLessSafeRedirectPolicy geändert. Wenn Ihre Anwendung auf manuelle Umleitungsbehandlung setzt (sie verbindet ihren Slot mit dem Signal QNetworkReply::redirected ), müssen Sie diese Richtlinie bei der Erstellung einer Anfrage explizit festlegen:
request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);
HTTP/2 ist standardmäßig aktiviert
In Qt 6 QNetworkAccessManager ist das HTTP/2-Protokoll standardmäßig aktiviert. Je nach Schema ("https" oder "http") verwendet QNetworkAccessManager die TLS-Erweiterung Application Layer Protocol Negotiation oder den HTTP-Header "protocol upgrade", um HTTP/2 auszuhandeln. Wenn HTTP/2 nicht ausgehandelt werden kann, greift der Zugangsmanager auf HTTP/1.1 zurück. Wenn Ihre Anwendung nur HTTP/1.1 verwenden kann, müssen Sie HTTP/2 bei einer neuen Anfrage manuell deaktivieren:
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);
QNetworkAccessManager schützt jetzt vor Archivbomben
Beginnend mit Qt 6.2 schützt QNetworkAccessManager vor komprimierten Dateien, die zu Dateien dekomprimiert werden, die viel größer als ihre komprimierte Form sind, indem die Antwort fehlschlägt, wenn das Dekomprimierungsverhältnis einen bestimmten Schwellenwert überschreitet. Diese Prüfung wird nur auf Dateien angewendet, die größer als eine bestimmte Größe sind, die durch den Aufruf von QNetworkRequest::setDecompressedSafetyCheckThreshold() angepasst (oder durch Übergabe von -1 deaktiviert) werden kann.
© 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.