aboutsummaryrefslogtreecommitdiffstats
path: root/src/qml/doc/src/syntax/objectattributes.qdoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/qml/doc/src/syntax/objectattributes.qdoc')
-rw-r--r--src/qml/doc/src/syntax/objectattributes.qdoc983
1 files changed, 0 insertions, 983 deletions
diff --git a/src/qml/doc/src/syntax/objectattributes.qdoc b/src/qml/doc/src/syntax/objectattributes.qdoc
deleted file mode 100644
index f336d14b14..0000000000
--- a/src/qml/doc/src/syntax/objectattributes.qdoc
+++ /dev/null
@@ -1,983 +0,0 @@
-/****************************************************************************
-**
-** 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.
-
-*/