QBuffer简单操作

Qt中通过QBuffer类我们可以使用io的方式访问、操作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类的构造函数:

QBuffer(QObject *parent = Q_NULLPTR)
QBuffer(QByteArray *byteArray, QObject *parent = Q_NULLPTR)

默认情况下,当你创建QBuffer的对象时,Qt会自动帮你创建一个内部的QByteArray。并且,你可以通过buffer() 成员函数直接访问到该QByteArray。当然,你也可以让QBuffer使用一个已经存在的QByteArray来作为内部buffer,只需将要使用的QByteArray的对象作为参数传给setBuffer() 或在 QBuffer的构造函数即可。具体声明如下:

void setBuffer(QByteArray *byteArray)


因为QBuffer继承自QIODevice,所以它属于一种io设备,这样,我们在使用时,一般都需要先调用open() 打开该buffer,然后在调用write() 或 putChar() 向buffer中写入数据;或者调用read()、readLine()、readAll()、getChar() 去从buffer中读取数据。同样,我们可以向操作QFile一样,通过size() 函数,返回buffer的当前大小,通过seek() 函数定位到buffer的任意位置。当然,在使用完buffer时,同样要记得调用close() 关闭资源。

        并且,我们可以将QBffer和QDataString结合使用。例如:

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

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


在此,我们将应用程序的调色板转化成一个字节数组存入buffer。既然可以向buffer中存入,当然可以从中再读取出来。代码如下:

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

      QDataStream in(&buffer);
      in >> palette;


另外,QBuffer也支持常用的信号。比如,当有数据可读时,它会发出readyRead()信号;每一次向QBuffer中写入新数据时都会发出bytesWritten()信号。



  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值