> From: Dmitry Volosnykh <[email protected]>
> Sent: lundi 18 juin 2018 13:40
>
> FYI, there's QTBUG-29095 and QTBUG-25723 that feel like somewhat related to
> the problem under discussion.
I guess QTBUG-25723 is the kind of problem that Thiago solved for QCborValue
For the use case described in QTBUG-29095, I think my QBind proposal could be
used instead of QJsonDocument. For instance, it can iterate over a possibly
infinite JSON sequence, binding one item at a time to an appropriate in-memory
data structure. So you would have to worry about accidental detaches and could
use the in-memory data structure to filter or modify each item.
MyItem myItem;
auto i = QJsonReader(&file).begin().sequence().item();
while (i) {
i = i.bind(myItem);
// do whatever you want to myItem
}
> On Mon, Jun 18, 2018 at 2:33 PM Jason H <[email protected]> wrote:
> +1 this.
> I'd prefer Arne's over the bind below. I do want value updates to be emitted
> so that we only have to change the data to keep dependent structures updated.
> I've suggested having some kind of xpath watcher facility...
> Having done some web UIs powered by a Ajax, (and qt will undoubtedly power
> some web backends) you need a facility to keep 2 trees in sync - the server
> data and the web UI model. However it should be the same for QML or widget
> UIs... And in my dream world, a proper QML web UI. But no matter how it
> works, you need to be able to broadcast minimal data changes to the tree to
> listeners (clients).
Not sure I understand you correctly. If you miss a generic data structure with
in-place editing, QCborValue or QJsonValue (sharing the same backend) may be a
candidate, as are QVariant* or your own classes. QBind is not a data structure
but a kind of generic iterator for data structures.
However, since QBind can traverse any data structure in a generic way, it can
be used to serialize/deserialize you own specific data structures without
having to first convert them to a generic data structure such as QCborValue.
Converting to QCborValue would only be required to use specific Cbor features
such as tags.
> > Sent: Friday, June 15, 2018 at 3:46 PM
> > From: "Tor Arne Vestbø" <[email protected]>
> >
> > Not commenting on this API, but I’d like to note that the API I brought up
> > as “missing” from my use-case was a more “light weight” in-place edit API,
> > where the user does not have to define bindings to data structures like
> > above. Similar to e.g. python:
I guess the same answer as above applies.
BTW, I have committed a QBind POC on our gitlab to explain what I am talking
about:
https://gricad-gitlab.univ-grenoble-alpes.fr/modmed/modmedLog/tree/f6b257d806ee50db2c5c86d90757b54ec898391b/tests/QBind
Again, this POC does not provide any in-memory data structure, it just
demonstrates
how to traverse data structures in a way that is generic enough to be serialized
in different ways.
The POC is voluntarily "condensed" in a single main.cpp file + an alternate
QCborWriter.hpp implementation.
The QJsonWriter now demonstrates same or better performance than hand-written
serialization using QDebug, and QCborWriter is 2 to 3 times more efficient than
QDebug. As opposed to QDebug, it guarantees well-formedness of the data, so it
can always be re-read.
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development