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

    Qt 5.1 introduces many changes for helping developers continue creating
    wonderful applications, easily and with less code. As well in this release,
    focus is placed on bug fixing and new features, while maintaining
    compatibility with Qt 5.0.

    This page is a summary of new features. For specific API changes, the
    \l{List of API Changes} section contains links to new and obsolete classes.

    \section1 New Modules

    New modules add more functionality for developers to use on various
    platforms.

    \list
    \li \l{Qt Quick Controls 1}{Qt Quick Controls} - a set of reusable UI
    controls. Qt 5.1 targets desktop platforms, while future releases will
    include more features useful on touch devices.

    \li \l{Qt Quick Layouts} - provides layouts for \l{Qt Quick}

    \li \l{Qt Quick Dialogs} - contains types for creating and
    interacting with system dialogs

    \li \l{Qt X11 Extras} - adds platform specific APIs for X11

    \li \l{Qt Sensors} - provides access to sensor hardware and motion gesture
        recognition both via QML and C++ interfaces. Supports \l{Qt for
        Android}{Android}, BlackBerry, \l{Qt for iOS}{iOS}, and Mer platforms.

    \li \l{Qt Serial Port} - provides an interface for hardware and virtual
        serial ports
    \endlist

    The \l{All Modules} page contains a list of all modules in Qt 5.1.

    \section1 New Supported Platforms

    Qt 5.1 introduces support for following new platforms with technology
    preview status:

    \list
    \li\l{Qt for Android} (Technology Preview)
    \li\l{Qt for iOS} (Technology Preview)
    \endlist

    \section1 Summary of Changes

    \section2 moc Changes
        \list
        \li New keyword in \l Q_PROPERTY(), \c MEMBER, lets you bind a property
        to a class member without requiring to have a getter or a setter.
        \endlist

    \section2 qmake Changes
        \list
        \li On Windows: Added support for specifying application icon
            (via \c{RC_ICONS}).
        \endlist

    \section2 Qt Core Changes
        \list
        \li Added support for SHA3 to QCryptographicHash
        \li Added toInt(), toUInt(), and similar functions to QStringRef
        \li A new threadsafe initialization of global statics through refactored
            \l Q_GLOBAL_STATIC.
        \li A new class, QLockFile, provides locking between processes using a
        file. This lock enables applications to check that there is only one
        instance of it running.
        \li A new class, QSaveFile, provides transaction such as file writing.
        \endlist

    \section2 Qt GUI Changes
        \list
        \li Support for embedding and reparenting of windows created from other
            processes, via QWindow::fromWinId().
        \li QWidget::createWindowContainer() adds the capability to embed
            QWindow instances, such as QQuickView or a QWindow using
            QOpenGLContext, into a QWidget hierarchy.
        \li Support for kerning advances in QRawFont::advancesForGlyphIndexes.
        \li QImageReader and QImageWriter adds the ability to report supported
            MimeTypes.
        \li New input method plugin, QComposeInputContext.
        \li New GTK+ 2.x platformtheme plugin that provides native file, font,
            and color dialogs.
        \li New class, QOpenGLContext::versionFunctions(), provides access to
            all OpenGL functions.
        \li New QOpenGLTimerQuery and QOpenGLTimeMonitor classes.
        \li New QOpenGLDebugLogger class expose KHR_debug extension for easy debugging.
        \li Added support for Geometry, Tessellation Control,
            Tessellation Evaluation, and Compute shaders to QOpenGLShader and
            QOpenGLShaderProgram.
        \li New QOpenGLVertexArrayObject class.
        \endlist

    \section2 Qt Network Changes
        \list
        \li New encrypted() signal to QNetworkAccessManager and QNetworkReply so
            that applications can perform additional checks on the certificate
            chain.
        \li Support for sending intermediate certificates when QSslSocket is
            used as a server and when using client certificates.
        \li Support for SSL session reuse allowing much faster connections to
            servers.
        \endlist

    \section2 Qt QML Changes
        \list
        \li New QQmlApplicationEngine convenience class for QML applications.
        \li New Instantiatior type for generic, dynamic object creation.
        \li New \l{QtQml.Models} module containing \l ListElement, \l ListModel,
            \l DelegateModel, \l DelegateModelGroup, and \l ObjectModel.
        \li New properties for \l [QML]{Qt::application}: arguments, name, and version.
        \endlist

    \section2 Qt Quick Changes
        \list
        \li New threaded render loop for Mac, Linux, and Embedded.
        \li New render loop for windows for smoother animations.
        \li New \l {Qt Quick Dialogs} submodule with \l FileDialog and
            \l ColorDialog types.
        \li New \l Window properties: activeFocusItem, minimumWidth,
            minimumHeight, maximumWidth, maximumHeight, visibility,
            contentOrientation, and opacity.
        \li New \l Item property: activeFocusOnTab.
        \li New \l Grid properties: horizontalAlignment, verticalAlignment, and
            effectiveHorizontalAlignment.
        \li New \l TextEdit properties: selectByKeyboard and textDocument
        \li A \l Window declared inside another Window or \l Item will
            automatically be transient for (centered upon) the outer window.
        \endlist

    \section2 Qt WebKit Changes
        \list
        \li JavaScript JIT on Windows 64 bit.
        \li Improved font rendering, kerning enabled by default.
        \li Improved garbage collection.
        \li Support for WOFF fonts.
        \li Support for WebGL without accelerated compositing.
        \li Support for GStreamer 1.0.
        \li Improved perceived page load performance and support for Link
            prefetch.
        \endlist

    \section2 Qt Widgets Changes
        \list
        \li Added property toolTipsVisible in QMenu.
        \endlist

    \section2 Qt Creator Compatibility

    \l{Qt Creator Manual}{Qt Creator} 2.7 complements this Qt release
    with the most prominent new features:

    \list
    \li Improved C++11 code editing support
    \li \l{Qt Creator: Editing QML Files in Design Mode}{Qt Quick Designer}
        with full support for Qt Quick
    \li Android \l{Qt Creator: Deploying Applications to Android Devices}{development target}
    \li Experimental QBS and diff integration
    \endlist

    \section2 Other New Features
    \list
    \li Restored support for static Qt builds
    \endlist

    \section1 List of API Changes

    The pages below contain a list of API changes in Qt 5.1
    \list
    \li \l{New Classes and Functions in Qt 5.1}
    \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.0}
    \endlist

*/

/*!
    \page newclasses51.html
    \title New Classes and Functions in Qt 5.1
    \brief A list of new C++ APIs in Qt 5.1

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

    \sincelist 5.1

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