aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc')
-rw-r--r--src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc983
1 files changed, 983 insertions, 0 deletions
diff --git a/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc b/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc
new file mode 100644
index 0000000000..f336d14b14
--- /dev/null
+++ b/src/qml/doc/src/qmllanguageref/syntax/objectattributes.qdoc
@@ -0,0 +1,983 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Free Documentation License Usage
+** 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. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+\page qtqml-syntax-objectattributes.html
+\title QML Object Attributes
+\brief Description of QML object type attributes
+
+Every QML object type has a defined set of attributes. Each instance of an
+object type is created with the set of attributes that have been defined for
+that object type. There are several different kinds of attributes which
+can be specified, which are described below.
+
+\section1 Attributes in Object Declarations
+
+An \l{qtqml-syntax-basics.html#object-declarations}{object declaration} in a
+QML document defines a new type. It also declares an object hierarchy that
+will be instantiated should an instance of that newly defined type be created.
+
+The set of QML object-type attribute types is as follows:
+
+\list
+\li the \e id attribute
+\li property attributes
+\li signal attributes
+\li signal handler attributes
+\li method attributes
+\li attached properties and attached signal handler attributes
+\endlist
+
+These attributes are discussed in detail below.
+
+\section2 The \e id Attribute
+
+Every QML object type has exactly one \e id attribute. This attribute is
+provided by the language itself, and cannot be redefined or overridden by any
+QML object type.
+
+A value may be assigned to the \e id attribute of an object instance to allow
+that object to be identified and referred to by other objects. This \c id must
+begin with a lower-case letter or an underscore, and cannot contain characters
+other than letters, numbers and underscores.
+
+Below is a \l TextInput object and a \l Text object. The \l TextInput object's
+\c id value is set to "myTextInput". The \l Text object sets its \c text
+property to have the same value as the \c text property of the \l TextInput,
+by referring to \c myTextInput.text. Now, both items will display the same
+text:
+
+\qml
+import QtQuick 2.0
+
+Column {
+ width: 200; height: 200
+
+ TextInput { id: myTextInput; text: "Hello World" }
+
+ Text { text: myTextInput.text }
+}
+\endqml
+
+An object can be referred to by its \c id from anywhere within the
+\e {component scope} in which it is declared. Therefore, an \c id value must
+always be unique within its component scope. See
+\l{qtqml-documents-scope.html}{Scope and Naming Resolution} for more
+information.
+
+Once an object instance is created, the value of its \e id attribute cannot
+be changed. While it may look like an ordinary property, the \c id attribute
+is \b{not} an ordinary \c property attribute, and special semantics apply
+to it; for example, it is not possible to access \c myTextInput.id in the above
+example.
+
+
+\section2 Property Attributes
+
+A property is an attribute of an object that can be assigned a static value
+or bound to a dynamic expression. A property's value can be read by other
+objects. Generally it can also be modified by another object, unless a
+particular QML type has explicitly disallowed this for a specific property.
+
+\section3 Defining Property Attributes
+
+A property may be defined for a type in C++ by registering a
+Q_PROPERTY of a class which is then registered with the QML type system.
+Alternatively, a custom property of an object type may be defined in
+an object declaration in a QML document with the following syntax:
+
+\code
+ [default] property <propertyType> <propertyName>
+\endcode
+
+In this way an object declaration may \l {Defining Object Types from QML}
+{expose a particular value} to outside objects or maintain some internal
+state more easily.
+
+Property names must begin with a lower case letter and can only contain
+letters, numbers and underscores. \l {JavaScript Reserved Words}
+{JavaScript reserved words} are not valid property names. The \c default
+keyword is optional, and modifies the semantics of the property being declared.
+See the upcoming section on \l {Default Properties}{default properties} for
+more information about the \c default property modifier.
+
+Declaring a custom property implicitly creates a value-change
+\l{Signal attributes}{signal} for that property, as well as an associated
+\l{Signal handler attributes}{signal handler} called
+\e on<PropertyName>Changed, where \e <PropertyName> is the name of the
+property, with the first letter capitalized.
+
+For example, the following object declaration defines a new type which
+derives from the Rectangle base type. It has two new properties,
+with a \l{Signal handler attributes}{signal handler} implemented for one of
+those new properties:
+
+\qml
+Rectangle {
+ property color previousColor
+ property color nextColor
+ onNextColorChanged: console.log("The next color will be: " + nextColor.toString())
+}
+\endqml
+
+\section4 Valid Types in Custom Property Definitions
+
+Any of the \l {QML Basic Types} aside from the \l enumeration type can be used
+as custom property types. For example, these are all valid property declarations:
+
+\qml
+Item {
+ property int someNumber
+ property string someString
+ property url someUrl
+}
+\endqml
+
+(Enumeration values are simply whole number values and can be referred to with
+the \l int type instead.)
+
+Some basic types are provided by the \c QtQuick module and thus cannot be used
+as property types unless the module is imported. See the \l {QML Basic Types}
+documentation for more details.
+
+Note the \l var basic type is a generic placeholder type that can hold any
+type of value, including lists and objects:
+
+\code
+property var someNumber: 1.5
+property var someString: "abc"
+property var someBool: true
+property var someList: [1, 2, "three", "four"]
+property var someObject: Rectangle { width: 100; height: 100; color: "red" }
+\endcode
+
+Additionally, any \l{QML Object Types}{QML object type} can be used as a
+property type. For example:
+
+\code
+property Item someItem
+property Rectangle someRectangle
+\endcode
+
+This applies to \l {Defining Object Types from QML}{custom QML types} as well.
+If a QML type was defined in a file named \c ColorfulButton.qml (in a directory
+which was then imported by the client), then a property of type
+\c ColorfulButton would also be valid.
+
+
+\section3 Values of Property Attributes
+
+The value of a property of an object instance may specified in an
+object declaration in two separate ways:
+\list
+ \li a value assignment on initialization
+ \li an imperative value assignment
+\endlist
+
+The value in either case may be either a binding expression or a static value.
+
+\section4 Value Assignment on Initialization
+
+The syntax for assigning a value to a property on initialization is:
+
+\code
+ <propertyName> : <value>
+\endcode
+
+An initialization value assignment may be combined with a property definition
+in an object declaration, if desired. In that case, the syntax of the property
+definition becomes:
+
+\code
+ [default] property <propertyType> <propertyName> : <value>
+\endcode
+
+An example of property value initialization follows:
+
+\qml
+import QtQuick 2.0
+
+Rectangle {
+ color: "red"
+ property color nextColor: "blue" // combined property declaration and initialization
+}
+\endqml
+
+\section4 Imperative Value Assignment
+
+An imperative value assignment is where a property value (either static value
+or binding expression) is assigned to a property from imperative JavaScript
+code. The syntax of an imperative value assignment is just the JavaScript
+assignment operator, as shown below:
+
+\code
+ [<objectId>.]<propertyName> = value
+\endcode
+
+An example of imperative value assignment follows:
+
+\qml
+import QtQuick 2.0
+
+Rectangle {
+ id: rect
+ Component.onCompleted: {
+ rect.color = "red"
+ }
+}
+\endqml
+
+\section4 Valid Property Values
+
+As previously noted, there are two kinds of values which may be assigned to a
+property: static values, and binding expression values.
+
+\table
+ \header
+ \li Kind
+ \li Semantics
+
+ \row
+ \li Static Value
+ \li A value whose type matches (or can be converted to) that of
+ the property may be assigned to the property.
+
+ \row
+ \li Binding Expression
+ \li A JavaScript expression which may be evaluated, whose result is a
+ value whose type matches (or can be converted to) that of the
+ property may be assigned to the property. The expression will be
+ automatically re-evaluated (and the new result assigned to the
+ property) by the QML engine should the value of any properties accessed
+ during evaluation change.
+\endtable
+
+An example of these two types of values being assigned to properties follows:
+
+\qml
+import QtQuick 2.0
+
+Rectangle {
+ // both of these are static value assignments on initialization
+ width: 400
+ height: 200
+
+ Rectangle {
+ // both of these are binding expression value assignments on initialization
+ width: parent.width / 2
+ height: parent.height
+ }
+}
+\endqml
+
+In many cases, a string value may be converted automatically to a
+different type of value, as QML provides string converters for many property
+types (thus you can assign the string \c "red" to a color property).
+
+It is important to note that in order to assign a binding expression to a
+property in an imperative value assignment, the right-hand-side of
+the assignment (the binding expression) must be a function returned by the
+\l{Qt::binding()}{Qt.binding()} function, which returns a value of the
+appropriate type. A binding expression value may be assigned to a property
+via an initialization value assignment without using that function (and, in
+fact, attempting to do so will result in an error). See the documentation
+about \l{qtqml-syntax-propertybinding.html}{property binding} for more
+information on the topic.
+
+
+\section3 Type Safety
+
+Properties are type safe. A property can only be assigned a value that matches
+the property type.
+
+For example, if a property is a real, and if you try to assign a string to it,
+you will get an error:
+
+\code
+property int volume: "four" // generates an error; the property's object will not be loaded
+\endcode
+
+Likewise if a property is assigned a value of the wrong type during run time,
+the new value will not be assigned, and an error will be generated.
+
+As noted in a previous section, some property types do not have a natural
+value representation, and for those property types the QML engine
+automatically performs string-to-typed-value conversion. So, for example,
+even though properties of the \c color type store colors and not strings,
+you are able to assign the string \c "red" to a color property, without an
+error being reported.
+
+See \l {QML Basic Types} for a list of the types of properties that are
+supported by default. Additionally, any available \l {QML Object Types}
+{QML object type} may also be used as a property type.
+
+\section3 Special Property Types
+
+\section4 Object List Property Attributes
+
+A \l list type property can be assigned a list of QML object-type values.
+The syntax for defining an object list value is a comma-separated list
+surrounded by square brackets:
+
+\code
+ [ <item 1>, <item 2>, ... ]
+\endcode
+
+For example, the \l Item type has a \l {Item::states}{states} property that is
+used to hold a list of \l State type objects. The code below initializes the
+value of this property to a list of three \l State objects:
+
+\qml
+import QtQuick 2.0
+
+Item {
+ states: [
+ State { name: "loading" },
+ State { name: "running" },
+ State { name: "stopped" }
+ ]
+}
+\endqml
+
+If the list contains a single item, the square brackets may be omitted:
+
+\qml
+import QtQuick 2.0
+
+Item {
+ states: State { name: "running" }
+}
+\endqml
+
+A \l list type property may be specified in an object declaration with the
+following syntax:
+
+\code
+ [default] property list<<objectType>> propertyName
+\endcode
+
+and, like other property declarations, a property initialization may be
+combined with the property declaration with the following syntax:
+
+\code
+ [default] property list<<objectType>> propertyName: <value>
+\endcode
+
+An example of list property declaration follows:
+
+\qml
+import QtQuick 2.0
+
+Rectangle {
+ // declaration without initialization
+ property list<Rectangle> siblingRects
+
+ // declaration with initialization
+ property list<Rectangle> childRects: [
+ Rectangle { color: "red" },
+ Rectangle { color: "blue"}
+ ]
+}
+\endqml
+
+If you wish to declare a property to store a list of values which are not
+necessarily QML object-type values, you should declare a \l var property
+instead.
+
+
+\section4 Grouped Properties
+
+In some cases properties contain a logical group of sub-property attributes.
+These sub-property attributes can be assigned to using either the dot notation
+or group notation.
+
+For example, the \l Text type has a \l{Text::font.family}{font} group property. Below,
+the first \l Text object initializes its \c font values using dot notation,
+while the second uses group notation:
+
+\code
+Text {
+ //dot notation
+ font.pixelSize: 12
+ font.b: true
+}
+
+Text {
+ //group notation
+ font { pixelSize: 12; b: true }
+}
+\endcode
+
+Grouped property types are basic types which have subproperties. Some of these
+basic types are provided by the QML language, while others may only be used if
+the Qt Quick module is imported. See the documentation about
+\l{QML Basic Types} for more information.
+
+
+\section3 Property Aliases
+
+Property aliases are properties which hold a reference to another property.
+Unlike an ordinary property definition, which allocates a new, unique storage
+space for the property, a property alias connects the newly declared property
+(called the aliasing property) as a direct reference to an existing property
+(the aliased property).
+
+A property alias declaration looks like an ordinary property definition, except
+that it requires the \c alias keyword instead of a property type, and the
+right-hand-side of the property declaration must be a valid alias reference:
+
+\code
+[default] property alias <name>: <alias reference>
+\endcode
+
+Unlike an ordinary property, an alias can only refer to a object, or the
+property of a object, that is within the scope of the \l{QML Object Types}
+{type} within which the alias is declared. It cannot contain arbitrary
+JavaScript expressions and it cannot refer to objects declared outside of
+the scope of its type. Also note the \e {alias reference} is not optional,
+unlike the optional default value for an ordinary property; the alias reference
+must be provided when the alias is first declared.
+
+For example, below is a \c Button type with a \c buttonText aliased property
+which is connected to the \c text object of the \l Text child:
+
+\qml
+// Button.qml
+import QtQuick 2.0
+
+Rectangle {
+ property alias buttonText: textItem.text
+
+ width: 100; height: 30; color: "yellow"
+
+ Text { id: textItem }
+}
+\endqml
+
+The following code would create a \c Button with a defined text string for the
+child \l Text object:
+
+\qml
+Button { buttonText: "Click Me" }
+\endqml
+
+Here, modifying \c buttonText directly modifies the textItem.text value; it
+does not change some other value that then updates textItem.text. If
+\c buttonText was not an alias, changing its value would not actually change
+the displayed text at all, as property bindings are not bi-directional: the
+\c buttonText value would have changed if textItem.text was changed, but not
+the other way around.
+
+
+\section4 Considerations for Property Aliases
+
+Aliases are only activated once a component has been fully initialized. An
+error is generated when an uninitialized alias is referenced. Likewise,
+aliasing an aliasing property will also result in an error.
+
+\snippet qml/properties.qml alias complete
+
+When importing a \l{QML Object Types}{QML object type} with a property alias in
+the root object, however, the property appear as a regular Qt property and
+consequently can be used in alias references.
+
+It is possible for an aliasing property to have the same name as an existing
+property, effectively overwriting the existing property. For example,
+the following QML type has a \c color alias property, named the same as the
+built-in \l {Rectangle::color} property:
+
+\snippet qml/properties.qml alias overwrite
+
+Any object that use this type and refer to its \c color property will be
+referring to the alias rather than the ordinary \l {Rectangle::color} property.
+Internally, however, the red can correctly set its \c color
+property and refer to the actual defined property rather than the alias.
+
+
+\section3 Default Properties
+
+An object definition can have a single \e default property. A default property
+is the property to which a value is assigned if an object is declared within
+another object's definition without declaring it as a value for a particular
+property.
+
+Declaring a property with the optional \c default keyword marks it as the
+default property. For example, say there is a file MyLabel.qml with a default
+property \c someText:
+
+\qml
+// MyLabel.qml
+import QtQuick 2.0
+
+Text {
+ default property var someText
+
+ text: "Hello, " + someText.text
+}
+\endqml
+
+The \c someText value could be assigned to in a \c MyLabel object definition,
+like this:
+
+\qml
+MyLabel {
+ Text { text: "world!" }
+}
+\endqml
+
+This has exactly the same effect as the following:
+
+\qml
+MyLabel {
+ someText: Text { text: "world!" }
+}
+\endqml
+
+However, since the \c someText property has been marked as the default
+property, it is not necessary to explicitly assign the \l Text object
+to this property.
+
+You will notice that child objects can be added to any \l {Item}-based type
+without explicitly adding them to the \l {Item::children}{children} property.
+This is because the default property of \l Item is its \c data property, and
+any items added to this list for an \l Item are automatically added to its
+list of \l {Item::children}{children}.
+
+Default properties can be useful for reassigning the children of an item. See
+the \l{declarative/ui-components/tabwidget}{TabWidget example}, which uses a
+default property to automatically reassign children of the TabWidget as
+children of an inner ListView.
+
+
+\section3 Read-Only Properties
+
+An object declaration may define a read-only property using the \c readonly
+keyword, with the following syntax:
+
+\code
+ readonly property <propertyType> <propertyName> : <initialValue>
+\endcode
+
+Read-only properties must be assigned a value on initialization. After a
+read-only property is initialized, it no longer possible to give it a value,
+whether from imperative code or otherwise.
+
+For example, the code in the \c Component.onCompleted block below is invalid:
+
+\qml
+Item {
+ readonly property int someNumber: 10
+
+ Component.onCompleted: someNumber = 20 // doesn't work, causes an error
+}
+\endqml
+
+\note A read-only property cannot also be a \l{Default Properties}{default} or
+\l {Property Aliases}{alias} property.
+
+
+\section3 Property Modifier Objects
+
+Properties can have
+\l{qtqml-cppintegration-definetypes.html#property-modifier-types}
+{property value modifier objects} associated with them.
+The syntax for declaring an instance of a property modifier type associated
+with a particular property is as follows:
+
+\code
+<PropertyModifierTypeName> on <propertyName> {
+ // attributes of the object instance
+}
+\endcode
+
+It is important to note that the above syntax is in fact an
+\l{qtqml-syntax-basics.html#object-declarations}{object declaration} which
+will instantiate an object which acts on a pre-existing property.
+
+Certain property modifier types may only be applicable to specific property
+types, however this is not enforced by the language. For example, the
+\c NumberAnimation type provided by \c QtQuick will only animate
+numeric-type (such as \c int or \c real) properties. Attempting to use a
+\c NumberAnimation with non-numeric property will not result in an error,
+however the non-numeric property will not be animated. The behavior of a
+property modifier type when associated with a particular property type is
+defined by its implementation.
+
+
+\section2 Signal Attributes
+
+A signal is a notification from an object that some event has occurred: for
+example, a property has changed, an animation has started or stopped, or
+when an image has been downloaded. The \l MouseArea type, for example, has
+a \l {MouseArea::onClicked}{clicked} signal that is emitted when the user clicks
+within the mouse area.
+
+An object can be notified through a \l{Signal handler attributes}
+{signal handler} whenever it a particular signal is emitted. A signal handler
+is declared with the syntax \e on<Signal> where \e <Signal> is the name of the
+signal, with the first letter capitalized. The signal handler must be declared
+within the definition of the object that emits the signal, and the handler
+should contain the block of JavaScript code to be executed when the signal
+handler is invoked.
+
+For example, the \e onClicked signal handler below is declared within the
+\l MouseArea object definition, and is invoked when the \l MouseArea is
+clicked, causing a console message to be printed:
+
+\qml
+import QtQuick 2.0
+
+Item {
+ width: 100; height: 100
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ console.log("Click!")
+ }
+ }
+}
+\endqml
+
+\section3 Defining Signal Attributes
+
+A signal may be defined for a type in C++ by registering a Q_SIGNAL of a class
+which is then registered with the QML type system. Alternatively, a custom
+signal for an object type may be defined in an object declaration in a QML
+document with the following syntax:
+
+\code
+ signal <signalName>[([<type> <parameter name>[, ...]])]
+\endcode
+
+Attempting to declare two signals or methods with the same name in the same
+type block is an error. However, a new signal may reuse the name of an existing
+signal on the type. (This should be done with caution, as the existing signal
+may be hidden and become inaccessible.)
+
+Here are three examples of signal declarations:
+
+\qml
+import QtQuick 2.0
+
+Item {
+ signal clicked
+ signal hovered()
+ signal actionPerformed(string action, var actionResult)
+}
+\endqml
+
+If the signal has no parameters, the "()" brackets are optional. If parameters
+are used, the parameter types must be declared, as for the \c string and \c var
+arguments for the \c actionPerformed signal above. The allowed parameter types
+are the same as those listed under \l {Defining Property Attributes} on this page.
+
+To emit a signal, invoke it as a method. Any relevant
+\l{Signal handler attributes}{signal handlers} will be invoked when the signal
+is emitted, and handlers can use the defined signal argument names to access
+the respective arguments.
+
+\section3 Property Change Signals
+
+QML types also provide built-in \e {property change signals} that are emitted
+whenever a property value changes, as previously described in the section on
+\l{Property attributes}{property attributes}. See the upcoming section on
+\l{Property change signal handlers}{property change signal handlers} for more
+information about why these signals are useful, and how to use them.
+
+
+\section2 Signal Handler Attributes
+
+Signal handlers are a special sort of \l{Method attributes}{method attribute},
+where the method implementation is invoked by the QML engine whenever the
+associated signal is emitted. Adding a signal to an object definition in QML
+will automatically add an associated signal handler to the object definition,
+which has, by default, an empty implementation. Clients can provide an
+implementation, to implement program logic.
+
+Consider the following \c SquareButton type, whose definition is provided in
+the \c SquareButton.qml file as shown below, with signals \c activated and
+\c deactivated:
+
+\qml
+// SquareButton.qml
+Rectangle {
+ id: root
+
+ signal activated(real xPosition, real yPosition)
+ signal deactivated
+
+ width: 100; height: 100
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: root.activated(mouse.x, mouse.y)
+ onRelased: root.deactivated()
+ }
+}
+\endqml
+
+These signals could be received by any \c SquareButton objects in another QML
+file in the same directory, where implementations for the signal handlers are
+provided by the client:
+
+\qml
+// myapplication.qml
+SquareButton {
+ onActivated: console.log("Activated at " + xPosition + "," + yPosition)
+ onDeactivated: console.log("Deactivated!")
+}
+\endqml
+
+See the \l {Signal and Handler Event System} for more details on use of
+signals.
+
+\section3 Property Change Signal Handlers
+
+Signal handlers for property change signal take the syntax form
+\e on<Property>Changed where \e <Property> is the name of the property,
+with the first letter capitalized. For example, although the \l TextInput type
+documentation does not document a \c textChanged signal, this signal is
+implicitly available through the fact that \l TextInput has a
+\l {TextInput::text}{text} property and so it is possible to write an
+\c onTextChanged signal handler to be called whenever this property changes:
+
+\qml
+import QtQuick 2.0
+
+TextInput {
+ text: "Change this!"
+
+ onTextChanged: console.log("Text has changed to:", text)
+}
+\endqml
+
+
+\section2 Method Attributes
+
+A method of an object type is a function which may be called to perform some
+processing or trigger further events. A method can be connected to a signal so
+that it is automatically invoked whenever the signal is emitted. See
+\l {Signal and Handler Event System} for more details.
+
+\section3 Defining Method Attributes
+
+A method may be defined for a type in C++ by tagging a function of a class
+which is then registered with the QML type system with Q_INVOKABLE or by
+registering it as a Q_SLOT of the class. Alternatively, a custom method can
+be added to an object declaration in a QML document with the following syntax:
+
+\code
+ function <functionName>([<parameterName>[, ...]]) { <body> }
+\endcode
+
+Methods can be added to a QML type in order to define standalone, reusable
+blocks of JavaScript code. These methods can be invoked either internally or
+by external objects.
+
+Unlike signals, method parameter types do not have to be declared as they
+default to the \c var type.
+
+Attempting to declare two methods or signals with the same name in the same
+type block is an error. However, a new method may reuse the name of an existing
+method on the type. (This should be done with caution, as the existing method
+may be hidden and become inaccessible.)
+
+Below is a \l Rectangle with a \c calculateHeight() method that is called when
+assigning the \c height value:
+
+\qml
+import QtQuick 2.0
+Rectangle {
+ id: rect
+
+ function calculateHeight() {
+ return rect.width / 2;
+ }
+
+ width: 100
+ height: calculateHeight()
+}
+\endqml
+
+If the method has parameters, they are accessible by name within the method.
+Below, when the \l MouseArea is clicked it invokes the \c moveTo() method which
+can then refer to the received \c newX and \c newY parameters to reposition the
+text:
+
+\qml
+import QtQuick 2.0
+
+Item {
+ width: 200; height: 200
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: label.moveTo(mouse.x, mouse.y)
+ }
+
+ Text {
+ id: label
+
+ function moveTo(newX, newY) {
+ label.x = newX;
+ label.y = newY;
+ }
+
+ text: "Move me!"
+ }
+}
+\endqml
+
+
+\section2 Attached Properties and Attached Signal Handlers
+
+\e {Attached properties} and \e {attached signal handlers} are mechanisms that
+enable objects to be annotated with extra properties or signal handlers that
+are otherwise unavailable to the object. In particular, they allow objects to
+access properties or signals that are specifically relevant to the individual
+object.
+
+A QML type implementation may choose to create an \e {attaching type} with
+particular properties and signals. Instances of this type can then be created
+and \e attached to specific objects at run time, allowing those objects to
+access the properties and signals of the attaching type. These are accessed by
+prefixing the properties and respective signal handlers with the name of the
+attaching type.
+
+References to attached properties and handlers take the following syntax form:
+
+\code
+<AttachingType>.<propertyName>
+<AttachingType>.on<SignalName>
+\endcode
+
+For example, the \l ListView type has an attached property
+\l {ListView::isCurrentItem}{ListView.isCurrentItem} that is available to each delegate object in a
+ListView. This can be used by each individual delegate object to determine
+whether it is the currently selected item in the view:
+
+\qml
+import QtQuick 2.0
+
+ListView {
+ width: 240; height: 320
+ model: 3
+ delegate: Rectangle {
+ width: 100; height: 30
+ color: ListView.isCurrentItem ? "red" : "yellow"
+ }
+}
+\endqml
+
+In this case, the name of the \e {attaching type} is \c ListView and the
+property in question is \c isCurrentItem, hence the attached property is
+referred to as \c ListView.isCurrentItem.
+
+An attached signal handler is referred to in the same way. For example, the
+\c Component.isCompleted attached signal handler is commonly used to execute
+some JavaScript code when a component's creation process has been completed.
+In the example below, once the \l ListModel has been fully created, its
+\c Component.onCompleted signal handler will automatically be invoked to
+populate the model:
+
+\qml
+import QtQuick 2.0
+
+ListView {
+ width: 240; height: 320
+ model: ListModel {
+ id: listModel
+ Component.onCompleted: {
+ for (var i = 0; i < 10; i++)
+ listModel.append({"Name": "Item " + i})
+ }
+ }
+ delegate: Text { text: index }
+}
+\endqml
+
+Since the name of the \e {attaching type} is \c Component and that type has a
+\c completed signal, the attached signal handler is referred to as
+\c Component.isCompleted.
+
+
+\section3 A Note About Accessing Attached Properties and Signal Handlers
+
+A common error is to assume that attached properties and signal handlers are
+directly accessible from the children of the object to which these attributes
+have been attached. This is not the case. The instance of the
+\e {attaching type} is only attached to specific objects, not to the object
+and all of its children.
+
+For example, below is a modified version of the earlier example involving
+attached properties. This time, the delegate is an \l Item and the colored
+\l Rectangle is a child of that item:
+
+\qml
+import QtQuick 2.0
+
+ListView {
+ width: 240; height: 320
+ model: 3
+ delegate: Item {
+ width: 100; height: 30
+
+ Rectangle {
+ width: 100; height: 30
+ color: ListView.isCurrentItem ? "red" : "yellow" // WRONG! This won't work.
+ }
+ }
+}
+\endqml
+
+This does not work as expected because \c ListView.isCurrentItem is attached
+\e only to the root delegate object, and not its children. Since the
+\l Rectangle is a child of the delegate, rather than being the delegate itself,
+it cannot access the \c isCurrentItem attached property as
+\c ListView.isCurrentItem. So instead, the rectangle should access
+\c isCurrentItem through the root delegate:
+
+\qml
+ListView {
+ //....
+ delegate: Item {
+ id: delegateItem
+ width: 100; height: 30
+
+ Rectangle {
+ width: 100; height: 30
+ color: delegateItem.ListView.isCurrentItem ? "red" : "yellow" // correct
+ }
+ }
+}
+\endqml
+
+Now \c delegateItem.ListView.isCurrentItem correctly refers to the
+\c isCurrentItem attached property of the delegate.
+
+*/