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は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 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 を変更することができます。
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)
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() が真の場合は何もしない。
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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。