Qt序列化

34 篇文章 0 订阅

Qt中提供了二进制格式的序列化。对QT中原生的数据类型,例如:QString、QMap、QHash等,不需要做其它额外的操作,利用QDataStream直接就可以序列化到文件中。

//序列化
QFile file("file.dat");         //创建一个文档
file.open(QIODevice::WriteOnly);//打开并只写
QDataStream out(&file);         //序列化文档
out << QString("the answer is");//将字符串写入文档中,实际在该文档中为二进制
out << (qint32)42;
  
//反序列化
QFile file("file.dat");
file.open(QIODevice::ReadOnly);
QDataStream in(&file); 
QString str;
qint32 a;
in >> str >> a; 

对于自定义的数据结构或类,利用QDataStream不能直接实现序列化,我们必须重载<<和>>操作符:

class QSampleData : public QObject
{ 
public:
    QChunnelData();
    virtual ~QChunnelData();
    QChunnelData& operator=(const QChunnelData &other);

    friend QDataStream& operator>>(QDataStream&, QChunnelData&);
    friend QDataStream& operator<<(QDataStream&, QChunnelData&);
    
    //定义的数据成员
    int m_nType;
    QString m_strName;
};
 
CSampleData::CSampleData()
{
    m_nType = 0;
    m_strName = "";
}

CSampleData::~CSampleData()
{
}

CSampleData::operator =(const CSampleData& other)
{
    m_nType = other.m_nType;
    m_strName = other.m_strName;
    return *this;
}

QDataStream& operator>>(QDataStream& in, CSampleData& data)
{
    in >> data.m_nType >> data.m_strName;
    return in;
}

QDataStream& operator<<(QDataStream& out, CSampleData& data)
{
    out << data.m_nType << data.m_strName;
    return out;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

colorful_stars

您是我见过全宇宙最可爱的人!

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

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

打赏作者

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

抵扣说明:

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

余额充值