Qt持久性对象进行序列化
Mfc和Java中自定义类的对象都可以对其进行持久性保存,Qt持久性对象进行序列化当然也是必不可少的。
不过这个问题还真困扰了我很长时间……
Mfc通过重写虚函数Serialize()、Java则是所属的类必须实现java.io.Serializable或Externalizable接口完成、
Qt是怎么搞定这个事情那,QDataStream类:让我们不禁想起Mfc中的CAchive类、
Java中的java.io.ObjectOutputStream/ObjectInputStream类,分别提供了对象的序列化和反序列化功能。
现在还差什么了,那就是">>"和"<<"的实现了。
哈哈,c++中friend友员派上用场了。假设你的类是QSampleData,实现以下俩个函数就可以了
#ifndef QT_NO_DATASTREAM
friend QDataStream& operator>>(QDataStream&, QSampleData&);
friend QDataStream& operator<<(QDataStream&, QSampleData&);
#endif
当时这里不能忽略的事就是,QSampleData从QObject直接或间接派生,有个不带参数的构造函数,这都是老生常谈了~
一个例子,这也是必须的。
//比较懒,这次的注释就免了...
class QSampleData : public QObject
{
public:
QChunnelData();
virtual ~QChunnelData();
QChunnelData& operator=(const QChunnelData &other);#ifndef QT_NO_DATASTREAM
friend QDataStream& operator>>(QDataStream&, QChunnelData&);
friend QDataStream& operator<<(QDataStream&, QChunnelData&);
#endif
//定义的数据成员
int m_nType;
QString m_strName;
};CSampleData::CSampleData()
{
m_nType = 0;
m_strName = "";
}
CSampleData::~CSampleData()
{
}
CSampleData::operator =(const CSampleData& other)
{
m_nType = other.m_nType;
m_strName = other.m_strName;
return *this;
}
#ifndef QT_NO_DATASTREAM
QDataStream& operator>>(QDataStream& in, CSampleData& data)
{
in >> data.m_nType >> data.m_strName;
return in;
}
QDataStream& operator<<(QDataStream& out, CSampleData& data)
{
out << data.m_nType << data.m_strName;
return out;
}
#endif
这样就QFile、QByteArray...可以关联QDataStream类的对象,进行读写操作了。
QSampleData data;
data.m_nTpye = 12;
data.m_strName = "vic.MINg";
QFile file("file.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << data;
file.close();
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> data;
file.close();
http://cool.worm.blog.163.com/blog/static/64339006200832642918250/
Qt持久性对象进行序列化的更多相关文章
- Qt持久性对象进行序列化(同时比较了MFC与Java的方法)
Mfc和Java中自定义类的对象都可以对其进行持久性保存,Qt持久性对象进行序列化当然也是必不可少的.不过这个问题还真困扰了我很长时间……Mfc通过重写虚函数Serialize().Java则是所属的 ...
- C#对象先序列化然后反序列化时间丢失八小时的问题
把对象JSON序列化,然后反序列化后发现时间少了八小时.因为在东八区,所以序列的时候按照1970-01-01:08:00:00为基数取得差值,而反序列化的时候以1970-01-01:00:00:00作 ...
- Java基础学习总结——Java对象的序列化和反序列化
一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化. 把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存 ...
- IO(四)----对象的序列化
对象的序列化: 将内存中的对象直接写入到文件设备中. 对象的反序列化: 将文件设备中持久化的数据转换为内存对象. 自定义类只要实现了Serializable接口,便可以通过对象输入输出流对对象进行 ...
- Java对象的序列化和反序列化
对象的序列化是指将对象转换为字节序列的过程 对象的反序列化是指将字节序列恢复对象的过程 主要有两种用途: 1.把对象的字节序列永久地保存在硬盘上,通常放在一个文件中. 2.在网络上传输对象的字节序列. ...
- Java对象的序列化
1.概念 序列化:把Java对象转换为字节序列的过程. 反序列化:把字节序列恢复为Java对象的过程. 2.用途 对象的序列化主要有两种用途: 1) 把对象的字节序列永久地保存到硬盘上,通常存放在一个 ...
- java对象的序列化与反序列化使用
1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进 ...
- java中对象的序列化和反序列化
[对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能 ...
- Java基础学习总结--Java对象的序列化和反序列化
一.序列化和反序列化的概念 把对象转换成字节序列的过程称之为对象的序列化 把字节序列恢复为对象的过程称之为对象的反序列化 对象序列化的主要用途: 1)把对象的字节序列永久的保存到硬盘上,通常放在一个文 ...
随机推荐
- log4net按照不同的级别输出到不同文件
配置目标: 1)一个文件记录全部级别的日志: 2)记录某一级别的日志(使用LevelRangeFilter进行级别的过滤). Eg: <log4net> <appende ...
- Unity3D安装多版本
今天我也遇到这个版本更换问题. 老外也遇到了的!哈哈. 错误提示是: Fatal error!type = =kMetaAssetType & pathName.find("lib ...
- Unity Built-in Shader详解三
上次讲的是Transparent Shader Family,他们是绘制半透明的对象使用的,但他们并不能满足我们全部的要求. Transparent Cutout Shader Family是对半透明 ...
- ACM-ICPC国际大学生程序设计竞赛北京赛区(2015)网络赛 B Mission Impossible 6
#1228 : Mission Impossible 6 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 You must have seen the very famou ...
- Open the Lock[HDU1195]
Open the Lock Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tot ...
- BZOJ3906 : Trie
将输入的Trie建成AC自动机,并建出fail树. 那么操作1等价于在给定点的子树的并集里都加1. 操作2等价于查询给定点到根节点路径的并集的权值和. 求出DFS序后,对于操作1,将点按进入时间戳从小 ...
- BZOJ2610 : [Poi2003]Monkeys
考虑离线,将删边操作倒过来变成加边,等价于询问每个点什么时候与1连通 使用并查集维护,每次合并时如果有一边是1所在连通块,就把另一边的所有点的答案更新 #include<cstdio> # ...
- CodeForces 359D (数论+二分+ST算法)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319 题目大意:给定一个序列,要求确定一个子序列,①使得该子序 ...
- cocos2d 遍历CCAarray
cocos2d 遍历CCAarray CCARRAY_FOREACH(children_, node){ }
- Shell 之数组 [转]
本文也即<Learning the bash Shell>3rd Edition的第六章Command-Line Options and Typed varilables之读书笔记之三,但 ...