Comment accéder aux rôles de currentItem à partir d'une listview dans QML?
J'essaye d'accéder à un rôle d'une ListView en QML. En gros, j'ai ceci dans mon QML:
ListView {
id: myId
model: myModel
delegate: Item {
Text {
text: model.text
}
Text {
text: model.moreText
}
}
}
myModel
est un QAbstractListModel mise en œuvre. Le QML partie de ce qui est un composant réutilisable, de sorte que le modèle pourrait avoir n'importe quel nombre de rôles différents avec différents types de données. Ce que je voudrais faire est de se lier à la valeur du rôle de la currentItem
propriété de la ListView. En d'autres termes, j'aimerais avoir quelques autres Component
sur la page qui pourrait lier une propriété de l'élément actuellement sélectionné dans la liste comme suit:
Text {
text: myId.currentItem.text //Or myId.currentItem.model.text (or something similar)
}
Veuillez garder à l'esprit que j'ai besoin de cette manière générique disponible, comme je vais le faire beaucoup pour un certain nombre de types de modèle et j'essaie de ne pas écrire ce genre de code personnalisé pour chaque modèle et de la ListView.
Il semble que ce devrait être simple pour accéder à une propriété de l'élément actuellement sélectionné, mais aussi loin que je peux dire c'est pas possible. Le problème est en outre compliquée par le fait que les modèles semblent être traités différemment quand il n'y a qu'un seul rôle. Par cela, je veux dire que, parfois, vous accédez à vos rôles à l'aide model.roleName
alors que quand il n'y a qu'un seul rôle que vous utilisez modelData
.
Si quelqu'un a des suggestions, je voudrais vraiment l'apprécier. Merci beaucoup!
MODIFIER
J'ai trouvé ceci:
http://comments.gmane.org/gmane.comp.lib.qt.qml/1778
Toutefois, cela ne semble pas fonctionner pour moi. J'obtiens des erreurs de type lorsque j'essaie d'utiliser les données dans mon QML scripts, et il n'y a pas de conversion de type de disponible donc je ne sais pas quoi faire. Toutes les suggestions sont les bienvenues!
Merci!
Jack
source d'informationauteur Jack Benson
Vous devez vous connecter pour publier un commentaire.
Le code à http://comments.gmane.org/gmane.comp.lib.qt.qml/1778 devrait fonctionner, même si je n'y voyez des erreurs si la propriété est nommé "data"; on dirait qu'il est primordial certains bâti existant en propriété. Renommage en "myData" semble de travail:
(Le myId.currentItem.texte code dans le post original n'a pas de travail parce que cela a été d'essayer de se référer à un texte de la propriété au sein de votre délégué, qui n'existait pas.)
En ce qui concerne la référence à modèle vs modelData au sein du délégué, la différence dépend du type du modèle, plutôt que le nombre de rôles dans le modèle. Si le modèle est une liste de chaînes ou de l'objet de la liste, modelData est utilisé pour se référer à la chaîne individuelle ou d'un objet à partir de l'intérieur d'un délégué (depuis les listes de chaînes et les listes d'objets n'ont pas tous les rôles). Pour tous les autres modèles, y compris le QML ListModel et de l'intervalle Qt C++ QAbstractItemModel, modèle.rôle peut être utilisé pour se référer à un rôle au sein d'un délégué.
Vous pouvez également accéder au modèle directement, avec quelque chose comme
Vous pouvez accéder à un ListElement de ListModel à l'aide de get() de la fonction.