corelib/serialization examples: clang-tidy and coding style clean-up

I overrode clang-tidy where it uglified or obfuscated and did some
clean-up provoked or made possible by its changes. Konrad pointed out,
in review, a constructor that could be = default; it could, in fact,
vanish entirely as a result.

Task-number: QTBUG-111228
Change-Id: I9b7744a3abaa29e6f9e0689d0f6985bfd88cd0fd
Reviewed-by: Konrad Kujawa <konrad.kujawa@qt.io>
(cherry picked from commit d8517fb1ab83e7051b1d2c2152014e7ff1760426)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Edward Welbourne 2023-08-25 16:10:27 +02:00 committed by Qt Cherry-pick Bot
parent d066497527
commit ca9a3ba6c8
20 changed files with 74 additions and 117 deletions

View File

@ -144,11 +144,7 @@ enum {
//! [0] //! [0]
struct CborDumper struct CborDumper
{ {
enum DumpOption { enum DumpOption { ShowCompact = 0x01, ShowWidthIndicators = 0x02, ShowAnnotated = 0x04 };
ShowCompact = 0x01,
ShowWidthIndicators = 0x02,
ShowAnnotated = 0x04
};
Q_DECLARE_FLAGS(DumpOptions, DumpOption) Q_DECLARE_FLAGS(DumpOptions, DumpOption)
CborDumper(QFile *f, DumpOptions opts_); CborDumper(QFile *f, DumpOptions opts_);
@ -185,8 +181,7 @@ static int cborNumberSize(quint64 value)
return normalSize; return normalSize;
} }
CborDumper::CborDumper(QFile *f, DumpOptions opts_) CborDumper::CborDumper(QFile *f, DumpOptions opts_) : opts(opts_)
: opts(opts_)
{ {
// try to mmap the file, this is faster // try to mmap the file, this is faster
char *ptr = reinterpret_cast<char *>(f->map(0, f->size(), QFile::MapPrivateOption)); char *ptr = reinterpret_cast<char *>(f->map(0, f->size(), QFile::MapPrivateOption));
@ -233,7 +228,8 @@ QCborError CborDumper::dump()
return err; return err;
} }
template <typename T> static inline bool canConvertTo(double v) template<typename T>
static inline bool canConvertTo(double v)
{ {
using TypeInfo = std::numeric_limits<T>; using TypeInfo = std::numeric_limits<T>;
// The [conv.fpint] (7.10 Floating-integral conversions) section of the // The [conv.fpint] (7.10 Floating-integral conversions) section of the
@ -688,7 +684,9 @@ void CborDumper::printByteArray(const QByteArray &ba)
break; break;
case quint8(QCborKnownTags::ExpectedBase64url): case quint8(QCborKnownTags::ExpectedBase64url):
printf("b64'%s'", ba.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals).constData()); printf("b64'%s'",
ba.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals)
.constData());
break; break;
} }
} }

View File

@ -154,7 +154,8 @@ QVariant CborDiagnosticDumper::loadFile(QIODevice *f, Converter *&outputConverte
return QVariant(); return QVariant();
} }
void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents,
const QStringList &options)
{ {
QCborValue::DiagnosticNotationOptions opts = QCborValue::LineWrapped; QCborValue::DiagnosticNotationOptions opts = QCborValue::LineWrapped;
for (const QString &s : options) { for (const QString &s : options) {
@ -183,8 +184,7 @@ void CborDiagnosticDumper::saveFile(QIODevice *f, const QVariant &contents, cons
} }
QTextStream out(f); QTextStream out(f);
out << convertFromVariant(contents, Double).toDiagnosticNotation(opts) out << convertFromVariant(contents, Double).toDiagnosticNotation(opts) << Qt::endl;
<< Qt::endl;
} }
CborConverter::CborConverter() CborConverter::CborConverter()
@ -320,8 +320,9 @@ void CborConverter::saveFile(QIODevice *f, const QVariant &contents, const QStri
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
//! [4] //! [4]
QCborValue v = convertFromVariant(contents, QCborValue v =
useFloat16 == Always ? Float16 : useFloat == Always ? Float : Double); convertFromVariant(contents,
useFloat16 == Always ? Float16 : useFloat == Always ? Float : Double);
QCborStreamWriter writer(f); QCborStreamWriter writer(f);
if (useSignature) if (useSignature)
writer.append(QCborKnownTags::Signature); writer.append(QCborKnownTags::Signature);

View File

@ -32,13 +32,9 @@ protected:
public: public:
static Converter *null; static Converter *null;
enum Direction { enum Direction { In = 1, Out = 2, InOut = 3 };
In = 1, Out = 2, InOut = 3
};
enum Option { enum Option { SupportsArbitraryMapKeys = 0x01 };
SupportsArbitraryMapKeys = 0x01
};
Q_DECLARE_FLAGS(Options, Option) Q_DECLARE_FLAGS(Options, Option)
virtual ~Converter() = 0; virtual ~Converter() = 0;

View File

@ -44,7 +44,6 @@ QDataStream &operator>>(QDataStream &ds, VariantOrderedMap &map)
return ds; return ds;
} }
static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1) static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1)
{ {
QString result; QString result;
@ -52,15 +51,14 @@ static QString dumpVariant(const QVariant &v, const QString &indent = "\n"_L1)
int type = v.userType(); int type = v.userType();
if (type == qMetaTypeId<VariantOrderedMap>() || type == QMetaType::QVariantMap) { if (type == qMetaTypeId<VariantOrderedMap>() || type == QMetaType::QVariantMap) {
const auto map = (type == QMetaType::QVariantMap) ? const auto map = (type == QMetaType::QVariantMap) ? VariantOrderedMap(v.toMap())
VariantOrderedMap(v.toMap()) : qvariant_cast<VariantOrderedMap>(v); : qvariant_cast<VariantOrderedMap>(v);
result = "Map {"_L1; result = "Map {"_L1;
for (const auto &pair : map) { for (const auto &pair : map) {
result += indented + dumpVariant(pair.first, indented); result += indented + dumpVariant(pair.first, indented);
result.chop(1); // remove comma result.chop(1); // remove comma
result += " => "_L1 + dumpVariant(pair.second, indented); result += " => "_L1 + dumpVariant(pair.second, indented);
} }
result.chop(1); // remove comma result.chop(1); // remove comma
result += indent + "},"_L1; result += indent + "},"_L1;
@ -159,8 +157,7 @@ QVariant DataStreamConverter::loadFile(QIODevice *f, Converter *&outputConverter
outputConverter = &dataStreamDumper; outputConverter = &dataStreamDumper;
char c; char c;
if (f->read(sizeof(signature) -1) != signature || if (f->read(sizeof(signature) - 1) != signature || !f->getChar(&c) || (c != 'l' && c != 'B')) {
!f->getChar(&c) || (c != 'l' && c != 'B')) {
fprintf(stderr, "Could not load QDataStream file: invalid signature.\n"); fprintf(stderr, "Could not load QDataStream file: invalid signature.\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -177,7 +174,8 @@ QVariant DataStreamConverter::loadFile(QIODevice *f, Converter *&outputConverter
return result; return result;
} }
void DataStreamConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) void DataStreamConverter::saveFile(QIODevice *f, const QVariant &contents,
const QStringList &options)
{ {
QDataStream::Version version = QDataStream::Qt_6_0; QDataStream::Version version = QDataStream::Qt_6_0;
auto order = QDataStream::ByteOrder(QSysInfo::ByteOrder); auto order = QDataStream::ByteOrder(QSysInfo::ByteOrder);

View File

@ -13,8 +13,7 @@ using namespace Qt::StringLiterals;
static JsonConverter jsonConverter; static JsonConverter jsonConverter;
static const char jsonOptionHelp[] = static const char jsonOptionHelp[] = "compact=no|yes Use compact JSON form.\n";
"compact=no|yes Use compact JSON form.\n";
static QJsonDocument convertFromVariant(const QVariant &v) static QJsonDocument convertFromVariant(const QVariant &v)
{ {
@ -26,10 +25,6 @@ static QJsonDocument convertFromVariant(const QVariant &v)
return doc; return doc;
} }
JsonConverter::JsonConverter()
{
}
QString JsonConverter::name() QString JsonConverter::name()
{ {
return "json"_L1; return "json"_L1;

View File

@ -8,9 +8,6 @@
class JsonConverter : public Converter class JsonConverter : public Converter
{ {
public:
JsonConverter();
// Converter interface // Converter interface
public: public:
QString name() override; QString name() override;

View File

@ -89,10 +89,12 @@ int main(int argc, char *argv[])
for (Converter *conv : std::as_const(*availableConverters)) { for (Converter *conv : std::as_const(*availableConverters)) {
if (conv->name() == format) { if (conv->name() == format) {
const char *help = conv->optionsHelp(); const char *help = conv->optionsHelp();
if (help) if (help) {
printf("The following options are available for format '%s':\n\n%s", qPrintable(format), help); printf("The following options are available for format '%s':\n\n%s",
else qPrintable(format), help);
} else {
printf("Format '%s' supports no options.\n", qPrintable(format)); printf("Format '%s' supports no options.\n", qPrintable(format));
}
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
} }

View File

@ -45,7 +45,8 @@ QVariant NullConverter::loadFile(QIODevice *f, Converter *&outputConverter)
void NullConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) void NullConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
{ {
if (!options.isEmpty()) { if (!options.isEmpty()) {
fprintf(stderr, "Unknown option '%s' to null output. This format has no options.\n", qPrintable(options.first())); fprintf(stderr, "Unknown option '%s' to null output. This format has no options.\n",
qPrintable(options.first()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }

View File

@ -97,7 +97,8 @@ QVariant TextConverter::loadFile(QIODevice *f, Converter *&outputConverter)
void TextConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options) void TextConverter::saveFile(QIODevice *f, const QVariant &contents, const QStringList &options)
{ {
if (!options.isEmpty()) { if (!options.isEmpty()) {
fprintf(stderr, "Unknown option '%s' to text output. This format has no options.\n", qPrintable(options.first())); fprintf(stderr, "Unknown option '%s' to text output. This format has no options.\n",
qPrintable(options.first()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }

View File

@ -8,7 +8,6 @@
class TextConverter : public Converter class TextConverter : public Converter
{ {
// Converter interface // Converter interface
public: public:
QString name() override; QString name() override;

View File

@ -15,8 +15,7 @@
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
static const char xmlOptionHelp[] = static const char xmlOptionHelp[] = "compact=no|yes Use compact XML form.\n";
"compact=no|yes Use compact XML form.\n";
static XmlConverter xmlConverter; static XmlConverter xmlConverter;
@ -49,8 +48,7 @@ static QVariantList listFromXml(QXmlStreamReader &xml, Converter::Options option
break; break;
} }
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
xml.lineNumber(), xml.columnNumber(),
qPrintable(xml.tokenString()), qPrintable(xml.name().toString())); qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -59,7 +57,8 @@ static QVariantList listFromXml(QXmlStreamReader &xml, Converter::Options option
return list; return list;
} }
static VariantOrderedMap::value_type mapEntryFromXml(QXmlStreamReader &xml, Converter::Options options) static VariantOrderedMap::value_type mapEntryFromXml(QXmlStreamReader &xml,
Converter::Options options)
{ {
QVariant key, value; QVariant key, value;
while (!xml.atEnd() && !(xml.isEndElement() && xml.name() == "entry"_L1)) { while (!xml.atEnd() && !(xml.isEndElement() && xml.name() == "entry"_L1)) {
@ -91,8 +90,7 @@ static VariantOrderedMap::value_type mapEntryFromXml(QXmlStreamReader &xml, Conv
break; break;
} }
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
xml.lineNumber(), xml.columnNumber(),
qPrintable(xml.tokenString()), qPrintable(xml.name().toString())); qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -136,8 +134,7 @@ static QVariant mapFromXml(QXmlStreamReader &xml, Converter::Options options)
break; break;
} }
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
xml.lineNumber(), xml.columnNumber(),
qPrintable(xml.tokenString()), qPrintable(xml.name().toString())); qPrintable(xml.tokenString()), qPrintable(xml.name().toString()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -171,8 +168,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
if (xml.isCDATA() || xml.isCharacters() || xml.isEndElement()) if (xml.isCDATA() || xml.isCharacters() || xml.isEndElement())
break; break;
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
xml.lineNumber(), xml.columnNumber(),
qPrintable(xml.tokenString()), qPrintable(name.toString())); qPrintable(xml.tokenString()), qPrintable(name.toString()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -269,8 +265,7 @@ static QVariant variantFromXml(QXmlStreamReader &xml, Converter::Options options
} while (xml.isComment() || xml.isWhitespace()); } while (xml.isComment() || xml.isWhitespace());
if (!xml.isEndElement()) { if (!xml.isEndElement()) {
fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", fprintf(stderr, "%lld:%lld: Invalid XML %s '%s'.\n", xml.lineNumber(), xml.columnNumber(),
xml.lineNumber(), xml.columnNumber(),
qPrintable(xml.tokenString()), qPrintable(name.toString())); qPrintable(xml.tokenString()), qPrintable(name.toString()));
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -289,9 +284,9 @@ static void variantToXml(QXmlStreamWriter &xml, const QVariant &v)
variantToXml(xml, v); variantToXml(xml, v);
xml.writeEndElement(); xml.writeEndElement();
} else if (type == QMetaType::QVariantMap || type == qMetaTypeId<VariantOrderedMap>()) { } else if (type == QMetaType::QVariantMap || type == qMetaTypeId<VariantOrderedMap>()) {
const VariantOrderedMap map = (type == QMetaType::QVariantMap) ? const VariantOrderedMap map = (type == QMetaType::QVariantMap)
VariantOrderedMap(v.toMap()) : ? VariantOrderedMap(v.toMap())
qvariant_cast<VariantOrderedMap>(v); : qvariant_cast<VariantOrderedMap>(v);
xml.writeStartElement("map"); xml.writeStartElement("map");
for (const auto &pair : map) { for (const auto &pair : map) {

View File

@ -6,15 +6,10 @@
#include <QMetaEnum> #include <QMetaEnum>
#include <QTextStream> #include <QTextStream>
Character::Character() Character::Character() = default;
= default;
Character::Character(const QString &name, Character::Character(const QString &name, int level, Character::ClassType classType)
int level, : mName(name), mLevel(level), mClassType(classType)
Character::ClassType classType) :
mName(name),
mLevel(level),
mClassType(classType)
{ {
} }

View File

@ -16,9 +16,7 @@ class Character
Q_GADGET Q_GADGET
public: public:
enum ClassType { enum ClassType { Warrior, Mage, Archer };
Warrior, Mage, Archer
};
Q_ENUM(ClassType) Q_ENUM(ClassType)
Character(); Character();
@ -37,6 +35,7 @@ public:
QJsonObject toJson() const; QJsonObject toJson() const;
void print(QTextStream &s, int indentation = 0) const; void print(QTextStream &s, int indentation = 0) const;
private: private:
QString mName; QString mName;
int mLevel = 0; int mLevel = 0;

View File

@ -38,11 +38,9 @@ void Game::newGame()
QList<Character> villageNpcs; QList<Character> villageNpcs;
villageNpcs.reserve(2); villageNpcs.reserve(2);
villageNpcs.append(Character("Barry the Blacksmith"_L1, villageNpcs.append(Character("Barry the Blacksmith"_L1,
QRandomGenerator::global()->bounded(8, 11), QRandomGenerator::global()->bounded(8, 11), Character::Warrior));
Character::Warrior));
villageNpcs.append(Character("Terry the Trader"_L1, villageNpcs.append(Character("Terry the Trader"_L1,
QRandomGenerator::global()->bounded(6, 8), QRandomGenerator::global()->bounded(6, 8), Character::Warrior));
Character::Warrior));
village.setNpcs(villageNpcs); village.setNpcs(villageNpcs);
mLevels.append(village); mLevels.append(village);
@ -50,14 +48,11 @@ void Game::newGame()
QList<Character> dungeonNpcs; QList<Character> dungeonNpcs;
dungeonNpcs.reserve(3); dungeonNpcs.reserve(3);
dungeonNpcs.append(Character("Eric the Evil"_L1, dungeonNpcs.append(Character("Eric the Evil"_L1,
QRandomGenerator::global()->bounded(18, 26), QRandomGenerator::global()->bounded(18, 26), Character::Mage));
Character::Mage));
dungeonNpcs.append(Character("Eric's Left Minion"_L1, dungeonNpcs.append(Character("Eric's Left Minion"_L1,
QRandomGenerator::global()->bounded(5, 7), QRandomGenerator::global()->bounded(5, 7), Character::Warrior));
Character::Warrior));
dungeonNpcs.append(Character("Eric's Right Minion"_L1, dungeonNpcs.append(Character("Eric's Right Minion"_L1,
QRandomGenerator::global()->bounded(4, 9), QRandomGenerator::global()->bounded(4, 9), Character::Warrior));
Character::Warrior));
dungeon.setNpcs(dungeonNpcs); dungeon.setNpcs(dungeonNpcs);
mLevels.append(dungeon); mLevels.append(dungeon);
} }
@ -81,10 +76,8 @@ bool Game::loadGame(Game::SaveFormat saveFormat)
read(loadDoc.object()); read(loadDoc.object());
QTextStream(stdout) << "Loaded save for " QTextStream(stdout) << "Loaded save for " << loadDoc["player"]["name"].toString()
<< loadDoc["player"]["name"].toString() << " using " << (saveFormat != Json ? "CBOR" : "JSON") << "...\n";
<< " using "
<< (saveFormat != Json ? "CBOR" : "JSON") << "...\n";
return true; return true;
} }
//! [loadGame] //! [loadGame]
@ -100,9 +93,8 @@ bool Game::saveGame(Game::SaveFormat saveFormat) const
} }
QJsonObject gameObject = toJson(); QJsonObject gameObject = toJson();
saveFile.write(saveFormat == Json saveFile.write(saveFormat == Json ? QJsonDocument(gameObject).toJson()
? QJsonDocument(gameObject).toJson() : QCborValue::fromJsonValue(gameObject).toCbor());
: QCborValue::fromJsonValue(gameObject).toCbor());
return true; return true;
} }

View File

@ -16,9 +16,7 @@ QT_FORWARD_DECLARE_CLASS(QTextStream)
class Game class Game
{ {
public: public:
enum SaveFormat { enum SaveFormat { Json, Binary };
Json, Binary
};
Character player() const; Character player() const;
QList<Level> levels() const; QList<Level> levels() const;
@ -31,6 +29,7 @@ public:
QJsonObject toJson() const; QJsonObject toJson() const;
void print(QTextStream &s, int indentation = 0) const; void print(QTextStream &s, int indentation = 0) const;
private: private:
Character mPlayer; Character mPlayer;
QList<Level> mLevels; QList<Level> mLevels;

View File

@ -6,9 +6,7 @@
#include <QJsonArray> #include <QJsonArray>
#include <QTextStream> #include <QTextStream>
Level::Level(const QString &name) : mName(name) Level::Level(const QString &name) : mName(name) { }
{
}
QString Level::name() const QString Level::name() const
{ {
@ -61,8 +59,7 @@ void Level::print(QTextStream &s, int indentation) const
{ {
const QString indent(indentation * 2, ' '); const QString indent(indentation * 2, ' ');
s << indent << "Name:\t" << mName << "\n" s << indent << "Name:\t" << mName << "\n" << indent << "NPCs:\n";
<< indent << "NPCs:\n";
for (const Character &character : mNpcs) for (const Character &character : mNpcs)
character.print(s, indentation + 1); character.print(s, indentation + 1);
} }

View File

@ -27,6 +27,7 @@ public:
QJsonObject toJson() const; QJsonObject toJson() const;
void print(QTextStream &s, int indentation = 0) const; void print(QTextStream &s, int indentation = 0) const;
private: private:
QString mName; QString mName;
QList<Character> mNpcs; QList<Character> mNpcs;

View File

@ -23,8 +23,7 @@
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
//! [0] //! [0]
MainWindow::MainWindow() MainWindow::MainWindow() : treeWidget(new QTreeWidget)
: treeWidget(new QTreeWidget)
{ {
treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch); treeWidget->header()->setSectionResizeMode(QHeaderView::Stretch);
treeWidget->setHeaderLabels(QStringList{tr("Title"), tr("Location")}); treeWidget->setHeaderLabels(QStringList{tr("Title"), tr("Location")});
@ -101,21 +100,19 @@ void MainWindow::open()
if (!file.open(QFile::ReadOnly | QFile::Text)) { if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("QXmlStream Bookmarks"), QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
tr("Cannot read file %1:\n%2.") tr("Cannot read file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), .arg(QDir::toNativeSeparators(fileName), file.errorString()));
file.errorString()));
return; return;
} }
XbelReader reader(treeWidget); XbelReader reader(treeWidget);
if (!reader.read(&file)) { if (!reader.read(&file)) {
QMessageBox::warning(this, tr("QXmlStream Bookmarks"), QMessageBox::warning(
tr("Parse error in file %1:\n\n%2") this, tr("QXmlStream Bookmarks"),
.arg(QDir::toNativeSeparators(fileName), tr("Parse error in file %1:\n\n%2")
reader.errorString())); .arg(QDir::toNativeSeparators(fileName), reader.errorString()));
} else { } else {
statusBar()->showMessage(tr("File loaded"), 2000); statusBar()->showMessage(tr("File loaded"), 2000);
} }
} }
//! [3] //! [3]
@ -134,8 +131,7 @@ void MainWindow::saveAs()
if (!file.open(QFile::WriteOnly | QFile::Text)) { if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("QXmlStream Bookmarks"), QMessageBox::warning(this, tr("QXmlStream Bookmarks"),
tr("Cannot write file %1:\n%2.") tr("Cannot write file %1:\n%2.")
.arg(QDir::toNativeSeparators(fileName), .arg(QDir::toNativeSeparators(fileName), file.errorString()));
file.errorString()));
return; return;
} }

View File

@ -9,15 +9,13 @@
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
//! [0] //! [0]
XbelReader::XbelReader(QTreeWidget *treeWidget) XbelReader::XbelReader(QTreeWidget *treeWidget) : treeWidget(treeWidget)
: treeWidget(treeWidget)
{ {
QStyle *style = treeWidget->style(); QStyle *style = treeWidget->style();
folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirClosedIcon), QIcon::Normal,
QIcon::Normal, QIcon::Off); QIcon::Off);
folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), folderIcon.addPixmap(style->standardPixmap(QStyle::SP_DirOpenIcon), QIcon::Normal, QIcon::On);
QIcon::Normal, QIcon::On);
bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon)); bookmarkIcon.addPixmap(style->standardPixmap(QStyle::SP_FileIcon));
} }
//! [0] //! [0]
@ -28,12 +26,10 @@ bool XbelReader::read(QIODevice *device)
xml.setDevice(device); xml.setDevice(device);
if (xml.readNextStartElement()) { if (xml.readNextStartElement()) {
if (xml.name() == "xbel"_L1 if (xml.name() == "xbel"_L1 && xml.attributes().value("version"_L1) == "1.0"_L1)
&& xml.attributes().value("version"_L1) == "1.0"_L1) {
readXBEL(); readXBEL();
} else { else
xml.raiseError(QObject::tr("The file is not an XBEL version 1.0 file.")); xml.raiseError(QObject::tr("The file is not an XBEL version 1.0 file."));
}
} }
return !xml.error(); return !xml.error();

View File

@ -9,8 +9,7 @@
using namespace Qt::StringLiterals; using namespace Qt::StringLiterals;
//! [0] //! [0]
XbelWriter::XbelWriter(const QTreeWidget *treeWidget) XbelWriter::XbelWriter(const QTreeWidget *treeWidget) : treeWidget(treeWidget)
: treeWidget(treeWidget)
{ {
xml.setAutoFormatting(true); xml.setAutoFormatting(true);
} }