Remove "All rights reserved" line from license headers.
[profile/ivi/qtdeclarative.git] / doc / src / declarative / anchor-layout.qdoc
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the documentation of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:FDL$
9 ** GNU Free Documentation License
10 ** Alternatively, this file may be used under the terms of the GNU Free
11 ** Documentation License version 1.3 as published by the Free Software
12 ** Foundation and appearing in the file included in the packaging of
13 ** this file.
14 **
15 ** Other Usage
16 ** Alternatively, this file may be used in accordance with the terms
17 ** and conditions contained in a signed written agreement between you
18 ** and Nokia.
19 **
20 **
21 **
22 **
23 **
24 ** $QT_END_LICENSE$
25 **
26 ****************************************************************************/
27
28 /*!
29 \page qml-anchor-layout.html
30 \inqmlmodule QtQuick 2
31 \target anchor-layout
32 \contentspage QML Features
33 \previouspage {Using QML Positioner and Repeater Items}{Component Layouts}
34 \nextpage {QML Mouse Events}{Mouse Events}
35 \title Anchor-based Layout in QML
36
37 In addition to the more traditional \l Grid, \l Row, and \l Column,
38 QML also provides a way to layout items using the concept of \i anchors.
39 Each item can be thought of as having a set of 7 invisible "anchor lines":
40 \l {Item::anchors.left}{left}, \l {Item::anchors.horizontalCenter}{horizontalCenter},
41 \l {Item::anchors.right}{right}, \l {Item::anchors.top}{top},
42 \l {Item::anchors.verticalCenter}{verticalCenter}, \l {Item::anchors.baseline}{baseline},
43 and \l {Item::anchors.bottom}{bottom}.
44
45 \image edges_qml.png
46
47 The baseline (not pictured above) corresponds to the imaginary line on which
48 text would sit. For items with no text it is the same as \i top.
49
50 The QML anchoring system allows you to define relationships between the anchor lines of different items. For example, you can write:
51
52 \code
53 Rectangle { id: rect1; ... }
54 Rectangle { id: rect2; anchors.left: rect1.right; ... }
55 \endcode
56
57 In this case, the left edge of \i rect2 is bound to the right edge of \i rect1, producing the following:
58
59 \image edge1.png
60
61
62 You can specify multiple anchors. For example:
63
64 \code
65 Rectangle { id: rect1; ... }
66 Rectangle { id: rect2; anchors.left: rect1.right; anchors.top: rect1.bottom; ... }
67 \endcode
68
69 \image edge3.png
70
71 By specifying multiple horizontal or vertical anchors you can control the size of an item. Below,
72 \i rect2 is anchored to the right of \i rect1 and the left of \i rect3. If either of the blue
73 rectangles are moved, \i rect2 will stretch and shrink as necessary:
74
75 \code
76 Rectangle { id: rect1; x: 0; ... }
77 Rectangle { id: rect2; anchors.left: rect1.right; anchors.right: rect3.left; ... }
78 Rectangle { id: rect3; x: 150; ... }
79 \endcode
80
81 \image edge4.png
82
83 There are also some convenience anchors. anchors.fill is a convenience that is the same as setting the left,right,top and bottom anchors
84 to the left,right,top and bottom of the target item. anchors.centerIn is another convenience anchor, and is the same as setting the verticalCenter
85 and horizontalCenter anchors to the verticalCenter and horizontalCenter of the target item.
86
87 \section1 Anchor Margins and Offsets
88
89 The anchoring system also allows \i margins and \i offsets to be specified for an item's anchors.
90 Margins specify the amount of empty space to leave to the outside of an item's anchor, while
91 offsets allow positioning to be manipulated using the center anchor lines.  An item can
92 specify its anchor margins individually through \l {Item::anchors.leftMargin}{leftMargin},
93 \l {Item::anchors.rightMargin}{rightMargin}, \l {Item::anchors.topMargin}{topMargin} and
94 \l {Item::anchors.bottomMargin}{bottomMargin}, or use \l {Item::}{anchors.margins} to
95 specify the same margin value for all four edges. Anchor offsets are specified using
96 \l {Item::anchors.horizontalCenterOffset}{horizontalCenterOffset},
97 \l {Item::anchors.verticalCenterOffset}{verticalCenterOffset} and
98 \l {Item::anchors.baselineOffset}{baselineOffset}.
99
100 \image margins_qml.png
101
102 The following example specifies a left margin:
103
104 \code
105 Rectangle { id: rect1; ... }
106 Rectangle { id: rect2; anchors.left: rect1.right; anchors.leftMargin: 5; ... }
107 \endcode
108
109 In this case, a margin of 5 pixels is reserved to the left of \i rect2, producing the following:
110
111 \image edge2.png
112
113 \note Anchor margins only apply to anchors; they are \i not a generic means of applying margins to an \l Item.
114 If an anchor margin is specified for an edge but the item is not anchored to any item on that
115 edge, the margin is not applied.
116
117
118 \section1 Restrictions
119
120 For performance reasons, you can only anchor an item to its siblings and direct parent. For example,
121 the following anchor is invalid and would produce a warning:
122
123 \badcode
124 Item {
125     id: group1
126     Rectangle { id: rect1; ... }
127 }
128 Item {
129     id: group2
130     Rectangle { id: rect2; anchors.left: rect1.right; ... }    // invalid anchor!
131 }
132 \endcode
133
134 Also, anchor-based layouts cannot be mixed with absolute positioning. If an item specifies its
135 \l {Item::}{x} position and also sets \l {Item::}{anchors.left},
136 or anchors its left and right edges but additionally sets a \l {Item::}{width}, the
137 result is undefined, as it would not be clear whether the item should use anchoring or absolute
138 positioning. The same can be said for setting an item's \l {Item::}{y} and \l {Item::}{height}
139 with \l {Item::}{anchors.top} and \l {Item::}{anchors.bottom}, or setting \l {Item::}{anchors.fill}
140 as well as \l {Item::}{width} or \l {Item::}{height}. The same applies when using positioners
141 such as Row and Grid, which may set the item's \l {Item::}{x} and \l {Item::}{y} properties.
142 If you wish to change from using
143 anchor-based to absolute positioning, you can clear an anchor value by setting it to \c undefined.
144
145 */