/****************************************************************************
**
** 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$
**
****************************************************************************/

/*!
\indextitle
\page index.html
\keyword Qt Reference Documentation

\div {class="landing"}
    \div {class="col-1"}
            \div {class="heading"}
            \enddiv

                Qt is a full development framework with tools designed to streamline
                the creation of applications and user interfaces for desktop,
                embedded, and mobile platforms.
                \div {class="landingicons"}
                \div {class="icons1of3"}
                    \image landing/icon_Qt_78x78px.png
                    \section1 Qt Framework
                    Intuitive \l{Qt Reference Pages}{API}s for \l {All Classes}{C++}
                    and JavaScript-like programming with \l{QML Applications}{Qt Quick}
                    for rapid UI creation.
                \enddiv
                \div {class="icons1of3"}
                    \image landing/icon_QtCreator_78x78px.png
                    \section1 Qt Creator IDE
                    A powerful cross-platform \l{Qt Creator Manual}
                    {integrated development environment}, including
                    \l{Qt Creator: Designing User Interfaces}{UI designer}
                    tools and on-device \l{Qt Creator: Debugging}{debugging}.
                \enddiv
                \div {class="icons1of3"}
                    \image landing/icon_Tools.png
                    \section1 Tools and Toolchains
                    \l{Internationalization with Qt}{Internationalization} support,
                    \l{Qt for Embedded Linux}{embedded} toolchains, \l{Build with CMake}, and more.
                \enddiv
                \enddiv
                \section1 Licenses Used in Qt

                Qt Framework and tools are available under both open-source and
                commercial \l{Qt Licensing}{licenses}.

                The commercially licensed Qt contains additional functionality and
                productivity tools. For details, see \l{http://www.qt.io/download/}.
    \enddiv
    \div {class="col-2 sidebar"}
            \div {class="sectionlist normallist"}
                \div {class="heading"}
                     \section1 Reference
                \enddiv
                \div {class="indexboxcont indexboxbar"}
                    \list
                    \li \l{All Classes}{All Qt C++ Classes}
                    \li \l{All QML Types}
                    \li \l{All Modules}{All Qt Modules}
                    \li \l{Qt Creator Manual}
                    \endlist
                    \list
                    \li \l{Qt Reference Pages}{All Qt Reference Documentation}
                    \endlist
                \enddiv
            \enddiv
        \div {class="sectionlist normallist"}
            \div {class="heading"}
                \section1 Getting Started
            \enddiv
                \list
                \li \l{Getting Started with Qt}
                \li \l{What's New in Qt 5}
                \li \l{Qt Examples and Tutorials}{Examples and Tutorials}
                \li \l{Supported Platforms}
                \li \l{Qt Licensing}
                \endlist
                \enddiv
            \div {class="sectionlist normallist"}
                \div {class="heading"}
                     \section1 Overviews
                \enddiv
                \list
                \li \l{Development Tools}
                \li \l{User Interfaces}
                \li \l{Core Internals}
                \li \l{Data Storage}
                \li \l[QtMultimedia]{Multimedia}
                \li \l{Networking and Connectivity}
                \li \l{Graphics}
                \li \l{Integrating Web Content}{Web Content}
                \li \l{Mobile APIs}
                \li \l{QML Applications}
                \endlist
                \list
                \li \l{Qt Overviews}{All Qt Overviews}
                \li \l{All Qt Examples}
                \endlist
            \enddiv
    \enddiv
\enddiv
*/
