QtNetwork: add documentation about porting from Qt 5 to Qt 6

Fixes: QTBUG-87098
Change-Id: I91e9d644c6491abaa3bdfe2735aff4a43b545da5
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
This commit is contained in:
Timur Pocheptsov 2020-10-08 16:34:45 +02:00
parent bdc9d272ee
commit 4cfea12cb8

View File

@ -41,6 +41,147 @@
In this topic we summarize those changes in Qt Network, and provide
guidance to handle them.
\section1 ADD STUFF HERE
\section1 API changes
\section2 Ambigous name overloads
Several ambigous overloaded functions are removed. The error() signal
is replaced by errorOccured() in QAbstractSocket and its heirs
(QTcpSocket, QUdpSocket, QLocalSocket, and QSslSocket), and in QNetworkReply.
Code such as:
\code
connect(socket, qOverload<QAbstractSocket::SocketError>(&QAbstractSocket::error),
this, &SomeClass::errorSlot);
\endcode
must therefore be changed to:
\code
connect(socket, &QAbstractSocket::errorOccurred, this, &SomeClass::errorSlot);
\endcode
In QSslSocket, the function that returns a list of errors encountered
during the TLS handshake:
\code
QList<QSslError> sslErrors() const;
\endcode
is renamed to sslHandshakeErrors():
\code
const auto tlsErrors = socket.sslHandshakeErrors();
\endcode
\section2 Bearer management is removed
The classes QNetworkConfiguration and QNetworkConfigurationManager are removed in Qt 6.
Consequently, the following member functions of QNetworkAccessManager are also removed:
\code
void setConfiguration(const QNetworkConfiguration &config);
QNetworkConfiguration configuration() const;
QNetworkConfiguration activeConfiguration() const;
void setNetworkAccessible(NetworkAccessibility accessible);
NetworkAccessibility networkAccessible() const;
void networkSessionConnected();
\endcode
\note Qt 6.0 does not provide replacements for these deleted
classes and functions.
\section2 Deleted enumerators
Several enumerators are removed in QtNetwork. This includes constants
for no longer supported protocols and functionality:
\list
\li QSsl::SslV2;
\li QSsl::SslV3;
\li QSsl::TlsV1SslV3;
\li QNetworkRequest::SpdyAllowedAttribute;
\li QNetworkRequest::SpdyWasUsedAttribute;
\li QNetworkAccessManager::UnknownAccessibility;
\li QNetworkAccessManager::NotAccessible;
\li QNetworkAccessManager::Accessible
\endlist
and enumerators whose names did not follow proper naming conventions:
\list
\li QSsl::TlsV1 (QSsl::TlsV1_0 is the proper name);
\li QNetworkRequest::HTTP2AllowedAttribute (use QNetworkRequest::Http2AllowedAttribute);
\li QNetworkRequest::HTTP2WasUsedAttribute (use QNetworkRequest::Http2WasUsedAttribute).
\endlist
QNetworkRequest::FollowRedirectsAttribute is removed in Qt 6, see the section
about redirects handling below.
\section2 Configuring QSslSocket
The following deprecated functions are removed in Qt 6:
\code
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();
\endcode
Use QSslConfiguration and its member functions to set these parameters, e.g.:
\code
auto sslConfiguration = QSslConfiguration::defaultConfiguration();
sslConfiguration.setCiphers("ECDHE-ECDSA-AES256-SHA384");
// Set other parameters here ...
socket.setSslConfiguration(sslConfiguration);
\endcode
\section1 Changes in QNetworkAccessManager's default behavior
\section2 Redirect policies
In Qt 6, the default redirect policy has changed from manual to
QNetworkRequest::NoLessSafeRedirectPolicy. If your application relies
on manual redirect handling (it connects its slot to the QNetworkReply::redirected
signal), you have to explicitly set this policy when creating a request:
\code
request.setAttribute(QNetworkRequest::RedirectPolicy, QNetworkRequest::ManualRedirectPolicy);
\endcode
\section2 HTTP/2 is enabled by default
In Qt 6 QNetworkAccessManager enables HTTP/2 protocol by default. Depending on the
scheme ("https" or "http"), QNetworkAccessManager will use the Application Layer
Protocol Negotiation TLS extension or "protocol upgrade" HTTP header to negotiate HTTP/2.
If HTTP/2 cannot be negotiated, the access manager will fall back to using HTTP/1.1.
If your application can only use HTTP/1.1, you have to disable HTTP/2 manually
on a new request:
\code
request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);
\endcode
*/