/****************************************************************************
**
** Copyright (C) 2017 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 qtexamplesandtutorials.html
    \title Qt Examples And Tutorials
    \brief A list of Qt examples and tutorials.

    A collection of code samples and tutorials are provided with Qt to
    help new users get started with Qt development. These documents cover a
    range of topics, from basic use of widgets to step-by-step tutorials that
    show how an application is put together.

    The examples are part of the Qt packages. Visit the \l Downloads page for
    more information.

    \section1 Running the Examples

    Open and run examples within Qt Creator's \gui{Welcome} mode. Most of the
    examples run on various platforms and to search for platform-specific
    examples, type the platform name (or any keywords) in the search field. For
    example, typing \c Android in the search field lists the examples that are
    fully compatible with Android.

    For more information about running examples in Qt Creator, visit the
    \l{Qt Creator: Building and Running an Example}{Building and Running an Example}
    page.

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

    \div {class="multi-column"}
    \div {class="doc-column"}
        \b{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
    \enddiv
    \div {class="doc-column"}
        \b{Essentials}
        \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
    \enddiv
    \div {class="doc-column"}
        \b{Platform Examples}
        \list
        \li \l{Qt for Android Examples}{Android}
        \li \l{Qt for iOS Examples}{iOS}
        \li \l{Qt Mac Extras Examples}{Mac Extras}
        \li \l{Qt Windows Extras Examples}{Windows Extras}
        \li \l{Active Qt#Examples}{Active Qt Examples}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{QML and Qt Quick}
        \list
        \li \l{First Steps with QML}
        \li \l{Qt Creator: Developing Qt Quick Applications}{Developing Qt Quick Applications}
        \li \l{Qt Quick Controls 1 - Gallery}
        \li \l{Qt Quick Controls - Gallery}
        \li \l{QML Advanced Tutorial}{SameGame}
        \li \l{Qt Quick Text Editor Guide}
        \endlist
        \list
        \li \l{Qt Quick Examples and Tutorials}{See more}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Widgets}
        \list
        \li \l{Getting Started Programming with Qt Widgets}{Text Editor}
        \li \l{modelview.html}{Model-View}
        \li \l{Item Views Examples}
        \li \l{Main Window Examples}
        \li \l{Layout Examples}
        \li \l{Qt Style Sheets Examples}{Style Sheets Examples}
        \endlist
        \list
        \li \l{Qt Widgets Examples}{See more}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Graphics}
        \list
        \li \l{Scene Graph - OpenGL Under QML}{OpenGL Under QML}
        \li \l{Scene Graph - Painted Item}{Painted Item}
        \li \l{Painting Examples}
        \li \l{Graphics View Examples}
        \li \l{Rich Text Examples}
        \li \l{Animation Framework Examples}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Data and Networking}
        \list
        \li \l{Network Examples}
        \li \l{SQL Examples}
        \li \l{XML Examples}
        \li \l{JSON Save Game Example}
        \li \l{Qt WebChannel Examples}
        \li \l{Qt WebEngine Examples}
        \li \l{Qt WebEngine Widgets Examples}
        \li \l{Qt WebSockets Examples}{WebSocket Examples}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Applications}
        \list
        \li \l{Application Example}
        \li \l{Qt Quick Examples - Window and Screen}{Window and Screen Example}
        \li \l{How to Create Qt Plugins}
        \li \l{Plug & Paint Example} (Plugin Example)
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Processes and Threads}
        \list
        \li \l{Threading Basics}
        \li \l{Threading and Concurrent Programming Examples}
        \li \l{Qt D-Bus Examples}{D-Bus Examples}
        \li \l{IPC Examples}{Inter-Process Communication (IPC) Examples}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Multimedia}
        \list
        \li \l{Media Player Example}{Media Player}
        \li \l{Video Widget Example}{Video Widget}
        \li \l{Camera Example}
        \endlist
        \list
        \li \l{Qt Multimedia Examples}{See more}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Peripheral Devices and Location}
        \list
        \li \l{Qt Bluetooth Examples}{Bluetooth Examples}
        \li \l{Qt Location Examples}{Location Examples}
        \li \l{Qt NFC Examples}{NFC Examples}
        \li \l{Qt Positioning Examples}{Positioning Examples}
        \li \l{Qt Sensors Examples}{Sensor Examples}
        \li \l{Qt Serial Port Examples}{Serial Port Examples}
        \li \l{Qt SerialBus Examples}{Serial Bus Examples}
        \endlist
    \enddiv
    \div {class="doc-column"}
        \b{Tools}
        \list
        \li \l{Qt Assistant Examples}
        \li \l{Qt Designer Examples}
        \li \l{Qt Help Examples}
        \li \l{Qt Linguist Examples}
        \li \l{Qt Creator Manual}
        \endlist
    \enddiv
    \enddiv

    \section1 Community Examples

    To view and run examples provided through the Qt Project, visit the
    \l{http://wiki.qt.io/Category:Learning::Demos_and_Examples}{Community Examples} page.

   \section1 All Examples

   \l{All Qt Examples} lists all examples categorized by the Qt module they
   belong to.
*/

/*!
\page qtexamples.html
\title All Qt Examples
\brief List of all the Qt examples

\generatelist annotatedexamples
*/
