﻿/****************************************************************************
**
** Copyright (C) 2019 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 qt5-intro.html
    \title What's New in Qt 5
    \brief Qt 5 features and its benefits.

    Qt 5 is the latest version of Qt. It enables developers to develop
    applications with intuitive user interfaces for multiple targets, faster
    than ever before. Qt 5 makes it
    easier to address the latest UI paradigm shifts that touch screens and
    tablets require.

    Developers can be more productive and flexible with the improved support
    for JavaScript and QML in Qt 5, while still having the C++ foundation
    and Qt Widget support. HTML5 developers will feel at home with the Web
    offering that includes Chromium-based Qt \WebEngine and Qt \WebChannel.

    Qt 5 is highly compatible with Qt 4. It is possible for developers
    of Qt 4 applications to seamlessly move on to Qt 5 with their current
    functionality and gradually develop new things leveraging all the great
    items Qt 5 makes possible.

    Cross-platform portability is made simpler in Qt 5, thanks to the new
    modularized codebase consisting of the
    \l{All Modules}{essential and add-on} modules, and the consolidation
    of the \l{Qt Platform Abstraction}.

    The following sections summarize some of the key features that Qt 5 brings
    to the table.

    \section1 New Features by Qt Version

    \list
        \li \l{What's New in Qt 5.15}
        \li \l{What's New in Qt 5.14}
        \li \l{What's New in Qt 5.13}
        \li \l{What's New in Qt 5.12}
        \li \l{What's New in Qt 5.11}
        \li \l{What's New in Qt 5.10}
        \li \l{What's New in Qt 5.9}
        \li \l{What's New in Qt 5.8}
        \li \l{What's New in Qt 5.7}
        \li \l{What's New in Qt 5.6}
        \li \l{What's New in Qt 5.5}
        \li \l{What's New in Qt 5.4}
        \li \l{What's New in Qt 5.3}
        \li \l{What's New in Qt 5.2}
        \li \l{What's New in Qt 5.1}
        \li \l{What's New in Qt 5.0}
        \li \l{Porting Guide}
    \endlist

    \section1 Qt Everywhere on Mobile

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td style="width:50%; border: none; vertical-align: top">
    \endraw
    Qt now comes with production-ready ports for Android and iOS.
    Extensive work has gone into these platform
    ports, which now extend Qt’s multi-platform promise to cover desktop,
    embedded, and mobile platforms.
    \raw HTML
     <br>
    \endraw
    With full support for Android and iOS, Qt is a
    great solution for targeting the mobile markets with a single codebase.
    It is fast and easy to bring existing desktop or embedded application
    to mobile, by simply recompiling it.
    \raw HTML
     <br>
    \endraw
    You can install several demo applications that showcase the power of Qt
    on these mobile platforms. Here is a small list of such applications:
    \raw HTML
     <br>
    \endraw
    Demo applications:
    \list
    \li \l{Google Play: Introduction to Qt 5}{Introduction to Qt 5}
        (Google Play)
    \li \l{Google Play: Qt 5 Everywhere}{Qt 5 Everywhere} (Google Play)
    \li \l{iTunes: SubAttack}{SubAttack} (App Store)
    \li \l{iTunes: QtQuicksand}{QtQuicksand} (App Store)
    \li Quick Forecast on \l{iTunes: Quick Forecast}{App Store},
        \l{Google Play: Quick Forecast}{Google Play}, and
        \l{Windows Store: QuickForeCast}{Windows Store}.
    \li Qt Hangman on \l{iTunes: Qt Hangman}{App Store} and
        \l{Google Play: Qt Hangman}{Google Play}
    \li Flyingbus on \l{iTunes: Flyingbus}{App Store} and
        \l{Google Play: Flyingbus}{Google Play}
    \endlist

    Platform pages:
    \list
    \li \l{Qt for Android}
    \li \l{Qt for iOS}
    \endlist
    \raw HTML
      </td><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \image qt5_everywhere_demo.jpg
    \caption Qt Everywhere demo on Nexus 7
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Amazing Graphics Capability and Performance

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \image qt5_shadereffect.jpg
    \caption ShaderEffect on an \l Image
    \raw HTML
      </td><td style="width:50%; border: none; vertical-align: top">
    \endraw
    Qt 5 uses an OpenGL-based scene graph to accelerate the graphics
    of Qt Quick, making it possible to do visually appealing user
    interfaces with animations, impressive graphical effects and
    particle systems, even on the constrained hardware environments of
    mobile and embedded devices.
    \raw HTML
     <br>
    \endraw
    The benefits of this architectural change in the rendering engine are
    well demonstrated by the following projects:
    \list
    \li \l{Livecoding video effects with Qt5} - The Big Buck Bunny you
    never saw before. Video effects created using Qt Quick.
    \li \l{Pimp my video} - Video effects implemented using the shader
    language with QML.
    \li \l{QtMediaHub} - The power and convenience of Qt Quick.
    \li \l{QtonPi} - Good example of Qt 5 running on the low cost hardware,
    Raspberry PI.
    \endlist
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Qt Quick in Qt 5

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \l{Qt Quick} provides the necessary infrastructure to develop QML
    applications. The latest version (v2.0) of this technology also
    introduces a set of new C++ classes as a replacement for the
    QDeclarative* equivalents in Qt Quick 1. New features in Qt Quick
    include:
    \list
    \li \l Canvas for drawing. Canvas provides an API that is similar to
    the HTML5 Canvas API, along with some additional features.

    \li \l{ShaderEffect}{Shader Effects} which enable GLSL shader programs
    to be integrated directly into QML code and applied to items and images.

    \li \l{Using the Qt Quick Particle System}{Particle Effects} for
    creating a variety of 2D particle systems.

    \li \l{Sprite Animations}{Sprites} can be used in animating 2D
    graphical objects and as a source for particle systems.

    \li \l{Qt Quick Local Storage QML Types}{Offline storage} is a JavaScript
    API that conforms with the HTML5 Web Database API for storing data in
    Qt Quick applications.

    \li \l{Qt Quick Window QML Types}{Window} provides a top-level window
    and the Screen type for accessing a screen's resolution and other
    details. This is useful for desktop applications developed using
    Qt Quick.

    \li \l{Qt Quick Scene Graph}{OpenGL-based rendering architecture} for
    optimal performance.
    \endlist
    \raw HTML
      </td><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \image qt5_particles.jpg
    \caption Qt Quick's \l{Qt Quick Particles QML Types}{Particle System}
    \raw HTML
      </td></tr><tr><td style="width:50%; vertical-align:top; border: none">
    \endraw
    The \l {qtgraphicaleffects-index.html}{Qt Graphical Effects} module
    provides a number of ready-made effects for use in Qt Quick
    applications, including soft drop shadow, blur, glow and colorize.
    \raw HTML
      </td><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \image qt5_graphicaleffects.jpg
    \caption Excerpts from the Qt Graphical Effects module
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Designing UI Made Simpler

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td style="width:50%; border: none; vertical-align: top">
    \endraw
    \image qtquickcontrols2-material.png
    \caption Qt Quick Controls Material style
    \raw HTML
      </td><td style="width:50%; border: none; vertical-align: top">
    \endraw
    UI designing can be time consuming if there are not enough tools to help.
    Qt Quick reduces the effort considerably compared to the traditional
    native (C or C++) approach, especially if the \l{Qt Quick Controls} and
    \l{Qt Quick Layouts} modules are used. These modules provide ready-to-use
    UI controls and layouts to enable faster application development with less
    code.
    \raw HTML
      <br>
    \endraw
    Qt Quick Controls and Qt Quick Layouts provide a vast set of UI controls
    ranging from the most basic text field and button to the more complex
    stack view and tumbler. The controls are also made available in
    \l{Qt Creator: Editing QML Files in Design Mode}{Qt Quick Designer}.
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Sensor and Location

    Reacting to sensor value changes and locating a place on the world map
    are the common use cases supported on most portable devices. Now you
    can support such use cases in your Qt application using the
    \l{Qt Sensors} and \l{Qt Positioning} modules.

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \image qtsensors_accelbubble_ex.jpg
    \caption Accelerating SVG image
    \raw HTML
      </td><td style="width:50%; vertical-align:top; border: none">
    \endraw
    \image qtpositioning_weatherinfo_ex.jpg
    \caption Location-based weather information
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Web Engine and HTML5

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td colspan=2 style="width:50%; border: none; vertical-align: top">
    \endraw
    \image qtwebengine_quicknanobrowser.jpg
    \caption Qt Quick nano browser
    \raw HTML
      </td><td style="width:50%; border: none; vertical-align: top">
    \endraw
    \l{Qt WebEngine} is a web content rendering engine based on Chromium
    featuring broad support for standard web technologies. It provides
    integration with both Qt Quick and traditional widgets. The module brings
    the latest in  HTML5 advancements to Qt 5, including CSS filters, animations
    and video, and Canvas.
    \raw HTML
     <br>
    \endraw
    This Chromium-based Web Engine support in Qt is complemented with
    \l{Qt WebChannel}, which bridges the gap between QML/C++ and
    HTML/JavaScript. It enables sharing QObjects from QML/C++ with
    HTML/JavaScript-based clients.
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Multimedia

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td colspan=2 style="width:50%; border: none; vertical-align: top">
    \endraw
    \l {Qt Multimedia} provides a rich set of QML types and C++ classes to
    handle multimedia content. It also provides necessary APIs to access
    the camera and radio functionality. Qt 5 brings the Qt Multimedia
    module into the set of essential modules with support on all major
    platforms.
    \raw HTML
      </td><td style="width:50%; border: none;">
    \endraw
    \image qt5_video.jpg
    \caption Video embedded into a Qt Quick application with a displacement effect
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Platform-specific Extras

    Qt is a cross-platform development framework enabling you to target
    multiple platforms with a single codebase. It provides common APIs across
    all supported platforms to access a feature without having to worry about
    how that feature is implemented on a platform. In some applications there
    will be a need to use a platform-specific feature, and that's
    when the following modules can be useful:

    \list

    \li \l{Qt Android Extras} enables you to integrate Java code into your Qt
    application.

    \li \l{Qt Mac Extras} enables you to access specific features on \macos and
    iOS.

    \li \l{Qt Windows Extras} enables you to use Windows-specific features
    such as jump lists, progress indicator on a taskbar button, and so on.

    \li \l{Qt X11 Extras} enables you to access the display configuration on
    Linux (X11).
    \endlist

    \section1 Modularized Qt Libraries

    Qt 5 splits the Qt libraries into domain specific libraries and
    modules. This means that an application can choose which libraries
    it requires and only compile, use and deploy those.

    For a complete list of modules and libraries, see \l {All
    Modules}{all Qt modules}.

    \section2 Widgets in Qt 5

    The \l {Qt Widgets} have been separated into their own module in
    Qt 5, the Qt Widgets module. It is part of the essential modules.

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td colspan=2 style="width:50%; border: none; vertical-align: top">
    \endraw
    \image qt5_widgets.jpg
    \caption Screen capture of a widget application.
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    Designing the UI for widget-based applications can be quick with
    \l{Qt Designer Manual}{Qt Designer}.

    \section1 Provide Map-based Solutions with Qt

    \raw HTML
    <div class="table">
     <table style="background:transparent; border: none">
      <tr><td style="width:50%; vertical-align:top; border: none">
    \endraw
    In today's world, location and maps information is more widely used, be it
    to look up nearby restaurants or plan commute to the office. With Qt,
    it is now possible to cater to these use cases by consuming map data
    provided by the third-party vendors. The \l{QtLocation}{Qt Location} module
    provides the APIs and the necessary backend to fetch map data from some of
    the popular third-party mapping solutions. Here is a snapshot of the demo
    application running on Android, presenting OpenStreetMap data from
    \l {http://www.mapquest.com/}{www.mapquest.com}.
    \raw HTML
      </td><td style="width:50%; border: none; vertical-align: top">
    \endraw
    \image  qtlocation-mapviewer-demo.jpg
    \caption Mapviewer example screenshot
    \raw HTML
      </td></tr>
     </table>
    </div>
    \endraw

    \section1 Qt Platform Abstraction

    The windowing system dependent parts of Qt have been completely
    rewritten for Qt 5, based on the Qt Platform Abstraction, a plugin
    architecture which allows Qt to dynamically load a windowing
    system integration based on what system it is running on. This
    gives several benefits:

    \list

    \li Centralize the windowing system integration codebase into
    classes shared for all platforms.

    \li Simplify the work required when porting Qt to new platforms.

    \li Remove the windowing system dependency from Qt, making it
    possible to have the same Qt binaries run against multiple
    windowing systems. For instance, the Qt Linux binaries can run
    against both X11 and Wayland.

    \endlist

    \section1 New Connection Syntax

    In addition to the still available well known way to connect signals and slots,
    new overloads of QObject::connect have been added allowing you to connect signals
    and slot using pointer to member functions:

    \code
    QObject::connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue);
    \endcode

    The new syntax provides compile time checking of the compatibility between signals
    and slots, automatic conversion of the arguments if there is an implicit cast between
    the types, and solve many problems occurring because of typedef or namespaces.

    Additionally, if your compiler supports C++11 lambdas, you can even connect directly
    to a lambda function.

    \code
    connect(sender, &QObject::destroyed, [=](){ this->m_objects.remove(sender); });
    \endcode

    For a detailed comparison with the original string-based syntax, see \l{Differences
    between String-Based and Functor-Based Connections}.

    \section1 Connectivity and Networking

    Qt 5 provides better support for IPv6 and dual mode networks. Most
    applications using host names and network layer transparent protocols
    can now gain IPv6 support transparently. Such applications can also choose
    to receive both IPv4 and IPv6 connections or bind to only one of the two
    connection types. In the case of outgoing HTTP connections using
    \c{QNetworkAccessManager}, both IPv4 and IPv6 connections are attempted in
    parallel, and the one that succeeds first is used. This is useful in
    environments where one of the two types has limited connectivity.

    Qt 5 also provides better ways to handle TCP socket-based connections and
    SSL certificates. This means developers can now:
    \list
    \li bind a TCP socket to an IP address before connecting,
    \li verify an SSL certificate chain,
    \li and access legacy systems.
    \endlist

    Stricter client authentication is one of the primary concerns for many
    applications handling confidential or critical data. The opaque Private
    Keys support in Qt 5 enables applications to read private keys from devices
    such as PKCS#11 dongles for stricter client authentication. The \l{qsslkey
    example} illustrates reading private keys from a device.

    \section2 Extended Connectivity

    The connectivity options are endless with Qt 5. The two new modules,
    \l{Qt Bluetooth} and \l{Qt NFC}, enable developers to add support for
    sophisticated ways to connect and share information in their application.

    \section1 JSON Support

    Qt applications that use simple data structures to store small amount of
    data, can now choose to use JSON documents over the complex database
    backends that need necessary drivers or plugins to access data. The fact
    that JSON is a text-based open standard derived from JavaScript, makes it
    the obvious choice for QML applications as well.

    The Qt Core provides a set of classes to enable parsing and generating JSON
    documents. These classes also allow you to convert between an in-memory
    binary representation of JSON to a standard textual JSON format. The goal
    is to make common operations on JSON faster.

    \section1 User Input

    Qt 4 already had support for handling multi-point touch input in
    C++.  Qt 5 extends this support to include Qt Quick, covering all
    the information about the touch points, including the touch
    position, pressure, and velocity.

    The mouse event handling in Qt 5 has been improved from its
    predecessor. Applications have more control to handle mouse
    events in Qt Quick. The mouse area in a QML document can propagate
    the mouse wheel and click events and also ignore propagated
    events.

    Besides this, Qt 5 adds support for more mouse buttons on
    platforms where this is supported. This comes in handy for gaming
    applications developed using Qt.

*/
