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

/*!
    \page classesandfunctions.html
    \title Class and Function Documentation
    \brief Lists and Indexes of classes, functions, and types.

    Links to indexes and lists for finding class and function
    reference documentation.

    \section2 Class Lists

    \annotatedlist classlists

    \section2 Function Lists

    \annotatedlist funclists

*/

/*!
    \page classes.html
    \title All Classes
    \ingroup classlists

    \brief If you know the name of the class you want, find it here.

    This is a list of all Qt 5 classes. The following pages contain different
    API listings in different categories:

    \list
    \li \l{All Functions}
    \li \l{All Namespaces}
    \li \l{All Classes by Module}
    \li \l{Obsolete Classes}
    \li \l{New Classes and Functions in Qt 5.15}
    \endlist

    For more reference pages including QML types, visit \l{Qt Reference Pages}.

    \generatelist classes Q

    \sa {All Modules}, {Obsolete Classes}
*/

/*!
    \page qmlbasictypes.html
    \title All QML Basic Types
    \ingroup classlists

    \brief A list of QML basic types in this Qt release.

    This is a list of all QML basic types. The following pages contain different
    API listings in different categories:

    \list
    \li \l{All QML Types}
    \li \l{All QML APIs by Module}
    \li \l{Obsolete QML Types}
    \li \l{New Classes and Functions in Qt 5.15}
    \endlist

    For more reference pages including C++ APIs, visit \l{Qt Reference Pages}.

    \generatelist qmlbasictypes

*/

/*!
    \page qmltypes.html
    \title All QML Types
    \ingroup classlists

    \brief A list of QML types in this Qt release.

    This is a list of all QML types, including QML basic types. The following
    pages contain different API listings in different categories:

    \list
    \li \l{All QML Basic Types}
    \li \l{All QML APIs by Module}
    \li \l{Obsolete QML Types}
    \li \l{New Classes and Functions in Qt 5.15}
    \endlist

    For more reference pages including C++ APIs, visit \l{Qt Reference Pages}.

    \generatelist qmltypes

*/

/*!
    \page annotated.html
    \title Annotated Class List
    \ingroup classlists

    \brief If you don't know the name of the class you want, but you
    know what the class should do, you might try looking here.

    Qt classes with brief descriptions:

    \generatelist annotatedclasses
*/

/*!
    \group groups
    \title Groups Of Related Classes
    \ingroup classlists

    \brief If you know what kind of class you want (GUI, painting,
    I.O, etc), look here.

    This is a list of functional groups of Qt classes. A class can
    appear in more than one functional group.
*/

/*!
    \page hierarchy.html

    \title Inheritance Hierarchy
    \ingroup classlists

    \brief The C++ class inheritance hierarchy for all classes in the
    Qt API.

    \generatelist classhierarchy
*/

/*!
    \page obsoleteclasses.html
    \title Obsolete Classes
    \ingroup classlists

    \brief Classes and members marked obsolete that should not be used in new code.

    \section1 C++ classes that are deprecated

    The following Qt C++ classes are now obsolete. Obsolete classes
    are no longer maintained. They are provided to keep old source
    code working, but they can be removed in a future release. We
    strongly advise against using these classes in new code.

    \generatelist obsoleteclasses

    \section1 C++ classes that contain one or more members that are deprecated

    The following Qt C++ classes contain one or more members that are
    now obsolete. Obsolete members are no longer maintained. They are
    provided to keep old source code working, but they can be removed
    in a future release. We strongly advise against using these obsolete
    members in new code. Click on a class to see its deprecated members.

    \generatelist obsoletecppmembers

*/

  /*!
    \page obsoleteqmltypes.html
    \title Obsolete QML Types
    \ingroup classlists
    \brief A list of obsolete QML types that should not be used in new code.

    The following QML types are now obsolete. Obsolete types
    are no longer maintained. They are provided to keep old source
    code working, but they can be removed in a future release. We
    strongly advise against using these classes in new code.

    \generatelist obsoleteqmltypes
    \section1 QML Types with Obsolete Properties or Methods

    The following QML types contain one or more properties or methods that are
    now obsolete. Obsolete members are no longer maintained. They are
    provided to keep old source code working, but they can be removed
    in a future release. We strongly advise against using these obsolete
    members in new code. Click on a type to see its deprecated members.

    \generatelist obsoleteqmlmembers

    \sa {All QML Types}, {Class and Function Documentation}
*/

/*!
    \page functions.html
    \title All Functions
    \ingroup funclists

    \brief All documented Qt functions listed alphabetically with a
    link to where each one is declared.

    This is the list of all documented member functions and global
    functions in the Qt API.  Each function has a link to the class or
    header file where it is declared and documented.

    \generatelist functionindex
*/


/*!
    \page namespaces.html
    \title All Namespaces
    \ingroup classlists

    \brief A Qt namespace contains enum types, functions, and sometimes classes.

    This is a list of the main namespaces in Qt.

    \generatelist{namespaces}
*/
