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 属于输入/输出和网络。
注意:该类中的所有函数都是可重入的。
公共函数
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 的构造函数,将 QBuffer 与现有的QByteArray 一起使用。
调用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)
构造一个 QBuffer,使用byteArray 指向的QByteArray 作为内部缓冲区,并使用给定的parent 。调用者有责任确保byteArray 在 QBuffer 被销毁或调用setBuffer() 更改缓冲区之前一直有效。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 作为内部缓冲区。调用者有责任确保byteArray 一直有效,直到QBuffer 被销毁,或调用 setBuffer() 更改缓冲区。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() 为 true,则不执行任何操作。
void QBuffer::setData(const char *data, qsizetype size)
这是一个重载函数。
将内部缓冲区的内容设置为data 的前size 字节。
注意: 在 6.5 之前的 Qt 版本中,此函数将长度作为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.