首页 > 编程语言 > 详细

c++/qt的数据序列化和反序列化

时间:2019-04-19 22:13:31      阅读:316      评论:0      收藏:0      [点我收藏+]

序列化以及反序列化的实现


 

struct Body

{
    double weight;
    double height;
};
//结构体
struct People
{
    int age;
    Body dBody;//结构体
    vector<QString> vecfamily;//vector
    //序列化
    friend QDataStream &operator<<(QDataStream& input,const People &iteam)
    {
        //vector 数据类型需要用vector<People>::fromStdVector 转一下
        //如果是QList则不需要直接插入
        QVector<QString> strvecfamily = QVector<QString>::fromStdVector(iteam.vecfamily);
        input << iteam.age << iteam.dBody.height << iteam.dBody.weight\
              << strvecfamily;
        return input;
    }
    //反序列化
    friend QDataStream &operator>>(QDataStream& output,People& iteam)
    {
        QVector<QString> vecfamily;
        output >> iteam.age >>iteam.dBody.height >> iteam.dBody.weight >> vecfamily;
        iteam.vecfamily = vecfamily.toStdVector();
        return output;
    }
};

数据的使用
People p1;
    p1.age = 12;
    p1.dBody.height = 150.8;
    p1.dBody.weight = 50;
    p1.vecfamily.push_back("sister");
    p1.vecfamily.push_back("mother");
    p1.vecfamily.push_back("father");

    QFile file("./stream.bat");
    if(!file.open(QIODevice::WriteOnly))
    {
        return ;
    }
    QDataStream input(&file);
    input << p1;
    file.close();

    People p2;
    QFile file1("./stream.bat");//.bat文件为二进制文件
    if(!file1.open(QIODevice::ReadOnly))
    {
        return ;
    }
    QDataStream output(&file1);
    output << p2;
    file.close();

output >> p2;

    qDebug()<<p2.age<<p2.dBody.height<<p2.dBody.weight\
           <<p2.vecfamily;//结果12 150.8 50 std::vector("sister", "mother", "father")

 

c++/qt的数据序列化和反序列化

原文:https://www.cnblogs.com/that-boy-done/p/10739097.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!