> On 15 Apr 2023, at 12:07, Volker Hilsheimer <volker.hilshei...@qt.io> wrote: > >> On 14 Apr 2023, at 23:11, Thomas Sevaldrud <tho...@silentwings.no> wrote: >> >> Hi, in my code I have a hierarchical QMultiMap of QVariants, where a map >> value can be a new multimap of variants. This does not compile anymore in Qt >> 6. I.e. something like this: >> >> QMultiMap<QString, QVariant> varMap; >> QMultiMap<QString, QVariant> subMap; >> varMap.insert("key", subMap); // Compile error here, since there is no >> conversion to QVariant >> >> This worked in 5.15, but not in 6.5 >> >> If I change it to QMap it works, but I need multimap for this. Is this >> change by design, or is it an omission? Any ideas for a workaround? >> >> Cheers, >> Thomas > > > In Qt 5, QMultiMap was a subclass of QMap, so implicitly constructing a > QVariant from a QMultiMap was possible because it was possible from a QMap. > That happened to work because QMultiMap just added API on top of a QMap, and > QMap’s data structure could handle multiple values for the same key. So no > slicing occurred. However, if you run: > > #include <QtCore> > > int main(int argc, char *argv[]) > { > QMultiMap<QString, QVariant> varMap; > QMultiMap<QString, QVariant> subMap; > varMap.insert("key", subMap); > qDebug() << varMap.value("key").typeName(); > > return 0; > } > > then you would get QVariantMap (ie a QMap<QString, QVariant>), not QMultiMap. > So modifying the value you got out of the map would not give you multi-map > semantics. > > > In Qt 6, QMultiMap is not a QMap subclass anymore (and that was a design > decision), and since it’s such a rarely used type there is also no implicit > constructor or conversion operator, and no built-in metatype defined for > QMultiMap. > > But since QVariant can be constructed from custom types via the fromValue > template, you can use: > > varMap.insert("key", QVariant::fromValue(subMap)); > > and now you can’t get it out as a QVariantMap anymore, and the code above > will print “QMultMap<QString,QVariant>”, like it should. > > Volker >
Cool, thanks! That makes sense. We probably never had any submaps in this structure with non-unique keys, so we never got this problem. This is of course much better. Thanks again! - Thomas _______________________________________________ Interest mailing list Interest@qt-project.org https://lists.qt-project.org/listinfo/interest