[Interest] QJsonDocument::fromVariant failing with list
Thiago Macieira
thiago.macieira at intel.com
Thu Jun 10 01:26:46 CEST 2021
On Wednesday, 9 June 2021 10:21:28 PDT Jason H wrote:
> > Stop using QVariantMapList. You want a QVariantMap.
>
> I think you meant QVariantList?:
> QVariantMap map {
> {"err", QVariant()},
> {"letters", QVariantList {
> QVariantMap {{"a",1}},
> QVariantMap {{"b",2}},
> QVariantMap {{"c",3}}
> }}
> };
No, I had really meant QVariantMap when I wrote, but I had no way of knowing
what *you* wanted. There's no JSON type that is a homogeneous list of maps, so
I had to infer what you had wanted.
> I had hoped that by using QList<QVariantMap> that I could omit the 3
> QVariantMaps above.
I think that's a limitation of the initialiser list. Does it still happen with
the CTAD deduction guides from Qt 6?
> But anyway, it seems my mistake was thinking that QVariant hold a
> QList<QVariantMap>, the best thing possible is the more general case of
> QVariantList, and this can be a heterogeneous collection of QVariants.
> Neither compiler nor Qt is capable of enforcing homogeneity as a QList of
> QVariantMaps AND having that collection being a QVariant itself, in a
> declaration. It would have to be built at runtime.
>
> Did I get that right?
QVariant can hold any type, so long as it's declared as a metatype and
registered (registration is automatic on first use). Your problem is that
QJsonDocument::fromVariant doesn't know about those extra types: you can use
QList<QVariantMap>, QVector<QVariantMap>, std::vector<QVariantMap> or anything
else. That doesn't make the type supported by the conversion routine.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel DPG Cloud Engineering
More information about the Interest
mailing list