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 ...
随机推荐
- 关于用什么作为dll版本号的思考
作者:朱金灿 来源:http://blog.csdn.net/clever101 一个软件模块的版本如何维护呢?毫无疑问,它需要一个版本号.通过比对版本号就知道哪个高版本,哪个是低版本了.软件模块以d ...
- MVVM初步搭建应用
MVVM模式:利用 prism Microsoft.Practices.Prism.dllWPF Interaction框架简介 添加Interactions库的引用.主要添加如下两个DLL: Mic ...
- 【b404】虫食算
Time Limit: 1 second Memory Limit: 50 MB [问题描述] 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单 ...
- Android实现手机拍照功能
一.布局文件main.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmln ...
- 用决策树模型求解回归问题(regression tree)
How do decision trees for regression work? 决策树模型既可以求解分类问题(对应的就是 classification tree),也即对应的目标值是类别型数据, ...
- Druid 专题
数据源配置: #datasource #Introductions: https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7 ...
- 类的XML序列化(XML Serialization)
最近做的一个ASP.NET项目中,需要在一个页面中维护一个类的数组,在每次页面刷新的使其前一次的状态保持不变.开始错误的使用了static,导致了致命的共享错误.后来突然想起C#类能够使用XML序列化 ...
- class helper 可能是从 Delphi 2007 增加的新语法
class helper 可能是从 Delphi 2007 增加的新语法, 因为感觉不太实用, 直到今天才测试了一下. 试过之后才知道: 挺有意思的! 基本功能就是修改已存在的类. Txxx = cl ...
- Spring 4 MVC+Apache Tiles 3 Example
In this post we will integrate Apache Tiles 3 with Spring MVC 4, using annotation-based configuratio ...
- vue项目 下载表格 java后台返回的是信息流表格如何下载解决乱码
主要是在请求参数后面加上{responseType: 'blob'}或者arrayBuffer this.$http.get(this.api.export, { params: this.info, ...