[Development] QVariant container API
thiago.macieira at intel.com
Mon Apr 1 12:01:43 CEST 2019
On Monday, 1 April 2019 11:09:27 CEST Vasily Pupkin wrote:
> I would like to submit a patch. Since it is probably going to break binary
> compatibility and is mostly about coding conventions, I would like to have
> some feedback before investing time.
If it's going to break BC, it's a Qt6 API only. Please design your change so
that it exists inside an #ifdef alongside the existing code.
> The general idea is to create a playground project for automatic
> (de)serialization for Qt (not manual, i.e. overriding operators). The only
> stopper is container deserialization.
I'm not sure I want to see more Datastream-based serialisation. The code there
is too fragile and not compatible enough with standards. I recommend you
reconsider and think about a more standard format.
> Seriazation is quite straightforward via QSequentialIterable and
> QAssociativeIterable. But deserialization is currently possible only by
> QMetaType::registerConverter. I think, that this is would be so nice to
> have an ability to create a container via QVariant from collection of
> QVariant instances without a need for custom converters.
> QList<QVariant> variantContainer;
> QVariant variant(QVariant::fromValue(variantContainer));
> QVariant containerVariant(variant.convert(qMetaTypeId<QList<int> >()));
This is a very lossy conversion without sufficient error reporting. That's an
example of why I don't think we should invest more time in this type of API.
> And so I have stumbled into a problem. QSequentialIterable and
> QAssociativeIterable related code is scattered across <qvariant.h> and
> <qmetatype.h>. All related conversions are conveyed in templates, instead
> 387 .
> I just don't feel, that further
> 2 and
> 121 development
> is the way to go.
Nor I. That code is black magic to me and I don't touch it.
> And so the question is: should I try to refactor sequential and associative
> iterators, so templates are used only to staticaly gather information about
> containers and conversions are made in qvariant.cpp, where they belong?
I suggest you leave it alone.
> It also would be nice to hear, if someone acknowledges this conversion
> feature to be of use.
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel System Software Products
More information about the Development