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服务 在很多时候,我们需要一个定 ...
随机推荐
- 软件质量特征 ISO9126
ISO/IEC9126软件质量模型是一种评价软件质量的通用模型,包括3个层次: 1.质量特性 2.质量子特性 3.度量指标 其中各六个质量特性与二十七个质量子特性的关系如下表: 1.功能性 是指当软件 ...
- 关于Spring管理的类如何创建对象
今天项目中出现了空指针错误,其实一看这个错误我就知道是哪里错了.而且以前也总是说,没有真正的改过啊.今天把改进方法和大家共享.现在我们的项目中,大多数我们的管理方式都是交由Spring去管理,至于好处 ...
- 学习使用master.dbo.spt_values表
如果要生成的临时表中有个连续的数字列,或者连续的日期列,如下所示: 2012-1-1 2012-1-2 2012-1-3 ... ... 可以这样写: declare @begin datetime, ...
- Dapper用法小记
https://github.com/StackExchange/Dapper dapper in 查询 string sql = "SELECT * FROM SomeTable WHER ...
- 手把手教你用git和SourceTree上传项目到github细解(转)
尊重原创:https://blog.csdn.net/qq_32365567/article/details/52859166 一.引言 我想大家现在都很熟悉github了,也能运用github上开源 ...
- 60. Search Insert Position 【easy】
60. Search Insert Position [easy] Given a sorted array and a target value, return the index if the t ...
- python3 读取csv的常用语法
import csv #打开文件,用with打开可以不用去特意关闭file了,python3不支持file()打开文件,只能用open() with open("info.csv" ...
- Could not calculate build plan
问题:根据你提供的镜像地址,下载相应的jar包失败 原因: 1.你提供的镜像地址不稳定,把settings.xml文件中的mirror改成稳定的镜像地址 2.网络不稳定,重新下载,或者切换网络.
- Windows手动安装MySQL
由于MySQL 5.6(也许5.5)以后去掉了Server Instance Configuration Wizard(服务实例配置向导),于是msi版变成了和zip版一样,要手动配置. * 假定安装 ...
- Ubuntu vsftp复制文件到远端时错误,Permission denied
Ubuntu 下复制文件到远端时错误,Permission denied 失败原因如下: (1)vsftp默认配置不允许上传文件 解决办法:修改配置文件 vi /etc/vsftpd.conf. 将& ...