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

    \section1 Qt Core Changes
    \section2 QStandardPaths
    QStandardPaths is a more powerful version of QDesktopServices that was
    present in Qt 4. Modeled after \l {http://api.kde.org/4.x-api/kdelibs-
    apidocs/kdecore/html/classKStandardDirs.html}{KStandardDirs} from KDE 4, it
    contains additional features such as searching for all occurrences of a
    given file in the storage locations.

    \section2 Compile-time Checks for Signal-slot Connections
    QObject now supports an additional syntax for connecting signals to slots,
    which forces the compiler to check whether the signal and the receiver
    exist and their arguments are compatible.

    This syntax allows connecting a signal to any kind of C++ receiver,
    including C++11 lambdas, member functions, or static functions. The
    receivers no longer need to be declared as slots, but such declarations
    are still recommended for readability.

    See \l{Differences between String-Based and Functor-Based Connections}
    for more details.

    \section2 Perl-Compatible Regular Expressions
    QRegularExpression is introduced to provide better support for regular
    expressions compatible with Perl. This class is more powerful and
    faster than QRegExp, and supports more features such as lazy and possessive
    quantifiers, lookbehinds, named capturing groups, and iteration of matches.

    \section1 Qt GUI Changes
    \section2 New Classes for Windowing and Rendering
    A new set of enabler classes have been added, most importantly QWindow,
    QScreen, QSurfaceFormat, and QOpenGLContext. These are now used as backends
    for the \l{Qt Widgets} module and by \l {Qt Quick} 2.

    \section2 OpenGL Classes
    Most of the useful \l {Qt OpenGL} classes have been polished and moved into
    \l{Qt GUI}. A few important ones are, QOpenGLFramebufferObject,
    QOpenGLShaderProgram, QOpenGLFunctions, and so on. For the complete list,
    refer to \l{Qt GUI C++ Classes}.

    This change introduces QOpenGLContext as a replacement for QGLContext. This
    replacement class is more generic and decoupled from QWindow, making it to
    support more use cases such as using the same context for multiple surfaces.

    \section2 QOpenGLPaintDevice
    Instead of having QWindow and QOpenGLFramebufferObject be subclasses of
    QPaintDevice, you can now use QOpenGLPaintDevice. This new alternative can
    be created on the stack, makes it easier and flexible to render into the
    currently bound context using QPainter.

    \section1 Qt Network Changes
    \section2 QDnsLookup
    It is now possible to lookup DNS records using the new QDnsLookup API.
    This does not replace QHostInfo, which is still the API to be used for
    resolving a host name to an IP address. QDnsLookup is mainly used for other
    types of DNS record, such as SRV, TXT and MX.

    \note This new class replaces the Q3Dns API, which is removed in Qt 5.

    \section2 Better Support for IPv6 and Dual-mode Networks
    Most applications using host names and network layer transparent protocols,
    will now gain IPv6 support transparently. This means, QTcpServer and
    QUdpSocket bound to QHostAddress::Any can now receive both IPv4 and IPv6
    connections, although, QHostAddress::AnyIPv4 and QHostAddress::AnyIPv6 can
    be used to bind to only one protocol.

    Outgoing http connections using QNetworkAccessManager will now attempt both
    IPv4 and IPv6 connections in parallel, and use the one that succeeds first.

    \section2 Binding TCP Sockets
    QTcpSocket can be bound to an IP address before connecting, which is useful
    for limiting connection to a specific interface in a multi-homed
    environment.

    \section2 SSL Certificates
    SSL certificate extensions can now be accessed to enable further
    development of SSL support in Qt.

    Developers can also verify an SSL certificate chain programatically now.

    \section2 Workarounds for Buggy SSL Servers
    The QSsl::SslOption enum now allows a QSslSocket-based code to access
    legacy systems by enabling bug workarounds.

    \note This change is also back-ported to Qt 4.8.

    \section2 Support for Opaque Private Keys
    This allows applications to read private keys from devices such as PKCS#11
    dongles, as illustrated by the \l{qsslkey example}

    \section1 Qt QML Changes
    This is a new module in Qt 5 that provides the QML engine and the backend
    infrastructure.

    \section2 QML Engine
    \list
     \li V8 JavaScript engine
     \li Various parser and compiler optimizations have been implemented along
         with the new bindings optimizer.
     \li Loading/compilation can now be performed in a separate thread. This
         can be enabled by loading a loader object asynchronously through its
         source property, or by passing the Component.Asynchronous parameter to
         \l{Qt::createComponent}{Qt.createComponent()}.
     \li New QQmlEngine::trimComponentCache() function safely discards unused
         data in the engine’s component cache to free memory.
    \endlist

    \section2 Type System
    \list
     \li New \l{var} property type can hold JavaScript references.
     \li QML properties of type \l{var} and \l{variant} can now hold pixmaps.
     \li Value type improvements:
      \list
       \li QColor is now a value type. The red, green, blue and alpha channels
           of a “color” property can now be accessed using “r”, “g”, “b” and
           “a” properties.
       \li Improved support for QVector4D, now constructible in QML using
           \l{Qt::vector4d}{Qt.vector4d()}.
      \endlist
     \li Support for certain sequence types (QList<int>, QList<qreal>,
         QList<bool>, QList<QUrl>, QList<QString> and QStringList) has been
         improved. QObjects can define Q_PROPERTYs of these types which can be
         accessed from JavaScript.
    \endlist

    \section2 Other
    \list
     \li JavaScript (.js) files can now import QML modules and other JavaScript
         files using the “import” statement.
     \li QQmlExpression can now be constructed directly (and more efficiently)
         from a QQmlScriptString.
     \li The component returned by \l{Qt::createComponent}{Qt.createComponent()}
         is no longer the owned by the engine. Be sure to hold a reference,or provide a parent.
    \endlist


    \section1 Qt Quick Changes
    This is a new module in Qt 5 which provides the visual canvas and
    scenegraph backend as well as the \c QtQuick QML module for QML-based
    application development.

    The module replaces the QDeclarative* equivalents in \e {QtQuick 1} with the
    following:
    \list
     \li QQuickView
     \li QQuickWindow
     \li QQuickItem
     \li QQuickPaintedItem
    \endlist
    See \l{Qt Quick C++ Classes} for the complete list.

    The QtQuick 2.0 QML module is a major update, and the following sections
    outline the features that come with it:

    \section2 New Graphics Architecture

    \list

    \li Qt Quick 2.0 uses a dedicated OpenGL (ES) 2.0 based \l{Qt
    Quick Scene Graph} scene graph for all its rendering.

    \endlist

    \section2 Visual and Graphic Types
    \list
     \li New Canvas type for drawing, provides a HTML5 canvas-like API along
         with the following additional features:
     \list
      \li Two render targets: \l{QtQuick::Canvas::renderTarget}{Canvas.Image} and
          \l{QtQuick::Canvas::renderTarget}{Canvas.FramebufferObject}.
      \li Background thread rendering.
      \li Tiled canvas rendering.
      \li Support for most of the HTML5 context2d APIs.
     \endlist
    \li Image type now has:
     \list
      \li New horizontal and vertical alignment properties, \l{Image::}
          {horizontalAlignment} and \l{Image::}{verticalAlignment}.
      \li \l{Image::fillMode}{Image.Pad} enum value for \c {fillMode}
          property does not transform the image unlike the other \c {fillMode}
          enum values.
      \li \l{Image::sourceSize}{sourceSize.width} and \l{Image::sourceSize}
          {sourceSize.height} now fits the image to size maintaining the aspect
          ratio.
     \endlist
    \endlist

    \section2 Animations
    \list
     \li New \l{SpriteSequence} type renders animated sprites and can
         transition between animations.
     \li New \l{Sprite} type that represents each animation in a
         \l {SpriteSequence}.
     \li New \l{AnimatedSprite} type for drawing single sprite animations.
    \endlist

    \section2 Changes to the Text types
    \list
     \li \l{Text}:
      \list
       \li \l{Text::textFormat}{AutoText} format now switches to \c StyledText
           instead of \c{RichText}.
       \li \l{Text::}{lineLaidOut} signal is emitted for every
           line during the layout process to give the option of positioning
           and/or resizing text as they are laid out.
       \li \l{Text::doLayout}{doLayout()} method can now trigger the text
           layout from JavaScript.
       \li \l{Text::elide}{ElideRight} to support text that spans multiple
           lines.
       \li \l{Text::fontSizeMode}{fontSizeMode} property now supports wrapping
           the text to the item size.
       \li \l{Text::}{minimumPixelSize} and \l{Text::}{minimumPointSize} properties
           can be used to specify a lower bound when auto-fitting.
      \endlist
     \li \l {QtQuick::TextEdit::textFormat}{TextEdit.textFormat} property now defaults
         to \c PlainText instead  of \c AutoText.
     \li \l{TextInput} now has \c wrapMode and verticalAlignment properties.
     \li \c{TextInput.positionAt()} now takes \c y value.
    \endlist

    \section2 User Input
    \list
     \li New \l{MultiPointTouchArea} type can process multi-point touches and
         provide information about the touch points including position,
         pressure and velocity.
     \li MouseArea type now:
     \list
      \li Propagates wheel events.
      \li Propagates \c clicked, \c doubleClicked and \c pressAndHold events
          differently to \c pressed. These events are propagated to the handler
          of the topmost \l{MouseArea} in the stack-order.
      \li Can ignore the propagated events using the
          \c{propagateComposedEvents}. Such ignored events are propagated to
          the next MouseArea handler in the stack-order.
     \endlist
    \endlist

    \section2 Specialized Containers
    \list
     \li \l{Flickable} type now has:
      \list
       \li a new \c rebound property that enables you to specify the transition
           type for the bounce back animation.
       \li New \c topMargin, \c bottomMargin, \c leftMargin, and \c rightMargin
           properties allow extra margin space to be specified. This is useful
           to implement the pull-to-refresh functionality for a list.
       \li New \c xOrigin and \c yOrigin properties provide the top left
           position of the content item.
       \li New \c dragging, \c draggingHorizontally, and \c draggingVertically
           properties that provide information when the flickable area is
           dragged.
      \endlist
    \endlist

    \section2 Positioners
    The following features are related to Row, Column, Grid, and Flow types:
    \list
     \li The “add” and “move” transitions can now access the \l{ViewTransition}
         attached property, and also animate arbitrary item properties (instead
         of being restricted to animating an item’s position).
     \li New \c {Positioner.index}, \c {Positioner.isFirstItem} and
         \c{Positioner.isLastItem} attached properties for items within a
         positioner.
     \li The \l{Grid} type has new \c rowSpacing and \c columnSpacing
         properties.
     \li All spacing properties on positioners now use real numbers instead of
         integers.
    \endlist

    \section2 Models and Views
    \list
     \li \l{ListView} and \l{GridView}:
      \list
       \li Transitions can be specified to animate the adding, removing and
           moving of items in a view. For details, see \l{ViewTransition},
           \l{ListView::add}{ListView.add}, \l {ListView::addDisplaced}
           {ListView.addDisplaced}, \l{GridView::add}{GridView.add}, and
           \l{GridView::addDisplaced}{GridView.addDisplaced}.
       \li New \c verticalLayoutDirection property enables items to be laid out
           from bottom-to-top using the \c BottomToTop enum value.
       \li The \c cacheBuffer property now has a non-zero default and delegates
           in the \c cacheBuffer are created asynchronously.
       \li New \c headerItem and \c footerItem properties provide access to the
           instantiated header and footer items.
       \li \c RightToLeft layout now also reverses the
           \c preferredHighlightBegin and \c preferredHighlightEnd.
      \endlist
     \li \l{ListView}'s new \c {section.labelPositioning} property can fix the
         current section label to the start of the view, and the next section
         label to the end of the view, so that labels do not scroll while
         section items are still in view.
     \li \l{PathView} has two new properties, \c curretnItem and
           \c maximumFlickVelocity.
    \endlist

    \section2 Particles System Support
    The new QtQuick.Particles 2.0 module provides support for the composition
    of a variety of 2D particle systems. See \c{Using the Qt Quick Particle
    System} for more details.

    \section2 Utility Types
    \list
     \li New \l{PathArc}, \l{PathCurve} and \l{PathSvg} types:
     \list
      \li \c PathArc and \c PathCurve support the construction of arcs and
          catmull-rom curves, respectively. PathSvg supports the construction
          of a path from an SVG string.
     \endlist
     \li Loader:
     \list
      \li New \c{asynchronous} property allows components to be instantiated
          with a lower chance of blocking. With the \c {asynchronous} property
          set to \c {true}, the component is compiled in a background thread.
      \li New \c{active} property delays instantiation of a Loader object’s
          item.
      \li New \c {setSource(JSObject)} method to specify initial property
          values for the loaded item, similar to
          \l {QtQml::Component::createObject()} {Component.createObject()}.
      \li \c sourceChanged signal is now only emitted when the source changes
          and the \c sourceComponentChanged signal is now emitted when the
          \c sourceComponent is changed. Ealier, these signals were emitted by
          the Loader only when one of the two properties had changed.
      \li Loader type can now be used as a value source, and it can restore any
          previously set binding if its "when" clause becomes \c false.
     \endlist
    \endlist

    \section1 Qt Multimedia Changes

    Qt Multimedia is an essential module replacing the QtMultimedia library and
    Qt MultimediaKit mobility API in Qt 4.8. It features full support for Audio
    and Video playback, and recording. Support for web cameras is integrated.

    Qt Multimedia uses the system’s native multimedia engine as a backend,
    and does not come with its own audio or video codecs. Thus the supported
    list of codecs is equivalent to the ones supported by the underlying OS.

    It uses DirectShow and WMF on Windows, AVFoundation on Mac and gstreamer on
    Linux.

    \section1 New Classes and Functions
    The section provides a comprehensive list of all new classes and functions
    introduced in Qt 5.

    \sincelist 5.0

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