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() 为真,则什么都不做。

        void setData(const char *data, int size)

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>