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
版权声明:本文为博主原创文章,转载请附上博文链接!

QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)的更多相关文章

  1. ftp服务器搭建及简单操作

    ftp服务器搭建及简单操作 1. 添加一个新用户,使用名useradd testftp,然后使用passwd testftp对新添加的用户设置密码(这里设置为“1234567”). 2. 安装ftp服 ...

  2. 自学Python5.3-类和对象的简单操作

    自学Python之路 自学Python5.3-类和对象的简单操作 1. 定义一个类 定义一个类的格式如下: class 类名: 方法列表 举例1 : class Cat: #定义一个Cat类 #属性 ...

  3. Flume的介绍和简单操作

    Flume是什么 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数 ...

  4. 【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。

    C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117109人阅读 ...

  5. VIM - 标准模式下简单操作

    1. 概述 标准模式下, 简单操作 移动 删除 复制粘贴 收益 熟练后, 编辑文本基本不需要鼠标操作了 思路 只讲最基本的, 避免初学时的混淆 把基本操作归类了, 方便理解 2. 准备 一篇篇幅较长的 ...

  6. Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作

    Visual Studio 2017中使用正则修改部分内容   最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...

  7. Nginx简单操作

    Nginx简单操作 平滑重启:读取配置文件,正确后启动新nginx,关闭旧服务进程 # kill HUP nginx.pid # /usr/sbin/nginx -c /etc/nginx/nginx ...

  8. matlab矩阵的表示和简单操作

    原地址:http://www.cnblogs.com/Ran_Ran/archive/2010/12/11/1903070.html 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必 ...

  9. 如何创建一个标准的Windows服务

    出处:http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html 如何创建一个标准的Windows服务 在很多时候,我们需要一个定 ...

随机推荐

  1. codeforces #550D Regular Bridge 构造

    题目大意:给定k(1≤k≤100),要求构造一张简单无向连通图,使得存在一个桥,且每一个点的度数都为k k为偶数时无解 证明: 将这个图缩边双,能够得到一棵树 那么一定存在一个叶节点,仅仅连接一条桥边 ...

  2. iOS开发-重写description方法,自定义控制台(log)信息

    description是所有类都有的一个方法. 我们重写这个方法,可以自定义实例输出的信息. 比如我们创建一个Person类: 在.h文件中添加两个属性: #import <Foundation ...

  3. android-数据库SQLite相关

    android平台下的SQLite数据库是一种轻量级数据库,支持标准的SQL语句. 本文将介绍 android数据库的创建 利用sql语句对数据库增删改查 系统api数据库增删改查 数据库的事务 1, ...

  4. 04-1下载Win系统(装机助理)

    下载Win系统(装机助理): http://www.zhuangjizhuli.com/upan.html http://www.krlxx.com/64win7.html 选择你需要安装的系统: 以 ...

  5. javascript-ajax之json学习笔记

    ajax什么时候解析json的时候用eval 1.如果是原生js实现的ajax,就需要eval转json对象 如果使用了类似jquery的js插件,里面有些方法是不需要转的,因为jquery已经帮你处 ...

  6. nginx 根据域名反向代理

    #nginx 反向代理域名,会根据启动时候解析出来的ip,加载到内存中,后面不会改变可以绑定hosts或者指定resolve服务器来固定ip #注意proxy最后的斜杠,如果不加会将请求过来的目录带到 ...

  7. Android基础新手教程——4.4.1 ContentProvider初探

    Android基础新手教程--4.4.1 ContentProvider初探 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android四大组件中的最后一个--Con ...

  8. nginx 模块简介

    nginx模块一般分为5类:核心模块.标准http模块.可选http模块.邮件服务模块.第三方模块. 其中核心模块和标准http模块在快速编译之后就包含在了nginx中. 主要看一下核心模块.标准ht ...

  9. [c#.Net]正则表达式 记录

    @符号c#字符串前使用@符号,“@”表示,跟在它后面的字符串是个“逐字字符串”. string x="D:\\My Huang\\My Doc"; string y = @&quo ...

  10. Unity3d中模型导入轴向不对的解决方法

    在unity3d中导入模型,经常会遇到模型的轴向与unity中默认的轴向不符合的情况. 网上有很多解决办法都是说在3dmax中导出模型时修改模型的轴向,那么我接下来讲的就是如何在unity里面修改模型 ...