From e483b9bf378fc157631e57dc23b45659bb6512c2 Mon Sep 17 00:00:00 2001 From: Ali Akhtarzada Date: Mon, 7 May 2012 18:09:39 +0200 Subject: [PATCH] Add assignment operator for QJsonValueRef The implicit cast to QJsonValue was being ignored probably because the compiler was generating a default QJsonValueRef assignment operator Change-Id: I3a041595497308868dd7e4aab71027ce21bf8f0b Reviewed-by: Denis Dzyubenko Reviewed-by: Lars Knoll --- src/corelib/json/qjsonvalue.cpp | 10 ++++++++++ src/corelib/json/qjsonvalue.h | 1 + tests/auto/corelib/json/tst_qtjson.cpp | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp index 3be70890498..7459524fc99 100644 --- a/src/corelib/json/qjsonvalue.cpp +++ b/src/corelib/json/qjsonvalue.cpp @@ -548,6 +548,16 @@ QJsonValueRef &QJsonValueRef::operator =(const QJsonValue &val) return *this; } +QJsonValueRef &QJsonValueRef::operator =(const QJsonValueRef &ref) +{ + if (is_object) + o->setValueAt(index, ref); + else + a->replace(index, ref); + + return *this; +} + QJsonArray QJsonValueRef::toArray() const { return toValue().toArray(); diff --git a/src/corelib/json/qjsonvalue.h b/src/corelib/json/qjsonvalue.h index 386bee25a40..9d4ad1d108d 100644 --- a/src/corelib/json/qjsonvalue.h +++ b/src/corelib/json/qjsonvalue.h @@ -147,6 +147,7 @@ public: inline operator QJsonValue() const { return toValue(); } QJsonValueRef &operator = (const QJsonValue &val); + QJsonValueRef &operator = (const QJsonValueRef &val); inline QJsonValue::Type type() const { return toValue().type(); } inline bool isNull() const { return type() == QJsonValue::Null; } diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 73b79b16070..7a11b5aec20 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -550,6 +550,11 @@ void TestQtJson::testValueRef() QJsonValue val = object[QLatin1String("null")]; QCOMPARE(val.toDouble(), 100.); QCOMPARE(object.size(), 2); + + array[1] = array[2] = object[QLatin1String("key")] = 42; + QCOMPARE(array[1], array[2]); + QCOMPARE(array[2], object[QLatin1String("key")]); + QCOMPARE(object.value(QLatin1String("key")), QJsonValue(42)); } void TestQtJson::testObjectIteration()