您当前的位置: 首页 >  qt

lw只吃亿点.

暂无认证

  • 13浏览

    0关注

    47博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Qt之数据序列化(结构体序列化,类序列化,含源码+注释)

lw只吃亿点. 发布时间:2022-08-18 00:36:27 ,浏览量:13

文章目录
  • 一、数据序列化示例图
  • 二、序列化(个人理解)
  • 三、部分源码讲解
    • 序列化和反序列化流程
    • SerializeType.h头文件讲解
  • 三、源码
    • SerializeType.h
    • CSerializeWindow.h
    • CSerializeWindow.cpp
    • CSerializeWindow.ui
  • 总结

一、数据序列化示例图

下图包含常用类型、复杂容器、结构体、类对象的序列化和反序列化值演示。 在这里插入图片描述 提示:不会使用Qt设计师设计界面的小伙伴点击这里

二、序列化(个人理解)
  1. 序列化是什么? 通俗的说是将数据转换成另一种格式给过程,序列化出来的数据,可通过反序列化得到原本的数据,并且合理的序列化操作,可以包容各种类型的转换。
  2. 序列化的作用;当不同类型的数据需要存储在同一容器或数据表中,可通过序列化将数据转换为统一格式。
  3. Qt中自带有QDataStream类,可实现序列化操作;其中Qt自带的类型(数值型,布尔类型,各种容器类型)可以直接使用“” 两个运算符做序列化和反序列化操作,不过自定义结构体和类不能直接序列化和反序列化,需要我们自己重写操作符函数才能使用(具体查看源码 SerializeType.h)。
三、部分源码讲解 序列化和反序列化流程

其中序列化和反序列化简单的操作流程如下 基本上所有序列化、反序列化流程都是如此,记住这个顺序最好

  1. 序列化(用源码中整形举例)
    // 定义整形值(数据类型可按自己意向更改)
    int val = 666;
    // 创建一个数据流对象,并设置数据容器和打开方式
    QDataStream stream(&m_dataArray, QIODevice::WriteOnly);
    // 通过' val;
SerializeType.h头文件讲解

该头文件中包含学生信息结构体和学生信息类,咋一看两者内容都一样,其实是真的一样;这样是为了表达说结构体和类中序列化、反序列化操作超级像,了解一个相当于了解第二个

三、源码 SerializeType.h
#ifndef SERIALIZETYPE_H
#define SERIALIZETYPE_H

#include 
#include 
#include 

// 创建学生信息结构体
struct studentStr
{
    QString id;     // 学号

    QString name;   // 学生姓名

    int age;        // 学生年龄

    QMap score;    // 学生成绩

    // 重写QDataStream& operator student.score;
        return stream;
    }

    // 重写QDebug operator
        0
        0
       
      
      
       自定义结构体序列化
      
      
       serializeBtnGroup
      
     
    
    
     
      
       
        0
        0
       
      
      
       自定义类对象序列化
      
      
       serializeBtnGroup
      
     
    
    
     
      
       false
      
      
       
        0
        0
       
      
      
       数值类型反序列化
      
      
       deserializeBtnGroup
      
     
    
    
     
      
       false
      
      
       
        0
        0
       
      
      
       复杂容器反序列化
      
      
       deserializeBtnGroup
      
     
    
    
     
      
       false
      
      
       
        0
        0
       
      
      
       自定义结构体反序列化
      
      
       deserializeBtnGroup
      
     
    
    
     
      
       false
      
      
       
        0
        0
       
      
      
       自定义类对象反序列化
      
      
       deserializeBtnGroup
      
     
    
   
  
  
   
    
     0
     0
     596
     23
    
   
  
  
   
    TopToolBarArea
   
   
    false
   
  
  
 
 
 
 
 
  
  
 


总结

总的来说Qt中序列化操作已经相当于傻瓜式操作了,C++中就不存在类似于QDataStream的类或功能,需要自己实现;也许在刚刚了解序列化的时候不知道在什么场景使用,但是一遇到适合的场景,你就会发现,真香!😆 那就休息了,晚安😴…

友情提示——哪里看不懂可私哦,让我们一起互相进步吧 (创作不易,请留下一个免费的赞叭 谢谢 ^o^/)

注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。 注:如有侵权,请联系作者删除

关注
打赏
1654352885
查看更多评论
立即登录/注册

微信扫码登录

0.0754s