QBuffer

一、描述

QBuffer 继承自 QIODevice。提供了使用 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'

默认情况下,当创建 QBuffer 对象时,会创建一个内部 QByteArray 缓冲区。可以:

  • 调用 buffer() 直接访问此缓冲区。
  • 调用 open() 打开缓冲区。
  • 调用 write() 或 putChar() 写入缓冲区。
  • 调用 read()、readLine()、readAll() 或 getChar() 从缓冲区中读取。
  • 调用 seek() 寻找缓冲区中的任意位置。
  • 访问缓冲区完成后,调用 close()。

使用 QDataStream 和 QBuffer 将数据写入 QByteArray:

     QByteArray byteArray;
     QBuffer buffer(&byteArray);
     buffer.open(QIODevice::WriteOnly);

     QDataStream out(&buffer);
     out << QApplication::palette();

当新数据到达缓冲区时,QBuffer 发出 readyRead()。通过连接到这个信号,可以在处理之前使用 QBuffer 来存储临时数据。每当新数据写入缓冲区时,QBuffer 也会发出 bytesWritten() 。

二、成员函数

1、QBuffer(QByteArray *byteArray, QObject *parent = nullptr)

构造一个 QBuffer,它使用 byteArray 指向的 QByteArray 作为其内部缓冲区,并具有给定的父级。调用者负责确保 byteArray 保持有效,直到 QBuffer 被销毁,或者直到调用 setBuffer() 来更改缓冲区。 QBuffer 不拥有 QByteArray 的所有权。

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

        QBuffer(QObject *parent = nullptr)

使用给定的父级构造一个空缓冲区。可以调用 setData() 用数据填充缓冲区,或者可以在写入模式下打开它并使用 write()。

2、QByteArray & buffer() / const QByteArray & buffer()

返回对 QBuffer 内部缓冲区的引用。

3、const QByteArray & data() 

返回缓冲区中包含的数据。这与 buffer() 相同。

4、void setBuffer(QByteArray *byteArray)

使 QBuffer 使用 byteArray 指向的 QByteArray 作为其内部缓冲区。调用者负责确保 byteArray 保持有效,直到 QBuffer 被销毁,或者直到调用 setBuffer() 来更改缓冲区。QBuffer 不拥有 QByteArray 的所有权。

如果 isOpen() 为true,则什么都不做。

如果 byteArray 为 nullptr,则缓冲区会在内部创建空的 QByteArray 以进行处理。

5、void setData(const QByteArray &data)

将内部缓冲区的内容设置为数据。和 setBuffer() 一致。

如果 isOpen() 为真,则什么都不做。

QBuffer

        void setData(const char *data, int size)

将内部缓冲区的内容设置为数据的第一个size字节。

上一篇:c# – System.IO.StreamWriter不会为整个for循环写入


下一篇:qml 串口通信 数据格式转换记录