変更点Qt Network

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

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

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

API の変更点

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

いくつかのあいまいなオーバーロード関数が削除されました。error() シグナルは、QAbstractSocket とその後継 (QTcpSocket,QUdpSocket,QLocalSocket,QSslSocket)、および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();

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

QNetworkInformation::reachabilityQt 6.1 で導入された QNetworkAccessManager::networkAccessible() は、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 を渡すことで無効にできる)特定のサイズより大きいファイルにのみ適用されます。

© 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.