c++ qt如何进行对象序列化与反序列化

在C++ Qt中,可以使用QDataStream类进行对象序列化和反序列化。下面是一个简单的示例:

#include <QFile>
#include <QDataStream>

class MyObject
{
public:
    MyObject() {}
    MyObject(int x, int y) : m_x(x), m_y(y) {}

    int x() const { return m_x; }
    int y() const { return m_y; }

private:
    int m_x;
    int m_y;
};

void saveObject(const MyObject& obj, const QString& fileName)
{
    QFile file(fileName);
    if (file.open(QIODevice::WriteOnly))
    {
        QDataStream stream(&file);
        stream << obj.x() << obj.y();
        file.close();
    }
}

MyObject loadObject(const QString& fileName)
{
    MyObject obj;
    QFile file(fileName);
    if (file.open(QIODevice::ReadOnly))
    {
        QDataStream stream(&file);
        int x, y;
        stream >> x >> y;
        obj = MyObject(x, y);
        file.close();
    }
    return obj;
}

在上面的示例中,我们定义了一个名为MyObject的类,并在其中包含了两个整型成员变量m_x和m_y。我们还定义了两个函数,saveObject和loadObject,分别用于将对象保存到文件中和从文件中加载对象。

在saveObject函数中,我们首先打开了一个文件,然后创建了一个QDataStream对象,将对象的成员变量x和y写入到数据流中。最后,我们关闭了文件。

在loadObject函数中,我们首先打开了一个文件,然后创建了一个QDataStream对象,从数据流中读取x和y的值,并使用它们创建一个MyObject对象。最后,我们关闭了文件并返回MyObject对象。

需要注意的是,如果要序列化自定义对象,需要在该对象的类中实现序列化和反序列化方法。可以使用QDataStream类的<<和>>运算符重载来实现序列化和反序列化。例如:

class MyObject
{
public:
    MyObject() {}
    MyObject(int x, int y) : m_x(x), m_y(y) {}

    int x() const { return m_x; }
    int y() const { return m_y; }

    friend QDataStream& operator<<(QDataStream& out, const MyObject& obj)
    {
        out << obj.m_x << obj.m_y;
        return out;
    }

    friend QDataStream& operator>>(QDataStream& in, MyObject& obj)
    {
        in >> obj.m_x >> obj.m_y;
        return in;
    }

private:
    int m_x;
    int m_y;
};

在上面的示例中,我们重载了QDataStream的<<和>>运算符,并在其中将对象的成员变量m_x和m_y写入和读取到数据流中。这样,我们就可以直接使用QDataStream类对MyObject对象进行序列化和反序列化操作了。
python库的简单实例及介绍
python傻瓜式入门
人间清醒
量化交易策略介绍
linux系统相关 - 知乎 (zhihu.com)

python语言有哪些宝藏功能
如何加速计算
python的unittest库如何使用功能
python的Graphviz库生成思维导图
OpenAI表示,通过GPT-4更新,AI变得更加智能,更安全,更直观
python的gmpy2库如何使用
python如何计算圆周率到千万位
GPT-4将使ChatGPT更智能
python的opencv库使用模板匹配
Python的opencv库进行物体跟踪
Python的opencv库使用行人检测
Python的使用opencv库人脸识别
Python的opencv库使用Haar 级联检测
Python的opencv库使用FAST 算法进行特征检测
Python的opencv库使用ORB算法 进行特征检测
Python的opencv库使用SURF 进行特征检测
Python的opencv库使用SIFT 进行特征检测
opencv库的功能
运动控制卡的运动控制介绍
介绍一下labview

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

openwin_top

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值