Hello,

This is the cleanest way I can currently think of to concatenate 2
QJsonArrays:

    for (const auto& value : array2)
        array1 << value;

Most of Qt's array-like containers (QVector<T>, QList<T>, QByteArray,
QString) have concatenation functions, but QJsonArray doesn't. So, I
propose adding the following overloads, to match the other containers:

- QJsonArray::operator+(const QJsonArray&)
- QJsonArray::operator+=(const QJsonArray&)
- QJsonArray::operator<<(const QJsonArray&)


The gotcha: This can cause a behaviour change. Currently, inputting
QJsonArray into operator+=() makes valid code -- the QJsonArray is
implicitly converted into a single QJsonValue first. My proposal would make
the same code avoid the conversion and append each element individually
instead. Is this acceptable for Qt 5.x? (I don't know how widely-used is
the implicit conversion to QJsonValue)

Note that there has been one other behaviour change that I know of:
https://forum.qt.io/topic/50282/

    QJsonArray array1;
    // ...
    QJsonArray array2{array1};

In Qt 5.3, array2 is a copy of array1. However, Qt 5.4 introduced the
initializer list-based constructor. This constructor implicitly converts
array1 into a single QJsonValue, so array2 contains one element only.
Ideally, this change would not have happened (and ideally, my proposed
overloads would have been added back in Qt 5.3, when the single-element
versions were added).

So, we can now choose between maintaining SC, or having a more functional
API that's more consistent with other containers. Which is the correct
choice?


Regards,
Sze-Howe
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to