diff options
Diffstat (limited to 'examples/corelib/json/savegame/character.cpp')
-rw-r--r-- | examples/corelib/json/savegame/character.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/examples/corelib/json/savegame/character.cpp b/examples/corelib/json/savegame/character.cpp index 20bbc34961..046cde3091 100644 --- a/examples/corelib/json/savegame/character.cpp +++ b/examples/corelib/json/savegame/character.cpp @@ -50,12 +50,17 @@ #include "character.h" +#include <QMetaEnum> +#include <QTextStream> + Character::Character() : mLevel(0), mClassType(Warrior) { } -Character::Character(const QString &name, int level, Character::ClassType classType) : +Character::Character(const QString &name, + int level, + Character::ClassType classType) : mName(name), mLevel(level), mClassType(classType) @@ -95,9 +100,14 @@ void Character::setClassType(Character::ClassType classType) //! [0] void Character::read(const QJsonObject &json) { - mName = json["name"].toString(); - mLevel = json["level"].toDouble(); - mClassType = ClassType(qRound(json["classType"].toDouble())); + if (json.contains("name") && json["name"].isString()) + mName = json["name"].toString(); + + if (json.contains("level") && json["level"].isDouble()) + mLevel = json["level"].toInt(); + + if (json.contains("classType") && json["classType"].isDouble()) + mClassType = ClassType(json["classType"].toInt()); } //! [0] @@ -109,3 +119,13 @@ void Character::write(QJsonObject &json) const json["classType"] = mClassType; } //! [1] + +void Character::print(int indentation) const +{ + const QString indent(indentation * 2, ' '); + QTextStream(stdout) << indent << "Name:\t" << mName << "\n"; + QTextStream(stdout) << indent << "Level:\t" << mLevel << "\n"; + + QString className = QMetaEnum::fromType<ClassType>().valueToKey(mClassType); + QTextStream(stdout) << indent << "Class:\t" << className << "\n"; +} |