diff options
author | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-10-28 08:30:54 (GMT) |
---|---|---|
committer | Aaron Kennedy <aaron.kennedy@nokia.com> | 2009-10-28 08:30:54 (GMT) |
commit | 6652eccc7bf7c749838c9e8df13a827937ddc417 (patch) | |
tree | 6806f1bc2e4b9922eb179b69e0f829ef8ffb13c6 /doc | |
parent | 6a9825e8d983efad092be1c97f4bf885fc378aaa (diff) | |
download | Qt-6652eccc7bf7c749838c9e8df13a827937ddc417.zip Qt-6652eccc7bf7c749838c9e8df13a827937ddc417.tar.gz Qt-6652eccc7bf7c749838c9e8df13a827937ddc417.tar.bz2 |
Remove QML SQL classes
Sadly, these are not being maintained. There's still SQL offline storage
for all your SQL needs.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/src/declarative/elements.qdoc | 1 | ||||
-rw-r--r-- | doc/src/declarative/qtdeclarative.qdoc | 6 | ||||
-rw-r--r-- | doc/src/tutorials/declarative.qdoc | 674 |
3 files changed, 0 insertions, 681 deletions
diff --git a/doc/src/declarative/elements.qdoc b/doc/src/declarative/elements.qdoc index 3ea5989..0eda95e 100644 --- a/doc/src/declarative/elements.qdoc +++ b/doc/src/declarative/elements.qdoc @@ -88,7 +88,6 @@ The following table lists the QML elements provided by the Qt Declarative module \o \l ListModel, \l ListElement \o \l VisualItemModel \o \l XmlListModel and XmlRole -\o \l SqlQuery, \l SqlConnection, and \l SqlBind \o \l DateTimeFormatter \o \l NumberFormatter \endlist diff --git a/doc/src/declarative/qtdeclarative.qdoc b/doc/src/declarative/qtdeclarative.qdoc index 5d8623b..c31156d 100644 --- a/doc/src/declarative/qtdeclarative.qdoc +++ b/doc/src/declarative/qtdeclarative.qdoc @@ -100,10 +100,4 @@ completely new applications. QML is fully \l {Extending QML}{extensible from C+ \o \l {QML Elements} \o \l {Extending QML} \endlist - -\section1 Deprecated -\list -\o \l {tutorials-declarative-contacts.html}{Tutorial: 'Introduction to QML'} -\endlist - */ diff --git a/doc/src/tutorials/declarative.qdoc b/doc/src/tutorials/declarative.qdoc deleted file mode 100644 index bbc3d15..0000000 --- a/doc/src/tutorials/declarative.qdoc +++ /dev/null @@ -1,674 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Qt Software Information (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, 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.0, 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. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at qt-sales@nokia.com. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page tutorials-declarative-contacts.html - \startpage {index.html}{Qt Reference Documentation} - \nextpage {tutorials/declarative/contacts/part1}{Chapter 1} - - \title Declarative UI Tutorial - \ingroup howto - \ingroup tutorials - \brief An introduction to using Qt Declarative UI to put together a - simple animated application. - - \omit - At the time of writing the tutorial Declarative UI was still under - development. It is extremely likely that an update will be required - prior to 4.6 release. - \endomit - - This tutorial gives an introduction to using the Qt Declarative UI - animation framework. - - In this process we will learn about some of the basics of using - Declarative UI, such as - - \list - \o Basic drawing - \o States and Transitions - \o Reuse of components - \o Models and Views - \endlist - - An existing knowledge of Qt is not required. - - The tutorial's source code is located in Qt's - \c examples/declarative/tutorials/contacts directory. - It is split up into a number of sub directories, and within each - sub directory the files are numbered in an order of increasing features. - - The code in this example is not compiled, but interpreted at run time. - This means you should use the qmlviewer application provided with - Qt to run the examples. - - \list - \o \l{tutorials/declarative/contacts/part1}{Drawing and Animation} - \o \l{tutorials/declarative/contacts/part2}{Reusing QML Components} - \o \l{tutorials/declarative/contacts/part3}{Models, Views and Delegates} - \endlist -*/ - -/*! - \page tutorials-declarative-contacts-part1.html - \contentspage {Declarative UI Tutorial}{Contents} - \nextpage {tutorials/declarative/contacts/part2}{Chapter 2} - \example tutorials/declarative/contacts/part1 - \title Drawing and Animation - \tableofcontents - - The first part of this tutorial covers basic drawing of elements on the - screen and causing them to animate. - - \section1 Drawing - - In this first chapter we will build a button that indicates something - can be removed and asks for confirmation. When clicked it will expand - from a small button with a trash can icon, to a wide button with a - confirm icon on the left, the text "Remove" in the middle, and a - cancel icon on the right. - - \image declarative-removebutton.gif - - Because Declarative UI is declarative, you don't pass instructions on - what to paint in a sequential manner as you may be used to. Instead - elements and how they appear on the screen are declared in much the - same was as elements on a web page are declared. This is done using - the Qt Markup Language which we will refer to by the abbreviation QML - for the remainder of the tutorial. - - We will start by drawing a simple red rectangle with rounded corners. - - \image declarative-roundrect.png - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/1/RemoveButton.qml 0 - - This is one of the simplest of QML components. It describes a rectangle with - some simple properties. In QML all components start with a capital - letter, and their properties with lower case letters. - - Apart from the properties all QML components share, the \l{Rectangle}{Rectangle} component has the properties - - \list - \o color - The background color of the rectangle - \o tintColor - The overlay color of the rectangle - \o gradientColor - The color at the base of the rectangle to blend upwards - \o pen - The description of how to draw the border of the rectangle - \o radius - The corner radius used to draw rounded rectangles. - \endlist - - There are also a number of properties all QML components shares, described - in the \l{Item}{Item} element reference documentation. The rectangle drawn in the - above code uses the properties; - - \list - \o id - An identifier of the component - \o width - the width of the component when drawn - \o height - the height of the component when drawn - \endlist - - Currently we have described a rectangle with a width and height of 30 pixels, filled in with - the color red and with rounded corners using a radius of 5. - - \section1 Layout - - The next step of the tutorial adds an image over the rectangle. We - will do this by adding an \l{Image}{Image} component as a child of the - \l{Rectangle}{Rectangle} component. All QML components have a list of children which - are drawn in order after the parent component has been drawn. - By having the \l{Image}{Image} - component as a child of the \l{Rectangle}{Rectangle} component we ensure it is drawn - over the \l{Rectangle}{Rectangle} component. Children also are affected by the opacity - of the parent component and calculate their position in within the bounds of - the parent component. - - \image declarative-removebutton-close.png - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/2/RemoveButton.qml 0 - - The trashIcon image is added as a child of the Rectangle. In this case - the children property isn't explicitly used because the default property - of the \l{Rectangle}{Rectangle} component is its children. Some elements often don't have children - and use some other default component. When this is the case its possible - to explicitly list the sub component as a child as follows: - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/2a/RemoveButton.qml 0 - - The \l{Image}{Image} element allows loading an image file for display. The source - specified is a URL, and in this case refers to a portable network graphics - file in a relative directory to where the QML file was loaded from. - - Also new in this code is the use of anchors. In QML components can either - have their position and size specified explicitly using x, y, width - and height, or they can instead specify the size and position in relation - to either parent or sibling elements. The \l{Image}{Image} component uses - a combination of both styles. It has a fixed size, but specifies its - position to align to the right of its parent and for its vertical center - to align with the vertical center of its parent. Setting a property - by the identifier of a separate property binds them. This means - that if while running the example the position of the \l{Rectangle}{Rectangle} component's - vertical center changed, so to would the vertical center of - the \l{Image}{Image} component. - - The parent value is a special identifier that always refers to the - parent component of a component. - - Anchors are most useful when the size of items might change based on - the component state or contents. However they are limited in that they - must always refer to a parent or sibling component. See - \l{anchor-layout}{Anchor-based Layout} for more information on using - anchors in QML. - - At this point the initial state of the RemoveButton is complete. A small - rounded rectangle with a trash icon. Next we will design the open - state for the button. - - \image declarative-removebutton-open.png - - This is a wider rectangle with two images and some text. The code to - draw this state of the button could be written as follows: - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/3/RemoveButton.qml 0 - - The rectangle width is now wider by 200 pixels. Also the trashIcon has - been replaced. Normally we wouldn't - remove the trashIcon when developing an alternate state of the RemoveButton, - however since this is a tutorial its been done so that its easier to - understand the alternate state we are aiming for and how it relates to - transitioning between states. - - We also introduce the \l{Text}{Text} element. - Left and Right anchors are specified in terms of the neighboring icons - because we want text to fill the space between the icons. This - means as the parent removeButton gets wider, so will the text component. - It also means that if we animate a width change on the removeButton, - any bindings, that is the values specified by an expression such as - \c{parent.left} will be evaluated and animated as well. - - \section1 Defining States - - When designing a component with multiple states, it should be developed - in the initial state and the changes that would be made specified - as an additional state. Its not normally possible to add new children - to an element when changing state - This means that all possible child components should be included - in the initial state, and those that should not be visible in the initial - state should have their opacity set to zero. Thus - for the RemoveButton we specify the starting size of the RemoveButton - and hide any items that should not initially be visible. - - The code snippet below shows what the start of the duel state specification - might look like. - - \code - Rectangle { - id: removeButton - width: 30 - height: 30 - color: "red" - radius: 5 - Image { - id: trashIcon - width: 22 - height: 22 - anchors.right: parent.right - anchors.rightMargin: 4 - anchors.verticalCenter: parent.verticalCenter - src: "../../shared/pics/trash.png" - opacity: 1 - } - Image { - id: cancelIcon - width: 22 - height: 22 - anchors.right: parent.right - anchors.rightMargin: 4 - anchors.verticalCenter: parent.verticalCenter - src: "../../shared/pics/cancel.png" - opacity: 0 - } - \endcode - - The code above includes components from both states of the RemoveButton, - but by setting opacity="0" for the cancelIcon it means that the - components of the second state won't be drawn yet. - The base state of a component always has an empty name, however new - states can be added that describe how a component and its children - should be changed. For the RemoveButton there is only one non-base state - required. In this tutorial we will name it the 'opened' state. - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/4/RemoveButton.qml states - - In the opened state the width of the button itself changes from the base - width of 30 to the new width of 230. Also the opacity of the children - are changed so that the trash icon is now hidden and the other elements - are now visible. - - \section1 Changing States - - To trigger the change we will react to the 'clicked' signal of a - MouseRegion component. - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/4/RemoveButton.qml mouse region - - MouseRegion components handle mouse actions within their geometry. This - geometry behaves the same way as painted components, such that children - cover their parents and later siblings will cover earlier siblings and - all the children of the earlier sibling, should they overlap. - - When a component has a signal, such as clicked, the action for the signal - can be specified using \c{onSignalName}, as is done above. In this - case when the clicked signal is emitted by the MouseRegion component, - a function called \c{toggle()} is called. It might also have been written - - \code - onClicked: { removeButton.state='opened' } - \endcode - - However in this case we are using a function because it allows multiple - mouse regions to use the same functionality, and also makes it - easier to specify complex behavior in response to a signal. - - An alternative would be to explicitly state the connection: - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/4a/RemoveButton.qml mouse region - - This will connect to the \c{clicked()} signal of the trashMouseRegion component - and execute the associated script. - - The \c{toggle()} function is a new function specified as part of the remove - button element. - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/4/RemoveButton.qml script - - Any QML component can have a set of resources specified. One of those - resources is any Script that might be needed. See the - \l{QtScript Module} for more information on how to write - script code in Qt. - - It is possible to refer to identified QML components - within the script. Hence the function for our RemoveButton will check - if the state is already open to determine what the new state should be. - - \section1 Animation - - Currently the RemoveButton is functional, but snaps between our two states. - Fortunately making the transition between states smooth is very simple. - We only need one more bit of code at the end of our removeButton component. - - \snippet declarative/tutorials/contacts/1_Drawing_and_Animation/5/RemoveButton.qml transition - - All QML components have a transitions property. This describes how - properties of items within the component should change. In this case - we specify that if the x, width or opacity of the removeButton or its - children change due to a change in state, that they should take 200ms - to complete their transition. - - \omit - TODO More on types of animation, e.g. ColorAnimation, Behaviors. - \endomit - - In the next chapter we will show how we can use the remove button in - other QML components. -*/ - -/*! - \page tutorials-declarative-contacts-part2.html - \contentspage {Declarative UI Tutorial}{Contents} - \previouspage {tutorials/declarative/contacts/part1}{Chapter 1} - \nextpage {tutorials/declarative/contacts/part3}{Chapter 3} - \example tutorials/declarative/contacts/part2 - \title Reusing QML Components - \tableofcontents - - The second part of this tutorial covers how to reuse QML components and - have them interact with each other. The RemoveButton developed in the - previous chapter is intended to be part of a more complex control for - editing a field of our contact. This ContactField in turn is intended - to be used in a contact editing control. - - \image declarative-reuse-3.png - - \section1 Loading QML Components - - Reusing the RemoveButton itself is very simple. When parsing a QML file - if a Component is referred to that isn't already in the system, Qt - will try to load it from a file of the same name with the ".qml" extension. - - \snippet declarative/tutorials/contacts/2_Reuse/1/ContactField.qml load - - The above QML code will attempt to load the RemoveButton component from - a file with the name "RemoveButton.qml" from the following search paths. - - \list - \o Any imported directories. These are listed at the start of the file using - \c { import "path" }. - \o the directory of the QML code file - \endlist - - All the properties of the button are - accessible and can be overridden from defaults. The loaded component - can also refer to elements further up in the tree, so that code within - RemoveButton.qml could refer to the contactField component. - Only properties of the top level element in RemoveButton.qml are visible to - the contact field. - - There are also two other ways to reuse components in QML. A component - can be reused from within the same QML file using Component and Loader - elements. The next code snippet produces three red rounded rectangles - within a large blue rectangle. - - \image declarative-reuse-bluerect.png - - \snippet declarative/tutorials/contacts/2_Reuse/1b/BlueRect.qml all - - This can be useful when the component is not complex enough to justify its - own file. The third way to reuse components allows for delaying loading - of the QML until some later event. \l{Loader}{Loader} includes - a special child, item, which has its definition provided by the - contents of the source property of the loader. - - \snippet declarative/tutorials/contacts/2_Reuse/1a/ContactField.qml load - - This last method is useful if the contents of a item need to change at - run time or if the initial complexity of the loaded QML needs to be - reduced in order to improve the time it takes to start the application. In - chapter three this method is used to improve performance of - scrolling through very large numbers of items. - - Because of its simplicity, the first method is the recommended in most - cases and will be the focus of the remainder of this chapter. - - \section1 Properties and Signals - - The next task is to be able to control aspects of the RemoveButton from - the components that use it. In particular controlling how far it - expands and how it reacts when the user clicks on the confirm icon - of the remove button. When reusing a component in a separate QML file - only the attributes of the root element are visible. To allow controlling - attributes of child elements within an imported component we need to define - some properties and signals for the RemoveButton. - - \snippet declarative/tutorials/contacts/2_Reuse/2/RemoveButton.qml define properties and signals - - The children of the remove button can use these properties and signals. The - opened state can now bind the expanded width to the expandedWidth property. - - \snippet declarative/tutorials/contacts/2_Reuse/2/RemoveButton.qml use width - - Also when the confirm icon is clicked, as well as toggling the state it will - emit the confirmed signal of the RemoveButton component. - - \snippet declarative/tutorials/contacts/2_Reuse/2/RemoveButton.qml use signal - - These properties and signals can also be accessed from the contact field the same - way standard system component properties and signals are accessed. - - \snippet declarative/tutorials/contacts/2_Reuse/2/ContactField.qml use properties and signals - - Now when the remove button is expanded, it will expand to the width of the - contact field. Also when the user confirms the remove action, the - text section of the contact field will be cleared. - - \section1 States - - Its also possible to access the state of included components. The FieldText - component we will use in this tutorial is also been written specifically - for our contacts application. In - this case we want it to expand when editing. One way to do this would - be to anchor the field text component to the center of its parent and - then let its own width change push the remove button away, however that - would make it difficult to have the remove button also push the field - text to the left when the remove button expands. Instead we will anchor - the right edge of the field text to the left edge of the remove button - and use a state change in the contact field itself to move the - remove button and the field icon out of - view. - - \snippet declarative/tutorials/contacts/2_Reuse/3/ContactField.qml all - - Apart from accessing the fieldText.state, the above code also uses the when - attribute of its own editingText state. This is an alternative to using - a signal to change state. When the value of the expression for the - when attribute changes, Qt will detect if the contactField needs to enter - that state. In the FieldText element a similar approach is used to fade - out the label of the FieldText when the user enters some text of their own. - - \snippet declarative/tutorials/contacts/2_Reuse/3/FieldText.qml behavior - - \c{fieldText} is the enclosing component and \c{textEdit} is a TextEdit element - provided by Qt. In the QML code above, the opacity of the textLabel is - only 1 if the text for the textEdit is empty. This is a form of - short cut to using states for an element, useful if only one property - is changing as it is for the textLabel. To animate a property change is - similar to animating a state change. Using the Behavior element we can - specify how the property changes if it does change state, allowing for - a smooth transition. - - \section1 Key and Mouse Focus - - Setting focus to true on a component does not always mean - that the component has focus. This is due to the declarative nature - of QML, and can be affected by multiple components both indicating - focus to be true. At the time of writing this tutorial both key and mouse - focus handling are still being improved. Hence we will only lightly cover - the topic. - - For an item to have key focus in QML it is required that: - - \list - \o If there is a FocusScope ancestor of the component that it has focus as well. - \o That it is the most recent component within the focus realms descendent's - to receive focus - \endlist - - The read-only property focus can be used to determine whether a - component will receive key input. Any un-handled keys will be passed to - the components parent, which in turn will pass keys it doesn't handle up to its - own ancestors. - - Some components such as ListView components are also FocusScope components, as they - handle focus among the child list items. - - At this stage of the tutorial it is sufficient to use the setting of 'focus' - as we only have a list of line edits and only one should be active at any given time. - - Currently if multiple contact fields were put into our contact editor, - any of the FieldText components could be clicked and opened, and - any of the RemoveButton components could be clicked and opened, all - at the same time. This leads to situations where the users actions - are ambiguous - - \image declarative-reuse-focus.png - - To counteract this we will add a property of the root element to indicate - when an element has 'grabbed' mouse interaction, preventing other - clickable elements from reacting. - - \snippet declarative/tutorials/contacts/2_Reuse/4/Contact.qml grab property - - The code that we want to disable then simply needs to check this property before - acting. - - \snippet declarative/tutorials/contacts/2_Reuse/4/RemoveButton.qml grab - - \note Handling Key and Mouse focus in QML is quite likely to change before - the Qt 4.6 release. -*/ - -/*! - \page tutorials-declarative-contacts-part3.html - \contentspage {Declarative UI Tutorial}{Contents} - \previouspage {tutorials/declarative/contacts/part2}{Chapter 2} - \example tutorials/declarative/contacts/part3 - \title Models, Views and Delegates - \tableofcontents - - In the previous chapters we designed a component to display and - edit a contact. The next step is to display a list of those contacts - and allow the user to expand individual contacts for editing. - - As the previous elements will not be changed in this section, they have - been moved to a lib directory for this tutorial and the relevant - import path has been used. - - \section1 Simple List View - - Displaying lists requires three components. A model that holds the - data displayed, a delegate to indicate how elements are drawn and - a view to arrange the elements. - - \image declarative-tutorial-list.gif - - For the purposes of this tutorial we will be using an SQL query as our - data model. This can be declared in the resources section of - the parent item. - - \snippet declarative/tutorials/contacts/3_Collections/1/ContactView.qml model - - The SqlConnection component describes how to connect to the database in - much the same ways as the QSqlDatabase::addDatabase() function is used. - In this case an SQLite database is used as it can be connected to as a - file, reducing complexity in setting up a database server or credentials. - - The SqlQuery component allows various forms of queries to be described. - When the query is a select statement, the component also acts as a model - allowing it to provide data to a ListView component. The query above - retrieves the fields recid, label, email and phone from a contacts table, - and orders the results by the label of the contact first, and then by - the recid for any contacts with equivalent labels. - - The ListView component is suitable for displaying models and is declared - much like any other QML component. The ListView component also has - a delegate property that defines how to construct components for items in the list. - - \snippet declarative/tutorials/contacts/3_Collections/1/ContactView.qml delegate - - Unlike a child element, this describes a template on how to build the component - for each element, much in the same way that components are loaded from - files such as RemoveButton.qml. The are constructed or destroyed as items - scroll into our out of the visible area of the list. - - The entire view component will look like: - - \snippet declarative/tutorials/contacts/3_Collections/1/ContactView.qml view - - This gives us a list of contacts that the user can flick through. - - \section1 Animating Delegates - - The next step is to allow the user to click on a contact to edit the - contact. We will take advantage of QML to open a Contact component - in the list rather than as a new dialog or view. This is very - similar to how the contents of the FieldText and RemoveButton components - are swapped in and out. - - \image declarative-tutorial-list-open.gif - - \snippet declarative/tutorials/contacts/3_Collections/2/ContactView.qml components - - The first step is to have two children of our delegate component that can - be swapped between. The plain Text component and the Contact component built - in the previous chapters. We also add a MouseRegion that can be clicked upon - to change the state of the delegate component. - - \snippet declarative/tutorials/contacts/3_Collections/2/ContactView.qml states - - This defines the open state of the delegate. It changes the height of the delegate - component to that of the whole list view, pushing the other items off each end of - the list. It sets the listview's scroll viewportY of the ListView to the - y value of the delegate so that the top of the delegate matches the top of the list view. - The next step is to lock the list view. This prevents the user being able to flick - the list view. The final to properties that are set should - be familiar from previous chapters, setting the opacity of the items such - that the new item is visible and the old item hidden. - - We then add a transition so that this becomes animated: - - \snippet declarative/tutorials/contacts/3_Collections/2/ContactView.qml transitions - - This allows the user to click on an item to enter the open state. Elsewhere on our - contact view we add a button so that the user can leave the detailed view of the contact. - - \snippet declarative/tutorials/contacts/3_Collections/2/ContactView.qml button - - And connect it's clicked value to some script to set the state of the delegate - back to its default state. - - \snippet declarative/tutorials/contacts/3_Collections/2/ContactView.qml connections - - Something worth noting at this point is that every delegate created has this connection. - It is important to check whether the delegate is the one in the open state, and - taking some effort to ensure only one is, before acting on the signal from the button. - - \section1 Performance Considerations - - We have now made a contact application that can view a list of contacts, open one, - and close it again. Its now time to take a moment and consider the implications - of a list view delegate. It is created for each and every item in the list, - and while the list cleans up after itself and only has delegate components constructed - for visible items and any single point of animation, the list can scroll very quickly. - This means potentially thousands of delegate components will be constructed and - destroyed when the user is flicking through the list. - - Its important then to try and minimize the complexity of the delegate. This - can be done by delaying the loading of the component. By using the qml property - of the \l{Item}{Item} component, we can delay building the Contact.qml item until the user - attempts to open the list. - - \snippet declarative/tutorials/contacts/3_Collections/3/ContactView.qml setting qml - - \l{Loader}{Loader} has a source property that represents the filename for the contents of - a special item child of the \l{Loader}{Loader}. By setting the source property of the Details - component on clicking the mouse region, the more complex component isn't loaded - until needed. The down side about this though is the properties of Contact - cannot be set until the item is loaded. This requires using the Bind element. - - - \snippet declarative/tutorials/contacts/3_Collections/3/ContactView.qml binding - - Unlike binding a value to the property of a component directly, the Bind element - allows both the target and the property set to themselves be to dynamic values. - This means that when the source property is set, it will change the - item property of the Details component. This in turn triggers the Bind - elements to set the required properties of the item, which is now - an instance of the Contact component. -*/ |