/****************************************************************************
**
** 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 gettingstarted.html
    \title Getting Started with Qt
    \brief A quick guide for developers

    \section1 Installing Qt

    You can install the Qt Framework and tools by using an \l{Online Installation}{online}
    or \l{Offline Installation}{offline} installer, or by
    \l{Building Qt Sources}{building the source packages yourself}.

    The installers allow you to download and install the following
    components:

    \list
    \li Qt libraries, prebuilt for a particular development platform (operating
     system and compiler)
    \li Qt Creator integrated development environment (IDE)
    \li Reference Documentation and examples
    \li Qt in source code form (needed only if you want to build the framework and
      tools yourself)
    \li Add-On components that are relevant for different platforms
    \endlist

    \section2 Online Installation

    In the \e{online installer}, you can select commercial or open source
    versions of Qt, tools, and Add-On components to install. Using the online
    installer requires signing in to your \l{Qt Account}. The installer
    retrieves the license attached to the account from a server and provides a
    list of available components corresponding to the license.

    The online installer is available from the Qt \l Downloads page.

    \section2 Offline Installation

    An \e{offline installer} is a single package that contains all of Qt and
    Add-Ons relevant for a target platform. Users with a commercial license
    can either sign in with their Qt account or with their Qt license key
    during the installation process. The license key is available in the
    \l {Qt Account} Web portal.

    The offline installer is available \l{https://www.qt.io/offline-installer}{here}.

    \section2 Installation Process

    To run the installer, you need a Qt Account. You can use your Qt Account
    credentials to sign-in to all Qt services, including the forums and wiki.
    If you do not already have a Qt Account, you can create one during the
    installation process.

    To complete the installation, select the components that you want to install
    and follow the instructions of the installation program.

    The following YouTube video gives a complete walk-through of the
    installation process:

    \youtube I5jasWrsxT0

    \section2 Updating or Removing Qt

    Once Qt is installed, you can use the Maintenance Tool under \e{<install_dir>}
    to add components and to update or remove installed components.

    \section2 Platform Requirements

    Specific requirements and instructions for developing applications on different
    platforms are covered in the platform pages.

    \list
    \li \l{Qt for Android}{Android}
    \li \l{Qt for iOS}{iOS}
    \li \l{Qt for Windows}{Windows}
    \li \l{Qt for Linux/X11}{Linux/X11}
    \li \l{Qt for macOS}{\macos}
    \li \l{Qt for UWP}{Universal Windows Platform}
    \endlist

    For more information, visit the \l{Supported Platforms}
    {supported platforms} page.

    \section1 Create Your First Applications

    Learn the basics of Qt and Qt Quick development by following the two tutorials
    below that illustrate how to create simple applications and build and run them on
    target platforms:
    \list
    \li \l {Getting Started Programming with Qt Widgets}
    \li \l {Getting Started Programming with Qt Quick}
    \endlist

    \l{Qt Widgets} provides a library of UI elements which allow you to
    create classic desktop-style user interfaces. \l {Qt Quick} is a library
    providing types and functionalities for building modern, fluid, animated
    UIs.

    For a more thorough walkthrough of the different aspects of developing
    applications with Qt 5, see the \l {QML Book}. It focuses on Qt Quick,
    but also provides the information needed to use QML together with C++.

    \section1 Explore Qt

    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 them.

    To view a list of all Qt examples, visit the \l{List of Qt Examples} page.

    \section2 Setting Up Projects
        \list
        \li \l{Qt Creator: Creating Qt Quick Projects}{Qt Quick Projects}
        \li \l{Qt Creator: Creating a Qt Widget Based Application}{Qt Widget Projects}
        \li \l{Qt Creator: Configuring Projects}{Configuring Projects}
        \endlist

    \section2 Developing with Qt Creator
        \list
        \li \l{Qt Creator: Building for Multiple Platforms}{Building for Multiple Platforms}
        \li \l{Qt Creator: Running on Multiple Platforms}{Running on Multiple Platforms}
        \li \l{Qt Creator: Deploying to Devices}{Deploying to Devices}
        \li \l{Qt Creator: Connecting Devices}{Connecting Devices}
        \endlist
        \list
        \li \l{Qt Creator: Building and Running}{See more}
        \endlist

    \section2 Reference Documentation
        \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

    \section1 Qt Project Community

    Qt's vibrant and active community site, \l{http://qt.io} houses
    a wiki, a forum, and additional learning guides and presentations.
*/
