QBuffer简单操作

来源:互联网 发布:淘宝发货时间投诉 编辑:程序博客网 时间:2024/05/22 06:30

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 0
原创粉丝点击