diff --git a/examples/corelib/serialization/savegame/character.cpp b/examples/corelib/serialization/savegame/character.cpp index 910e7e9e7a1..039aa1fa942 100644 --- a/examples/corelib/serialization/savegame/character.cpp +++ b/examples/corelib/serialization/savegame/character.cpp @@ -77,12 +77,12 @@ QJsonObject Character::toJson() const } //! [toJson] -void Character::print(int indentation) const +void Character::print(QTextStream &s, int indentation) const { const QString indent(indentation * 2, ' '); - QTextStream(stdout) << indent << "Name:\t" << mName << "\n"; - QTextStream(stdout) << indent << "Level:\t" << mLevel << "\n"; + const QString className = QMetaEnum::fromType().valueToKey(mClassType); - QString className = QMetaEnum::fromType().valueToKey(mClassType); - QTextStream(stdout) << indent << "Class:\t" << className << "\n"; + s << indent << "Name:\t" << mName << "\n" + << indent << "Level:\t" << mLevel << "\n" + << indent << "Class:\t" << className << "\n"; } diff --git a/examples/corelib/serialization/savegame/character.h b/examples/corelib/serialization/savegame/character.h index d91bc8519b0..cffa5fa6599 100644 --- a/examples/corelib/serialization/savegame/character.h +++ b/examples/corelib/serialization/savegame/character.h @@ -8,6 +8,8 @@ #include #include +QT_FORWARD_DECLARE_CLASS(QTextStream) + //! [0] class Character { @@ -34,7 +36,7 @@ public: static Character fromJson(const QJsonObject &json); QJsonObject toJson() const; - void print(int indentation = 0) const; + void print(QTextStream &s, int indentation = 0) const; private: QString mName; int mLevel = 0; diff --git a/examples/corelib/serialization/savegame/doc/src/savegame.qdoc b/examples/corelib/serialization/savegame/doc/src/savegame.qdoc index b1aa599e792..f78ca0ce3b1 100644 --- a/examples/corelib/serialization/savegame/doc/src/savegame.qdoc +++ b/examples/corelib/serialization/savegame/doc/src/savegame.qdoc @@ -35,7 +35,9 @@ subclasses, for example), other patterns may be more suitable. See the \l{xml/dombookmarks} and \l{xml/streambookmarks} examples for XML, and the implementation of \l QListWidgetItem::read() and \l QListWidgetItem::write() - for idiomatic QDataStream serialization. + for idiomatic QDataStream serialization. The \c{print()} functions in this example + are good examples of QTextStream serialization, even though they, of course, lack + the deserialization side. \snippet serialization/savegame/character.h 0 diff --git a/examples/corelib/serialization/savegame/game.cpp b/examples/corelib/serialization/savegame/game.cpp index 3140178f885..85a2619b423 100644 --- a/examples/corelib/serialization/savegame/game.cpp +++ b/examples/corelib/serialization/savegame/game.cpp @@ -140,13 +140,13 @@ QJsonObject Game::toJson() const } //! [toJson] -void Game::print(int indentation) const +void Game::print(QTextStream &s, int indentation) const { const QString indent(indentation * 2, ' '); - QTextStream(stdout) << indent << "Player\n"; - mPlayer.print(indentation + 1); + s << indent << "Player\n"; + mPlayer.print(s, indentation + 1); - QTextStream(stdout) << indent << "Levels\n"; + s << indent << "Levels\n"; for (const Level &level : mLevels) - level.print(indentation + 1); + level.print(s, indentation + 1); } diff --git a/examples/corelib/serialization/savegame/game.h b/examples/corelib/serialization/savegame/game.h index 4c72ea426e3..2d7630c7dff 100644 --- a/examples/corelib/serialization/savegame/game.h +++ b/examples/corelib/serialization/savegame/game.h @@ -10,6 +10,8 @@ #include #include +QT_FORWARD_DECLARE_CLASS(QTextStream) + //! [0] class Game { @@ -28,7 +30,7 @@ public: void read(const QJsonObject &json); QJsonObject toJson() const; - void print(int indentation = 0) const; + void print(QTextStream &s, int indentation = 0) const; private: Character mPlayer; QList mLevels; diff --git a/examples/corelib/serialization/savegame/level.cpp b/examples/corelib/serialization/savegame/level.cpp index 5a6137715a4..489a25e2047 100644 --- a/examples/corelib/serialization/savegame/level.cpp +++ b/examples/corelib/serialization/savegame/level.cpp @@ -57,12 +57,12 @@ QJsonObject Level::toJson() const } //! [toJson] -void Level::print(int indentation) const +void Level::print(QTextStream &s, int indentation) const { const QString indent(indentation * 2, ' '); - QTextStream(stdout) << indent << "Name:\t" << mName << "\n"; - QTextStream(stdout) << indent << "NPCs:\n"; + s << indent << "Name:\t" << mName << "\n" + << indent << "NPCs:\n"; for (const Character &character : mNpcs) - character.print(2); + character.print(s, indentation + 1); } diff --git a/examples/corelib/serialization/savegame/level.h b/examples/corelib/serialization/savegame/level.h index ce39a611b4a..ad8d0fd5932 100644 --- a/examples/corelib/serialization/savegame/level.h +++ b/examples/corelib/serialization/savegame/level.h @@ -9,6 +9,8 @@ #include #include +QT_FORWARD_DECLARE_CLASS(QTextStream) + //! [0] class Level { @@ -24,7 +26,7 @@ public: static Level fromJson(const QJsonObject &json); QJsonObject toJson() const; - void print(int indentation = 0) const; + void print(QTextStream &s, int indentation = 0) const; private: QString mName; QList mNpcs; diff --git a/examples/corelib/serialization/savegame/main.cpp b/examples/corelib/serialization/savegame/main.cpp index 79f928cda91..3fc0f3af102 100644 --- a/examples/corelib/serialization/savegame/main.cpp +++ b/examples/corelib/serialization/savegame/main.cpp @@ -29,8 +29,9 @@ int main(int argc, char *argv[]) // Game is played; changes are made... //! [0] //! [1] - QTextStream(stdout) << "Game ended in the following state:\n"; - game.print(); + QTextStream s(stdout); + s << "Game ended in the following state:\n"; + game.print(s); if (!game.saveGame(json ? Game::Json : Game::Binary)) return 1;