Qt ネットワークの変更点

Qt 6 は、フレームワークをより効率的で使いやすくするための意識的な努力の結果です。

私たちは各リリースにおいて、すべての公開APIのバイナリとソースの互換性を維持しようと努めています。しかし、Qt をより良いフレームワークにするために避けられない変更もあります。

このトピックでは、Qt Network におけるそれらの変更点を要約し、それらを扱うためのガイダンスを提供します。

API の変更

あいまいな名前のオーバーロード

いくつかのあいまいなオーバーロード関数が削除されました。error() シグナルは、QAbstractSocket とその後継(QTcpSocketQUdpSocketQLocalSocketQSslSocket )、QNetworkReply の errorOccurred() に置き換えられました。のようなコードがある:

connect(socket, qOverload<QAbstractSocket::SocketError>(&QAbstractSocket::error),
        this, &SomeClass::errorSlot);

したがって、次のように変更する必要がある:

connect(socket, &QAbstractSocket::errorOccurred, this, &SomeClass::errorSlot);

QSslSocket では、TLSハンドシェイク中に発生したエラーのリストを返す関数である:

QList<QSslError> sslErrors() const;

は sslHandshakeErrors() に改名される:

const auto tlsErrors = socket.sslHandshakeErrors();

ベアラ管理は削除された。

Qt 6 では、QNetworkConfiguration と QNetworkConfigurationManager クラスが削除されました。その結果、QNetworkAccessManager の以下のメンバ関数も削除されました:

void setConfiguration(const QNetworkConfiguration &config);
QNetworkConfiguration configuration() const;
QNetworkConfiguration activeConfiguration() const;
void setNetworkAccessible(NetworkAccessibility accessible);
NetworkAccessibility networkAccessible() const;
void networkSessionConnected();

QNetworkInformation当初 Qt 6.1 で導入された QNetworkConfiguration は、ベアラ管理 API の一部を置き換えることを目的としています。これは、オペレーティング・システムから通知されるネットワークの変更を購読する統一された API を提供することで機能します。

QNetworkInformation::reachabilityQt 6.1 で導入された () は、QNetworkAccessManager::networkAccessible() 関数を置き換えるもので、ネットワークの到達可能性に関するより詳細な情報を追加します。詳細はドキュメントを参照してください。

Qt 6.2QNetworkInformation では、キャプティブポータルを検出する機能が追加されました。

Qt 6.3 ではQNetworkInformationQNetworkInformation::transportMedium() とQNetworkInformation::isMetered() が追加されました。

削除された列挙子

QtNetwork で、いくつかの列挙子が削除されました。これには、サポートされなくなったプロトコルや機能の定数が含まれます:

  • QSsl::SslV2;
  • QSsl::SslV3;
  • QSsl::TlsV1SslV3;
  • QNetworkRequest::SpdyAllowedAttribute;
  • QNetworkRequest::SpdyWasUsedAttribute;
  • QNetworkAccessManager::UnknownAccessibility;
  • QNetworkAccessManager::NotAccessible;
  • QNetworkAccessManager::Accessible

および名前が適切な命名規則に従わない列挙子:

QNetworkRequest::FollowRedirectsAttribute は Qt 6 で削除されました。以下のリダイレクト処理のセクションを参照してください。

QSslSocket の設定

以下の非推奨関数は Qt 6 で削除されました:

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();

これらのパラメータを設定するには、QSslConfiguration とそのメンバ関数を使用してください:

auto sslConfiguration = QSslConfiguration::defaultConfiguration();
sslConfiguration.setCiphers("ECDHE-ECDSA-AES256-SHA384");
// Set other parameters here ...
socket.setSslConfiguration(sslConfiguration);

QNetworkAccessManager のデフォルト動作の変更点

リダイレクトポリシー

Qt 6 では、デフォルトのリダイレクトポリシーが手動からQNetworkRequest::NoLessSafeRedirectPolicy に変更されました。もしアプリケーションが手動のリダイレクト処理に依存している(スロットをQNetworkReply::redirected シグナルに接続している)場合、リクエストを作成するときに明示的にこのポリシーを設定する必要があります:

request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::ManualRedirectPolicy);

HTTP/2 はデフォルトで有効です

Qt 6QNetworkAccessManager では、デフォルトで HTTP/2 プロトコルが有効になっています。スキーム("https "または "http")に応じて、QNetworkAccessManager は HTTP/2 をネゴシエートするために Application Layer Protocol Negotiation TLS extension または "protocol upgrade" HTTP ヘッダを使用します。HTTP/2をネゴシエートできない場合、アクセスマネージャーはHTTP/1.1の使用にフォールバックします。アプリケーションが HTTP/1.1 しか使えない場合は、新しいリクエストで HTTP/2 を手動で無効にする必要があります:

request.setAttribute(QNetworkRequest::Http2AllowedAttribute, false);

QNetworkAccessManager がアーカイブボムをガードするようになりました。

Qt 6.2QNetworkAccessManager から、圧縮されたファイルを解凍すると、圧縮されたファイルよりはるかに大きなファイルになるのを防ぐために、解凍率があるしきい値を超えると応答をエラーにするようになりました。このチェックは、QNetworkRequest::setDecompressedSafetyCheckThreshold() を呼び出すことで、カスタマイズできる(または -1 を渡すことで無効にできる)特定のサイズより大きいファイルにのみ適用されます。

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。