json文件存储 qt_【转】Qt之JSON保存与读取

简述

许多游戏提供保存功能,使得玩家在游戏中的进度可以被保存,并在以后再玩的时候进行加载。保存游戏的过程通常涉及将每个游戏对象的成员变量序列化为文件。要实现这个功能,可以采取许多格式,其中之一就是 JSON - 使用 QJsonDocument。如果不希望保存的文件可读,或者不需要保持文件大小,还能够以二进制格式序列化文档,这就厉害了O(∩_∩)O。

下面,将演示如何以 JSON 和二进制格式来保存和加载一个简单的游戏。

Character 类

Character 类表示游戏中的非玩家角色(NPC),并存储玩家的姓名、级别和类类型。

提供了 read() 和 write() 函数来序列化成员变量。

class Character

{

public:

enum ClassType {

Warrior, Mage, Archer

};

Character();

Character(const QString &name, int level, ClassType classType);

QString name() const;

void setName(const QString &name);

int level() const;

void setLevel(int level);

ClassType classType() const;

void setClassType(ClassType classType);

void read(const QJsonObject &json);

void write(QJsonObject &json) const;

private:

QString mName;

int mLevel;

ClassType mClassType;

};

我们感兴趣的是读和写函数的实现:

void Character::read(const QJsonObject &json)

{

mName = json["name"].toString();

mLevel = json["level"].toDouble();

mClassType = ClassType(qRound(json["classType"].toDouble()));

}

在 read() 函数中,由 QJsonObject 参数分配 Character 的成员变量,可以使用 QJsonObject::operator 或者 QJsonObject::value() 来访问 JSON 对象中的值,它们均是 const 函数。如果指定的 key 无效,则返回 QJsonValue::Undefined。

注意:在尝试读取值之前,应该使用 QJsonObject::contains() 检测 key 是否有效,这里假设是有效的,所以没有检测。

void Character::write(QJsonObject &json) const

{

json["name"] = mName;

json["level"] = mLevel;

json["classType"] = mClassType;

}

在 write() 函数中,处理与 read() 相反。将 Character 的值分配给 QJsonObject 对象。与访问值一样,也有两种方式来设置 QJsonObject 的值:QJsonObject::operator 和 QJsonObject::insert(),它们都会覆盖指定 key 对应的值。

Level

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值