diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2021-11-09 16:49:15 -0800 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2022-02-15 17:00:03 -0800 |
commit | 800f60657d28ad96e0021b4dcd812e3a3be4dcb1 (patch) | |
tree | c73f15c4ebdb01f60e0901b2bea7d0002972625c | |
parent | f5762cd4b3130a650044863c5be132056f05daa5 (diff) | |
download | qtbase-800f60657d28ad96e0021b4dcd812e3a3be4dcb1.tar.gz |
QJsonObject: use QJsonValueConstRef
Change-Id: I5e52dc5b093c43a3b678fffd16b608f32f8eb4b4
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
-rw-r--r-- | src/corelib/serialization/qjsonobject.cpp | 15 | ||||
-rw-r--r-- | src/corelib/serialization/qjsonobject.h | 19 | ||||
-rw-r--r-- | tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp | 69 |
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 |