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

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

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

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.

****************************************************************************
*                                  QtQml                                   *
****************************************************************************

 - On Android, QML plugins are loaded directly from the APK libs dir and
   use qrc:/android_rcc_bundle/qml to search for QML files.

 - [QTBUG-38913] Added ability to import static qml plugins with CMake
   builds using the new QT5_IMPORT_QML_PLUGINS function.

 - The NaN obtained by Math.pow(+/-1, +/-infinity) and
   (+/-1)**(+/-infinity) is now quiet rather than signalling.

 - It is now possible to specify types for method parameters and their
   return value in QML (basic and object types), using TypeScript-like
   syntax with a colon separator. The syntax for QML declared signals
   supports the same style.

 - QML Binding elements now support restoring previous values
   of the bound property when the binding is disabled. This will be the
   default behavior in Qt 6.0. Reliance on the old behavior of only
   restoring binding, not literal values will results in a warning beginning
   with Qt 5.15.

 - The regular expression engine was updated, causing somewhat better
   compliance with the ECMAScript specification.

 - [QTBUG-74190] Fixed a crash due to combination of aggressive GC with logging.
   Also, the qt.qml.gc.* logging rules don't produce false warnings about huge
   amounts of lost memory anymore.

 - [QTBUG-75007] Usage of singletons from QML engines in different threads
   does not cause race conditions anymore.

 - The JIT compiler is now a configurable feature. You can pass
   -no-feature-qml-jit to configure in order to skip it, or -feature-qml-jit
   in order to build it for platforms where it's disabled by default, e.g.
   iOS and tvOS.

 - [QTBUG-49080][QTBUG-78955] You can now interrupt a QJSEngine running a
   JavaScript program by setting its isInterrupted flag from a different thread.

 - qmlscene will not run into an infinite loop anymore if you pass a QML
   document without any executable code.

 - You can configure the maximum sizes of the JavaScript and the garbage
   collector stacks now, using the QV4_JS_MAX_STACK_SIZE and
   QV4_GC_MAX_STACK_SIZE environment variables.

 - [QTBUG-76346] Context properties carrying QObjects are automatically
   reset when the objects are destroyed now.

 - [QTBUG-40487] You can now use Component properties in Binding elements.

 - [QTBUG-76932] Changing sourceComponent in a Loader does not delete
   C++-owned objects anymore.

 - qmllint can now check for unqualified access to to properties of the
   root object and undeclared signal parameters.

 - [QTBUG-77096] You can use generator functions in QML components now.

 - You can and should use plain JavaScript functions as signal handlers in
   Connections elements now. This avoids the overhead of the custom parser
   that otherwise needs to run for each Connections element, and forces you
   to specify the signal parameters you are going to use.

 - You can pass a set of initial properties to QQmlApplicationEngine,
   QQmlComponent, and QQuickView now. Those will be used as defaults in any
   subsequent instantiation of top-level QML objects.

 - Anonymous types should be registered via the new qmlRegisterAnonymousType()
   function now, rather than via the parameter-less qmlRegisterType(). That
   is, you should specify a URI and a major version for your type.

 - [QTBUG-74087] The QML parser can parse more complex JavaScript code now
   without overflowing the stack. This allows for deeper list nesting in QML.

 - [QTBUG-76021] instanceof does not confuse derived types with no additional
   properties with their parent types anymore.

 - [QTBUG-78943] Binding elements will not randomly convert strings to other
   types anymore.

 - [QTBUG-48150] You can use aliases of "depth" 2 now. That is, something like
   "property alias topMargin: myItem.anchors.topMargin" works now.

 - [QTBUG-78325] The "color" type has a property "valid" now.

 - [QTBUG-78044] The qmlprofiler command line tool's interactive mode is more
   stable now.

 - [QTBUG-48809] Fixed a warning about non-relative paths in qmldir files.
   We now permit the use of resource urls in qmldir files to allow a plugin
   to include its .qml files in resources, optionally compiled ahead of time.

 - [QTBUG-79614] QQmlProperty now handles reads of QQmlPropertyMap correctly.

 - [QTBUG-79443] In the debugger, we now avoid loading cache files, so that
   JavaScript breakpoints keep working after the first run.

 - [QTBUG-55259] qmlimportscanner now scans resources in qrc files.

 - [QTBUG-78486] Calling a function with 14 arguments no longer crashes.

 - [QTBUG-78721] Fixed handling of properties with interface type in bindings.

 - [QTBUG-71078] Increased the QML loader thread's stack size to avoid problems
   parsing deeply nested QML/JS files on some platforms.

 - [QTBUG-72442] Fixed float value binding to an integer (including NaN values).

 - [QTBUG-78566] A warning is emitted when overriding a declared Binding from
   elsewhere.  The Binding stays active and updates the target property again
   on the next change.

 - [QTBUG-77027] Fixed nullptr handling in Binding.

 - [QTBUG-78859] Fixed a property cache memory leak.

 - [QTBUG-78865] Fixed a memory leak due to declaring unused scripts in
   qmldir files.

 - [QTBUG-78706] Fixed inconsistent daylight saving time behavior by
   converting QTime to V4 Date on a date with no DST in force.

 - [QTBUG-78098] QQmlTypeLoader now prevents more trivial cycles.

 - [QTBUG-77751] Fixed the translation context in Qt.include()d JS files.

 - [QTBUG-76514] Avoid duplicate singleton creation.

 - [QTBUG-77237] Using an enum in a switch statement performs much better.

 - [QTBUG-76866] Fixed a crash due to inconsistency between
   isValueType() and valueType()'s return value.

 - [QTBUG-77954] Semicolon is always allowed after property declaration.

 - [QTBUG-73512] Fixed a bug with use of resource paths in
   QQmlEngine::setImportPathList().

 - [QTBUG-76303] When converting from number to string, we now keep
   double precision if the number of significant digits exceeds six, so that
   precision isn't lost if the string is converted back to a number.

 - [QTBUG-76838] Binding.when is stored as boolean to support primitive values.

 - [QTBUG-76033] Fixed several bugs in frozen(), sealed(), nonExtensible()
   and propertiesFrozen().

 - [QTBUG-75983] Fixed a crash in XMLHttpRequest::open().

 - [QTBUG-49975] Warn rather than crashing in case of invalid top-level
   parallel states.

 - [QTBUG-73786] We now filter out duplicate entries in Object.keys().

 - [QTBUG-73491] Added QQmlInstanceModel::variantValue() to enable ComboBox.valueRole.

 - [QTBUG-74348] Fixed memory leaks due to value type provider deletion order.

 - There are two new functions to register singleton types and help you to
   get rid of context properties:
   * qmlRegisterSingletonType() has an overload taking a std::function now,
     instead of a bare function pointer. Therefore, you can capture context
     now when creating singletons.
   * qmlRegisterSingletonInstance() directly passes a single instance of the
     type to be used in all QML engines. No QML engine assumes ownership of
     such a singleton and any concurrent access has to be handled by the
     object itself.

 - qml Runtime tool:
   * [QTBUG-53557] The QML Runtime tool now accepts command-line arguments
     in double-dash GNU style as well as the old single-dash style.
   * [QTBUG-53557] The QML Runtime tool now has default behavior matching
     qmlscene when the root QML object is an Item: it will be wrapped in a
     Window which will resize the Item when the Window is resized. But you
     can alternatively use the --config resizeToItem option, resulting in
     the same behavior as qmlscene --resizeToRoot: resizing the root Item
     programmatically causes the wrapping Window to be resized. Behavior
     can still be customized in other ways using the --config option with
     an external QML configuration file.
   * The QML Runtime tool --quiet option now disables categorized logging
     in addition to qDebug, qInfo, qWarning and qFatal, except for some
     early QPA-level categorized logging that occurs during application
     construction. You can still override specific categories by setting
     QT_LOGGING_CONF or QT_LOGGING_RULES.
   * [QTBUG-78828] Fixed a crash at exit when the qmldebugger channel is
     connected.

 - qmlplugindump:
   * [QTBUG-78745] If given a "--strict" argument, qmlplugindump will check
     the URI as exact match; whereas by default it will ignore the given
     major version, as before.
   * [QTBUG-78744] qmlplugindump no longer ignores base classes of QML files
     registered as components.

 - Important Behavior Changes:
   * QRegularExpression is now supported the same way QRegExp was in QML.
     QJSValue::toVariant() creates a QRegularExpression variant rather than
     a QRegExp one from a JavaScript regular expression now.
   * The accidentally exported function qmlRegisterBaseTypes() was removed.
   * QJSEngine::toScriptValue will now return correct JavaScript objects in
     more cases, for example, for gadget types like QPointF.
   * QJSEngine::toScriptValue now uses the same behavior as the rest of the
     engine when building JavaScript values, which will cause the types of
     some returned JavaScript objects to change. For instance, string lists
     are now returned as sequence objects, not array objects, and QChar now
     constructs a JavaScript string.
   * [QTBUG-75176] Attached properties are internally not identified by
     integer IDs anymore, but rather by the functions used to produce them.
     Using the integer indexes is a bad idea because the same metatype can
     be registered as several different QML types and the integer IDs refer
     to the QML types. Therefore, qmlAttachedPropertiesObjectById() and the
     overload of qmlAttachedPropertiesObject() taking an integer ID are
     deprecated.
   * We expect QMetaObject revisions and import minor versions to be equal.
     That is, when registering a revision X of a metaobject as QML type for
     a version Y.Z of your module, X should equal Z. This is not enforced,
     yet, but future versions of Qt will build on this assumption.

****************************************************************************
*                                 QtQuick                                  *
****************************************************************************

 - Qt Quick is now able to render via Vulkan, Metal, and Direct 3D 11. The
   new rendering path is currently a preview feature and has to be opted-in
   to explicitly.

 - Drag and Drop:
   * [QTBUG-30305] When DropAreas intersect, the higher z-order item now
     steals the drop.
   * [QTBUG-72045] Fixed a crash when using an image provider url with Drag.

 - DelegateModel:
   * [QTBUG-63477] DelegateModel.delegate is now a notifying property,
     and an Item View with model: DelegateModel { } is now refilled when
     the delegate is changed.

 - Event Handlers:
   * Added WheelHandler, which handles mouse wheel rotation by modifying
     arbitrary Item properties.
   * [QTBUG-75661] Added DragHandler.snapMode which can be used to configure
     conditions under which the dragged item is snapped to the cursor.  The
     default mode is SnapAuto. The old behavior can be obtained through the
     SnapIfPressedOutsideTarget mode.

 - Image:
   * [QTBUG-77506] Image and BorderImage now have currentFrame and
     frameCount properties which can be used to step through the frames of
     multi-page image formats such as TIFF, WEBP and ICO (and PDF in the
     future).
   * [QTBUG-55027] Any URL interceptor is applied to the source binding.
   * [QTBUG-76527] ImageProvider is kept alive while in use.

 - FolderListModel:
   * update the values of some properties when setting new values to them

 - Layouts:
   * [QTBUG-67204] GridLayout now warns rather than asserting when an
     invalid row or column is specified.
   * [QTBUG-79359] GridLayout now emits appropriate signals for
     layoutDirection, columnSpacing, and rowSpacing changes.

 - ListModel:
   * [QTBUG-63569] We now emit a warning if an object with an undefined or
     null member is added.
   * [QTBUG-79083] JSON.stringify(model.get(i)) now works correctly when the
     row contains a nested list model.

 - Loader:
   * [QTBUG-79435] Loader now clears all initial properties when changing source.

 - MouseArea:
   * [QTBUG-75993] mouseX and mouseY will now be synchronized after dragging
     the target item.
   * [QTBUG-77983] The containsMouse property will not become true when an
     invisible mousearea become visible, if the enabled property is false or
     its parent item is not enabled.

 - MultiPointTouchArea:
   * [QTBUG-77142] When a stationary touchpoint contains some "interesting"
     property change (pressure or velocity, so far), it is delivered normally,
     and MultiPointTouchArea will react to that.

 - Particles:
   * [QTBUG-54673] Fixed image particle flickering due to dynamic creation
     of Emitter objects.

 - Path and Shapes:
   * Added Path.scale property to scale a path prior to rendering via
     Shape or to scale the movement in PathView.  The width and height
     can be different, to achieve anisotropic scaling.
   * Added PathPolyline, to render an array, list or vector of QPointF,
     or a single QPolygonF.
   * Added PathMultiLine, to render an array, list or vector of
     polylines or QPolygonF.
   * Exposed QQuickPath::pointAtPercent as invokable in QML.
   * [QTBUG-77332] Fixed incorrect colors when shapes change scene.

 - PathView:
   * [QTBUG-77173] When the mouse is pressed while PathView is already moving,
     PathView now grabs rather than allowing the delegate to handle it.  The
     position will then snap to the nearest delegate on release, as usual.
   * [QTBUG-77173] If the user drags quickly, pauses, and then releases,
     the calculated velocity is reduced according to a linear decay model
     up to 50ms (and zero after that), to prevent excessive movement when
     the user intended the pause to stop the movement.

 - TableView:
   * [QTBUG-79395] forceLayout() now rebuilds the table if the size of the
     model has changed, to avoid a crash.

 - Text:
   * Markdown (GitHub dialect by default) is now a supported format, when
     textFormat: Text.MarkdownText is declared.  All features such as
     hyperlinks, images, tables, lists, checklists, etc. are supported.

 - TextEdit:
   * Markdown (GitHub dialect by default) is now a supported format, when
     textFormat: TextEdit.MarkdownText is declared.  If it contains checkboxes,
     the user can click on them to toggle the states.
   * [QTBUG-14769][QTBUG-50482] The mouse cursor is now IBeamCursor by default,
     or PointingHandCursor when the mouse is hovering over a checkbox or a
     hyperlink.  However this can be overridden in C++.
   * [QTBUG-74745] Fixed overlapping text after line deletion.

 - TextInput:
   * [QTBUG-77814] Fixed text selection logic after insert() and remove().

 - [QTBUG-79573] Fixed application deadlock when an item is reparented
   to contentItem in a user-defined windowChanged handler, e.g. on exit.

 - [QTBUG-78304] A ShortCutOverride event is now sent even when receiving a
   non-spontaneous key press (e.g. from sendEvent()), so that Shortcut reacts.

 - [QTBUG-76749] Fixed a crash when using an animation while destroying an item.

****************************************************************************
*                            Qt Labs Animation                             *
****************************************************************************

 - Added the BoundaryRule QML type, a PropertyValueInterceptor that
   restricts the range of values a numeric property can have, applies
   "resistance" when the value is overshooting, and provides the ability to
   animate it back within range.  This is especially useful in combination
   with WheelHandler to limit its range of motion or adjustment.

****************************************************************************
*                            Qt Labs QML Models                            *
****************************************************************************

 - Added the TableModel QML type, a JavaScript-based model for the new
   TableView.
