欢迎使用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
原创粉丝点击