QT 序列化/串行化/对象持久化
本文以一个实例讲解Qt的序列化方法:
- Qt版本 4.8.0
Qt序列化简介
Qt采用QDataStream来实现序列化,QT针对不同的实例化对象有不同的要求。这里主要分两类,即:QT中原生的数据类型,例如:QString、QMap、QHash等,这对这种原生数据类型的序列化,我们不需要做其它额外的操作,直接就可以序列化到文件中;还有一类特殊的就是我们自己定义的数据结构或类,这种方式利用QDataStream不能直接实现序列化,必须重载<<和>>操作符,只有重载完之后才可以按我们的要求实现序列化。 ——引用自 [ Monkey_Online]
闲话少说直接上实例,创建一个Qt控制台应用程序:
@Freedom - qsampledata.h
#ifndef QSAMPLEDATA_H
#define QSAMPLEDATA_H
#include <QObject>
class QSampleData : public QObject
{
public:
QSampleData();
virtual ~QSampleData();
QSampleData& operator=(const QSampleData &other);
friend QDataStream& operator>>(QDataStream&, QSampleData&);
friend QDataStream& operator<<(QDataStream&, QSampleData&);
//定义的数据成员
int m_nType;
QString m_strName;
};
#endif
@Freedom - qsampledata.cpp
#include "qsampledata.h"
#include <QDataStream>
QSampleData::QSampleData()
{
m_nType = 0;
m_strName = "";
}
QSampleData::~QSampleData()
{
}
QSampleData& QSampleData::operator =(const QSampleData& other)
{
m_nType = other.m_nType;
m_strName = other.m_strName;
return *this;
}
QDataStream& operator>>(QDataStream& src, QSampleData& data)
{
/*
错误:C2679: 二进制“>>”: 没有找到接受“quint32”类型的右操作数的运算
解决方法:因为没有添加头文件<QDataStream>
*/
src >> data.m_nType ;
src >> data.m_strName;
return src;
}
QDataStream& operator<<(QDataStream& out, QSampleData& data)
{
out << data.m_nType << data.m_strName;
return out;
}
@Freedom - main.cpp
/*Qt Serialization Qt串行化*/
#include <QCoreApplication>
#include <QFile>
#include <QDataStream>
#include <QTextStream>
#include "ckdrawrectangle.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//控制台输出--将标准流封装为QTextStream对象
QTextStream cin(stdin, QIODevice::ReadOnly);
QTextStream cout(stdout, QIODevice::WriteOnly);
QTextStream cerr(stderr, QIODevice::WriteOnly);
//////////////////////////////////////////////////////
QSampleData data;
data.m_nType = 12;
data.m_strName = "vic.MINg";
QFile file("file.dat");
//写入
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << data;
file.close();
//读取
QSampleData readData;
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> readData;
file.close();
//////////////////////////////////////////////////////
cout << data.m_nType<<endl;
cout << data.m_strName;
cout.flush();
return a.exec();
}
更新
-*2015-11-09 第一次更新
http://blog.csdn.net/qq2399431200/article/details/49741715
QT 序列化/串行化/对象持久化的更多相关文章
- c# 处理串行化对象的版本变化
- Java 对象的串行化(Serialization)
1.什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象的这种能记录自己的状态以便将来再生的能力.叫作对象的持续性(pe ...
- JavaEE 对象的串行化(Serialization)
什么情况下需要序列化 a)当你想把的内存中的对象写入到硬盘的时候:b)当你想用套接字在网络上传送对象的时候:c)当你想通过RMI传输对象的时候:再稍微解释一下:a)比如说你的内存不够用了,那计算机就要 ...
- java的串行化
参考博客:Java 对象的串行化(Serialization) 1,什么是串行化 对象的寿命通常随着生成该对象的程序的终止而终止.有时候,可能需要将对象的状态保存下来,在需要时再将对象恢复.我们把对象 ...
- 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】
一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...
- C#基础知识回顾--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上, 在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性, ...
- C#--串行化与反串行化
串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原实例区别开来.只需给类添加Serializable属性,就 ...
- PHP面向对象04_串行化
oop04复习 2014-9-3 10:48:45 要点: --1.克隆对象 --2.__toString( ) --3. __call( ) --4.自动加载类 --5.对象串行化 1.克隆对象以及 ...
- MFC【6】文件I/O和串行化
文件输入和输出(I/O)服务是所有操作系统的主要工作.Microsoft Windows提供了各种API函数用来读.写和操作磁盘文件.MFC将这些桉树和CFile类融合在面对对象的模型里.其中CFil ...
随机推荐
- Diffie-Hellman Key Exchange – A Non-Mathematician’s Explanation
The Complete Diffie-Hellman Key Exchange Diagram The process begins when each side of the communicat ...
- 发布与订阅SQLServer
SQLServer 中发布与订阅 在对数据库做迁移的时候,会有很多方法,用存储过程,job,也可以用开源工具lettle,那么今天这些天变接触到了一种新的方法,就是SqlServer中自带的发布与订阅 ...
- HDU1078 FatMouse and Cheese 【内存搜索】
FatMouse and Cheese Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- TCL S960T刷机包 乐蛙OS5 稳定版 平滑 优化
ROM简介 乐蛙OS5完美的最终稳定版 Ver14.10.17 温馨提示:一定要明确系统双成一个完整的包画刷入前开发版,否则会造成系统异常,请务必备份手机刷机前的信息和数据,刷机过程中,为了避免因数据 ...
- IOC学习1
学习蒋金楠的 ASP.NET Core中的依赖注入(1):控制反转(IoC) 而来,这篇文章经典异常.一定要多读.反复读. 这篇文章举了一个例子,就是所谓的mvc框架,一开始介绍mvc的思想,由一个d ...
- MongoDB Shell 经常使用的操作
数组查询 数组查询 MongoDB 中有子文档的概念,一个文档中能方便的嵌入子文档,这与关系性数据库有着明显的不同.在查询时,语法有一些注意点. 样例代码,假如我们的一个集合(tests)中存在标签键 ...
- 使用openssl工具生成密钥
下载Openssl工具 进入OpenSSL工具,输入以下命令. OpenSSL> genrsa - #生成私钥 OpenSSL> pkcs8 -topk8 -inform PEM -in ...
- C# 用XiliumCefGlue做浏览器,JS和C#相互调用
原文:C# 用XiliumCefGlue做浏览器,JS和C#相互调用 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u013564470/artic ...
- visual studio code 调试 .NET core 1.1.
一 windows端 使用VsCode编写和调试.NET Core项目 1 .新建sln 解决方案 dotnet new sln -o slnname 2. 新建DLL 3.将DLL添加到sln: ...
- JSONObject 解析
前解析json已使用get方法,但是,假设抛出将解决很烦人中断. 今天发现JSONObject还提供了一个更好用的方法opt.看来以后文档还是要更加认真的读的.以下是文档中的原文. A JSONObj ...