This post explains shortly how to use a ListView with a simple model and a delegate to paint the model data.
To display a content in a ListView you need a model (e.g. ListModel) and a delegate (a Component).
The model contains the data to be displayed, the delegate knows how to paint each model element.
The ListView provides a flickable area, which lays out the elements in a vertical line.
import Qt 4.6 Rectangle { width: 200; height: 200 Component { id: delegate Item { width: 200; height: 28 Text { text: title } } } ListView { anchors.fill: parent model: model delegate: delegate } ListModel { id: model ListElement { title: "Germany" } ListElement { title: "France" } ListElement { title: "Italy" } ListElement { title: "United Kingdom" } } }
The ListView can also have a horizontal orientation or a highlighter component. The delegate is bound to the model by the model element names (here title
).
Besides the ListModel there is also a XmlListModel and a VisualItemModel. The XmlListModel get’s the data from an Xml content (e.g. RSS feed) and selects the right parts based on a XPath query. The VisualItemModel contains data and delegate. A good coverage of model data can be found here.
Here a more complex example:
import Qt 4.6 Rectangle { id: container width: 200; height: 200 Component { id: delegate Item { width: 200; height: 28 Text { x: 8 text: title anchors.verticalCenter: parent.verticalCenter } Rectangle { height: 12; width: population; anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter color: "lightsteelblue" } } } ListView { id: view anchors.fill: parent model: model delegate: delegate } ListModel { id: model ListElement { title: "Germany" population: 81 } ListElement { title: "France" population: 65 } ListElement { title: "Italy" population: 60 } ListElement { title: "United Kingdom" population: 62 } } }
The delegate now display a horizontal bar, based on the population
of the country.
Here the screenshot to the example:
