Comment mettre à jour la valeur dans Qml Affichage de la Liste?
J'ai un ListModel qui stocke une chaîne "cityName" et d'une valeur réelle "TimeZoneOffset". Comme son nom l'indique, cityName contient le nom de la ville et TimeZoneOffset détient le décalage de l'heure (UTC) en quelques minutes.
ListModel {
id: worldCity
ListElement {
cityName: "London"
TimeZoneOffset: 0
}
ListElement {
cityName: "Amsterdam"
TimeZoneOffset: 120
}
}
Ce modèle est ensuite utilisé dans une ListView. La liste a une structure, comme indiqué dans l'exemple de code ci-dessous.
ListView {
model: worldCity
currentIndex: -1
delegate: ListItem.Standard {
text: cityName
Label {
text: timeOffSet + currentSystemTime
}
}
}
Comme vous pouvez le voir, mon ListView montre une modification de la sortie au lieu de directement en sortie de la listModel élément. J'ai besoin de mettre à jour la liste des éléments de chaque minute pour afficher l'heure actuelle dans une ville. J'ai l'intention d'utiliser un chronomètre pour mettre à jour toutes les minutes.
Comment puis-je mettre à jour chaque élément listView?
Vous devez vous connecter pour publier un commentaire.
Pour moi, la mise à jour du modèle directement ne semble pas la bonne option, voici un simplifiée et améliorée de la version de votre code qui fait la bonne chose :
Le QML ListModel est très irrégulière pour les scripts, mais en regardant son code source, il est possible de savoir quelles méthodes sont disponibles pour itérer avec.
Si vous utilisez des api JSON et besoin d'objets pour être mis à jour en ligne pour exemple, ou si vous ne pouvez pas accéder à la
ListElement
directement, ce sont quelques méthodes que vous pouvez accéder à partir de votre modèle de script:Je préfère garder le modèle sur le C++, Qt côté. Donc, il est possible d'utiliser toutes les proxymodel choses. Sur l'intervalle Qt, vous devez définir l'objet C++ m_pMyModel comme des propriétés de la QML monde:
et de l'utiliser directement en avant dans QML:
Pour être en mesure d'utiliser les données dans QML délégués, vous devez créer un roleNames hash: