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

    Qt 5.2 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.1 and 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

    \list
    \li \l{Qt Android Extras}
    \li \l{Qt Bluetooth}
    \li \l{Qt Mac Extras}
    \li \l{Qt NFC}
    \li \l{Qt Positioning}
    \li \l{Qt Windows Extras}
    \endlist

    For more information, visit the \l{All Modules} page.

    \section1 Support for New Platforms

        \section2 Android

        \list
        \li Full support for camera and recording
        \li Low-latency audio (QAudioInput, QAudioOutput)
        \li Command-line deployment tool
        \li JNI convenience API
        \li OpenSSL support
        \endlist

        For more information, visit the \l{Qt for Android} page.

        \section2 iOS

        \list
        \li Media player support
        \li Basic camera support (only viewfinder and image capture)
        \li Low-latency audio (QAudioInput, QAudioOutput)
        \endlist

        For more information, visit the \l{Qt for iOS} page.

    \section1 Qt Creator Updates

    Qt Creator 3.0 is released along with Qt 5.2. In Qt Creator 3.0, the
    following were added:

    \list
    \li Initial iOS support
    \li API cleanup
    \li Enhanced Android support
    \li Initial debugging backend for the \l{The LLDB Debugger}{LLDB Debugger} (OS X)
    \endlist

    \section1 Installation Updates

    In 5.2, there are new reference installers for OS X:
    \list
    \li Android
    \li iOS
    \endlist

    There is also a new target binary for Windows, OS X, and Linux:
    \list
    \li Qt for Android ARMv5
    \endlist

    The installers are available from the \l{Downloads} page.

    \section1 New Features in Qt 5.2

        \section2 Qt Core Module
        \list
        \li Added class QCommandLineParser for command-line arguments parsing
        \li Added new overload to QObject::connect()  to add a context object when connecting to a lambda
        \li Added new QStringRef methods; left, right, mid
        \li Added QLoggingCategory/qCDebug, qCWarning, and other macros to configure what gets logged at runtime
        \li Added class QTimeZone to support time zones using Olsen time zone IDs
        \li Added support to QDateTime for new Qt::TimeSpec of Qt::TimeZone and Qt::OffsetFromUTC
        \li Added new class QCollator to provide advanced platform-based collation
        \li Added more I/O redirection possibilities to QProcess
        \li Added iteration capability to containers in QVariant
        \li Added dereferencing to QObject for smart pointers in QVariant
        \li Added QFileSelector to ease the selection of files when running in a different platform
        \endlist

        \section2  Qt GUI Module
        \list
        \li Added applicationState() function and applicationStateChanged() signal to QGuiApplication
        \li Added QOpenGLTexture class
        \endlist

        \section2  Qt Widgets Module
        \list
        \li Added support for embedded clear button commonly used for item view filtering and side actions to QLineEdit
        \li Added methods based on QUrl to QFileDialog
        \li Added new QKeySequenceEdit class
        \li Restored session-management support from Qt4
        \li Restored basic startup-notification support on Unix
        \li Added placeholderText property to QTextEdit
        \li Added getMultiLineText static method to QInputDialog
        \li Added tabBarClicked and tabBarDoubleClicked signals to QTabBar
        \endlist

        \section2  Qt Print Support Module

        \list
        \li Added advanced CUPS features on Linux including server-side page
        range selection, odd and even page selection, pages-per-sheet, job
        scheduling, and banner pages.
        \endlist

        \section2  Qt QML Module
        \list
        \li Added new property to \l{QtQml::Qt::application}{Qt.application}: state
        \li Added ability to define QML singletons with QML files
        \li Added QQmlFileSelector for applying file selectors to support certain styles of cross-platform development
        \li Added a supported method for launching QML-only applications for the QML binary runtimes
        \li New V4 JS engine
        \endlist

        \section2  Qt Quick Module
        \list
        \li Added a new \l{Qt Quick Scene Graph}{scenegraph} renderer for improved performance
        \li Added texture atlas support in SceneGraph
        \li Added new \e animator types, which can run animations on the scene graph's render thread.
        \li Support for external drag-and-drop
        \endlist

        \section2  Qt Quick Controls Module
        \list
        \li Added support for an editable combo box
        \li Added support for multi-selection in \l [QtQuickControls1] TableView
        \li Added support for setting columns movable in \l [QtQuickControls1] TableView
        \li Added \l [QtQuickControls1] Switch type
        \li Added \l [QtQuickControls1] BusyIndicator type
        \li Simplified deployment
        \endlist

        \section2  Qt Quick Dialogs Module
        \list
        \li Added a new FontDialog type
        \endlist

        \section2  Qt Quick Layouts Module
        \list
        \li Added baseline support to layout
        \endlist

        \section2  Qt Network Module
        \list
        \li Added public methods to pre-TCP and pre-SSL-connect to QNetworkAccessManager
        \li Added API to persist and resume SSL sessions to QSslConfiguration
        \li Added support for allowing for debugging SSL traffic with Wireshark or tcpdump
        \li Add public member bearerTypeFamily() to QNetworkConfiguration
        \endlist

        \section2  moc New Features
        \list
        \li Added \c -M argument to add plugin metadata from the command line
        \endlist

        \section2  Accessibility New Features
        \list
        \li Enabled accessibility on Mac
        \li Made the APIs public so that it is possible to implement accessibility for custom widgets
        \li Basic accessibility support for Android
        \endlist

        \section2 WebKit New Features
        \list
        \li Added CSS blending
        \li Improved the threaded garbage collection
        \li Added support for LLInt on x87 (old x86 without SSE2)
        \li Added Improvements to standard support in HTML5 Canvas, CSS Grid, CSS Shapes, CSS filters, and other features
        \endlist

    \section1 List of API Changes

    The pages below contain a list of API changes in Qt 5.2
    \list
    \li \l{New Classes and Functions in Qt 5.2}
    \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.1}
    \li \l{What's New in Qt 5.0}
    \endlist

*/

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

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

    \sincelist 5.2

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