/****************************************************************************
**
** 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 bughowto.html
    \title How to Report a Bug
    \brief Information about ways to report bugs in Qt.

    If you think you have found a bug in Qt, we would like to hear
    about it so that we can fix it.

    Before reporting a bug, please check the \l{Qt Bug Tracker} page to see
    if the issue is already known.

    The first thing you should do is to sign up for an account for
    the \l{Qt Bug Tracker}, if you do not already have one. Once you
    have done that you can submit and track your bug reports and they
    will be publicly available from the moment you submit them.

    Always include the following information in your bug report:

    \list 1
    \li The name and version number of your compiler
    \li The name and version number of your operating system
    \li The version of Qt you are using, and what configure options it was
       compiled with
    \li Reliable and clear description on how to reproduce the problem
    \endlist

    If possible, please provide a test written using the \l{Qt Test} module
    as this will improve the procedure of reproducing your problem and
    allow the developers to address the issue in a more efficient way.

    Otherwise, if the problem you are reporting is only visible at run-time,
    try to create a small test program that shows the problem when run.
    Often, such a program can be created with some minor changes to one of
    the many example programs in Qt's examples directory.

    If you have implemented a bug fix and want to contribute your fix
    directly, then you can do so through the \l{Public Qt Repository}. For
    more details check out the qt-project wiki page on \l{Contributing to Qt}.
*/
