diff --git a/examples/corelib/serialization/convert/converter.h b/examples/corelib/serialization/convert/converter.h index 4bf567dbdd4..fabbffddfba 100644 --- a/examples/corelib/serialization/convert/converter.h +++ b/examples/corelib/serialization/convert/converter.h @@ -5,16 +5,19 @@ #define CONVERTER_H #include +#include #include #include class Converter { + static QList &converters(); protected: Converter(); static bool isNull(const Converter *converter); // in nullconverter.cpp public: + static const QList &allConverters(); enum class Direction { In = 1, Out = 2, InOut = In | Out }; Q_DECLARE_FLAGS(Directions, Direction) diff --git a/examples/corelib/serialization/convert/main.cpp b/examples/corelib/serialization/convert/main.cpp index cd70a909bad..a5b2c78f656 100644 --- a/examples/corelib/serialization/convert/main.cpp +++ b/examples/corelib/serialization/convert/main.cpp @@ -14,18 +14,25 @@ using namespace Qt::StringLiterals; -static QList *availableConverters; - Converter::Converter() { - if (!availableConverters) - availableConverters = new QList; - availableConverters->append(this); + converters().append(this); } Converter::~Converter() { - availableConverters->removeAll(this); + converters().removeAll(this); +} + +QList &Converter::converters() +{ + Q_CONSTINIT static QList store; + return store; +} + +const QList &Converter::allConverters() +{ + return converters(); } static const Converter *prepareConverter(QString format, Converter::Direction direction, @@ -46,7 +53,7 @@ static const Converter *prepareConverter(QString format, Converter::Direction di qFatal("Could not open \"%s\" for %s: %s", qPrintable(stream->fileName()), dirn, qPrintable(stream->errorString())); } else if (format == "auto"_L1) { - for (const Converter *conv : std::as_const(*availableConverters)) { + for (const Converter *conv : Converter::allConverters()) { if (conv->directions().testFlag(direction) && conv->probeFile(stream)) return conv; } @@ -56,7 +63,7 @@ static const Converter *prepareConverter(QString format, Converter::Direction di // Input format, however, we must know before we can call that: qFatal("Could not determine input format. Specify it with the -I option."); } else { - for (const Converter *conv : std::as_const(*availableConverters)) { + for (const Converter *conv : Converter::allConverters()) { if (conv->name() == format) { if (!conv->directions().testFlag(direction)) { qWarning("File format \"%s\" cannot be used for %s", @@ -77,7 +84,7 @@ int main(int argc, char *argv[]) QStringList inputFormats; QStringList outputFormats; - for (const Converter *conv : std::as_const(*availableConverters)) { + for (const Converter *conv : Converter::allConverters()) { auto direction = conv->directions(); QString name = conv->name(); if (direction.testFlag(Converter::Direction::In)) @@ -130,7 +137,7 @@ int main(int argc, char *argv[]) if (parser.isSet(formatOptionsOption)) { QString format = parser.value(formatOptionsOption); - for (const Converter *conv : std::as_const(*availableConverters)) { + for (const Converter *conv : Converter::allConverters()) { if (conv->name() == format) { const char *help = conv->optionsHelp(); if (help) {