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は、Input/OutputおよびNetworkingに属しています。
注意:このクラスの関数はすべてリエントラントです。
パブリック関数
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 << 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 を変更することができる。
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() と同じである。
[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 pos).
void QBuffer::setBuffer(QByteArray *byteArray)
QBuffer に、byteArray が指すQByteArray を内部バッファとして使用させる。呼び出し元は、QBuffer が破棄されるまで、あるいはバッファを変更するために setBuffer() が呼び出されるまで、byteArray が有効であることを保証する責任がある。QBuffer はQByteArray の所有権を持たない。
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"
byteArray がnullptr
の場合、バッファは内部でQByteArray を作成します。このバイト配列は最初は空である。
buffer()、setData()、open()も参照のこと 。
void QBuffer::setData(const QByteArray &data)
内部バッファの内容をdata に設定する。これはdata をbuffer() に代入するのと同じである。
isOpen() が真の場合は何もしない。
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).
© 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.