このページでは

QBuffer Class

QBuffer クラスは、QByteArray に対してQIODevice インターフェースを提供します。詳細...

ヘッダー: #include <QBuffer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
継承元: QIODevice

注:このクラスのすべての関数は再入可能です。

パブリック関数

QBuffer(QObject *parent = nullptr)
QBuffer(QByteArray *byteArray, QObject *parent = nullptr)
virtual ~QBuffer()
QByteArray &buffer()
const QByteArray &buffer() const
const QByteArray &data() const
void setBuffer(QByteArray *byteArray)
void setData(const QByteArray &data)
void setData(const char *data, qsizetype size)

再実装されたパブリック関数

virtual bool atEnd() const override
virtual bool canReadLine() const override
virtual void close() override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual qint64 pos() const override
virtual bool seek(qint64 pos) override
virtual qint64 size() const override

再実装された保護関数

virtual qint64 readData(char *data, qint64 len) override
virtual qint64 writeData(const char *data, qint64 len) override

詳細な説明

QBuffer を使用すると、QIODevice インターフェースを介してQByteArray にアクセスできます。QByteArray は、標準的なランダムアクセス可能なファイルと同様に扱われます。例:

    QBuffer buffer;
    char ch;

    buffer.open(QBuffer::ReadWrite);
    buffer.write("Qt rocks!");
    buffer.seek(0);
    buffer.getChar(&ch);  // ch == 'Q'
    buffer.getChar(&ch);  // ch == 't'
    buffer.getChar(&ch);  // ch == ' '
    buffer.getChar(&ch);  // ch == 'r'

デフォルトでは、QBufferを作成すると、内部のQByteArray バッファが自動的に作成されます。このバッファには、buffer()を呼び出すことで直接アクセスできます。また、setBuffer()を呼び出すか、または配列をQBufferのコンストラクタに渡すことで、既存のQByteArray と組み合わせてQBufferを使用することもできます。

open() を呼び出してバッファを開きます。その後、write() またはputChar() を呼び出してバッファに書き込み、read()、readLine()、readAll()、またはgetChar() を呼び出してバッファから読み込みます。size() はバッファの現在のサイズを返し、seek() を呼び出すことでバッファ内の任意の位置にシークすることができます。 バッファへのアクセスが終了したら、close()を呼び出します。

以下のコードスニペットは、QDataStream とQBufferを使用してQByteArray にデータを書き込む方法を示しています。

    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);

    QDataStream out(&buffer);
    out << palette;

実質的に、アプリケーションのQPalette をバイト配列に変換しています。QByteArray からデータを読み取る方法は次のとおりです:

    QPalette palette;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::ReadOnly);

    QDataStream in(&buffer);
    in >> palette;

QTextStream また、QDataStream には、QByteArray を受け取り、内部で QBuffer を作成する便利なコンストラクタも用意されています。

QBufferは、バッファに新しいデータが到着するとreadyRead()シグナルを発行します。このシグナルに接続することで、QBufferを使用して、処理前のデータを一時的に保存することができます。また、QBufferは、バッファに新しいデータが書き込まれるたびにbytesWritten()シグナルを発行します。

QFile 、QDataStream 、QTextStream 、およびQByteArrayも参照してください 。

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

[explicit] QBuffer::QBuffer(QObject *parent = nullptr)

指定されたparent を用いて、空のバッファを作成します。setData()を呼び出してバッファにデータを格納するか、書き込みモードでバッファを開き、write()を使用することができます。

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

QBuffer::QBuffer(QByteArray *byteArray, QObject *parent = nullptr)

byteArray が指すQByteArray を内部バッファとして使用し、指定されたparent を持つQBufferを構築します。呼び出し元は、QBufferが破棄されるか、setBuffer()が呼び出されてバッファが変更されるまで、byteArray が有効な状態を維持する責任を負います。QBufferはQByteArray の所有権を取得しません。

書き込み専用モードまたは読み書きモードでバッファを開き、QBufferに何かを書き込んだ場合、byteArray が変更されます。

例:

    QByteArray byteArray("abc");
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);
    buffer.seek(3);
    buffer.write("def", 3);
    buffer.close();
    // byteArray == "abcdef"

関連項目: open()、setBuffer()、およびsetData()も参照してください 。

[virtual noexcept] QBuffer::~QBuffer()

バッファを破棄します。

[override virtual] bool QBuffer::atEnd() const

QIODevice::atEnd() const を再実装します。

QByteArray &QBuffer::buffer()

QBuffer の内部バッファへの参照を返します。これを使用すると、QBuffer の知らないうちに、QByteArray を変更することができます。

setBuffer() およびdata()も参照してください 。

const QByteArray &QBuffer::buffer() const

これは、data() と同じです。

これはオーバーロードされた関数です。

[override virtual] bool QBuffer::canReadLine() const

QIODevice::canReadLine() const を再実装します。

[override virtual] void QBuffer::close()

QIODevice::close() を再実装します。

const QByteArray &QBuffer::data() const

バッファに含まれるデータを返します。

これは、buffer() と同様です。

setData() およびsetBuffer()も参照してください 。

[override virtual] bool QBuffer::open(QIODeviceBase::OpenMode mode)

QIODevice::open (QIODeviceBase::OpenMode mode)を再実装します。

mode のフラグを使用してバッファを開き、成功した場合はtrue を返し、失敗した場合はfalse を返します。

mode のフラグには、QIODeviceBase::ReadOnly 、WriteOnly 、またはReadWrite のいずれかが含まれている必要があります。含まれていない場合、エラーが出力され、メソッドは失敗します。それ以外の場合は成功します。

QFile::open() とは異なり、WriteOnly を使用してQBuffer を開いても、その内容は切り捨てられません。ただし、pos() は0 に設定されます。いずれかの動作を変更するには、Append またはTruncate を使用してください。

[override virtual] qint64 QBuffer::pos() const

QIODevice::pos() const を再実装します。

[override virtual protected] qint64 QBuffer::readData(char *data, qint64 len)

QIODevice::readData(char *data, qint64 maxSize) を再実装します。

[override virtual] bool QBuffer::seek(qint64 pos)

QIODevice::seek (qint64 正)を再実装します。

void QBuffer::setBuffer(QByteArray *byteArray)

QBuffer が、byteArray が指すQByteArray を内部バッファとして使用するようにします。呼び出し元は、QBuffer が破棄されるか、setBuffer()が呼び出されてバッファが変更されるまで、byteArray が有効なままであることを保証する責任があります。QBuffer は、QByteArray の所有権を取得しません。

isOpen()がtrueの場合、何もしません。

書き込み専用モードまたは読み書きモードでバッファを開き、QBuffer に何かを書き込んだ場合、byteArray が変更されます。

例:

    QByteArray byteArray("abc");
    QBuffer buffer;
    buffer.setBuffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);
    buffer.seek(3);
    buffer.write("def", 3);
    buffer.close();
    // byteArray == "abcdef"

byteArray がnullptr の場合、バッファは処理用の独自の内部QByteArray を作成します。このバイト配列は初期状態では空です。

関連項目: buffer()、setData()、およびopen()も参照してください 。

void QBuffer::setData(const QByteArray &data)

内部バッファの内容を `data` に設定します。これは、`data ` を `buffer()` に代入するのと同じです。

isOpen() が真の場合、何もしません。

data() およびsetBuffer()も参照してください 。

void QBuffer::setData(const char *data, qsizetype size)

内部バッファの内容を、data の先頭size バイトに設定します。

注: Qt 6.5以前のバージョンでは 、この関数は長さをint パラメータとして受け取っていたため、サイズが切り捨てられる可能性がありました。

これはオーバーロードされた関数です。

[override virtual] qint64 QBuffer::size() const

QIODevice::size() const を再実装します。

[override virtual protected] qint64 QBuffer::writeData(const char *data, qint64 len)

QIODevice::writeData(const char *data, qint64 maxSize) を再実装します。

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