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

    \section1 New Features in Qt 5.11

    \section2 Qt Core Module
    \list
        \li Added \l{QIODevice::NewOnly} and \l {QIODevice::ExistingOnly}
            \c OpenMode flags. When used with QFile, \c NewOnly instructs
            \c open() to (atomically) return \c false if the file to open
            exists. \c ExistingOnly instructs \c open() to (atomically) return
            \c false if the file does not exist.
        \li QFloat16 now has two methods for bulk conversion between \c float16
            and \c float, using hardware SIMD acceleration if available at
            runtime.
        \li QVarLengthArray now has rvalue reference versions of prepend and
            insert, and can hold movable-only datatypes such as
            \c std::unique_ptr.
        \li QVector now has rvalue reference versions of prepend and insert.
        \li QUuid \c toString() and \c toByteArray() now take a parameter
            specifying the generated format.
        \li Updated Unicode support in QString, QChar, and
            QTextBoundaryFinder to be compatible with Unicode 10.
    \endlist

    \section2 Qt Network Module
    \list
        \li ALPN (via Secure Transport) and thus HTTP/2 negotiation are now
        supported on iOS (starting from version 11).
        \li QNetworkRequest now has the \c Http2DirectAttribute to start a
        connection in HTTP/2 without first negotiating.
    \endlist

    \section2 Qt QML Module
    \list
        \li The compiler pipeline is rewritten. We now directly generate byte code
            from the AST, and store that as our intermediate representation.
        \li Optimized handling of JS calls, bringing large improvements
            especially when calling small functions.
        \li Newly written byte code interpreter brings significant performance
            improvements, at 80-90% of the JIT in Qt 5.10.
        \li \c .qmlc files are now fully platform-independent and store byte
            code instead of assembly.
        \li New hotspot JIT that generates optimized assembly for byte code that
            gets repeatedly executed.
        \li \c {CONFIG += qtquickcompiler} now also works in the open source version, by
            embedding the generated byte code at compile time.
    \endlist

    \section2 Qt Quick Module
    \list
        \li Expanded support for loading compressed textures in Image element.
            Now supports both \c .ktx and \c .pkm container file formats.
    \endlist

    \section2 Qt Quick Controls 2 Module
    \list
        \li AbstractButton
        \list
            \li Promoted the \l {AbstractButton::}{autoRepeat}
                property from \l [QML] Button to \c AbstractButton.
            \li Added \l {AbstractButton::}{autoRepeatDelay} and
                \l {AbstractButton::}{autoRepeatInterval}
                properties.
            \li Added \c pressX and \c pressY properties to expose the press
                point to QML.
        \endlist

        \li ButtonGroup
        \list
            \li Added a \c checkState property. It indicates the combined check
                state of the entire group.
        \endlist

        \li CheckBox and CheckDelegate
        \list
            \li No longer force tristate to \c true when setting \c checkState
                to \c Qt.PartiallyChecked. This allows presenting a partially
                checked state without being interactively tri-state.
            \li No longer consider partially checked as checked. This fixes
                check state cycling for a non-tri-state checkbox so that it goes
                from partially checked to fully checked state.
            \li Made it possible to implement \c nextCheckState() in QML.
        \endlist

        \li ScrollBar and ScrollIndicator
        \list
            \li Added \c minimumSize, \c visualSize, and \c visualPosition
                properties.
        \endlist

        \li SpinBox
        \list
            \li Added a \c displayText property to allow styles to create a
                light binding to display the textual value instead of having
                to call the \c textFromValue() JS-function.
        \endlist
    \endlist

    \section2 Qt 3D Module
    \list
        \li Scrub through animations with the \c normalizedTime property of
            QAbstractClipAnimator.
        \li Issue arbitrary ray casts in world space or screen space.
        \li Improved SIMD support.
    \endlist

    \section2 Qt Location Module
    \list
        \li New Qt.labs.location plugin containing experimental QML types.
    \endlist

    \section2 Qt WebEngine Module
    \list
        \li Updated to Chromium 65.
        \li Embedded DevTools without using a port and separate browser.
        \li Installable cookie filter.
        \li Quota permissions.
    \endlist

    \section2 QDoc Documentation Generator
    \list
        \li QDoc now uses libclang for parsing C/C++ code.
    \endlist

    \section2 Qt Designer Tool
    \list
        \li Added support for ID-based translations.
    \endlist

    \section2 Qt GUI Module
    \list
        \li On Windows Desktop, the accessibility support was updated and
            vastly improved. The implementation is now based on Microsoft UI
            Automation (it was formerly based on Microsoft Active Accessibility).
        \li The widgets themes available on Windows Desktop were updated to
            better support High-DPI displays, including fixes for several
            rendering issues, providing improved appearance and functionality.
        \li Linux Printing now supports more CUPS options with the advanced tab
            in QPrintPropertiesDialog, allowing many additional settings
            (amongst them arbitrary page ranges).
        \li Updated the Unicode bidirectional text algorithm to be compliant
            with Unicode 10.
    \endlist

    \section2 Qt Widgets Module
    \list
        \li Added quick text selection by mouse to QLineEdit.
    \endlist

    \section2 Qt Serial Bus Module
    \list
        \li Added J2534 Pass-Thru CAN plugin for communication between a
            computer and a vehicle.
        \li Added description, serial number and channel to QCanBusDeviceInfo,
            as far as supported by the various plugins.
        \li Introduced categorized logging to the CAN bus module which can be
            enabled by the \e "qt.canbus" and
            \e "qt.canbus.plugins.<pluginname>" filters.
        \li QCanBusFrame::isValid() now checks for invalid CAN FD payload
            lengths. E.g. 24 is  a valid CAN FD payload length, but 28 is not.
    \endlist

    \section2 Qt Bluetooth Module
    \list
        \li Ported Bluetooth Low Energy Central role implementation to BlueZ's
            DBus LE API (minimum version to enable is BlueZ 5.42).
    \endlist

    \section1 New Modules
    No new modules were added in this version.

    \section1 Platform Changes
    \list
        \li MSVC2013 support removed from the code base.
        \li Qt \WebEngine now requires MSVC 2017 on Windows.
        \li QNX 6.6 no longer supported (note: QNX 7 remains fully supported).
        \li macOS 10.10 no longer supported.
        \li Improved Accessibility support on Win32 by adopting the Windows UI
            Automation framework.
        \li XCB: Support for missing 'dead keys' such as dasia and diaeresis.

        \li eglfs
        \list
            \li Added support for framebuffer formats other than XRGB8888
                (RGB565, ARGB8888).
            \li Added experimental screen cloning support (by scanning out the
                same framebuffer on multiple displays).
            \li Added support for operating with DRM render nodes
                (/dev/dri/renderDnn) in a headless mode transparent to
                applications.
            \li Added a makespec for Renesas R-Car M3.
            \li Added experimental backend for compositing Qt content with other
                hardware layers via VSP2 on Renesas devices.
        \endlist
    \endlist

    \section1 Technology Preview Modules
    \list
        \li Qt Remote Objects (TP3) - A module that allows you to easily share
            QObject interfaces (Signals/Slots/Properties) between processes or
            devices.
        \li Qt WebGL Streaming Plugin (TP2) - Stream applications to browsers
            over the network.
    \endlist

    \section1 Deprecated Modules
    The following modules are part of the Qt 5.11 release, but are deprecated
    and considered for removal in subsequent releases of Qt:

    \list
        \li Qt Script
        \li Qt Quick Controls 1
    \endlist

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

    \section1 Additions to Other Qt 5 Releases

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

*/

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

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

    \sincelist 5.11

    \section1 Additions to Other Qt 5 Releases

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

