diff options
author | Jerome Pasion <jerome.pasion@nokia.com> | 2011-02-10 10:50:17 (GMT) |
---|---|---|
committer | Jerome Pasion <jerome.pasion@nokia.com> | 2011-02-10 10:50:17 (GMT) |
commit | 208715da3f06a862081f86548348518f9bc63177 (patch) | |
tree | add28358953c792f88fa96ad545cd75956971f75 | |
parent | 69500fc302cd52033a058c601bdbad3a31ed2971 (diff) | |
download | Qt-208715da3f06a862081f86548348518f9bc63177.zip Qt-208715da3f06a862081f86548348518f9bc63177.tar.gz Qt-208715da3f06a862081f86548348518f9bc63177.tar.bz2 |
Re-wrote QML Reusable Components documentation
Task-number: QTBUG-16071
7 files changed, 159 insertions, 21 deletions
diff --git a/doc/src/declarative/basicelements.qdoc b/doc/src/declarative/basicelements.qdoc index 5997998..ad53ea4 100644 --- a/doc/src/declarative/basicelements.qdoc +++ b/doc/src/declarative/basicelements.qdoc @@ -109,15 +109,6 @@ the component will retain the top-level component's properties. If a non-visual component is the top-level component, the visual properties should be aliased to the top-level to display the component properly. -A component implemented using a \c Rectangle as the top-level component: -\snippet doc/src/snippets/declarative/focus/mywidget.qml document - -A component that uses a \c FocusScope as the top-level component: -\snippet doc/src/snippets/declarative/focus/myfocusscopewidget.qml document -Note that the visual properties need to be passed to the parent. The -\l {Keyboard Focus in QML}{focus} article provides more details about the -\c FocusScope element. - For more information on how to build upon QML elements, see the \l{Importing Reusable Components} document. */ diff --git a/doc/src/declarative/qmlreusablecomponents.qdoc b/doc/src/declarative/qmlreusablecomponents.qdoc index 0fd5515..956fa24 100644 --- a/doc/src/declarative/qmlreusablecomponents.qdoc +++ b/doc/src/declarative/qmlreusablecomponents.qdoc @@ -74,14 +74,14 @@ declaring a \c Button. The button is defined in the \snippet doc/src/snippets/declarative/reusablecomponents/application.qml document Note that the component name, \c Button, matches the QML filename, \c Button.qml. -Specifically, the first character is in upper case. Matching the names allow +Also, the first character is in upper case. Matching the names allow components in the same directory to be in the direct import path of the application. For flexibility, a \c qmldir file is for dictating which additional components, plugins, or directories should be imported. By using a \c qmldir file, component names do not need to match the filenames. The \c qmldir file should, -however, in an imported path. +however, be in an imported path. \snippet doc/src/snippets/declarative/reusablecomponents/qmldir document \section2 Loading an Inline Component @@ -103,6 +103,42 @@ Specifically, there are \l{attached-properties}{attached properties} and \l{attached-signalhandlers}{attached signal handlers} for setting properties during the lifetime of a component. +The \c{Component.onCompleted} attached signal handler is called when the +component completes initialization. It is useful for executing any commands +after component initialization. Similarly, the \c{Component.onDestruction} +signal handler executes when the component finishes destruction. + +\keyword qml-top-level +\section1 Top-Level Component + +Choosing the \e{top-level} or the \e{root} object of components is an important +design aspect because the top-level object dictates which properties are +accessible outside the component. Some elements are not visual elements and +will not have visual properties exposed outside the component. Likewise, some +elements add functionality that are not available to visual elements. + +Consider the Button component from the +\l{qml-define-components}{Defining New Components} section; it's top-level +object is a \l Rectangle. When imported, the Button component will possess the +Rectangle's properties, methods, signals, and any custom properties. + +\snippet doc/src/snippets/declarative/reusablecomponents/Button.qml parent begin +\snippet doc/src/snippets/declarative/reusablecomponents/Button.qml ellipses +\snippet doc/src/snippets/declarative/reusablecomponents/Button.qml properties +\snippet doc/src/snippets/declarative/reusablecomponents/Button.qml ellipses +\snippet doc/src/snippets/declarative/reusablecomponents/Button.qml parent end + +The Button's \c text alias is accessible from outside the component as well as +the Rectangle's visual properties and signals such as \c x, \c y, \c anchors, +and \c states. + +Alternatively, we may choose a \l {Keyboard Focus in QML}{FocusScope} as our +top-level object. The \l FocusScope element manage keyboard focus for its +children which is beneficial for certain types of interfaces. However, since +\c FocusScopes are not visual elements, the visual properties of its child need +to be exposed. + +\snippet doc/src/snippets/declarative/reusablecomponents/focusbutton.qml document */ The root object in \c Button.qml defines the attributes that are available to users of the diff --git a/doc/src/snippets/declarative/reusablecomponents/Button.qml b/doc/src/snippets/declarative/reusablecomponents/Button.qml index 955e73a..3b97e00 100644 --- a/doc/src/snippets/declarative/reusablecomponents/Button.qml +++ b/doc/src/snippets/declarative/reusablecomponents/Button.qml @@ -41,12 +41,16 @@ //contents of Button.qml import QtQuick 1.0 +//! [parent begin] Rectangle { +//! [parent begin] + id: button +//! [properties] width: 145; height: 60 color: "blue" smooth: true; radius: 9 property alias text: label.text - +//! [properties] border {color: "#B9C5D0"; width: 1} gradient: Gradient { @@ -67,5 +71,14 @@ Rectangle { anchors.fill: parent onClicked: console.log(text + " clicked") } +//! [parent end] } +//! [parent end] + //! [document] + +//! [ellipses] + //... +//! [ellipses] + + diff --git a/doc/src/snippets/declarative/reusablecomponents/application.qml b/doc/src/snippets/declarative/reusablecomponents/application.qml index 094134f..a09b276 100644 --- a/doc/src/snippets/declarative/reusablecomponents/application.qml +++ b/doc/src/snippets/declarative/reusablecomponents/application.qml @@ -45,11 +45,11 @@ Rectangle { color: "lightgrey" Column { - anchors.centerIn: parent - spacing: 15 + anchors.centerIn: parent + spacing: 15 Button {} - Button {text: "Click Me Too!"} - Button {text: "Click Me Three!"} + Button {text: "Me Too!"} + Button {text: "Me Three!"} } } //! [document] diff --git a/doc/src/snippets/declarative/reusablecomponents/component.qml b/doc/src/snippets/declarative/reusablecomponents/component.qml index 88fc9b1..8660c50 100644 --- a/doc/src/snippets/declarative/reusablecomponents/component.qml +++ b/doc/src/snippets/declarative/reusablecomponents/component.qml @@ -61,11 +61,11 @@ Rectangle { MouseArea { anchors.fill: parent onClicked: { - inlinecomponent.createObject(screen) + inlinecomponent.createObject(parent) - var second = inlinecomponent.createObject(screen) + var second = inlinecomponent.createObject(parent) - var third = inlinecomponent.createObject(screen) + var third = inlinecomponent.createObject(parent) third.x = second.width + 10 third.color = "red" } diff --git a/doc/src/snippets/declarative/reusablecomponents/focusbutton.qml b/doc/src/snippets/declarative/reusablecomponents/focusbutton.qml new file mode 100644 index 0000000..2522a98 --- /dev/null +++ b/doc/src/snippets/declarative/reusablecomponents/focusbutton.qml @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** $QT_END_LICENSE$ +** +****************************************************************************/ +//! [document] +//contents of focusbutton.qml +import QtQuick 1.0 + +//! [parent begin] +FocusScope { +//! [parent begin] + + //! [expose visuals] + //FocusScope needs to bind to visual properties of the children + property alias color: button.color + x: button.x; y: button.y + width: button.width; height: button.height + //! [expose visuals] + + //! [rectangle begin] + Rectangle { + //! [rectangle begin] + id: button + //! [properties] + width: 145; height: 60 + color: "blue" + smooth: true; radius: 9 + property alias text: label.text + //! [properties] + border {color: "#B9C5D0"; width: 1} + + gradient: Gradient { + GradientStop {color: "#CFF7FF"; position: 0.0} + GradientStop {color: "#99C0E5"; position: 0.57} + GradientStop {color: "#719FCB"; position: 0.9} + } + + Text { + id: label + anchors.centerIn: parent + text: "Click Me!" + font.pointSize: 12 + color: "blue" + } + + MouseArea { + anchors.fill: parent + onClicked: console.log(text + " clicked") + } + //! [rectangle end] + } + //! [rectangle end] +//! [parent end] +} +//! [parent end] + +//! [document] + +//! [ellipses] + //... +//! [ellipses] + + diff --git a/doc/src/snippets/declarative/reusablecomponents/qmldir b/doc/src/snippets/declarative/reusablecomponents/qmldir index 93b53f9..253732d 100644 --- a/doc/src/snippets/declarative/reusablecomponents/qmldir +++ b/doc/src/snippets/declarative/reusablecomponents/qmldir @@ -1,4 +1,4 @@ //! [document] -Button ./Button.qml 1.0 -SimpleButton ./simplebutton.qml +Button ./Button.qml +FocusButton ./focusbutton.qml //! [document] |