[Qt-qml] Implementing a GraphView in QML

Le gall Franck legallfranck at yahoo.com
Wed Jun 15 01:00:15 CEST 2011


Hi All,
 
Say I have a C++ QAbstractListModel used to manipulate of collection of Item objects. Each item has -per say- a price and year property. What I'm trying to do is to display this model in multiple views: items with year=1980 fall in view1, items with year=1985 fall int view2, ... As an exmple, you can look the GraphView at: http://research.microsoft.com/en-us/um/people/bibuxton/buxtoncollection/pivot.htm 
 
I think the right approach for that is using a VisualDataModel and a Package Element. The Package Element contains as much delegates as available years, and I should create as much views as available years.
A straightforward approach might be something as follows (say my items fall either in 1980 or 1985 category):
 
Delegate.qml:
 
Package {
    Item {
         Package.name: 'year1980'
    }
    Item {
        Package.name: 'year1985'
    }
    // Main rectangle:
    Rectangle {
       id: rectangle
       states: [
           State {
               name: '1980'
               ParentChange {
                   target: rectangle;
                   parent: 1980Delegate
               }
           },
           State {
              name: '1985'
              ParentChange {
                  target: rectangle
                  parent: 1985Delegate
 
View.qml:
Rectangle {
    // Main canvas:
    id: main
    // Center in parent:
    anchors.fill: parent
    // VisualDataModel:
    VisualDataModel {
        id: visualModel
        delegate: Delegate {id: mainPackage}
        model: itemsModel
    }
    // View1 for 1980 items:
    Grid {
        id: centralView
        columns: 3
        // Repeater view:
        Repeater
        {
            model: visualModel.parts.year1980
        }
    }
    // View for 1985 items:
    Grid {
        id: northWestView
        // To the north-west:
        anchors.left: main.right
        
        // Set number of columns:
        columns: 3
        // Repeater view:
        Repeater
        {
            model: visualModel.parts.year1985
        }
    }
 
Obviously, this approach is not acceptable as I have no idea of which years will be available inside my collection of Item objects...
 
Questions:
- Is this the right approach for implementing such a feature?
If yes:
- How would you "dynamically" create as much parts inside the Package Element as available years?
- How would you "generically" access these parts? The only way today is to refer to the part name as a string: visualModel.parts.year1980 for example...
- How would you "dynamically" create as much views as available years?
- How would you "generically" set the model on a specific view? rather than: 
model: visualModel.parts.year1980 
something like (in a loop): model: visualModel.parts[i]
 
Thanks,
 
Franck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.qt.nokia.com/pipermail/qt-qml/attachments/20110614/94f8e267/attachment-0001.html 


More information about the Qt-qml mailing list