Connecting a dynamic QMap to Qml
-
Let's say i have a
QMap<MyKey*, MyObject*> myobjects
, it it possible to connect this to qml throughQQmlListProperty<MyObject>
PS: MyKey is not needed in qml, wich can be thrown away with
myobjects.values()
but that returns a pointer to aQList<MyObjects>
but that throws an segmentation error when creating qqmllistproperty -
@Maxim-DC If you don't need
MyKey*
in QML then you can useQVariantMap
with custom objects as values. The custom object will need to be registered first usingqmlRegisterType
. Also sinceQVariantMap
usesQVariant
as 2nd parameter you will need to make that custom objectQVariant
. To sum up,
For eg.//register MyClass before using qmlRegisterType<MyClass>("MyClass",1,0,"MyClass"); MyClass *myclass = new MyClass; myclass->setText("MyClass Item"); //some method in MyClass //add it to QVariant QVariant var = QVariant::fromValue(myclass); //add it to QVariantMap QVariantMap map; map.insert("myclass",var); //set the map as context property engine.rootContext()->setContextProperty("mapObj",QVariant::fromValue(map)); //access from QML import MyClass 1.0 console.log(mapObj["myclass"]) console.log(mapObj["myclass"].text()) //text() is a public slot in MyClass
Also make sure
MyClass
inheritsQObject
-
@Maxim-DC If you want to reuse your existing
QMap
then it would be better to create a new class based on QAbstractIItemModel. In there you can re-implementdata()
to return your data fromQMap
.