QBuffer 类

QBuffer 类提供 QIODevice 接口为 QByteArray . 更多...

头: #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 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 允许访问 QByteArray 使用 QIODevice 接口。 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'
					

默认情况下,内部 QByteArray buffer is created for you when you create a QBuffer. You can access this buffer directly by calling buffer (). You can also use QBuffer with an existing QByteArray 通过调用 setBuffer (), or by passing your array to QBuffer's constructor.

调用 open () to open the buffer. Then call write () 或 putChar () to write to the buffer, and read (), readLine (), readAll (),或 getChar () to read from it. size () returns the current size of the buffer, and you can seek to arbitrary positions in the buffer by calling seek (). When you are done with accessing the buffer, call close ().

下列代码片段展示如何把数据写入 QByteArray 使用 QDataStream 和 QBuffer:

    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);
    QDataStream out(&buffer);
    out << QApplication::palette();
					

Effectively, we convert the application's QPalette into a byte array. Here's how to read the data from the QByteArray :

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

QTextStream and QDataStream also provide convenience constructors that take a QByteArray and that create a QBuffer behind the scenes.

QBuffer 发射 readyRead () when new data has arrived in the buffer. By connecting to this signal, you can use QBuffer to store temporary data before processing it. QBuffer also emits bytesWritten () every time new data has been written to the buffer.

另请参阅 QFile , QDataStream , QTextStream ,和 QByteArray .

成员函数文档编制

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

构造空缓冲采用给定 parent 。可以调用 setData () to fill the buffer with data, or you can open it in write mode and use write ().

另请参阅 open ().

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

构造 QBuffer 使用 QByteArray pointed to by byteArray as its internal buffer, and with the given parent . The caller is responsible for ensuring that byteArray remains valid until the QBuffer is destroyed, or until setBuffer () is called to change the buffer. QBuffer doesn't take ownership of the QByteArray .

If you open the buffer in write-only mode or read-write mode and write something into the QBuffer, byteArray will be modified.

范例:

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

Returns a reference to the QBuffer 's internal buffer. You can use it to modify the QByteArray behind the QBuffer 's back.

另请参阅 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 , opening a QBuffer QIODevice::WriteOnly does not truncate it. However, pos () is set to 0. Use QIODevice::Append or QIODevice::Truncate to change either behavior.

[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 使用 QByteArray pointed to by byteArray as its internal buffer. The caller is responsible for ensuring that byteArray remains valid until the QBuffer is destroyed, or until setBuffer() is called to change the buffer. QBuffer doesn't take ownership of the QByteArray .

什么都不做若 isOpen () 为 true。

If you open the buffer in write-only mode or read-write mode and write something into the QBuffer , byteArray will be modified.

范例:

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

byteArray is nullptr , the buffer creates its own internal QByteArray to work on. This byte array is initially empty.

另请参阅 buffer (), setData (),和 open ().

void QBuffer:: setData (const QByteArray & data )

Sets the contents of the internal buffer to be data . This is the same as assigning data to buffer ().

什么都不做若 isOpen () 为 true。

另请参阅 data () 和 setBuffer ().

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

这是重载函数。

Sets the contents of the internal buffer to be the first size bytes of data .

注意: In Qt versions prior to 6.5, this function took the length as an int parameter, potentially truncating sizes.

[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).