文章目录
一、数据序列化示例图
- 一、数据序列化示例图
- 二、序列化(个人理解)
- 三、部分源码讲解
- 序列化和反序列化流程
- SerializeType.h头文件讲解
- 三、源码
- SerializeType.h
- CSerializeWindow.h
- CSerializeWindow.cpp
- CSerializeWindow.ui
- 总结
下图包含常用类型、复杂容器、结构体、类对象的序列化和反序列化值演示。 提示:不会使用Qt设计师设计界面的小伙伴点击这里
- 序列化是什么? 通俗的说是将数据转换成另一种格式给过程,序列化出来的数据,可通过反序列化得到原本的数据,并且合理的序列化操作,可以包容各种类型的转换。
- 序列化的作用;当不同类型的数据需要存储在同一容器或数据表中,可通过序列化将数据转换为统一格式。
- Qt中自带有QDataStream类,可实现序列化操作;其中Qt自带的类型(数值型,布尔类型,各种容器类型)可以直接使用“” 两个运算符做序列化和反序列化操作,不过自定义结构体和类不能直接序列化和反序列化,需要我们自己重写操作符函数才能使用(具体查看源码 SerializeType.h)。
其中序列化和反序列化简单的操作流程如下 基本上所有序列化、反序列化流程都是如此,记住这个顺序最好
- 序列化(用源码中整形举例)
// 定义整形值(数据类型可按自己意向更改)
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^/)
注:文章为作者编程过程中所遇到的问题和总结,内容仅供参考,若有错误欢迎指出。 注:如有侵权,请联系作者删除