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
版权声明:本文为博主原创文章,转载请附上博文链接!
QBuffer简单操作(被看做一个标准的可随机访问的文件,支持信号)的更多相关文章
- ftp服务器搭建及简单操作
ftp服务器搭建及简单操作 1. 添加一个新用户,使用名useradd testftp,然后使用passwd testftp对新添加的用户设置密码(这里设置为“1234567”). 2. 安装ftp服 ...
- 自学Python5.3-类和对象的简单操作
自学Python之路 自学Python5.3-类和对象的简单操作 1. 定义一个类 定义一个类的格式如下: class 类名: 方法列表 举例1 : class Cat: #定义一个Cat类 #属性 ...
- Flume的介绍和简单操作
Flume是什么 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数 ...
- 【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117109人阅读 ...
- VIM - 标准模式下简单操作
1. 概述 标准模式下, 简单操作 移动 删除 复制粘贴 收益 熟练后, 编辑文本基本不需要鼠标操作了 思路 只讲最基本的, 避免初学时的混淆 把基本操作归类了, 方便理解 2. 准备 一篇篇幅较长的 ...
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
Visual Studio 2017中使用正则修改部分内容 最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...
- Nginx简单操作
Nginx简单操作 平滑重启:读取配置文件,正确后启动新nginx,关闭旧服务进程 # kill HUP nginx.pid # /usr/sbin/nginx -c /etc/nginx/nginx ...
- matlab矩阵的表示和简单操作
原地址:http://www.cnblogs.com/Ran_Ran/archive/2010/12/11/1903070.html 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必 ...
- 如何创建一个标准的Windows服务
出处:http://www.cnblogs.com/wuhuacong/archive/2009/02/11/1381428.html 如何创建一个标准的Windows服务 在很多时候,我们需要一个定 ...
随机推荐
- wamp通过phpMyAdmin修改登录密码
初始安装wamp后,默认mysql是没有密码的,这个时候如果想要修改密码,可以按照以下步骤进行: 第一.打开phpMyAdmin,看到界面如图所示: 第二.通过导航找到“用户”,再找到“编辑权限”进行 ...
- 递归 recursive
递归函数是在一个函数通过名字调用自身的情况下构成的. function factorail(num) { if(num <= 1) { return 1; } else{ return num ...
- 解决window10系统电脑插入耳机之后没有声音的问题
其实办法也是从百度百科上查到的 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 可能是因为自己某个不小心的操作更改了设置 1. 首先要点开设置按钮,在搜索栏输入控制面板 (当然知道控制面板在哪里的小伙伴就不用 ...
- MVC 的八个扩展点
Asp.net MVC中常用的八个扩展点并举例说明. 一.ActionResult ActionResult代表了每个Action的返回结果.asp.net mvc提供了众多内置的ActionResu ...
- Codeforces Round #240 (Div. 1)B---Mashmokh and ACM(水dp)
Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university ...
- Atitit.wrmi web rmi框架新特性
Atitit.wrmi web rmi框架新特性 1. V1d 新特性1 1.1. 增加了精确参数1 1.2. 增加了req参数,命名参数模式..1 1.3. 增加了globale 传递隐含参数r ...
- Blocking & Nonblocking module
/*************************************************** / Blocking and Nonblocking circuit and Simulat ...
- javascript (function() { /* code */ })() 自执行函数
(function(){ function a(){ alert("a"); } })(); 自执行匿名函数: 常见格式:(function() { /* code */ })() ...
- CentOS sendmail安装及邮件域名配置
http://www.centoscn.com/CentosServer/lighttpd/2013/0726/650.html sendmail是Linux下优秀的邮件系统.在不做任何设定的情况下, ...
- python语言 buffer类型数据的使用 'ascii' codec can't decode byte 0xe5 问题的解决
在python中我们使用buffer类型时可以将其转换为str类型. 如果obejct的类型为<type 'buffer'> ,可以使用str(object)将其转换为字符串类型. 在转换 ...