QBuffer Class

QIODevice QBufferクラスは、QByteArray... More..

Header: #include <QBuffer>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Inherits: 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 flags) 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 << QApplication::palette();

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

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

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

QTextStream と は、 を受け取り、裏で QBuffer を作成する便利なコンストラクタも提供しています。QDataStream QByteArray

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 flags)

再インプリメント:QIODevice::open(QIODeviceBase::OpenMode mode) を再インプリメントします。

QFile とは異なり、QBuffer QIODevice::WriteOnly をオープンしても切り捨ては行われません。posQIODevice::Append または QIODevice::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)

再実装: (char *data, qint64 maxSize):QIODevice::seek(qint64 pos)。

void QBuffer::setBuffer(QByteArray *byteArray)

QBufferbyteArray が指すQByteArray を内部バッファとして使わせる。呼び出し元は、QBuffer が破棄されるか、バッファを変更するために setBuffer() が呼び出されるまで、byteArray が有効であることを保証する責任がある。QBufferQByteArray の所有権を持たない。

isOpen() が真の場合は何もしない。

書き込み専用モードまたは読み書きモードでバッファを開き、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"

byteArraynullptr の場合、バッファは内部でQByteArray を作成します。このバイト配列は、最初は空である。

buffer()、setData()、open()も参照

void QBuffer::setData(const QByteArray &data)

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

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)。

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