/****************************************************************************
**
** Copyright (C) 2019 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 qtmodules.html
    \title All Modules
    \brief A list of all modules in Qt 5.

    \ingroup classlists

    \brief Qt 5 consists of essential modules, add-on modules, and tools.

    \section1 Qt Essentials

    Qt Essentials define the foundation of Qt on all platforms. They are
    available on all supported development platforms and on the tested target
    platforms. Except the testing modules, which will remain source compatible,
    these modules will remain source and binary compatible throughout Qt 5.

    Essential modules are general and useful for a majority of Qt applications.
    A module that is used for a special purpose is considered an add-on module
    even if it is available on all supported platforms.

    The following table lists the Qt essentials:

    \table 80%
    \header
        \li Module
        \li Description
    \row
        \li \l[QtCore]{Qt Core}
        \li Core non-graphical classes used by other modules.
    \row
        \li \l[QtGui]{Qt GUI}
        \li Base classes for graphical user interface (GUI) components.
            Includes OpenGL.
    \row
        \li \l[QtMultimedia]{Qt Multimedia}
        \li Classes for audio, video, radio and camera functionality.
    \row
        \li \l[QtMultimediaWidgets]{Qt Multimedia Widgets}
        \li Widget-based classes for implementing multimedia functionality.
    \row
        \li \l[QtNetwork]{Qt Network}
        \li Classes to make network programming easier and more portable.
    \row
        \li \l[QtQml]{Qt QML}
        \li Classes for QML and JavaScript languages.
    \row
        \li \l[QtQuick]{Qt Quick}
        \li A declarative framework for building highly dynamic applications
            with custom user interfaces.
    \row \li \l{Qt Quick Controls}
         \li Provides lightweight QML types for creating performant user
             interfaces for desktop, embedded, and mobile devices. These
             types employ a simple styling architecture and are very efficient.
    \row
        \li \l[QtQuickDialogs]{Qt Quick Dialogs}
        \li Types for creating and interacting with system dialogs from a
            Qt Quick application.
    \row
        \li \l[QtQuickLayouts]{Qt Quick Layouts}
        \li Layouts are items that are used to arrange Qt Quick 2 based items in
            the user interface.
    \row
        \li \l[QtQuickTest]{Qt Quick Test}
        \li A unit test framework for QML applications, where the test cases
            are written as JavaScript functions.
            \note The binary compatibility guarantee does not apply to Qt Quick
                  Test. However, it will remain source compatible.
    \row
        \li \l[QtSql]{Qt SQL}
        \li Classes for database integration using SQL.
    \row
        \li \l[QtTestLib]{Qt Test}
        \li Classes for unit testing Qt applications and libraries.
            \note The binary compatibility guarantee does not apply to Qt Test.
                  However, it will remain source compatible.
    \row
        \li \l[QtWidgets]{Qt Widgets}
        \li Classes to extend Qt GUI with C++ widgets.
    \endtable

    If you use \l qmake to build your projects, the \l{Qt Core} and \l{Qt GUI}
    modules are included by default. To link only against Qt Core, add
    the following line to your \c .pro file:

    \code
    QT -= gui
    \endcode

    On Windows, if you do not use \l qmake
    or other build tools such as \l{CMake Documentation}{CMake}, you also need to link against
    the \c qtmain library.

    \section1 Qt Add-Ons

    \e{Qt Add-On} modules bring additional value for specific purposes. These
    modules may only be available on some development platform. Many add-on
    modules are either feature-complete and exist for backwards compatibility,
    or are only applicable to certain platforms. Each add-on module specifies
    its compatibility promise separately.

    The Qt installers include the option of downloading the add-ons. For more
    information, visit the \l{Getting Started with Qt} page.

    The following table lists the Qt add-ons:

    \table 80%
    \header
        \li Module
        \li Development Platforms
        \li Target Platforms
        \li Description
    \row
        \li \l[ActiveQt]{Active Qt}
        \li \l{Qt for Windows}{Windows}
        \li \l{Qt for Windows}{Windows}
        \li Classes for applications which use ActiveX and COM
    \row
         \li \l[Qt3D]{Qt 3D}
         \li All
         \li All
         \li Functionality for near-realtime simulation systems with support
             for 2D and 3D rendering.
    \row
        \li \l[QtAndroidExtras]{Qt Android Extras}
        \li All
        \li \l{Qt for Android}{Android}
        \li Provides platform-specific APIs for Android.
    \row
        \li \l[QtBluetooth]{Qt Bluetooth}
        \li All
        \li \l{Qt for Android}{Android},
            \l{Qt for iOS}{iOS}, \l{Qt for Linux/X11}{Linux}, \l{Qt for macOS}{\macos}, and
            \l{Qt for UWP}{UWP} (*)
        \li Provides access to Bluetooth hardware.
    \row
        \li \l[QtConcurrent]{Qt Concurrent}
        \li All
        \li All (*)
        \li Classes for writing multi-threaded programs without using low-level
            threading primitives.
    \row
        \li \l[QtDBus]{Qt D-Bus}
        \li All
        \li All (*)
        \li Classes for inter-process communication over the D-Bus protocol.
    \row
        \li \l[QtGamepad]{Qt Gamepad}
        \li All
        \li \l{Qt for Android}{Android}, \l{Qt for iOS}{iOS}, \l{Qt for macOS}{\macos},
            tvOS (including the tvOS remote), \l{Qt for Linux/X11}{Linux},
            \l{Qt for Windows}{Windows}, and \l{Qt for QNX}{QNX}
        \li Enables Qt applications to support the use of gamepad hardware.
    \row
        \li \l[QtGraphicalEffects]{Qt Graphical Effects}
        \li All
        \li All
        \li Graphical effects for use with Qt Quick 2.
    \row
        \li \l{Qt Help}
        \li All
        \li All (*)
        \li Classes for integrating documentation into applications, similar to Qt Assistant.
    \row
        \li \l[QtImageFormats]{Qt Image Formats}
        \li All
        \li All
        \li Plugins for additional image formats: TIFF, MNG, TGA, WBMP.
    \row
        \li \l[QtLocation]{Qt Location}
        \li All
        \li All
        \li Displays map, navigation, and place content in a QML application.
    \row
        \li \l[QtMacExtras]{Qt Mac Extras}
        \li All
        \li \l{Qt for macOS}{\macos}
        \li Provides platform-specific APIs for \macos.
    \row
        \li \l[QtNfc]{Qt NFC}
        \li All
        \li \l{Qt for Android}{Android} and \l{Qt for Linux/X11}{Linux} (*)
        \li Provides access to Near-Field communication (NFC) hardware.
    \row
        \li \l[QtOpenGL]{Qt OpenGL} (Deprecated)
        \li All
        \li All (*)
        \li OpenGL support classes. Deprecated in favor of the \c{QOpenGL*}
            classes in the \l{Qt GUI} module.
    \row
        \li \l[QtPlatformHeaders]{Qt Platform Headers}
        \li \l{Qt for Windows}, \l{Qt for Linux/X11}{Linux}, \l{Qt for macOS}{\macos}
        \li \l{Qt for Windows}, \l{Qt for Linux/X11}{Linux}, \l{Qt for macOS}{\macos}, \l{Qt for Android}{Android} (*)

        \li Provides classes that encapsulate platform-specific information,
            tied to a given runtime configuration of a \l {Qt Platform Abstraction}
            {platform plugin}.
    \row
        \li \l[QtPositioning]{Qt Positioning}
        \li All
        \li \l{Qt for Android}{Android}, \l{Qt for iOS}{iOS}, \l{Qt for macOS}{\macos},
        \l{Qt for Linux/X11}{Linux}, \l{Qt for UWP}{UWP} (*).
        \li Provides access to position, satellite and area monitoring classes.
    \row
        \li \l[QtPrintSupport]{Qt Print Support}
        \li All
        \li All (*)
        \li Classes to make printing easier and more portable.
    \row
        \li \l{Qt Purchasing}
        \li All
        \li \l{Qt for Android}{Android}, \l{Qt for iOS}{iOS}, and
            \l{Qt for macOS}{\macos}.
        \li Enables in-app purchase of products in Qt applications.
    \row
        \li \l[QtQuickControls1]{Qt Quick Controls 1} (Deprecated)
        \li All
        \li All (*)
        \li Reusable Qt Quick based UI controls to create classic desktop-style
            user interfaces. Deprecated in favor of \l{Qt Quick Controls} 2, which
            are better and easier to use.
    \row
        \li \l[QtQuickExtras]{Qt Quick Extras}
        \li All
        \li All (*)
        \li Provides a specialized set of controls that can be used to build
            interfaces in Qt Quick.
    \row
        \li \l[Qt Quick Timeline]{Qt Quick Timeline}
        \li All
        \li All (*)
        \li Enables keyframe-based animations and parameterization.
    \row
        \li \l{Qt Quick Widgets C++ Classes}{Qt Quick Widgets}
        \li All
        \li All (*)
        \li Provides a C++ widget class for displaying a Qt Quick user interface.
    \row
        \li \l{Qt Remote Objects}
        \li All
        \li All
        \li Provides an easy to use mechanism for sharing a QObject's API
             (Properties/Signals/Slots) between processes or devices.
    \row
        \li \l[QtScript]{Qt Script} (Deprecated)
        \li All
        \li All
        \li Classes for making Qt applications scriptable. Deprecated in favor
            of the \c{QJS*} classes in the \l{Qt QML} module.
    \row \li \l[QtScxml]{Qt SCXML}
         \li All
         \li All
         \li Provides classes and tools for creating state machines from SCXML
             files and embedding them in applications.
    \row
        \li \l[QtScriptTools]{Qt Script Tools} (Deprecated)
        \li All
        \li All (*)
        \li Additional components for applications that use \l{Qt Script}.
    \row
        \li \l[QtSensors]{Qt Sensors}
        \li All
        \li \l{Qt for Android}{Android}, \l{Qt for iOS}, \l{Qt for UWP}{UWP}, Mer,
            and \l{Qt for QNX}{QNX}.
        \li Provides access to sensor hardware and motion gesture recognition.
    \row
        \li \l[QtSerialBus]{Qt Serial Bus}
        \li All
        \li \l{Qt for Windows}{Windows}, \l{Qt for Linux/X11}{Linux},
            \l{Boot2Qt}{Boot to Qt} targets, and \l{Qt for QNX}{QNX}.
        \li Provides access to serial industrial bus interface. Currently the
            module supports the CAN bus and Modbus protocols.
    \row
        \li \l[QtSerialPort]{Qt Serial Port}
        \li All
        \li \l{Qt for Windows}{Windows}, \l{Qt for Linux/X11}{Linux}, \l{Qt for macOS}{\macos},
            and \l{Qt for QNX}{QNX}.
        \li Provides access to hardware and virtual serial ports.
    \row
        \li \l[QtSpeech]{Qt Speech}
        \li All
        \li All except \l{Qt for QNX}{QNX}.
        \li Provides support for accessibility features such as text-to-speech.
    \row
        \li \l[QtSvg]{Qt SVG}
        \li All
        \li All
        \li Classes for displaying the contents of SVG files. Supports a subset of the
            \l{http://www.w3.org/TR/SVGTiny12/}{SVG 1.2 Tiny} standard.
    \row
        \li \l[QtUITools]{Qt UI Tools}
        \li All
        \li All (*)
        \li Classes for loading QWidget based forms created in \QD dynamically, at runtime.
    \row
        \li \l[QtWebChannel]{Qt WebChannel}
        \li All
        \li All
        \li Provides access to QObject or QML objects from HTML clients for seamless
            integration of Qt applications with HTML/JavaScript clients.
    \row
        \li \l[QtWebEngine]{Qt WebEngine}
        \li All
        \li \l{Qt for Windows}{Windows}, \l{Qt for Linux/X11}{Linux}, and \l{Qt for macOS}{\macos}.
        \li Classes and functions for embedding web content in applications using the
            \l{http://www.chromium.org/Home}{Chromium browser project}.
    \row
        \li \l[QtWebSockets]{Qt WebSockets}
        \li All
        \li All
        \li Provides \WebSocket communication compliant with \l{http://tools.ietf.org/html/rfc6455} {RFC 6455}.
    \row \li \l[QtWebView]{Qt WebView}
         \li All
         \li Platforms with a native web engine.
         \li Displays web content in a QML application by using APIs native to the platform,
             without the need to include a full web browser stack.
    \row
        \li \l[QtWinExtras]{Qt Windows Extras}
        \li All
        \li \l{Qt for Windows}{Windows}
        \li Provides platform-specific APIs for Windows.
    \row
        \li \l[QtX11Extras]{Qt X11 Extras}
        \li All
        \li \l{Qt for Linux/X11}{Linux/X11}
        \li Provides platform-specific APIs for X11.
    \row
        \li \l[QtXml]{Qt XML}
        \li All
        \li All (*)
        \li C++ implementations of SAX and DOM.
            \note This module is not required to use QXmlStreamReader and
            QXmlStreamWriter. They are already part of \l{Qt Core}.
    \row
        \li \l[QtXmlPatterns]{Qt XML Patterns} (deprecated)
        \li All
        \li All
        \li Support for XPath, XQuery, XSLT and XML schema validation.
    \row
        \li \l{Qt Wayland Compositor}
        \li \l{Qt for Linux/X11}{Linux}
        \li \l{Qt for Linux/X11}{Linux} and \l{Boot2Qt}{Boot to Qt} targets.
        \li Provides a framework to develop a Wayland compositor.
    \row
    \header
        \li {4,1} \target gpl-licensed-addons
                  Add-ons available under Commercial Licenses, or GNU General
                  Public License v3
    \row
        \li \l{Qt Charts}
        \li All
        \li All
        \li UI Components for displaying visually pleasing charts,
            driven by static or dynamic data models.
    \row
        \li \l{Qt Data Visualization}
        \li All
        \li All
        \li UI Components for creating stunning 3D data visualizations.
    \row
        \li \l{Qt Lottie Animation}
        \li All
        \li All
        \li A QML API for rendering graphics and animations in JSON format,
            exported by the \l Bodymovin plugin for Adobe® After Effects.
    \row
        \li \l[QtNetworkAuth]{Qt Network Authorization}
        \li All
        \li All
        \li Provides support for OAuth-based authorization to online services.
    \row
        \li \l{Qt Virtual Keyboard}
        \li All
        \li \l{Qt for Linux/X11}{Linux} and \l{Qt for Windows}{Windows}
            desktop, and \l{Boot2Qt}{Boot to Qt} targets.
        \li A framework for implementing different input methods as
            well as a QML virtual keyboard. Supports localized keyboard
            layouts and custom visual themes.
    \row
        \li \l{Qt for WebAssembly}
        \li All
        \li Web browsers with WebAssembly support
        \li A platform target to compile Qt applications for the web browsers using WebAssembly.
    \row
        \li \l[QtQuick3D]{Qt Quick 3D}
        \li All
        \li All
        \li Provides a high-level API for creating 3D content or UIs based on
            Qt Quick.
    \row
        \li \l {Qt Quick WebGL}
        \li All
        \li WebGL-enabled web browsers
        \li Provides a \l {Qt Platform Abstraction} {platform plugin} that
            allows streaming Qt Quick user interfaces over the network using
            WebGL™.
   \endtable

   (*) The QNX status is not known.

    \section1 Value-Add Modules

    In addition to the modules released as part of Qt 5, the following modules
    and tooling build on top of the Qt libraries to provide additional value.
    They have their own release schedule, and are available under the
    commercial license.

    \table 80%
    \header
        \li Feature
        \li Description
    \row
         \li \l{Qt Automotive Suite}
         \li A collection of software components and tools to enable development
             of In-Vehicle-Infotainment (IVI) systems. Built on top of the
             Qt for Device Creation offering and compliant with the GENIVI
             automotive platform architecture.
    \row
         \li \l{Qt for Automation}
         \li Libraries and tools for automation related domains, such as KNX,
             OPC UA, and MQTT.
    \row \li \l{Qt for Device Creation}
         \li Tools for fast, easy, and fully-integrated embedded device application development.
             Included in most other value-add solutions.
    \row \li \l{Qt for MCUs}
         \li Offers a complete graphics framework and toolkit with everything
             needed to design, develop, and deploy GUIs on microcontroller
             units (MCUs). Applications can run either on bare metal or on a
             real-time operating system.
    \endtable

    \section1 Qt Tools

    \e{Qt Tools} run on all the supported development platforms and facilitate
    the development and design of applications.

    The following table lists the Qt tools:

    \table 80%
    \header
        \li Tool
        \li Description
    \row
        \li \l{Qt Designer}
        \li Classes for extending \QD.
    \row
        \li \l{Qt Distance Field Generator Manual}{Qt Distance Field Generator}
        \li Generates distance field information for text entities in an application UI.

    \endtable

    \section1 Where to Go from Here

    We invite you to explore the rest of Qt. We prepared overviews which help
    you decide which APIs to use and our examples demonstrate how to use our
    API.

    \list
    \li \l{Qt Overviews} - list of topics about application development
    \li \l{Qt Examples and Tutorials}{Examples and Tutorials} - code samples and tutorials
    \li \l{Qt Reference Pages} - a listing of C++ and QML APIs
    \endlist

*/
