/****************************************************************************
**
** Copyright (C) 2012 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 qtquick-convenience-topic.html
\title Important Concepts In Qt Quick - Convenience Types
\brief Overview of the convenience types for QML core features

In a highly dynamic user interface, the application developer will often wish
to react to events and trigger various response logic.  QML has built-in
support for these concepts through bindings, signals and signal handlers, and
dynamic object instantiation, but Qt Quick expands upon the support
provided by the language with various convenience types.

\section1 Dynamic Object Instantiation

QML provides a number of ways to dynamically create and manage QML objects.

Objects can be created dynamically from within imperative JavaScript code
in various ways.  See \l{qtqml-javascript-dynamicobjectcreation.html}
{Dynamic QML object creation from JavaScript} for more details.

Qt Quick provides the \l{Loader}, \l{Repeater}, \l{ListView}, \l{GridView} and
\l{PathView} types which also support dynamic object management, and provide
a declarative API.

Please see the \l{qtquick-performance.html}{performance guide} for more
information on using dynamic instantiation and lazy initialization to improve
application performance.

\section1 Dynamic Bindings

Assigning binding expressions to properties is a fundamental concept of QML,
and Qt Quick extends upon the idea with the \l Binding type.   While bindings
are typically specified as property initialization assignments, the \l Binding
type allows the target of a binding to be defined explicitly and separately
from the definition of the binding expression itself.
By declaring a \l Binding instance, the client can dynamically bind properties
from arbitrary objects at run-time, and can modify the binding target when
required (or when it becomes available).

\section1 Dynamic Signal Connections

QML supports dynamic signal connections through a signal's \c{connect()}
method. The QtQuick module provides the convenience \l Connections type which
allows setting up a signal connection involving an object which isn't part of
the static object hierarchy.  It also allows the connection to be dynamically
retargeted at runtime, which allows an application to process different signal
notifications with different functions depending on the program state.

By declaring a \l Connections instance, the client can dynamically cause
signals emitted by one object to trigger methods of another object, and can
modify the connection target when required (or when it becomes available).

\section1 Timer-Based Events

Another common use-case is to trigger functionality some specified period of
time after a particular event occurs.  These sort of timer-based triggers are
supported in Qt Quick through the \l Timer type.  Both single-shot and
recurring timers are supported.

*/

