diff options
author | Michael Brasser <michael.brasser@nokia.com> | 2012-06-26 13:45:35 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-06-27 07:26:46 +0200 |
commit | 73736a5f2e9668e4f38f5466df5df2ddf93e064f (patch) | |
tree | 750c5ec08c483a96fa7a9681c325d5390b893dae /src/quick | |
parent | 05dfbbbb261388c7be7a576b4be5791910f57076 (diff) |
Document the concept of creation context for QML Components.
Task-number: QTBUG-18011
Change-Id: I78d13df70a20fd9286a20fad4cc09f21591d3f9a
Reviewed-by: Bea Lam <bea.lam@nokia.com>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/doc/snippets/qml/loader/MyComponent.qml | 44 | ||||
-rw-r--r-- | src/quick/doc/snippets/qml/loader/creationContext1.qml | 65 | ||||
-rw-r--r-- | src/quick/doc/snippets/qml/loader/creationContext2.qml | 62 | ||||
-rw-r--r-- | src/quick/doc/snippets/qml/loader/creationContext3.qml | 60 | ||||
-rw-r--r-- | src/quick/doc/snippets/qml/loader/creationContext4.qml | 65 | ||||
-rw-r--r-- | src/quick/items/qquickloader.cpp | 25 |
6 files changed, 321 insertions, 0 deletions
diff --git a/src/quick/doc/snippets/qml/loader/MyComponent.qml b/src/quick/doc/snippets/qml/loader/MyComponent.qml new file mode 100644 index 0000000000..b0aadfce3c --- /dev/null +++ b/src/quick/doc/snippets/qml/loader/MyComponent.qml @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Text { text: index } diff --git a/src/quick/doc/snippets/qml/loader/creationContext1.qml b/src/quick/doc/snippets/qml/loader/creationContext1.qml new file mode 100644 index 0000000000..1c738420fb --- /dev/null +++ b/src/quick/doc/snippets/qml/loader/creationContext1.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +//![0] +Item { + width: 400 + height: 400 + + Component { + id: myComponent + Text { text: index } //fails + } + + ListView { + anchors.fill: parent + model: 5 + delegate: Component { + id: delegateComponent + Loader { + sourceComponent: myComponent + } + } + } +} +//![0] diff --git a/src/quick/doc/snippets/qml/loader/creationContext2.qml b/src/quick/doc/snippets/qml/loader/creationContext2.qml new file mode 100644 index 0000000000..3b873a1725 --- /dev/null +++ b/src/quick/doc/snippets/qml/loader/creationContext2.qml @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + width: 400 + height: 400 + + ListView { + anchors.fill: parent + model: 5 +//![0] + delegate: Component { + Loader { + sourceComponent: Component { + Text { text: index } //okay + } + } + } +//![0] + } +} + diff --git a/src/quick/doc/snippets/qml/loader/creationContext3.qml b/src/quick/doc/snippets/qml/loader/creationContext3.qml new file mode 100644 index 0000000000..e686701c72 --- /dev/null +++ b/src/quick/doc/snippets/qml/loader/creationContext3.qml @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +Item { + width: 400 + height: 400 + + ListView { + anchors.fill: parent + model: 5 +//![0] + delegate: Component { + Loader { + source: "MyComponent.qml" //okay + } + } +//![0] + } +} + diff --git a/src/quick/doc/snippets/qml/loader/creationContext4.qml b/src/quick/doc/snippets/qml/loader/creationContext4.qml new file mode 100644 index 0000000000..5a7da4000c --- /dev/null +++ b/src/quick/doc/snippets/qml/loader/creationContext4.qml @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 + +//![0] +Item { + width: 400 + height: 400 + + Component { + id: myComponent + Text { text: modelIndex } //okay + } + + ListView { + anchors.fill: parent + model: 5 + delegate: Component { + Loader { + property int modelIndex: index + sourceComponent: myComponent + } + } + } +} +//![0] diff --git a/src/quick/items/qquickloader.cpp b/src/quick/items/qquickloader.cpp index 7945a359cc..bd927a115e 100644 --- a/src/quick/items/qquickloader.cpp +++ b/src/quick/items/qquickloader.cpp @@ -267,6 +267,31 @@ qreal QQuickLoaderPrivate::getImplicitHeight() const Since QtQuick 2.0 Loader can also load non-visual components. + \section2 Using a Loader within a view delegate + + In some cases you may wish to use a Loader within a view delegate to improve delegate + loading performance. This works well in most cases, but there is one important issue to + be aware of related to the \l{QtQuick2::Component#creation-context}{creation context} of a Component. + + In the following example, the \c index context property inserted by the ListView into \c delegateComponent's + context will be inaccessible to Text, as the Loader will use the creation context of \c myComponent as the parent + context when instantiating it, and \c index does not refer to anything within that context chain. + + \snippet qml/loader/creationContext1.qml 0 + + In this situation we can either move the component inline, + + \snippet qml/loader/creationContext2.qml 0 + + into a separate file, + + \snippet qml/loader/creationContext3.qml 0 + + or explicitly set the required information as a property of the Loader (this works because the + Loader sets itself as the context object for the component it is loading). + + \snippet qml/loader/creationContext4.qml 0 + \sa {dynamic-object-creation}{Dynamic Object Creation} */ |