Qt 5.8 introduces many new features and improvements as well as bugfixes
over the 5.7.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:

  http://doc.qt.io/qt-5/index.html

The Qt version 5.8 series is binary compatible with the 5.7.x series.
Applications compiled for 5.7 will continue to run with 5.8.

Some of the changes listed in this file include issue tracking numbers
corresponding to tasks in the Qt Bug Tracker:

  https://bugreports.qt.io/

Each of these identifiers can be entered in the bug tracker to obtain more
information about a particular change.

****************************************************************************
*                           General                                        *
****************************************************************************
 - [QTBUG-54982] Add qmlRegisterUncreatableMetaObject convenience function
   needed to register Q_NAMESPACE QMetaObjects.

****************************************************************************
*                   Important Behavior Changes                             *
****************************************************************************

 - [QTBUG-52012] When the engine looks for QML modules / extension
   plugins in statically linked applications, the plugins are not
   instantiated in the qml loader thread anymore. For this to work
   however it is necessary for plugins to use
   Q_PLUGIN_METADATA(IID_QQmlExtensionInterface_iid) in their class
   declaration instead of hardcoding the interface id as a string literal.

 - A JS null value converted to a QVariant now has type
   QMetaType::Nullptr rather than QMetaType::VoidStar.

 - To improve the start-up time and reduce memory consumption, the QML engine
   attempts to cache the code and data structures generated during loading of
   .qml and .js files. Cache files are - if possible - written to disk in the
   directory next to the source file with the .qmlc/.jsc extension. If that
   is not possible, they are written to QStandardPaths::CacheLocation.


****************************************************************************
*                          Library                                         *
****************************************************************************

QtQml
-----

 - [QTBUG-53412] Fix mapping of null JS values to null SQL values instead
   of empty strings.
 - [QTBUG-53794] Fix crash when using the "with" statement with an
   expression that throws an exception.
 - [QTBUG-54589] Fix assertion when deleting properties of JS objects
 - [QTBUG-54360] Added exit(int retCode) method to the Qt global object. An
   application can call Qt.exit to specify a return code of the engine.
 - QQmlXMLHttpRequest:
   * [QTBUG-38175] QQmlXMLHttpRequest now supports the PATCH method in HTTP
     requests.
 - Fix reading of enum properties from gadgets / value types when the
   enum was registered with qRegisterMetaType().
 - Fixed support for using namespaces in property types, signal parameter names
   and list types
 - Fixed support for declaring default properties of type list<T>


QtQuick
-------

 - QQuickWindow:
   * The relevant child item is now sent a hover event when the window
     receives a QEnterEvent, making sure hovering is recognized without
     waiting for mouse movement.
 - [QTBUG-50298] Added Qt.application.font property.
 - QQuickWidget now properly repaints text on high-DPI screen changes.
 - [QTBUG-54238] qt.scenegraph.info logging category got renamed to
   qt.scenegraph.general.
 - ShaderEffect with OpenGL now supports reading GLSL shader sources from
   local files and from the resource system. Whenever a fragmentShader or
   vertexShader property is a valid such URL, the value is treated as a
   file specification instead of actual source code.
 - The threaded scene graph renderer does not sleep up to one vsync
   interval before the first frame anymore.
 - [QTBUG-48723] Added properties to access color values for the HSV and
   HSL color models to the basic QML color type.
 - MouseArea no longer thinks it's pressed when it does not accept the
   press event. When a press event is not accepted, MouseArea also no
   longer receives a cancel event.
 - Touch events are now delivered in a well defined order: New touch points
   are delivered first to items under the finger which was first touching
   the screen. Then to items that are under the second finger and finally
   to common ancestors. This means that items that are "on top" will get a
   chance to grab touch points before any items in the background.
 - [QTBUG-39888] Fix crash with QQuickItems created via JavaScript being
   garbage collected sometimes when they're not assigned to a window.

 - Drag:
   * [QTBUG-37366] Added imageSource property to attached Drag object: this
     allows drag sources to specify the pixmap to be drawn next to the
     mouse cursor when starting a drag and drop operation.

 - Important Behavior Changes:
   * [QTBUG-54133] QQuickWidget now follows the same behavior as
     QQuickWindow when it comes to the persistent scenegraph setting
     controlled by QQuickWindow::setPersistentSceneGraph(). In earlier
     releases the setting was ignored and the scenegraph was torn down on
     every hide event. This is not the case anymore.
   * [QTBUG-54133] QQuickWidget now behaves identically to QOpenGLWidget
     when it comes to handling window changes when reparenting the widget
     into a hierarchy belonging to another top-level widget. Previously the
     OpenGL context always got destroyed and recreated in order to ensure
     texture resource sharing with the new top-level widget. From now on
     this is only true when when AA_ShareOpenGLContexts it not set.

 - LayoutMirroring:
   * [QTBUG-55517] Made it possible to attach LayoutMirroring to a Window.

 - MouseArea:
   * [QTBUG-40475][QTBUG-42194][QTBUG-33982][QTBUG-42578][QTBUG-52537]
     Hover state is now updated once per frame. This means that
     MouseArea::containsMouse property will now be correct even if the
     mouse is not moving, but items move under the cursor. Likewise the
     mouse position properties and positionChanged signal will act as if
     the mouse had moved.

 - QQuickItem:
   * [QTBUG-31861] Fixed issue with mouse button events being sent even
     when they were disabled by setAcceptedMouseButtons.

 - QQuickWindow:
   * QQuickWindow::sendEvent() is deprecated. Use
     QCoreApplication::sendEvent() directly instead.

 - ShaderEffect:
   * Add new mesh type BorderImageMesh. BorderImageMesh provides an
     optimized way to use BorderImage-type images with ShaderEffect.

 - Text:
   * [QTBUG-52389] Fixed clipping of glyphs that extend beyond font's em
     square.
   * [QTBUG-54723] Fixed a performance regression when rendering a rich
     text item with scaled images.
   * [QTBUG-43133] Fixed placement of flowing text objects in the start of
     a right-to-left block.



QML Elements
------------

 - Added a LoggingCategory type and added support for it to the console
   object

 - Binding:
   * Add delayed property to Binding as a way to avoid potentially expensive
     or unexpected intermediate values.

  - Text, TextEdit, TextInput:
   * Added "hintingPreference" property

 - Platform Specific Changes:
   * [Windows][QTBUG-45321] Worked around an issue with fonts that have corrupt
     cmap tables.

QtTest
------

 - TestCase:
   * [QTBUG-19708] Added tryVerify() function to allow verification of
     asynchronous conditions that can't be tested using tryCompare().
