Hi,

This is a result of QVariant being a value type. If you make a copy and modify 
it, then the original remains as-is. The call to setContextProperty creates a 
copy. If you want explicitly shared data between the JavaScript environment and 
C++ then I would recommend using a JavaScript object - accessed from C++ as 
QJSValue, because those are explicitly shared.

Simon

  Original Message
From: Gerhard Scheikl
Sent: Sunday, June 14, 2015 19:43
To: development@qt-project.org
Subject: [Development] QVariantMap <-> QML


Hi

I recently discovered some unexpected behavior when exchanging a QVariantMap
with QML code:

Here's what I'm doing on the C++ side:
my_map = json_document.toVariant();
engine.rootContext()->setContextProperty("myMap", my_map);

Then on the QML side:
myMap.asdf.name = "asdf"

This change is not reflected in the original map.
Obviously, accessing asdf.name returns a copy.

Is this the intended behavior?
If so, how can I ensure that the data in C++ and on the QML side is always the
same?
(use QJSValue? use a QObject hierarchy with dynamic properties?)

Thanks!

Best regards
Gerhard
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to