/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** 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 The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/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: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
\page qmlapplications.html
\title QML Applications
\brief Essential documentation for QML application developers

QML is a declarative language that allows user interfaces to be described in
terms of their visual components and how they interact and relate with one
another.  It is a highly readable language that was designed to enable
components to be interconnected in a dynamic manner, and it allows components to
be easily reused and customized within a user interface.  Using the \c QtQuick
module, designers and developers can easily build fluid animated user interfaces
in QML, and have the option of connecting these user interfaces to any back-end
C++ libraries.

\section2 What is QML?

QML is a user interface specification and programming language.
It allows developers and designers alike to create highly performant, fluidly
animated and visually appealing applications.  QML offers a highly readable,
declarative, JSON-like syntax with support for imperative JavaScript
expressions combined with dynamic property bindings.

The QML language and engine infrastructure is provided by the \l {Qt QML} module.
For in-depth information about the QML language, please see the
\l{Qt QML} module documentation.

The following pages contain more information about QML:
\list
\li \l{First Steps with QML} - begin using QML with these examples
\li \l{Qt Creator: Creating Qt Quick Projects}{Creating Qt Quick Projects in Qt Creator}
\li \l{The QML Reference} - reference about the QML constructs and features
\li \l{qml-codingconventions.html}{QML Coding Conventions}
\li \l{Glossary of QML Terms}
\endlist

\section2 What is Qt Quick?

Qt Quick is the standard library of types and functionality for QML.  It
includes visual types, interactive types, animations, models and views,
particle effects and shader effects.  A QML application developer can get
access to all of that functionality with a single import statement.

The \c QtQuick QML library is provided by the \l{Qt Quick} module.
For in-depth information about the various QML types and other functionality
provided by Qt Quick, please see the \l{Qt Quick} module documentation.

\section1 QML User Interfaces

For creating or customizing graphical user interfaces, Qt Quick adds visual
types, animation types, and other QML types in addition to the standard QML
types from Qt QML. \l{Qt Creator: Editing QML Files in Design Mode}{Qt Quick Designer}
is integrated within Qt Creator and supports \c{QtQuick 2} from Qt Creator
version 2.7 and onwards.


\list
\li \l{qtquick-usecase-visual.html}{Visual types in QML}
\li \l{qtquick-usecase-userinput.html}{Responding to User Input in QML}
\li \l{qtquick-usecase-animations.html}{Animations in QML}
\li \l{qtquick-usecase-text.html}{Displaying Text in QML}
\li \l{qtquick-usecase-layouts.html}{Layouts in QML}
\li \l{qtquick-usecase-styling.html}{Style and Theme Support}
\li \l{qtquick-usecase-integratingjs.html}{Integrating JavaScript in QML}
\li \l{Scalability}
\endlist

\section2 Buttons, Menus, and other Controls

For a set of basic UI controls, the \l{Qt Quick Controls} module implements
several controls such as buttons, menus, and views. These controls come with
several built-in styles that can be used, and also support the creation
of custom styles.

\list
\li \l{Qt Quick Controls Guidelines}
\li \l{Qt Quick Templates 2}
\endlist

\section2 Special Effects

Several Qt modules provide types for creating special effects in applications.
Their respective pages contain more information about specific uses.

\list
\li \l{Using the Qt Quick Particle System}{Particle Effects}
\li \l{Graphical Effects} - for creating image composition effects.
\endlist

\section2 Viewing Web Content in QML Applications

The QML types, \l WebEngineView and \l WebView, render and display dynamic
web content. The only difference between the two is that the latter uses a
native web view if available. Both these types can load a URL or an HTML
string. To read more about them and view code
samples, see \l{Qt WebEngine} and \l{Qt WebView}.

\section2 Sensors, Gestures, and Touch Interfaces

The \l{Qt Sensors} module allows applications to read information from
sensors such as accelerometers and tilt sensors. There is a common QML API for
different platforms and can be extended in C++.

\list
\li \l{Qt Sensors QML Types}
\li \l{Qt Sensors Examples}
\li \l{Compatibility Map} - lists support level for different mobile platforms
\endlist

\section1 Multimedia Content

The \l{Qt Multimedia} module enables applications to handle various media
content with a convenient set of QML types. These QML types can be extended
in C++.

\list
\li \l Multimedia
    \list
    \li \l{Audio Overview}
    \li \l{Video Overview}
    \li \l{Camera Overview}
    \li \l{Radio Overview}
    \li \l{Qt Audio Engine QML Types}{Qt Audio Engine} - for 3D positional audio
    playback and content management.
    \endlist
\endlist

\section1 Mobile Devices

Several Qt modules provide QML APIs for networked and mobile devices. The QML
types provide access to the Bluetooth, Near-Field Communications (NFC), and
GPS-enabled devices.

\list
\li \l{Qt Positioning}
\li \l{Qt Location}
\li \l{Qt Bluetooth}
\li \l{Qt NFC}
\endlist

For more information, visit the \l{Networking and Connectivity} and
\l{Mobile APIs} pages.

\section1 Code Samples and Demos

To learn more about uses of QML code, there are several code samples which show
how QML types are used. In addition, there are several demos which show how
QML code is used in applications.

\list
\li \l{Getting Started Programming with Qt Quick} - a tutorial showing the creation of a simple QML text editor.
\li \l{Qt Quick Examples and Tutorials}
\endlist

\section1 Advanced Application Development Topics

\list
\li \l{Integrating QML and C++}
\li \l{qtquick-deployment.html}{Deploying QML Applications}
\li \l{qtquick-bestpractices.html}{Best Practices for QML and Qt Quick}
\li \l{qtquick-performance.html}{Performance Considerations and Suggestions}
\li \l{qtquick-internationalization.html}{Internationalization and Localization}
\li Testing and Debugging
    \list
    \li \l{qtquick-qmlscene.html}{Prototyping with qmlscene}
    \li \l{qtquick-debugging.html}{Debugging QML Applications}
    \li \l{Qt Quick Test}{Qt Quick Test: QML Unit Testing Framework}
    \endlist
\endlist

\section1 Other QML Modules

Qt Quick only provides basic visual types and much of Qt's functionality is
exposed to QML through other modules. If you require the functionality of those
modules, you should browse their QML documentation.

The \l{All QML APIs by Module} contains a list of all QML modules
in Qt 5.

\section1 Related Topics

\list
\li \l{Porting QML Applications to Qt 5}
\endlist

*/
