欢迎使用CSDN-markdown编辑器
来源:互联网 发布:不能复制筛选后的数据 编辑:程序博客网 时间:2024/05/17 04:25
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 第一次更新
1 0
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 禁止ViewPager向右滑动
- 国外PHP学习网站书籍资料汇总
- [前端] 重复字符串函数
- centos crontab 定时执行任务使用大全
- jsp中设置http的P3P头实现跨域设置cookie
- 欢迎使用CSDN-markdown编辑器
- win7专业版64位系统安装java
- 欢迎使用CSDN-markdown编辑器
- Android自定义控件之仿汽车之家下拉刷新
- eclipse启动运行优化
- jsp回车空格时触发事件
- Android应用程序打包时,出现错误:"XXX" is not translated in "af" (Afrikaans), "am" (Amharic), "ar" (Arabic).....
- Oracle 阻塞会话的查看与解除
- 16进制数的定义以及输入输出