/****************************************************************************
**
** Copyright (C) 2020 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 topics-app-development.html
\title Development Tools
    \brief Qt tools for application development.

    Qt is designed for developing applications and user interfaces once and
    deploying them across several desktop and mobile operating systems.

    The easiest way to start application development with Qt is to \l{Downloads}
    {download} and install Qt. Qt installations contain Qt libraries, examples,
    documentation, and the necessary development tools, such as the
    \l{Qt Creator Manual}{Qt Creator} integrated development environment (IDE).

    Qt Creator provides you with tools for accomplishing your tasks throughout
    the whole application development life-cycle, from creating a project to
    deploying the application on the target platforms. Qt Creator automates some
    tasks, such as creating projects, by providing wizards that guide you
    step-by-step through the project creation process, create the necessary
    files, and specify settings depending on the choices you make. Also, it
    speeds up some tasks, such as writing code, by offering semantic
    highlighting, checking code syntax, code completion, refactoring actions,
    and other useful features.

    \image qt-creator-gs.png

    The following Qt tools are integrated into Qt Creator:

    \list
        \li \l{Qt Designer Manual}{Qt Designer} for designing and building
            graphical user interfaces (GUIs) from Qt widgets. You can compose
            and customize your widgets or dialogs in a visual editor, and
            test them using different styles and resolutions. You can access
            Qt Designer from Qt Creator in the Design mode (1).
        \li \l{Build with CMake}{CMake}, \l{qmake Manual}{qmake}, and
            \l{Qbs Manual}{Qbs} for building applications for different
            target platforms. You can also use other build automation tools,
            such as Autotools.
            You can configure the build system in the Projects mode (2).
        \li \l{Qt Linguist Manual}{Qt Linguist} for localizing applications.
            Qt Linguist contains tools for the roles typically involved in
            localizing applications: developers, translators, and release
            managers. You can run the lupdate and lrelease tools from the
            Qt Creator Tools menu.
        \li \l{Qt Assistant Manual}{Qt Assistant} for viewing Qt documentation.
            You can also view documentation in Qt Creator. The documentation
            installed with Qt is displayed automatically in the Help
            mode (3), and you can add documents to the list.
    \endlist

    Other tools are typically described in their context of use in other parts
    of the documentation.
*/
