[844] | 1 | /****************************************************************************
|
---|
| 2 | **
|
---|
| 3 | ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
|
---|
| 4 | ** All rights reserved.
|
---|
| 5 | ** Contact: Nokia Corporation ([email protected])
|
---|
| 6 | **
|
---|
| 7 | ** This file is part of the documentation of the Qt Toolkit.
|
---|
| 8 | **
|
---|
| 9 | ** $QT_BEGIN_LICENSE:FDL$
|
---|
| 10 | ** Commercial Usage
|
---|
| 11 | ** Licensees holding valid Qt Commercial licenses may use this file in
|
---|
| 12 | ** accordance with the Qt Commercial License Agreement provided with the
|
---|
| 13 | ** Software or, alternatively, in accordance with the terms contained in a
|
---|
| 14 | ** written agreement between you and Nokia.
|
---|
| 15 | **
|
---|
| 16 | ** GNU Free Documentation License
|
---|
| 17 | ** Alternatively, this file may be used under the terms of the GNU Free
|
---|
| 18 | ** Documentation License version 1.3 as published by the Free Software
|
---|
| 19 | ** Foundation and appearing in the file included in the packaging of this
|
---|
| 20 | ** file.
|
---|
| 21 | **
|
---|
| 22 | ** If you have questions regarding the use of this file, please contact
|
---|
| 23 | ** Nokia at [email protected].
|
---|
| 24 | ** $QT_END_LICENSE$
|
---|
| 25 | **
|
---|
| 26 | ****************************************************************************/
|
---|
| 27 |
|
---|
| 28 | /*!
|
---|
| 29 | \page qml-tutorial.html
|
---|
| 30 | \title QML Tutorial
|
---|
| 31 | \brief An introduction to the basic concepts and features of QML.
|
---|
| 32 | \nextpage QML Tutorial 1 - Basic Types
|
---|
| 33 |
|
---|
| 34 | This tutorial gives an introduction to QML, the mark up language for Qt Quick. It doesn't cover everything;
|
---|
| 35 | the emphasis is on teaching the key principles, and features are introduced as needed.
|
---|
| 36 |
|
---|
| 37 | Through the different steps of this tutorial we will learn about QML basic types, we will create our own QML component
|
---|
| 38 | with properties and signals, and we will create a simple animation with the help of states and transitions.
|
---|
| 39 |
|
---|
| 40 | Chapter one starts with a minimal "Hello world" program and the following chapters introduce new concepts.
|
---|
| 41 |
|
---|
| 42 | The tutorial's source code is located in the $QTDIR/examples/declarative/tutorials/helloworld directory.
|
---|
| 43 |
|
---|
| 44 | Tutorial chapters:
|
---|
| 45 |
|
---|
| 46 | \list 1
|
---|
| 47 | \o \l {QML Tutorial 1 - Basic Types}{Basic Types}
|
---|
| 48 | \o \l {QML Tutorial 2 - QML Components}{QML Components}
|
---|
| 49 | \o \l {QML Tutorial 3 - States and Transitions}{States and Transitions}
|
---|
| 50 | \endlist
|
---|
| 51 |
|
---|
| 52 | */
|
---|
| 53 |
|
---|
| 54 | /*!
|
---|
| 55 | \page qml-tutorial1.html
|
---|
| 56 | \title QML Tutorial 1 - Basic Types
|
---|
| 57 | \contentspage QML Tutorial
|
---|
| 58 | \previouspage QML Tutorial
|
---|
| 59 | \nextpage QML Tutorial 2 - QML Component
|
---|
| 60 |
|
---|
| 61 | This first program is a very simple "Hello world" example that introduces some basic QML concepts.
|
---|
| 62 | The picture below is a screenshot of this program.
|
---|
| 63 |
|
---|
| 64 | \image declarative-tutorial1.png
|
---|
| 65 |
|
---|
| 66 | Here is the QML code for the application:
|
---|
| 67 |
|
---|
| 68 | \snippet examples/declarative/tutorials/helloworld/tutorial1.qml 0
|
---|
| 69 |
|
---|
| 70 | \section1 Walkthrough
|
---|
| 71 |
|
---|
| 72 | \section2 Import
|
---|
| 73 |
|
---|
| 74 | First, we need to import the types that we need for this example. Most QML files will import the built-in QML
|
---|
| 75 | types (like \l{Rectangle}, \l{Image}, ...) that come with Qt, using:
|
---|
| 76 |
|
---|
| 77 | \snippet examples/declarative/tutorials/helloworld/tutorial1.qml 3
|
---|
| 78 |
|
---|
| 79 | \section2 Rectangle element
|
---|
| 80 |
|
---|
| 81 | \snippet examples/declarative/tutorials/helloworld/tutorial1.qml 1
|
---|
| 82 |
|
---|
| 83 | We declare a root element of type \l{Rectangle}. It is one of the basic building blocks you can use to create an application in QML.
|
---|
| 84 | We give it an \c{id} to be able to refer to it later. In this case, we call it "page".
|
---|
| 85 | We also set the \c width, \c height and \c color properties.
|
---|
| 86 | The \l{Rectangle} element contains many other properties (such as \c x and \c y), but these are left at their default values.
|
---|
| 87 |
|
---|
| 88 | \section2 Text element
|
---|
| 89 |
|
---|
| 90 | \snippet examples/declarative/tutorials/helloworld/tutorial1.qml 2
|
---|
| 91 |
|
---|
| 92 | We add a \l Text element as a child of the root Rectangle element that displays the text 'Hello world!'.
|
---|
| 93 |
|
---|
| 94 | The \c y property is used to position the text vertically at 30 pixels from the top of its parent.
|
---|
| 95 |
|
---|
| 96 | The \c anchors.horizontalCenter property refers to the horizontal center of an element.
|
---|
| 97 | In this case, we specify that our text element should be horizontally centered in the \e page element (see \l{anchor-layout}{Anchor-based Layout}).
|
---|
| 98 |
|
---|
| 99 | The \c font.pointSize and \c font.bold properties are related to fonts and use the \l{dot properties}{dot notation}.
|
---|
| 100 |
|
---|
| 101 |
|
---|
| 102 | \section2 Viewing the example
|
---|
| 103 |
|
---|
| 104 | To view what you have created, run the \l{QML Viewer} tool (located in the \c bin directory) with your filename as the first argument.
|
---|
| 105 | For example, to run the provided completed Tutorial 1 example from the install location, you would type:
|
---|
| 106 |
|
---|
| 107 | \code
|
---|
| 108 | bin/qmlviewer $QTDIR/examples/declarative/tutorials/helloworld/tutorial1.qml
|
---|
| 109 | \endcode
|
---|
| 110 | */
|
---|
| 111 |
|
---|
| 112 | /*!
|
---|
| 113 | \page qml-tutorial2.html
|
---|
| 114 | \title QML Tutorial 2 - QML Components
|
---|
| 115 | \contentspage QML Tutorial
|
---|
| 116 | \previouspage QML Tutorial 1 - Basic Types
|
---|
| 117 | \nextpage QML Tutorial 3 - States and Transitions
|
---|
| 118 |
|
---|
| 119 | This chapter adds a color picker to change the color of the text.
|
---|
| 120 |
|
---|
| 121 | \image declarative-tutorial2.png
|
---|
| 122 |
|
---|
| 123 | Our color picker is made of six cells with different colors.
|
---|
| 124 | To avoid writing the same code multiple times for each cell, we create a new \c Cell component.
|
---|
| 125 | A component provides a way of defining a new type that we can re-use in other QML files.
|
---|
| 126 | A QML component is like a black-box and interacts with the outside world through properties, signals and functions and is generally
|
---|
| 127 | defined in its own QML file. (For more details, see \l {Defining New Components}).
|
---|
| 128 | The component's filename must always start with a capital letter.
|
---|
| 129 |
|
---|
| 130 | Here is the QML code for \c Cell.qml:
|
---|
| 131 |
|
---|
| 132 | \snippet examples/declarative/tutorials/helloworld/Cell.qml 0
|
---|
| 133 |
|
---|
| 134 | \section1 Walkthrough
|
---|
| 135 |
|
---|
| 136 | \section2 The Cell Component
|
---|
| 137 |
|
---|
| 138 | \snippet examples/declarative/tutorials/helloworld/Cell.qml 1
|
---|
| 139 |
|
---|
| 140 | The root element of our component is an \l Item with the \c id \e container.
|
---|
| 141 | An \l Item is the most basic visual element in QML and is often used as a container for other elements.
|
---|
| 142 |
|
---|
| 143 | \snippet examples/declarative/tutorials/helloworld/Cell.qml 4
|
---|
| 144 |
|
---|
| 145 | We declare a \c cellColor property. This property is accessible from \e outside our component, this allows us
|
---|
| 146 | to instantiate the cells with different colors.
|
---|
| 147 | This property is just an alias to an existing property - the color of the rectangle that compose the cell (see \l{Adding Properties}).
|
---|
| 148 |
|
---|
| 149 | \snippet examples/declarative/tutorials/helloworld/Cell.qml 5
|
---|
| 150 |
|
---|
| 151 | We want our component to also have a signal that we call \e clicked with a \e cellColor parameter of type \e color.
|
---|
| 152 | We will use this signal to change the color of the text in the main QML file later.
|
---|
| 153 |
|
---|
| 154 | \snippet examples/declarative/tutorials/helloworld/Cell.qml 2
|
---|
| 155 |
|
---|
| 156 | Our cell component is basically a colored rectangle with the \c id \e rectangle.
|
---|
| 157 |
|
---|
| 158 | The \c anchors.fill property is a convenient way to set the size of an element.
|
---|
| 159 | In this case the rectangle will have the same size as its parent (see \l{anchor-layout}{Anchor-based Layout}).
|
---|
| 160 |
|
---|
| 161 | \snippet examples/declarative/tutorials/helloworld/Cell.qml 3
|
---|
| 162 |
|
---|
| 163 | In order to change the color of the text when clicking on a cell, we create a \l MouseArea element with
|
---|
| 164 | the same size as its parent.
|
---|
| 165 |
|
---|
| 166 | A \l MouseArea defines a signal called \e clicked.
|
---|
| 167 | When this signal is triggered we want to emit our own \e clicked signal with the color as parameter.
|
---|
| 168 |
|
---|
| 169 | \section2 The main QML file
|
---|
| 170 |
|
---|
| 171 | In our main QML file, we use our \c Cell component to create the color picker:
|
---|
| 172 |
|
---|
| 173 | \snippet examples/declarative/tutorials/helloworld/tutorial2.qml 0
|
---|
| 174 |
|
---|
| 175 | We create the color picker by putting 6 cells with different colors in a grid.
|
---|
| 176 |
|
---|
| 177 | \snippet examples/declarative/tutorials/helloworld/tutorial2.qml 1
|
---|
| 178 |
|
---|
| 179 | When the \e clicked signal of our cell is triggered, we want to set the color of the text to the \e cellColor passed as a parameter.
|
---|
| 180 | We can react to any signal of our component through a property of the name \e 'onSignalName' (see \l{Signal Handlers}).
|
---|
| 181 | */
|
---|
| 182 |
|
---|
| 183 | /*!
|
---|
| 184 | \page qml-tutorial3.html
|
---|
| 185 | \title QML Tutorial 3 - States and Transitions
|
---|
| 186 | \contentspage QML Tutorial
|
---|
| 187 | \previouspage QML Tutorial 2 - QML Component
|
---|
| 188 |
|
---|
| 189 | In this chapter, we make this example a little bit more dynamic by introducing states and transitions.
|
---|
| 190 |
|
---|
| 191 | We want our text to move to the bottom of the screen, rotate and become red when clicked.
|
---|
| 192 |
|
---|
| 193 | \image declarative-tutorial3_animation.gif
|
---|
| 194 |
|
---|
| 195 | Here is the QML code:
|
---|
| 196 |
|
---|
| 197 | \snippet examples/declarative/tutorials/helloworld/tutorial3.qml 0
|
---|
| 198 |
|
---|
| 199 | \section1 Walkthrough
|
---|
| 200 |
|
---|
| 201 | \snippet examples/declarative/tutorials/helloworld/tutorial3.qml 2
|
---|
| 202 |
|
---|
| 203 | First, we create a new \e down state for our text element.
|
---|
| 204 | This state will be activated when the \l MouseArea is pressed, and deactivated when it is released.
|
---|
| 205 |
|
---|
| 206 | The \e down state includes a set of property changes from our implicit \e {default state}
|
---|
| 207 | (the items as they were initially defined in the QML).
|
---|
| 208 | Specifically, we set the \c y property of the text to \c 160, the rotation to \c 180 and the \c color to red.
|
---|
| 209 |
|
---|
| 210 | \snippet examples/declarative/tutorials/helloworld/tutorial3.qml 3
|
---|
| 211 |
|
---|
| 212 | Because we don't want the text to appear at the bottom instantly but rather move smoothly,
|
---|
| 213 | we add a transition between our two states.
|
---|
| 214 |
|
---|
| 215 | \c from and \c to define the states between which the transition will run.
|
---|
| 216 | In this case, we want a transition from the default state to our \e down state.
|
---|
| 217 |
|
---|
| 218 | Because we want the same transition to be run in reverse when changing back from the \e down state to the default state,
|
---|
| 219 | we set \c reversible to \c true.
|
---|
| 220 | This is equivalent to writing the two transitions separately.
|
---|
| 221 |
|
---|
| 222 | The \l ParallelAnimation element makes sure that the two types of animations (number and color) start at the same time.
|
---|
| 223 | We could also run them one after the other by using \l SequentialAnimation instead.
|
---|
| 224 |
|
---|
| 225 | For more details on states and transitions, see \l {QML States} and the \l{declarative/animation/states}{states and transitions example}.
|
---|
| 226 | */
|
---|