summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2021-11-09 16:49:15 -0800
committerThiago Macieira <thiago.macieira@intel.com>2022-02-15 17:00:03 -0800
commit800f60657d28ad96e0021b4dcd812e3a3be4dcb1 (patch)
treec73f15c4ebdb01f60e0901b2bea7d0002972625c
parentf5762cd4b3130a650044863c5be132056f05daa5 (diff)
downloadqtbase-800f60657d28ad96e0021b4dcd812e3a3be4dcb1.tar.gz
QJsonObject: use QJsonValueConstRef
Change-Id: I5e52dc5b093c43a3b678fffd16b608f32f8eb4b4 Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
-rw-r--r--src/corelib/serialization/qjsonobject.cpp15
-rw-r--r--src/corelib/serialization/qjsonobject.h19
-rw-r--r--tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp69
3 files changed, 26 insertions, 77 deletions
diff --git a/src/corelib/serialization/qjsonobject.cpp b/src/corelib/serialization/qjsonobject.cpp
index a06af5d02d..502d64d854 100644
--- a/src/corelib/serialization/qjsonobject.cpp
+++ b/src/corelib/serialization/qjsonobject.cpp
@@ -1003,11 +1003,16 @@ QJsonObject::const_iterator QJsonObject::constFindImpl(T key) const
\sa key()
*/
-/*! \fn QJsonValueRef *QJsonObject::iterator::operator->() const
+/*! \fn QJsonValueRef *QJsonObject::iterator::operator->()
Returns a pointer to a modifiable reference to the current item.
*/
+/*! \fn const QJsonValueConstRef *QJsonObject::iterator::operator->() const
+
+ Returns a pointer to a constant reference to the current item.
+*/
+
/*! \fn const QJsonValueRef QJsonObject::iterator::operator[](qsizetype j)
Returns a modifiable reference to the item at offset \a j from the
@@ -1238,14 +1243,14 @@ QJsonObject::const_iterator QJsonObject::constFindImpl(T key) const
\sa value()
*/
-/*! \fn QJsonValueRef QJsonObject::const_iterator::value() const
+/*! \fn QJsonValueConstRef QJsonObject::const_iterator::value() const
Returns the current item's value.
\sa key(), operator*()
*/
-/*! \fn const QJsonValueRef QJsonObject::const_iterator::operator*() const
+/*! \fn const QJsonValueConstRef QJsonObject::const_iterator::operator*() const
Returns the current item's value.
@@ -1254,12 +1259,12 @@ QJsonObject::const_iterator QJsonObject::constFindImpl(T key) const
\sa key()
*/
-/*! \fn const QJsonValueRef *QJsonObject::const_iterator::operator->() const
+/*! \fn const QJsonValueConstRef *QJsonObject::const_iterator::operator->() const
Returns a pointer to the current item.
*/
-/*! \fn const QJsonValue QJsonObject::const_iterator::operator[](qsizetype j)
+/*! \fn const QJsonValueConstRef QJsonObject::const_iterator::operator[](qsizetype j)
Returns the item at offset \a j from the item pointed to by this iterator (the item at
position \c{*this + j}).
diff --git a/src/corelib/serialization/qjsonobject.h b/src/corelib/serialization/qjsonobject.h
index 5c0cc1f5dc..e569d85192 100644
--- a/src/corelib/serialization/qjsonobject.h
+++ b/src/corelib/serialization/qjsonobject.h
@@ -121,7 +121,7 @@ public:
{
friend class const_iterator;
friend class QJsonObject;
- mutable QJsonValueRef item;
+ QJsonValueRef item;
public:
typedef std::random_access_iterator_tag iterator_category;
@@ -144,7 +144,8 @@ public:
inline QString key() const { return item.o->keyAt(item.index); }
inline QJsonValueRef value() const { return item; }
inline QJsonValueRef operator*() const { return item; }
- inline QJsonValueRef *operator->() const { return &item; }
+ inline const QJsonValueConstRef *operator->() const { return &item; }
+ inline QJsonValueRef *operator->() { return &item; }
const QJsonValueRef operator[](qsizetype j) { return { item.o, qsizetype(item.index) + j }; }
inline bool operator==(const iterator &other) const
@@ -184,14 +185,14 @@ public:
class const_iterator
{
friend class iterator;
- QJsonValueRef item;
+ QJsonValueConstRef item;
public:
typedef std::random_access_iterator_tag iterator_category;
typedef qsizetype difference_type;
typedef QJsonValue value_type;
- typedef const QJsonValueRef reference;
- typedef const QJsonValueRef *pointer;
+ typedef const QJsonValueConstRef reference;
+ typedef const QJsonValueConstRef *pointer;
inline const_iterator() : item(static_cast<QJsonObject*>(nullptr), 0) { }
inline const_iterator(const QJsonObject *obj, qsizetype index)
@@ -208,10 +209,10 @@ public:
}
inline QString key() const { return item.o->keyAt(item.index); }
- inline QJsonValueRef value() const { return item; }
- inline const QJsonValueRef operator*() const { return item; }
- inline const QJsonValueRef *operator->() const { return &item; }
- const QJsonValueRef operator[](qsizetype j) { return { item.o, qsizetype(item.index) + j }; }
+ inline QJsonValueConstRef value() const { return item; }
+ inline const QJsonValueConstRef operator*() const { return item; }
+ inline const QJsonValueConstRef *operator->() const { return &item; }
+ const QJsonValueConstRef operator[](qsizetype j) { return { item.o, qsizetype(item.index) + j }; }
inline bool operator==(const const_iterator &other) const
{ return item.o == other.item.o && item.index == other.item.index; }
diff --git a/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp b/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp
index cd721f249b..98c045aeaf 100644
--- a/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp
+++ b/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp
@@ -205,65 +205,6 @@ QJsonObject tst_QHighDpi::offscreenConfiguration()
return getConfiguration(platformNativeInterface);
}
-// JsonValueRef implements support for mutating nested JSON structures, e.g.
-//
-// JsonValueRef::get(&config)["screens"][0]["logicalDpi"] = 192
-//
-class JsonValueRef {
-public:
- static JsonValueRef get(QJsonValue *value) {
- return JsonValueRef(value);
- }
-
- JsonValueRef(QJsonValue *value)
- : m_value(value) { }
-
- JsonValueRef(QJsonValue *value, JsonValueRef *parent, QString key)
- : m_value(value), m_parent(parent), m_key(key) { }
-
- JsonValueRef(QJsonValue *value, JsonValueRef *parent, int index)
- : m_value(value), m_parent(parent), m_index(index) { }
-
- ~JsonValueRef() {
- if (m_parent) {
- if (!m_key.isNull()) {
- QJsonObject parentObject = m_parent->m_value->toObject();
- parentObject[m_key] = *m_value;
- *m_parent->m_value = parentObject;
- } else if (m_index > -1) {
- QJsonArray parentArray = m_parent->m_value->toArray();
- parentArray[m_index] = *m_value;
- *m_parent->m_value = parentArray;
- }
- delete m_value; // owned if we have a parent, see operator[]
- }
- }
-
- JsonValueRef operator[](const char *str) {
- QString key = QString::fromUtf8(str);
- return JsonValueRef(new QJsonValue((*m_value)[key]), this, key);
- }
-
- JsonValueRef operator[](int index) {
- return JsonValueRef(new QJsonValue((*m_value)[index]), this, index);
- }
-
- void operator=(int value) {
- *m_value = QJsonValue(value);
- }
-
- void operator=(const char *str) {
- *m_value = QJsonValue(QString(str));
- }
-
-private:
- Q_DISABLE_COPY(JsonValueRef);
- QJsonValue *m_value = nullptr;
- JsonValueRef *m_parent = nullptr;
- QString m_key;
- int m_index = -1;
-};
-
void tst_QHighDpi::cleanup()
{
// Some test functions set environment variables. Unset them here,
@@ -329,10 +270,12 @@ void tst_QHighDpi::screenDpiChange()
// Set new DPI
int newDpi = 192;
QJsonValue config = offscreenConfiguration();
- JsonValueRef::get(&config)["screens"][0]["logicalDpi"] = newDpi;
- JsonValueRef::get(&config)["screens"][1]["logicalDpi"] = newDpi;
- JsonValueRef::get(&config)["screens"][2]["logicalDpi"] = newDpi;
- setOffscreenConfiguration(config.toObject());
+ // API defect until Qt 7, so go indirectly via CBOR
+ QCborMap map = QCborMap::fromJsonObject(config.toObject());
+ map[QLatin1String("screens")][0][QLatin1String("logicalDpi")] = newDpi;
+ map[QLatin1String("screens")][1][QLatin1String("logicalDpi")] = newDpi;
+ map[QLatin1String("screens")][2][QLatin1String("logicalDpi")] = newDpi;
+ setOffscreenConfiguration(map.toJsonObject());
// TODO check events