Qt串行化的输入和输出
2016-03-05 18:55
357 查看
参考https://lug.ustc.edu.cn/sites/qtguide/
今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来。串行化(Serialization)是计算机科学中的一个概念,它是指将对象存储到介质(如文件、内存缓冲区等)中或是以二进制方式通过网络传输。之后可以通过反串行化从这些连续的字节(byte)数据重新构建一个与原始对象状态相同的对象,因此在特定情况下也可以说是得到一个副本,但并不是所有情况都这样。
Qt 对这类组合数据的打包方法就叫串行化(Serializing),在 Qt 帮助文档的索引里输入关键词 Serializing 就可以看到关于 Qt 串行化的帮助主题(Serializing
Qt Data Types),除了 C++ 基本数值类型,Qt 还对大量自身的类对象做了串行化。串行化得到一个字节数组 QByteArray ,可以直接用于发送。Qt 串行化数据接收就是发送的逆过程,都是通过 QDataStream 流实现。
下面是一个简单的实现//qtcodec.cpp #include <QDebug> #include <iostream> #include <QByteArray> #include <QDataStream> using namespace std; QByteArray TestSerialOut() { //数据 int nVersion = 1; double dblValue = 125.78999; QString strName = QObject::tr("This an example."); //字节数组保存结果 QByteArray baResult; //串行化的流 QDataStream dsOut(&baResult, QIODevice::ReadWrite); //做输出,构造函数用指针 //设置Qt串行化版本 dsOut.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流 //串行化输出 dsOut<<nVersion<<dblValue<<strName; //显示长度 qDebug()<<baResult.length()<<"\t"<<qstrlen(baResult.data()); //返回对象 return baResult; } void TestSerialIn(const QByteArray& baIn) { //输入流 QDataStream dsIn(baIn); //只读的流,构造函数用常量引用 //设置Qt串行化版本 dsIn.setVersion(QDataStream::Qt_5_0);//使用Qt 5.0 版本流 //变量 int nVersion; double dblValue; QString strName; //串行化输入 dsIn>>nVersion>>dblValue>>strName; //打印 qDebug()<<nVersion; qDebug()<<fixed<<dblValue; qDebug()<<strName; } int main() { QByteArray ba = TestSerialOut(); TestSerialIn(ba); return 0; }
相关文章推荐
- 使用qt写的进制转换器
- QT学习之QString的arg方法
- QT学习之经典控件源码(如此强大)
- Qt stylesheet 源码学习
- 一起看代码来玩玩QT之18 QSqlDatabase (three 将database 通过 QTableView显示到界面上,并且增删改查
- GDKOI2016 Day2 T2 QT与泰剧
- 基于QT+OpenCV图像处理之滤波1
- QT信号和槽用于对象之间的通信
- 认识Qter
- QTableView使用笔记
- Ubuntu下Qt嵌入式开发平台的搭建
- “qt没有被正确的安装,请运行make install”解决方法
- 【GDKOI2016】QT与泰剧Code&Details
- 什么是Qtopia
- VS2010 + QT中调用CUDA
- Qt中各个widget前后位置的设定(转)
- Qt4跟Qtopia2.2到底差在哪??
- 《Qt4.8.0》part 1 Qwt6.1.0图像库安装
- QT5.5.1移植到cubieborad教程
- Qt5之事件学习总结