/****************************************************************************
**
** Copyright (C) 2018 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 qtquick-tools-and-utilities.html
\title Qt Quick Tools and Utilities
\brief Lists the tools and utilities that enhance developer experience

Qt offers several tools and utilities to enable a rich developer experience,
especially for Qt Quick developers. The following sections provide a brief
introduction to those tools and utilities, and provide links to further
information about them.

\section1 Qt Quick Designer

The Qt Quick Designer enables designing Qt Quick-based UIs using simple
drag-n-drop gestures that most designers are familiar with. It offers UI
elements from the Qt Quick and Qt Quick Controls modules, as well as
integration for custom UI elements.

The following is a list of example applications that use UIs created by
the Qt Quick Designer:

\list
 \li \l{Qt Quick Controls - Contact List}
 \li \l{Qt Quick Controls - Flat Style}
\endlist

\section2 QML Debugger and Profiler

Being a declarative language, a piece of QML code provides minimal details
about the entities defined. In such a scenario, the QML debugger is a very
useful utility that enables:
\list
 \li debugging JavaScript functions,
 \li executing JavaScript expressions,
 \li and inspecting QML properties.
\endlist

Besides this, a QML profiler enables you to get necessary diagnostic information,
allowing you to analyze the application code for performance issues. For
example, too much JavaScript in each frame, long-running C++ functions, and
so on.

\section2 Related Information
\list
 \li \l{QML Debugger}
 \li \l{QML Profiler}
\endlist

\section1 QmlLive, GammaRay, and Squish

QmlLive is a 3rd party tool that offers a QML runtime capable of rendering
changes to the code in realtime. It avoids the need to rebuild the
application after every code change and install it on the target device.
You can also extend it to build a custom runtime that suits your needs.

GammaRay is a useful utility that provides diagnostic information
about your application. It is similar to the QML Profiler described in the
earlier section, but offers a lot more. For example, the number of items or
QObjects created, function calls made, time taken by each function call,
property value introspection at runtime, and so on. Such information is very
handy, especially while debugging QML applications.

Squish is a well-known testing tool that automates UI testing by recording
your actions or running scripts. Once the tests are setup, UI tests are a lot
easier to run.

\section2 Related Information
\list
 \li \l{QmlLive}
 \li \l{GammaRay}
 \li \l{Squish}
\endlist

\section1 Qt Creator

The Qt Creator IDE is the key tool that enhances the overall developer experience of
working with Qt Quick. Its auto-completion and debugging features make working
with Qt Quick easier. Besides this, most of the tools and utilities
mentioned in the earlier sections are integrated into it, with the possibility of
integrating 3rd party tools such as QmlLive and GammaRay.

\section2 Related Information
\list
\li \l{Qt Creator Manual}
\endlist

\section1 qmllint
\e qmllint is a tool shipped with Qt, that verifies the syntatic validity of QML files.
It also warns about some QML anti-patterns. If you want to disable a specific
warning type, you can find the appropriate flag for doing so by passing \c{--help} on the command line.

qmllint warns about
\list
  \li Unqualified accesses of properties.
  \li Usage of signal handlers without a matching signal.
  \li Usage of with statements in QML.
\endlist

In order for qmllint to work properly, it requires type information. That information
is provided by qmltypes files. qmltypes files in the current directory, as well as
those for Qt's built-in types, are discovered automatically. For qmltypes files from
libraries that reside outside of the current directory, you can provide their path
via the -I flag.

\section2 Related Information
\list
  \li \l{Type Description Files}{qmltypes}
\endlist

\section1 qmlformat

\e qmlformat is a tool that automatically formats QML files in accordance
with the \l{QML Coding Conventions}.

The tool groups all properties, functions, and signals together, instead of
retaining the order you specified.

Imports will also be sorted in alphabetical order. This can be disabled
by specifying the \c{-n} flag.

By default, qmlformat writes the formatted version of the file to stdout.
If you wish to have your file updated in-place specify the \c{-i} flag.

\section2 Related Information
\sa {QML Coding Conventions}
*/
