diff options
author | Mitch Curtis <mitch.curtis@digia.com> | 2013-08-22 16:25:13 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-27 08:01:29 +0200 |
commit | 507f1889e2b21d0b3367715dc5e63e124433a992 (patch) | |
tree | 11a077cb1988e05ac94f42b2bb4cd7e476997891 | |
parent | f73518e7325faf1359b7f52333aa7c11ed393c8c (diff) |
Add QJsonValue::toInt().
It's a nice feature to have.
MSVC also complains about using doubles to create enum values, so
the ugly workaround is:
enumValue = MyEnum(qRound(json["myEnumValue"].toDouble()));
[ChangeLog][QtCore][QJsonValue]Added QJsonValue::toInt().
Change-Id: I1a200b912abf66b2e96390b1980caff26cfa2685
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
-rw-r--r-- | src/corelib/json/qjsonvalue.cpp | 13 | ||||
-rw-r--r-- | src/corelib/json/qjsonvalue.h | 2 | ||||
-rw-r--r-- | tests/auto/corelib/json/tst_qtjson.cpp | 22 |
3 files changed, 33 insertions, 4 deletions
diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp index 3aba6124b8..ef9f057d77 100644 --- a/src/corelib/json/qjsonvalue.cpp +++ b/src/corelib/json/qjsonvalue.cpp @@ -449,6 +449,19 @@ bool QJsonValue::toBool(bool defaultValue) const } /*! + Converts the value to an int and returns it. + + If type() is not Double or the value is not a whole number, + the \a defaultValue will be returned. + */ +int QJsonValue::toInt(int defaultValue) const +{ + if (t == Double && int(dbl) == dbl) + return dbl; + return defaultValue; +} + +/*! Converts the value to a double and returns it. If type() is not Double, the \a defaultValue will be returned. diff --git a/src/corelib/json/qjsonvalue.h b/src/corelib/json/qjsonvalue.h index c8efab5d5f..b18bbde0f7 100644 --- a/src/corelib/json/qjsonvalue.h +++ b/src/corelib/json/qjsonvalue.h @@ -103,6 +103,7 @@ public: inline bool isUndefined() const { return type() == Undefined; } bool toBool(bool defaultValue = false) const; + int toInt(int defaultValue = 0) const; double toDouble(double defaultValue = 0) const; QString toString(const QString &defaultValue = QString()) const; QJsonArray toArray() const; @@ -158,6 +159,7 @@ public: inline bool isUndefined() const { return type() == QJsonValue::Undefined; } inline bool toBool() const { return toValue().toBool(); } + inline int toInt() const { return toValue().toInt(); } inline double toDouble() const { return toValue().toDouble(); } inline QString toString() const { return toValue().toString(); } QJsonArray toArray() const; diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 9111c59408..9dbd6414ad 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -449,13 +449,13 @@ void tst_QtJson::testObjectSimple() void tst_QtJson::testObjectSmallKeys() { QJsonObject data1; - data1.insert(QStringLiteral("1"), 123); + data1.insert(QStringLiteral("1"), 123.); QVERIFY(data1.contains(QStringLiteral("1"))); QCOMPARE(data1.value(QStringLiteral("1")).toDouble(), (double)123); - data1.insert(QStringLiteral("12"), 133); + data1.insert(QStringLiteral("12"), 133.); QCOMPARE(data1.value(QStringLiteral("12")).toDouble(), (double)133); QVERIFY(data1.contains(QStringLiteral("12"))); - data1.insert(QStringLiteral("123"), 323); + data1.insert(QStringLiteral("123"), 323.); QCOMPARE(data1.value(QStringLiteral("12")).toDouble(), (double)133); QVERIFY(data1.contains(QStringLiteral("123"))); QCOMPARE(data1.value(QStringLiteral("123")).type(), QJsonValue::Double); @@ -670,11 +670,15 @@ void tst_QtJson::testValueRef() array.append(1.); array.append(2.); array.append(3.); + array.append(4); + array.append(4.1); array[1] = false; - QCOMPARE(array.size(), 3); + QCOMPARE(array.size(), 5); QCOMPARE(array.at(0).toDouble(), 1.); QCOMPARE(array.at(2).toDouble(), 3.); + QCOMPARE(array.at(3).toInt(), 4); + QCOMPARE(array.at(4).toInt(), 0); QCOMPARE(array.at(1).type(), QJsonValue::Bool); QCOMPARE(array.at(1).toBool(), false); @@ -2170,6 +2174,16 @@ void tst_QtJson::valueEquals() QVERIFY(QJsonValue(true) != QJsonValue(QJsonArray())); QVERIFY(QJsonValue(true) != QJsonValue(QJsonObject())); + QVERIFY(QJsonValue(1) == QJsonValue(1)); + QVERIFY(QJsonValue(1) != QJsonValue(2)); + QVERIFY(QJsonValue(1) == QJsonValue(1.)); + QVERIFY(QJsonValue(1) != QJsonValue(1.1)); + QVERIFY(QJsonValue(1) != QJsonValue(QJsonValue::Undefined)); + QVERIFY(QJsonValue(1) != QJsonValue()); + QVERIFY(QJsonValue(1) != QJsonValue(true)); + QVERIFY(QJsonValue(1) != QJsonValue(QJsonArray())); + QVERIFY(QJsonValue(1) != QJsonValue(QJsonObject())); + QVERIFY(QJsonValue(1.) == QJsonValue(1.)); QVERIFY(QJsonValue(1.) != QJsonValue(2.)); QVERIFY(QJsonValue(1.) != QJsonValue(QJsonValue::Undefined)); |