/****************************************************************************
**
** 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 whatsnew55.html
    \title What's New in Qt 5.5
    \brief Lists the new features in Qt 5.5.

    \section1 New Modules

    \list
    \li \l[Qt 3D]{Qt 3D}
    \list
        \li Included as a technology preview.
        \li C++ and QML APIs for easy inclusion of 3D graphics into Qt applications.
        \li Supports OpenGL versions 2, 3 and 4, and OpenGL ES versions 2 and 3.
        \li Data-driven renderer configuration.
        \li Extensible beyond 3D graphics. Provides a full Entity Component System framework.
        \li Supported platforms:
        \list
            \li Windows (not RT)
            \li OS X
            \li Linux/xcb
            \li Android
            \li Embedded Linux with ES 2
            \li (Support for QNX and iOS planned)
        \endlist
    \endlist
    \li \l[QtLocation]{Qt Location}
    \list
        \li Included as a technology preview.
        \li Adds mapping, (reverse-)geocoding, routing and place features to Qt.
    \endlist
    \endlist

    \section1 New Features in Qt 5.5

    \section2 Qt Bluetooth Module
    \list
    \li Classic Bluetooth support added for \l{Qt for macOS}{\macos}.
    \li Bluetooth Low Energy support added for \l{Qt for Android}{Android}, \l{Qt for iOS}{iOS}
    and \l{Qt for MacOS}{\macos}
    \endlist

    \section2 Qt Core Module
    \list
        \li Added a possibility to have Q_PROPERTY and Q_INVOKABLE within a Q_GADGET,
            with a way to query the QMetaObject of such gadgets using the QMetaType
            system.
        \li Added Q_ENUM to replace Q_ENUMS, which allows to get a QMetaEnum at
            compile time using QMetaEnum::fromType<T>. Such enums are now automatically
            registered as metatypes, and can be converted to strings within QVariant,
            or printed as string by qDebug().
    \endlist

    \section2 Qt GUI Module
    \list
        \li All Windows packages are now built with \c {-opengl dynamic}.
            No OpenGL-only or ANGLE-only builds are provided anymore.
        \li On Windows, the OpenGL implementation to use can now be configured
            based on the GPU vendor and driver versions using JSON configuration
            files. This allows shipping fine-grained card and driver blacklists
            with the applications when necessary.
        \li QImage: Added 8-bit alpha map and grayscale formats.
    \endlist

    \section2 Qt Multimedia Module
    \list
        \li Added GStreamer 1.0 support. Note that the default is still 0.10. Version
            1.0 support can be enabled by configuring Qt with \c {-gstreamer 1.0}.
        \li Added a new video filtering framework to integrate frameworks like OpenCV
            or compute APIs such as OpenCL or CUDA with VideoOutput elements.
        \li Added a new API to control camera viewfinder settings.
        \li Improved camera support on iOS (focus, zoom, exposure, image and
            viewfinder settings).
        \li The QML MediaPlayer is now rendered in an OpenGL texture on iOS. This
            means VideoOutput supports advanced transformation and shader effects,
            and doesn't have to be always on top of other items anymore.
    \endlist

    \section2 Qt NFC Module
    \list
    \li Ported to \l{Qt for Linux/X11}{Linux} using Neard v0.14 or later.
    \endlist

    \section2 Qt Network Module
    \list
        \li Added a new SSL backend for iOS and OS X, based on Secure Transport.
        \li Added support for \e libproxy.
        \li Added support for TLS PSK ciphersuites.
        \li Added support for elliptic curve certificates.
        \li Added ability to select specific curves when using elliptic curve
            ciphersuites.
    \endlist

    \section2 Qt Platform Abstraction (QPA)
    \list
        \li Added support for Raspberry Pi 2.
        \li On supported desktops, the xcb plugin now uses the D-Bus based
            \c org.kde.StatusNotifier protocol for system tray icons, and
            \c org.freedesktop.Notifications for notifications.
        \li Added a KMS/DRM backend for EGLFS. This replaces the now deprecated
            KMS platform plugin. It allows running applications with eglfs on
            the console on systems with Mesa and devices that come with DRM
            support.
        \li Added a plugin-based backend mechanism for EGLFS, in addition to
            the existing, statically compiled-in solution. Most compiled-in
            hooks are converted to be dynamically loaded plugins that are built
            based on configure time tests. This reduces the reliance on the
            device makespecs for Raspberry Pi, i.MX6 and Mali-based devices.
        \li Input handling is now unified for EGLFS and LinuxFB, avoiding the
            need to launch and configure LinuxFB-based applications differently
            compared when using EGLFS.
        \li \e tslib is now better integrated with EGLFS and LinuxFB to provide
            support for resistive single-touch touchscreens often used in
            industrial environments.
        \li xcb is refactored to move GLX and EGL support into plugins.
        \li Added a TUIO Touch plugin for receiving remote touch events via UDP.
        \li Added a \e libinput plugin.
        \li iOS: Added support into QFileDialog for browsing system photos using a
            native image picker dialog. Selected photos can be loaded using QFile.
    \endlist

    \section2 Qt QML Module
    \list
        \li Added a possibility to conveniently expose custom C++ value types into
            the JavaScript environment of QML and QJSEngine.
        \li Added support for JavaScript typed arrays.
        \li Various performance improvements, notably QJSValue.
        \li Added a convenience qJsEngine(QObject*) getter function.
    \endlist

    \section2 Qt Quick Module
    \list
        \li Windows now defaults to the threaded Qt Quick render loop when using
            desktop OpenGL (\c opengl32.dll).
        \li Added support for threaded rendering in QQuickRenderControl.
        \li Improved behavior of \l [QML] {Flickable} on OS X trackpads using
            pixel deltas from native gestures.
        \li Added support for PinchArea to handle native pinch gestures when the
            OS provides them (so far, only on OS X).
        \li Added a smart zoom signal to PinchArea to react to that gesture on an
            OS X trackpad.
        \li Added a \l {QtQuick::MouseArea::}{scrollGestureEnabled} property to
            MouseArea to control whether native scroll gestures from the OS will
            be handled by the wheel signal handler.
    \endlist

    \section2 Qt Quick Controls Module
    \list
        \li \l [QtQuickExtras]{Qt Quick Extras}, formerly Qt Quick Enterprise
            Controls, was added under the QtQuick.Extras import.
        \li Added a TreeView control for QAbstractItemModel-derived models.
            Supports QItemSelectionModel selection.
    \endlist

    \section2 Qt WebEngine Module
    \list
        \li Added WebEngineProfile for controlling storage and cache paths and
            related policies.
        \li Added support for a JavaScript Geolocation API with \l[QtLocation]
            {Qt Location} as a backend.
        \li Added API for managing downloading of files.
        \li Added API for controlling cache and cookie paths and policy.
        \li Added API for \WebEngine settings.
        \li Various experimental QML APIs promoted to public.
        \li Added QtWebChannel integration API over Chromium IPC.
        \li Updated Chromium snapshot to version 40.
    \endlist

    \section2 Qt WebView Module
    \list
        \li Added native implementations for OS X.
        \li Added API for running JavaScript (Requires API 19+ on Android).
        \li Added API for setting the HTML content.
        \li Added API for load status notifications.
    \endlist

    \section1 Deprecated Functionality

    The following modules are deprecated in Qt 5.5:
    \list
        \li Qt WebKit
        \li Qt Declarative (Qt Quick 1)
        \li Qt Script
    \endlist

    These modules are still included in Qt 5.5, but are considered for removal
    in future releases.

    \section1 List of API Changes

    The pages below contain a list of API changes in Qt 5.5:
    \list
    \li \l{New Classes and Functions in Qt 5.5}
    \li \l{Obsolete Classes}
    \endlist

    \section1 Additions to Other Qt 5 Releases

    \list
    \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}
    \endlist

*/

/*!
    \page newclasses55.html
    \title New Classes and Functions in Qt 5.5
    \brief A list of new APIs in Qt 5.5.

    This page contains a comprehensive list of all new classes and functions
    introduced in Qt 5.5. Links to new APIs in previous Qt 5 releases are found
    at the bottom of this page.

    \sincelist 5.5

    \section1 Additions to Other Qt 5 Releases

    \list
    \li \l{What's New in Qt 5.6}
    \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}
    \endlist
*/

