/****************************************************************************
**
** 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: Using Qt Quick Designer}{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 mimic the
native behavior found in different platforms such as Windows, \macos, and Linux.

\list
\li \l{Qt Quick Controls Overview}
\li \l{Qt Quick Controls Styles}{Styles}
\li \l{Qt Quick Dialogs}{Dialogs}
\li \l{Qt Quick Layouts}{Layouts}
\li \l{Qt Quick Extras}{Extras}
\endlist

A second set of UI controls, \e {Qt Quick Controls 2}, was designed for use
on embedded systems, where the hardware has limited resources. For a comparison
of the two sets of controls, see \l {Differences between Qt Quick Controls}.

\list
\li \l{Qt Quick Controls 2 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{qtquick-deployment.html}{Deploying QML Applications}
\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{qtquick-qtquicktest.html}{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

*/
