このページでは

QHttpPart Class

QHttpPart クラスは、HTTP マルチパート MIME メッセージ内で使用されるボディ・パートを保持します。詳細...

ヘッダー: #include <QHttpPart>
CMake: find_package(Qt6 REQUIRED COMPONENTS Network)
target_link_libraries(mytarget PRIVATE Qt6::Network)
qmake: QT += network

パブリック関数

QHttpPart()
QHttpPart(const QHttpPart &other)
~QHttpPart()
void setBody(const QByteArray &body)
void setBodyDevice(QIODevice *device)
void setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)
void setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)
void swap(QHttpPart &other)
bool operator!=(const QHttpPart &other) const
QHttpPart &operator=(const QHttpPart &other)
bool operator==(const QHttpPart &other) const
(since 6.8) QDebug operator<<(QDebug debug, const QHttpPart &part)

詳細な説明

QHttpPart クラスは、HTTP マルチパート MIME メッセージ(QHttpMultiPart クラスによって表される)内で使用されるボディ・パートを保持します。QHttpPart は、ヘッダー・ブロックとデータ・ブロックで構成され、これらは 2 行連続の改行によって区切られています。1 つのパートの例は次のとおりです。

Content-Type: text/plain
Content-Disposition: form-data; name="text"

here goes the body

ヘッダーの設定には、setHeader() およびsetRawHeader() を使用します。これらは、QNetworkRequest::setHeader() およびQNetworkRequest::setRawHeader() とまったく同じように動作します。

少量のデータを読み込む場合は `setBody()` を使用し、画像などの大きなデータブロックの場合は `setBodyDevice()` を使用します。 後者のメソッドは、データを内部でコピーせず、デバイスから直接読み込むことでメモリを節約します。つまり、QNetworkAccessManager::post() を通じてボディパートを含むマルチパートメッセージがネットワーク上に送信される時点で、デバイスが開かれており、読み取り可能である必要があります。

ボディが小さい QHttpPart を構築するには、次のスニペットを参照してください(これは上記の例に示されているデータを生成します):

QHttpPart textPart;
textPart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
textPart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
textPart.setBody("here goes the body");

デバイス(ファイルなど)から読み込んで QHttpPart を生成するには、次のようにします:

QHttpPart imagePart;
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"image\""));
imagePart.setRawHeader("Content-ID", "my@content.id"); // add any headers you like via setRawHeader()
QFile *file = new QFile("image.jpg");
file->open(QIODevice::ReadOnly);
imagePart.setBodyDevice(file);

QHttpPartは設定時にデバイスの所有権を取得しないため、不要になった際には開発者が自ら破棄する責任があることに注意してください。QHttpMultiPart のドキュメントに記載されているように、マルチパートメッセージをデバイスの親オブジェクトとして設定するのが良い方法かもしれません。

QHttpMultiPart およびQNetworkAccessManagerも参照してください 。

メンバ関数のドキュメント

QHttpPart::QHttpPart()

空の QHttpPart オブジェクトを作成します。

QHttpPart::QHttpPart(const QHttpPart &other)

other のコピーを作成します。

[noexcept] QHttpPart::~QHttpPart()

QHttpPart を削除します。

void QHttpPart::setBody(const QByteArray &body)

このMIMEパートの本文をbody に設定します。setBodyDevice() を通じてデバイスが設定されていない限り、このメソッドで設定された本文が使用されます。大量のデータ(画像など)の場合は、内部でデータをコピーしないsetBodyDevice() を使用してください。

setBodyDevice()も参照してください 。

void QHttpPart::setBodyDevice(QIODevice *device)

読み込む対象のデバイスを `device` に設定します。データ量が多い場合は、setBody() よりもこのメソッドを使用することを推奨します。このメソッドでは、コンテンツがコピーされることなく、デバイスから直接読み込まれるためです。device は開かれており、読み取り可能である必要があります。QHttpPart はdevice の所有権を取得しません。つまり、必要に応じてデバイスを閉じ、破棄する必要があります。device がシーケンシャルである場合(例:ソケット。ただしファイルは除く)、device がfinished()を発行した後にQNetworkAccessManager::post()を呼び出す必要があります。デバイスの設定を解除し、setBody()で設定されたデータを使用するには、「setBodyDevice(0)」を使用してください。

setBody() およびQNetworkAccessManager::post()も参照してください 。

void QHttpPart::setHeader(QNetworkRequest::KnownHeaders header, const QVariant &value)

既知のヘッダー「header 」の値を「value 」に設定し、以前に設定されたヘッダーを上書きします。

QNetworkRequest::KnownHeaders 、setRawHeader()、およびQNetworkRequest::setHeader()も参照してください 。

void QHttpPart::setRawHeader(const QByteArray &headerName, const QByteArray &headerValue)

ヘッダー「headerName 」の値を「headerValue 」に設定します。headerName が既知のヘッダー(QNetworkRequest::KnownHeaders を参照)に対応する場合、生形式のデータが解析され、対応する「加工済み」のヘッダーも設定されます。

注: 同じヘッダーを 2回設定すると 、以前の設定は上書きされます。同じ名前の複数の HTTP ヘッダーの挙動を実現するには、2 つの値をコンマ(",")で区切って連結し、1 つの生のヘッダーとして設定する必要があります。

関連項目: QNetworkRequest::KnownHeaders 、setHeader()、およびQNetworkRequest::setRawHeader()。

[noexcept] void QHttpPart::swap(QHttpPart &other)

このHTTP部分をother と置き換えます。この操作は非常に高速で、失敗することはありません。

bool QHttpPart::operator!=(const QHttpPart &other) const

このオブジェクトが `other` と同じでない場合、true を返します。

operator==()も参照してください 。

QHttpPart &QHttpPart::operator=(const QHttpPart &other)

other のコピーを作成します。

bool QHttpPart::operator==(const QHttpPart &other) const

このオブジェクトがother と同一である場合(つまり、ヘッダーと本文が同じである場合)、true を返します。

operator!=()も参照してください 。

関連する非メンバー

[since 6.8] QDebug operator<<(QDebug debug, const QHttpPart &part)

デバッグ目的で、part をdebug オブジェクトに書き込みます。デバイスが設定されていない場合は、ボディのサイズが表示されます。

この関数は Qt 6.8 で導入されました。

「デバッグ手法」も参照してください 。

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