aboutsummaryrefslogtreecommitdiffstats
path: root/doc/src/qtquick2/modelview.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/qtquick2/modelview.qdoc')
-rw-r--r--doc/src/qtquick2/modelview.qdoc378
1 files changed, 0 insertions, 378 deletions
diff --git a/doc/src/qtquick2/modelview.qdoc b/doc/src/qtquick2/modelview.qdoc
deleted file mode 100644
index 28f5a5766b..0000000000
--- a/doc/src/qtquick2/modelview.qdoc
+++ /dev/null
@@ -1,378 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/
-**
-** This file is part of the documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:FDL$
-** GNU Free Documentation License
-** Alternatively, this file may be used under the terms of the GNU Free
-** Documentation License version 1.3 as published by the Free Software
-** Foundation and appearing in the file included in the packaging of
-** this file.
-**
-** Other Usage
-** Alternatively, this file may be used in accordance with the terms
-** and conditions contained in a signed written agreement between you
-** and Nokia.
-**
-**
-**
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-/*!
-\page qtquick-modelview.html
-\title Models and Views
-\brief how to display and form data in QML
-
-Simply put, applications need to form data and display the data. QML has the
-notion of \e models, \e views, and \e delegates to display data. They modularize
-the visualization of data in order to give the developer or designer control
-over the different aspects of the data. A developer can swap a list view with a
-grid view with little changes to the data. Similarly, encapsulating an instance
-of the data in a delegate allows the developer to dictate how to present or
-handle the data.
-
-\image modelview-overview.png
-\list
-\li \b Model - contains the data and its structure. There are several QML
-elements for creating models.
-\li \b View - a container that displays the data. The view might
-display the data in a list or a grid.
-\li \b Delegate - dictates how the data should appear in the view.
-The delegate takes each data in the model and encapsulates it. The data is
-accessible through the delegate.
-\endlist
-
-To visualize data, bind the view's \c model property to a model and the
-\c delegate property to a component or an element.
-
-\section1 Displaying Data with Views
-
- Views are containers for collections of items. They are feature-rich and can be
- customizable to meet style or behavior requirements.
-
- \keyword qml-view-elements
- A set of standard views are provided in the basic set of Qt Quick
- graphical elements:
-
- \list
- \li \l{ListView} - arranges items in a horizontal or vertical list
- \li \l{GridView} - arranges items in a grid within the available space
- \li \l{PathView} - arranges items on a path
- \endlist
-
- These elements have properties and behaviors exclusive to each element.
- Visit their respective documentation for more information.
-
- \section2 Decorating Views
-
- Views allow visual customization through \e decoration properties such as
- the \c header, \c footer, and \c section properties. By binding an object,
- usually another visual object, to these properties, the views are
- decoratable. A footer may include a \l Rectangle element showcasing borders
- or a header that displays a logo on top of the list.
-
- Suppose that a specific club wants to decorate its members list with its brand
- colors. A member list is in a \c model and the \c delegate will display the
- model's content.
- \snippet doc/src/snippets/qml/listview-decorations.qml model
- \snippet doc/src/snippets/qml/listview-decorations.qml delegate
-
- The club may decorate the members list by binding visual objects to the \c
- header and \c footer properties. The visual object may be defined inline, in
- another file, or in a \l {Component} element.
- \snippet doc/src/snippets/qml/listview-decorations.qml decorations
- \image listview-decorations.png
-
- \section2 Mouse and Touch Handling
-
- The views handle dragging and flicking of their content, however they do
- not handle touch interaction with the individual delegates. In order for the
- delegates to react to touch input, e.g. to set the \c currentIndex, a MouseArea
- with the appropriate touch handling logic must be provided by the delegate.
-
- Note that if \c highlightRangeMode is set to \c StrictlyEnforceRange the
- currentIndex will be affected by dragging/flicking the view, since the view
- will always ensure that the \c currentIndex is within the highlight range
- specified.
-
-
- \section2 ListView Sections
-
- \l {ListView} contents may be grouped into \e sections, where related list
- items are labeled according to their sections. Further, the sections may be
- decorated with \l{qml-view-delegate}{delegates}.
-
- A list may contain a list indicating people's names and the team on which
- team the person belongs.
- \snippet doc/src/snippets/qml/listview-sections.qml model
- \snippet doc/src/snippets/qml/listview-sections.qml delegate
-
- The ListView element has the \c section \l{Property Binding in QML#Attached
- Properties}{attached property} that can combine adjacent and related
- elements into a section. The section's \c property property is for selecting
- which list element property to use as sections. The \c criteria can dictate
- how the section names are displayed and the \c delegate is similar to the
- views' \l {qml-view-delegate}{delegate} property.
- \snippet doc/src/snippets/qml/listview-sections.qml section
- \image listview-section.png
-
-\keyword qml-view-delegate
-\section1 View Delegates
-
- Views need a \e delegate to visually represent an item in a list. A view will
- visualize each item list according to the template defined by the delegate.
- Items in a model are accessible through the \c index property as well as the
- item's properties.
- \snippet doc/src/snippets/qml/listview.qml delegate
- \image listview-setup.png
-
- \section2 Accessing Views and Models from Delegates
-
- The list view to which the delegate is bound is accessible from the delegate
- through the \c{ListView.view} property. Likewise, the GridView
- \c{GridView.view} is available to delegates. The corresponding model and its
- properties, therefore, are available through \c{ListView.view.model}. In
- addition, any defined signals or methods in the model are also accessible.
-
- This mechanism is useful when you want to use the same delegate for a number
- of views, for example, but you want decorations or other features to be
- different for each view, and you would like these different settings to be
- properties of each of the views. Similarly, it might be of interest to
- access or show some properties of the model.
-
- In the following example, the delegate shows the property \e{language} of
- the model, and the color of one of the fields depends on the property
- \e{fruit_color} of the view.
-
- \snippet doc/src/snippets/qml/models/views-models-delegates.qml rectangle
-
-\keyword qml-data-models
-\section1 Models
-
- Data is provided to the delegate via named data roles which the delegate may
- bind to. Here is a ListModel with two roles, \e type and \e age, and a
- ListView with a delegate that binds to these roles to display their values:
-
- \snippet doc/src/snippets/qml/qml-data-models/listmodel-listview.qml document
-
- If there is a naming clash between the model's properties and the delegate's
- properties, the roles can be accessed with the qualified \e model name
- instead. For example, if a \l Text element had \e type or \e age properties,
- the text in the above example would display those property values instead of
- the \e type and \e age values from the model item. In this case, the
- properties could have been referenced as \c model.type and \c model.age
- instead to ensure the delegate displays the property values from the model
- item.
-
- A special \e index role containing the index of the item in the model is
- also available to the delegate. Note this index is set to -1 if the item is
- removed from the model. If you bind to the index role, be sure that the
- logic accounts for the possibility of index being -1, i.e. that the item is
- no longer valid. (Usually the item will shortly be destroyed, but it is
- possible to delay delegate destruction in some views via a \c delayRemove
- attached property.)
-
- Models that do not have named roles (such as the ListModel shown
- below) will have the data provided via the \e modelData role. The \e
- modelData role is also provided for models that have only one role. In this
- case the \e modelData role contains the same data as the named role.
-
- QML provides several types of data models among the built-in set of QML
- elements. In addition, models can be created with Qt C++ and then made
- available to the \l{The QML Engine}{QML engine} for use by
- QML components. For information about creating these models, visit the
- \l{Exposing C++ Models} and \l{Creating QML Types} articles.
-
- The use of positioner items to arrange items from a model is covered in
- \l{Generating Items with Repeaters}.
-
- \section2 ListModel
-
- ListModel is a simple hierarchy of elements specified in QML. The
- available roles are specified by the \l ListElement properties.
-
- \snippet doc/src/snippets/qml/qml-data-models/listelements.qml model
-
- The above model has two roles, \e name and \e cost. These can be bound
- to by a ListView delegate, for example:
-
- \snippet doc/src/snippets/qml/qml-data-models/listelements.qml view
-
- ListModel provides methods to manipulate the ListModel directly via JavaScript.
- In this case, the first item inserted determines the roles available
- to any views that are using the model. For example, if an empty ListModel is
- created and populated via JavaScript, the roles provided by the first
- insertion are the only roles that will be shown in the view:
-
- \snippet doc/src/snippets/qml/qml-data-models/dynamic-listmodel.qml model
- \dots
- \snippet doc/src/snippets/qml/qml-data-models/dynamic-listmodel.qml mouse area
-
- When the MouseArea is clicked, \c fruitModel will have two roles, \e cost and \e name.
- Even if subsequent roles are added, only the first two will be handled by views
- using the model. To reset the roles available in the model, call ListModel::clear().
-
-
- \section2 XmlListModel
-
- XmlListModel allows construction of a model from an XML data source. The roles
- are specified via the \l XmlRole element. The element needs to be imported.
-
- \code
- import QtQuick.XmlListModel 2.0
- \endcode
-
-
- The following model has three roles, \e title, \e link and \e description:
- \qml
- XmlListModel {
- id: feedModel
- source: "http://rss.news.yahoo.com/rss/oceania"
- query: "/rss/channel/item"
- XmlRole { name: "title"; query: "title/string()" }
- XmlRole { name: "link"; query: "link/string()" }
- XmlRole { name: "description"; query: "description/string()" }
- }
- \endqml
-
- The \l{declarative/rssnews}{RSS News demo} shows how XmlListModel can
- be used to display an RSS feed.
-
-
- \section2 VisualItemModel
-
- VisualItemModel allows QML items to be provided as a model.
-
- This model contains both the data and delegate; the child items of a
- VisualItemModel provide the contents of the delegate. The model
- does not provide any roles.
-
- \snippet doc/src/snippets/qml/models/visual-model-and-view.qml visual model and view
-
- Note that in the above example there is no delegate required.
- The items of the model itself provide the visual elements that
- will be positioned by the view.
-
- \section2 Integers as Models
-
- An integer can be used as a model that contains a certain number
- of elements. In this case, the model does not have any data roles.
-
- The following example creates a ListView with five elements:
- \qml
- Item {
- width: 200; height: 250
-
- Component {
- id: itemDelegate
- Text { text: "I am item number: " + index }
- }
-
- ListView {
- anchors.fill: parent
- model: 5
- delegate: itemDelegate
- }
-
- }
- \endqml
-
-
- \section2 Object Instances as Models
-
- An object instance can be used to specify a model with a single object
- element. The properties of the object are provided as roles.
-
- The example below creates a list with one item, showing the color of the \e
- myText text. Note the use of the fully qualified \e model.color property to
- avoid clashing with \e color property of the Text element in the delegate.
-
- \qml
- Rectangle {
- width: 200; height: 250
-
- Text {
- id: myText
- text: "Hello"
- color: "#dd44ee"
- }
-
- Component {
- id: myDelegate
- Text { text: model.color }
- }
-
- ListView {
- anchors.fill: parent
- anchors.topMargin: 30
- model: myText
- delegate: myDelegate
- }
- }
- \endqml
-
- \keyword qml-c++-models
- \section2 C++ Data Models
-
- Models can be defined in C++ and then made available to QML. This mechanism
- is useful for exposing existing C++ data models or otherwise complex
- datasets to QML.
-
- For information, visit the \l{Exposing C++ Models} article.
-
-
-\section1 Repeaters
-
-\div {class="float-right"}
-\inlineimage repeater-index.png
-\enddiv
-
-Repeaters create items from a template for use with positioners, using data
-from a model. Combining repeaters and positioners is an easy way to lay out
-lots of items. A \l Repeater item is placed inside a positioner, and generates
-items that the enclosing positioner arranges.
-
-Each Repeater creates a number of items by combining each element of data
-from a model, specified using the \l{Repeater::model}{model} property, with
-the template item, defined as a child item within the Repeater.
-The total number of items is determined by the amount of data in the model.
-
-The following example shows a repeater used with a \l{#Grid}{Grid} item to
-arrange a set of Rectangle items. The Repeater item creates a series of 24
-rectangles for the Grid item to position in a 5 by 5 arrangement.
-
-\snippet doc/src/snippets/qml/repeaters/repeater-grid-index.qml document
-
-The number of items created by a Repeater is held by its \l{Repeater::}{count}
-property. It is not possible to set this property to determine the number of
-items to be created. Instead, as in the above example, we use an integer as
-the model. This is explained in the \l{QML Data Models#An Integer}{QML Data Models}
-document.
-
-It is also possible to use a delegate as the template for the items created
-by a Repeater. This is specified using the \l{Repeater::}{delegate} property.
-
-\section1 Using Transitions
-
-Transitions can be used to animate items that are added to, moved within,
-or removed from a positioner.
-
-Transitions for adding items apply to items that are created as part of a
-positioner, as well as those that are reparented to become children of a
-positioner.
-Transitions for removing items apply to items within a positioner that are
-deleted, as well as those that are removed from a positioner and given new
-parents in a document.
-
-Additionally, changing the opacity of items to zero will cause them to
-disappear using the remove transition, and making the opacity non-zero will
-cause them to appear using the add transition.
-
-
-*/