Home · All Classes · All Functions · Overviews

QML VisualDataModel Element Reference

The VisualDataModel encapsulates a model and delegate More...

Properties

Detailed Description

A VisualDataModel encapsulates a model and the delegate that will be instantiated for items in the model.

It is usually not necessary to create a VisualDataModel directly, since the QML views will create one internally.

The example below illustrates using a VisualDataModel with a ListView.

 VisualDataModel {
     id: visualModel
     model: myModel
     delegate: Component {
         Rectangle {
             height: 25
             width: 100
             Text { text: "Name:" + name}
         }
     }
 }
 ListView {
     width: 100
     height: 100
     anchors.fill: parent
     model: visualModel
 }

Property Documentation

delegate : component

The delegate provides a template defining each item instantiated by a view. The index is exposed as an accessible index property. Properties of the model are also available depending upon the type of Data Model.

Here is an example delegate:

     Component {
         id: delegate
         Item {
             id: wrapper
             width: 180; height: 40
             Column {
                 x: 5; y: 5
                 Text { text: '<b>Name:</b> ' + name }
                 Text { text: '<b>Number:</b> ' + number }
             }
         }
     }

model : model

This property holds the model providing data for the VisualDataModel.

The model provides a set of data that is used to create the items for a view. For large or dynamic datasets the model is usually provided by a C++ model object. The C++ model object must be a QAbstractItemModel subclass or a simple list.

Models can also be created directly in QML, using a ListModel or XmlListModel.

See also Data Models.


parts : object

The parts property selects a VisualDataModel which creates delegates from the part named. This is used in conjunction with the Package element.

For example, the code below selects a model which creates delegates named list from a Package:

 VisualDataModel {
     id: visualModel
     delegate: Package {
         Item { Package.name: "list" }
     }
     model: myModel
 }

 ListView {
     width: 200; height:200
     model: visualModel.parts.list
 }

See also Package.


rootIndex : QModelIndex

QAbstractItemModel provides a heirachical tree of data, whereas QML only operates on list data. rootIndex allows the children of any node in a QAbstractItemModel to be provided by this model.

This property only affects models of type QAbstractItemModel.

 // main.cpp
 Q_DECLARE_METATYPE(QModelIndex)

 class MyModel : public QDirModel
 {
     Q_OBJECT
 public:
     MyModel(QDeclarativeContext *ctxt) : QDirModel(), context(ctxt) {
         QHash<int,QByteArray> roles = roleNames();
         roles.insert(FilePathRole, "path");
         setRoleNames(roles);
         context->setContextProperty("myModel", this);
         context->setContextProperty("myRoot", QVariant::fromValue(index(0,0,QModelIndex())));
     }

     Q_INVOKABLE void setRoot(const QString &path) {
         QModelIndex root = index(path);
         context->setContextProperty("myRoot", QVariant::fromValue(root));
     }

     QDeclarativeContext *context;
 };

 int main(int argc, char ** argv)
 {
     QApplication app(argc, argv);

     QDeclarativeView view;

     MyModel model(view.rootContext());

     view.setSource(QUrl("qrc:view.qml"));
     view.show();

     return app.exec();
 }

 #include "main.moc"
 // view.qml
 import Qt 4.6

 ListView {
     width: 200
     height: 200
     model: VisualDataModel {
         model: myModel
         rootIndex: myRoot
         delegate: Component {
             Rectangle {
                 height: 25; width: 100
                 Text { text: path }
                 MouseRegion {
                     anchors.fill: parent;
                     onClicked: myModel.setRoot(path)
                 }
             }
         }
     }
 }


Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies) Trademarks
Qt 4.7.0