zoukankan      html  css  js  c++  java
  • 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()信号。
    ---------------------
    作者:求道玉
    来源:CSDN
    原文:https://blog.csdn.net/Amnes1a/article/details/62887762
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 400 第N个数字
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 399 除法求值
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    Java实现 LeetCode 398 随机数索引
    linux中的cd ..和cd -命令有什么区别?
    GCC使用
  • 原文地址:https://www.cnblogs.com/findumars/p/10247190.html
Copyright © 2011-2022 走看看