C++在qt开发中如何序列化自定义类
时间: 2024-03-09 16:48:40 浏览: 20
在Qt中,可以使用QDataStream类来序列化自定义类。QDataStream是一个方便的类,可以将数据写入到QIODevice中,包括文件、套接字等等。
下面是一个示例自定义类的头文件:
```cpp
class MyClass {
public:
MyClass();
MyClass(int value1, double value2);
int getValue1() const;
double getValue2() const;
// 添加序列化函数
friend QDataStream& operator<<(QDataStream& out, const MyClass& myClass);
friend QDataStream& operator>>(QDataStream& in, MyClass& myClass);
private:
int m_value1;
double m_value2;
};
```
在这个示例中,MyClass有两个属性,分别是int类型的value1和double类型的value2。同时,我们添加了两个友元函数,用于序列化和反序列化MyClass对象。
接下来是序列化函数的实现:
```cpp
QDataStream& operator<<(QDataStream& out, const MyClass& myClass)
{
out << myClass.getValue1() << myClass.getValue2();
return out;
}
```
这个函数将MyClass对象中的value1和value2属性写入到QDataStream中。
反序列化函数的实现如下:
```cpp
QDataStream& operator>>(QDataStream& in, MyClass& myClass)
{
int value1;
double value2;
in >> value1 >> value2;
myClass = MyClass(value1, value2);
return in;
}
```
这个函数从QDataStream中读取value1和value2属性,并将它们赋值给新的MyClass对象。
最后,我们可以在程序中使用这些函数来序列化和反序列化MyClass对象:
```cpp
MyClass myObject(42, 3.14);
QFile file("myfile.dat");
file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << myObject;
file.close();
MyClass myObject2;
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in >> myObject2;
file.close();
```
这个示例将myObject对象序列化到名为"myfile.dat"的文件中,并且从文件中反序列化一个新的对象myObject2。