Estoy intentando acceder a un rol desde un ListView en QML. En esencia, tengo esto en mi QML:¿Cómo accedes a las funciones del elemento actual desde una vista de lista en QML?
ListView {
id: myId
model: myModel
delegate: Item {
Text {
text: model.text
}
Text {
text: model.moreText
}
}
}
myModel
es una aplicación QAbstractListModel. La parte QML de esto es un componente reutilizable, por lo que el modelo podría tener cualquier cantidad de roles diferentes con varios tipos de datos. Lo que me gustaría hacer es vincular el valor de una función determinada de la propiedad currentItem
de ListView. En otras palabras, me gustaría tener alguna otra Component
en la página que podría obligar a una propiedad del elemento seleccionado actualmente en el ListView de la siguiente manera:
Text {
text: myId.currentItem.text // Or myId.currentItem.model.text (or something similar)
}
Por favor, tenga en cuenta que necesito esta manera genérica disponible, ya que haré esto mucho para una serie de tipos de modelos y estoy tratando de no escribir ese tipo de código personalizado para cada modelo y ListView.
Parece que debería ser fácil acceder a una propiedad del elemento seleccionado en ese momento, pero hasta donde sé, no es posible. El problema se complica aún más por el hecho de que los modelos parecen ser tratados de manera diferente cuando solo hay una función. Con esto quiero decir que a veces accedes a tus roles a través del model.roleName
, mientras que cuando solo hay una función, utilizas modelData
.
Si alguien tiene alguna sugerencia, realmente lo agradecería. ¡Muchas gracias!
EDITAR
encontré esto:
http://comments.gmane.org/gmane.comp.lib.qt.qml/1778
Sin embargo, esto no parece funcionar para mí. Recibo errores de tipo cuando trato de usar los datos en mis scripts QML, y no hay ningún tipo de conversión disponible, así que no estoy seguro de qué hacer. Cualquier sugerencia es bienvenida!
Gracias!
Jack
¡Muchísimas gracias por su respuesta! Hmm ... pensé que lo intenté exhaustivamente, pero puede haber algunos matices que me he perdido. ¡Es bueno saber que está funcionando para alguien! Volveré a dar una solución a esta solución y veré si funciona bien. Aprecio la aclaración entre model.role y modelData. Te dejaré saber cómo van las cosas. ¡Gracias de nuevo! –
Parece que funciona. No estoy seguro de lo que me había perdido antes. De cualquier manera, esta solución llevó horas encontrarla, así que con suerte ahora que está en StackOverflow, otras personas podrán encontrarla rápidamente. ¡Gracias de nuevo! –
¿Hay alguna forma de abstraer sobre los diferentes tipos de modelos? Pregunto porque me gustaría manejar un QML ListModel durante las pruebas y una lista de objetos en la aplicación C++ usando el mismo código QML. – ssc