2017-07-03 3 views
0

J'ai donc eu un problème amusant avec les modèles de liste et les délégués.Impossible d'affecter QQmlListReference à QString

ListView{ 
.... 
    delegate: Component { 
     Text{ 
      text: data 
     } 
    } 
} 
... 

ListModel { 
    id: captureModel 
} 

... 

function updateList() { 
    ... 
    for (var i = 0; i < list.rows.length; ++i) { 
     captureModel.append({"data": list.rows.item(i).data}); 
    } 
} 

Quand j'ai essayé d'ajouter de nouvelles elemets au modèle de liste que je suis arrivé cette erreur: « Impossible d'attribuer QQmlListReference à QString. » J'ai finalement compris que le problème était que mon élément de liste s'appelait data. Je l'ai juste nommé quelque chose d'autre et ça a très bien fonctionné. Je pensais que le problème était que "données" était un mot réservé, mais je ne pouvais pas le trouver dans les listes Javascript ou QML. Bien que je ne pouvais pas trouver une liste officielle des mots réservés qml. Alors, vous connaissez une liste plus complète? Je voudrais éviter de trouver des mots réservés comme celui-ci ou si la question est en fait quelque chose d'autre que je voudrais entendre la réponse pour cela.

Ce sont les listes que je recherchais à:

https://www.w3schools.com/js/js_reserved.asp (Javascript).

https://git.eclipse.org/c/cdt/org.eclipse.cdt.git/commit/?id=4cc61d0449ed463408633016759694bc59badc04 (QML)

Merci à l'avance !!

Répondre

1

Vous avez raison de dire que votre problème est dû au fait que votre rôle d'élément de liste s'appelle data.

Le problème sous-jacent est que lorsque vous faites text: data vous accédez au data property de votre élément de texte. Les données de votre modèle sont masquées par la propriété. Par mesure de précaution, préfixez votre accès à vos rôles avec model pour éviter un conflit de noms avec vos propriétés de délégué. Dans votre cas, ce sera .

data n'est pas un mot clé réservé, il s'agit simplement du nom d'une des propriétés de votre délégué.