2010-08-20 3 views
2

Fondamentalement, j'ai besoin de générer un QVariantMap imbriqué. (Pensez JSON):Élégante référence non-const à un noeud QVariantMap?

{ "foo" : 1, "bar" : { "node" : 0 } } 

Je le fais dans Qt cette façon:

QVariantMap r, r_bar; 

r["foo"] = QVariant(1); 
r_bar["node"] = QVariant(0); 

r["bar"] = r_bar; 

Ce qui est très pratique pour les grandes structures imbriquées. Y at-il une façon élégante de le faire, comme celui-ci (syntaxe faux) ?:

r["foo"] = QVariant(1); 
r["bar"]["node"] = QVariant(0); 

Je ne peux pas le faire:

r["foo"].toMap()["node"] = QVariant(0) 

parce que toutes les fonctions « toSomething » de QVariant renvoient une copie du objet, pas une référence à celui-ci.

Quelqu'un peut-il m'aider avec ceci?

Merci!

+0

Habituellement, je crée simplement mon propre classe wrapper autour de Map et Variant pour accomplir ceci. L'idée est donc de ne pas insérer d'autres instances de la carte en tant que variantes, mais de les gérer séparément. – Virne

Répondre

2

Vous pouvez utiliser une seule carte comme ceci:

r["foo"] = QVariant(1); 
r["bar/node"] = QVariant(0); 

Le seul problème avec cette approche est que vous perdez la possibilité de parcourir des cartes sous. Il n'y a pas de moyen facile de trouver les sous-nœuds du nœud "barre".

Questions connexes