Follow-up on my data model issue:
> On the QML + JS side I had a simple listmodel along the lines:
> ListModel {
>     ListElement { start: "12:30"; ... ; legs: [ { type: "train"; id:
> "IC82"; ... }, ... ] }
>     ListElement { start: "13:00"; ... ; legs: [ { type: "train"; id:
> "S62"; ... }, ... ] }
> }
> 
> I can then visualize this using ListView and having a Repeater to go
> through the elements "legs" data. Resulting in something like this:
> | 1. Start: 12:30 ... | IC82 | ... |
> | 2. Start: 13:00 ... | S62  | ... |
...
> Now I'm not sure how to achieve the same functionality from C++ side.
...
> Documentation suggests using QAbstractItemModel and VisualDataModel,
> but that seems a bit overly complex? E.g. Could
> QAbstractListModel::data return an another QAbstractListModel that the
> Repeater could use directly?

I ended up trying CAbstractItemModel on the C++ side and VisualDataModel on the 
QML side. It took some trial and error to get the right hooks in place but 
here's how I did it:
1) C++ side: CAbstractItemModel inherited model that has logic built-in to the 
index method so it switches to right data set when rootIndex is changed from 
QML side 
2) C++ side: data method logic to see what data set is been traversed and 
return the requested role data
3) QML Side: Nested VisualDataModels in ListView to build the visualization. 
Example:
ListView {
    model: VisualDataModel {
        id: firstDataModel
        model: myModel
            delegate: Rectangle {
                   Text { text: startTime }
... 
                   Repeater {
                        model: VisualDataModel {
                            id: proxyModel
                            model: myModel
                            rootIndex: firstDataModel.modelIndex(index)
                            delegate:
                                Text { text: trainId }
                            }
                        }
...
}

A bit messy looking example (model, model, model, model :-)) but it works. Now 
I have the visualization I wanted, rows with a mash-up of data from two lists. 
Could the documentation be enhanced in this area? Some things took a while to 
understand when inheriting from CAbstractItemModel.

Regards,
Ari


_______________________________________________
Qt-qml mailing list
Qt-qml@trolltech.com
http://lists.trolltech.com/mailman/listinfo/qt-qml

Reply via email to