/****************************************************************************
**
** 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 topics-ui.html
\title User Interfaces
\brief Qt's features for Creating User Interfaces

Qt features multiple technologies for creating user interfaces. While it is
possible to mix and match these different technologies as needed, one approach
is often better suitable for a certain type of user interface than the others.
\l {Qt Creator Manual}{Qt Creator} is a good example of an application that
combines traditional \l {Qt Widgets} with \l {Qt Quick}. Widgets form the basis
of the user interface, whereas Qt Quick is used to implement the Welcome mode,
for example. The following sections provide brief introductions to the
available technologies for creating user interfaces, and a comparison table
to help choosing the best suitable technology.

\section2 Common Important UI Topics

\list
\li \l{highdpi.html}{High DPI Displays}
\endlist

\section1 QML Graphical User Interfaces

QML allows developers to build user interfaces in a declarative way. User
interfaces specifically benefit from the simplicity of compounding QML objects
and configuring them using property bindings.

\l{Qt Quick} is a module which supplies QML types for creating user interfaces
such as a visual canvas with its own coordinate system and rendering engine.
Animation and transition effects are a first class concept in Qt Quick and
visual effects can be supplemented through specialized components for particle
and shader effects.

\section2 Important UI Topics for QML Applications

\list
\li \l{qtquick-usecase-visual.html}{Visual types in QML}
\li \l{qtquick-usecase-userinput.html}{Responding to User Input in QML}
\li \l{qtquick-usecase-animations.html}{Animations in QML}
\li \l{qtquick-usecase-text.html}{Displaying Text in QML}
\li \l{qtquick-usecase-layouts.html}{Layouts in QML}
\li \l{qtquick-usecase-styling.html}{Style and Theme Support}
\li \l{qtquick-usecase-integratingjs.html}{Integrating JavaScript in QML}
\li \l{Scalability}
\endlist

\section2 Graphical Controls

The \l{Qt Quick Controls} module (since Qt 5.1) provides a set of UI elements to
create user interfaces for desktop and mobile platforms using \l{Qt Quick} 2.
The \l{Qt Quick Controls 2} module (since Qt 5.7) provides lightweight QML types
for creating performant user interfaces for embedded and mobile devices. These
controls achieve improved efficiency by employing a simplified styling
architecture when compared to the first set of controls. For a comparison
of the two sets of controls, see \l {Differences between Qt Quick Controls}.

For more about how to create application user interfaces with QML, visit the
\l{QML User Interfaces} page.

\section1 Widget-based User Interfaces

\l {Qt Widgets} are traditional user interface elements that are typically found
in desktop environments. The widgets integrate well to the underlying platform
providing native look'n'feel on Windows, Linux and Mac OSX. The widgets are mature
and feature rich user interface elements suitable for mostly static user interfaces.
In contrast to \l {Qt Quick}, the widgets do not scale that well for touch screens
and fluid, highly animated modern user interfaces. The widgets are a good choice
for applications with traditional desktop centric user interfaces, such as office
type applications.

\section2 Important Concepts in Qt Widgets
\list
\li \l{mainwindow.html}{Application Main Window}
\li \l{desktop-integration.html}{Desktop Integration}
\li \l{dialogs.html}{Dialog Windows}
\li \l{layout.html}{Layout Management}
\li \l{model-view-programming.html}{Model/View Programming}
\li \l{richtext.html}{Rich Text Processing}
\li \l{dnd.html}{Drag and Drop}
\li \l{Internationalization with Qt}{Internationalization}
\endlist

\section1 Visualizing Data

Qt provides ready-made C++ classes and QML types for visualizing data in the
form of charts and graphs, which are known to be best ways of analyzing data.
\l{Qt Charts} and \l{Qt Data Visualization} are the two Qt add-ons that make
data visualization using 2D and 3D models a reality.

\section1 Displaying Web Content

Qt provides the Chromium-based
\l{Qt WebEngine}{WebEngine} layout engine, which enables you to embed web content
into the Qt application. The engine can be integrated into both Qt Widget-based
and Qt Quick-based applications.

For more information about support for web content in Qt, see
\l{Integrating Web Content}.

\section1 Comparison

Choosing the appropriate technology for building a user interface
is not always easy. It depends on several variables, such as other
technologies used in a project or target platform constraints. To
some extent, many items in the following table can be implemented using any of
the three available technologies. The following table aims to help you
choose the tool best suited for the job.

\table
    \header
        \li
        \li Qt Quick / Qt Quick Controls
        \li Qt Widgets
        \li Qt WebEngine
        \li Comments
    \row
        \li Used language(s)
        \li QML/JS
        \li C++
        \li HTML/CSS/JS
        \li
    \row
        \li Native look'n'feel
        \li \inlineimage ok
        \li \inlineimage ok
        \li
        \li Qt Widgets and Qt Quick Controls integrate well to the underlying
            platform, providing a native look'n'feel on Windows, Linux, and \macos.
    \row
        \li Custom look'n'feel
        \li \inlineimage ok
        \li \inlineimage ok
        \li \inlineimage ok
        \li Qt Widgets provide means for customization via style sheets,
            but Qt Quick is a better performing choice for user interfaces
            that do not aim to look native.
    \row
        \li Fluid animated UIs
        \li \inlineimage ok
        \li
        \li \inlineimage ok
        \li Qt Widgets do not scale well for animations. Qt Quick
            offers a convenient and natural way to implement animations in a
            declarative manner.
    \row
        \li Touch screen
        \li \inlineimage ok
        \li
        \li \inlineimage ok
        \li Qt Widgets often require a mouse cursor for good interaction, whereas
            Qt Quick only provides primitive building blocks that were designed
            with touch interaction in mind.
            The WebView Qt Quick component has support for multi-touch gestures
            to interact with web content.
    \row
        \li Standard industry widgets
        \li
        \li \inlineimage ok
        \li
        \li Qt Widgets provide all the bells and whistles, developed over two
            decades, needed for building standard industry type applications.
            Qt WebEngine Widgets provide widgets and additional classes to render
            and interact with web content.
    \row
        \li Model/View programming
        \li \inlineimage ok
        \li \inlineimage ok
        \li
        \li Qt Quick provides convenient views, but Qt Widgets provide more
            convenient and complete framework. In addition to Qt Quick views,
            Qt Quick Controls provide a TableView.
    \row
        \li Rapid UI development
        \li \inlineimage ok
        \li \inlineimage ok
        \li \inlineimage ok
        \li Qt Quick is an excellent choice for rapid UI prototyping and development.
    \row
        \li HW accelerated graphics
        \li \inlineimage ok
        \li \inlineimage ok
        \li \inlineimage ok
        \li Qt Widgets provide QGLWidget for rendering OpenGL graphics,
            and Qt WebEngine supports WebGL, but the OpenGL ES 2.0 or OpenGL 2.0
            based \l {Qt Quick Scene Graph} has proven to provide the best
            performance for UIs and for integrating with OpenGL content.
    \row
        \li Graphical effects
        \li \inlineimage ok
        \li
        \li
        \li The particle system and shader effects available in Qt Quick
            are more flexible. Qt Widgets offer very little in this area.
    \row
        \li Rich text processing
        \li \inlineimage ok
        \li \inlineimage ok
        \li
        \li Qt Widgets currently provide the most comprehensive base for implementing
            text editors. Qt's rich text document classes can also be utilized in
            Qt Quick and Qt Quick Controls' TextArea, but may require some C++
            implementation.
    \row
        \li Existing web content
        \li
        \li
        \li \inlineimage ok
        \li Both Qt Quick and Qt Widgets provide components for presenting
            \l {richtext-html-subset.html}{simple rich text}, but Qt WebEngine
            is the best choice for presenting full-blown web content.

\endtable

\section1 Internationalization and Translations

Qt provides excellent support for translating applications into local languages.
Release managers, translators, and developers can use Qt translation tools to
accomplish their tasks.

\list
\li \l{Internationalization with Qt} - instructions and the process of creating
localized applications.
\li \l{Qt Linguist Manual} - manual of Qt's translation tool
\endlist

*/
