blob: 1b2d3c5edd4e22b03455b1c521f1b6cac2077ece [file] [log] [blame] [edit]
Qt 5.15 introduces many new features and improvements as well as bugfixes
over the 5.14.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.15 series is binary compatible with the 5.14.x series.
Applications compiled for 5.14 will continue to run with 5.15.
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.
****************************************************************************
* Important Behavior Changes *
****************************************************************************
- [QTBUG-74137] CMake: Added a Qt6 forward compatible CMake API. Using this,
you can define projects that work with either Qt5 or Qt6, without further
changes.
- [QTBUG-79331] If you register the same revision of the same type multiple
times, the last registration is the one QML will use. This allows you to
override qmlRegisterSingleton*() calls, for example in order to register a
singleton instance for a type tagged with QML_SINGLETON. Previously, the
first registration would take effect.
- [QTBUG-79868] Using instanceof to check whether an instance has the type of
QObject or one of its derived classes used to raise a TypeError, if the
instance was not derived from QObject. Now, it instead returns false, which
is more in line with the ECMAScript semantic.
- The QML ObjectModel type had an undocumented "feature" which made it sort
items in list views into sections according to context properties of the QML
context the created objects belong to. Instead of context properties, object
properties are used now.
- [QTBUG-73669] Using the Qt Quick Compiler would exclude the original .qml
files from the resource system. This made it impossible to change the Qt
library binary later as the program binary was tied the to the exact Qt
version. In addition sometimes unrelated files (QTBUG-73669) were removed.
For the latter scenario, retain and skip options were added for the Qt
Quick Compiler. In Qt 5.15 the Qt Quick Compiler does not remove the input
files anymore. All files are retained and the compiler merely adds the
more efficient binary representation to the application.
****************************************************************************
* Deprecation Notice *
****************************************************************************
- The qmlmin tool is deprecated and not needed anymore. The built-in caching of
qml files addresses the needs and unfortunately the tool does not work with
more advanced concepts such as required properties or the ES 7 yield
statement. It will be removed in Qt 6.
- qmlRegisterExtendedType() without URI or version, is deprecated. You should
state the module the type belongs to, by supplying a URI and version.
- qmlRegisterInterface(const char *typeName) without URI or version, is
deprecated. You should state the module the type belongs to, but supplying a
URI and version. Conversely, the typeName is redundant as the type itself
is already supplied as template parameter. None of the other registration
functions allow overriding the name for the metatype registration.
- QQmlIncubationController::incubateWhile(volatile bool *flag, int msecs) is
deprecated. The volatile parameter is used as a poor man's atomic bool, with
all the well known downsides of such a practice. A replacement method
taking an actual atomic is provided.
- In QML Connections elements, the handlers should be defined as plain
JavaScript functions, not as "onPropertyChanged properties".
- You can currently access local files from QML via XMLHttpRequest using
"file://..." URLs. This will not be allowed by default anymore in Qt6. If
you actually need this behavior, you can set the environment variables
QML_XHR_ALLOW_FILE_READ and/or QML_XHR_ALLOW_FILE_WRITE to 1. You can also
set them to 0 when using Qt 5.15 to prevent local file access.
- [QTBUG-78596] The class QSGEngine is now deprecated.
****************************************************************************
* QtQml *
****************************************************************************
- QML allows a new attribute "required" to be attached to properties. Such
properties have to be set when instantiating a component. The various models
and views use this as the preferred way of communicating model data to
delegates. The old way of passing model data via context properties should
be avoided in new code.
- The qmllint tool has been extended to check for patterns considered to be
potentially problematic in Qt6, and suggest better solutions. Pass the -U
command line option to enable the checks.
- The new qmlformat tool can be used to pretty-print a QML file according to
the recommended code style.
- QML supports type assertions similar to typescript. So far this is only used
to make the intended type of an expression known to qmllint. At run time,
type assertions are ignored.
- C++ types can and should be registered to QML at compile time now. For this
purpose there are a number of macros available in qqml.h that can be added
to a class declaration. A new tool, qmltyperegistrar, will evaluate them and
generate the actual registrations. You should not need to call any
qmlRegister* function manually anymore in new code.
- New classes QQmlEngineExtensionInterface and QQmlEngineExtensionPlugin are
available and should be used in place of QQmlExtensionInterface and
QQmlExtensionPlugin. The new classes do not offer a virtual registerTypes()
method as types should be registered at compile time.
- [QTBUG-81631] Qt.formatDateTime, Qt.formatDate and Qt.formatTime now support
formatting according to a locale and an optional locale format type. If
locale dependent formatting is desired, this method should be used instead
of the locale-related DateFormat enum members.
- [QTBUG-77926] Nullish coalescing is now implemented as specified in
https://github.com/tc39/proposal-nullish-coalescing.
- It is now possible to declare new QML components in a QML file via the
component keyword. They can be used just as if they were declared in another
file, with the only difference that the type name needs to be prefixed with
the name of the containing type outside of the file were the inline
component has been declared.
- The Qt.uiLanguage and QJSEngine::uiLanguage properties were added. They can
be used to dynamically change the translation language from both QML and C++.
QQmlApplicationEngine does this automatically. When using other engines, you
need to listen for changes of QJSEngine::uiLanguage and load the respective
translator in response.
- [QTBUG-82743] Assigning to a QSet property from JS works again.
- [QTBUG-74087] There is now an option to disable the (necessarily)
conservative stack size checks when parsing and executing JavaScript. If the
environment variable QV4_CRASH_ON_STACKOVERFLOW is set, JavaScript stack
overflows crash the program the same way C++ stack overflows do. On the flip
side, more stack space is made available that way.
- [QTBUG-81714] You can add annotations, prefixed by "@" to QML elements now,
similar to Java type annotations. These annotations have to be written in QML
and are ignored by the QML interpreter. Tools processing QML can evaluate
them.
- [QTBUG-82843] Fixed a crash caused by creating QQmlValueTypeWrapper from
an invalid Q_GADGET type.
- [QTBUG-82150] QML Debugger now shows correct values for color objects.
- [QTBUG-81970] QQmlCustomParser now resolves import namespaces.
- [QTBUG-81678] Fixed qml loading problems caused by cycles.
- [QTBUG-81825] Array.includes now works with value types such as point.
- [QTBUG-79263] QQmlListProperty now has replace and removeLast functions.
- [QTBUG-81123] Fixed a crash in QQmlListProperty if a contained object is deleted.
- [QTBUG-58858] The path for storing QML cache files can now be customized.
- [QTBUG-80030] Implemented TypedArray.from()
- [QTBUG-80413] WorkerScript now has a ready property.
- [QTBUG-75110] Locale NumberOptions are now exposed to QML.
- [QTBUG-41087] Primitive self-references in composite types are now supported.
- [QTBUG-76074] Custom QML types can now be freed when unloading plugins.
- [QTBUG-73669] Fixed link errors when enabling CONFIG+=qtquickcompiler
on non-QML projects.
- [QTBUG-60908] Removed an unnecessary assert when setting a binding to alias.
- qml: The QML Runtime tool --selector option now allows defining a custom
QQmlFileSelector.
****************************************************************************
* QtQuick *
****************************************************************************
- Animations:
* [QTBUG-48193] Fixed signal emission order for zero-duration animations.
- AnimatedSprite:
* [QTBUG-59090] Added finishBehavior to allow a sprite to finish on the
last frame.
- Behavior:
* [QTBUG-70964] Behavior now has a targetProperty property to allow custom
logic based on the target property's object or name.
- Event handlers:
* [QTBUG-68073] Pointer Handlers now have a cursorShape property to set the
cursor when the handler is active and the mouse or a tablet stylus is hovering,
and restore to the previous cursor when the pointing device leaves.
* [QTBUG-79660] QTabletEvents are now delivered to pointer handlers.
For example PointHandler { acceptedPointerTypes: PointerDevice.Pen }
is one way of receiving stroke information for drawing via Canvas or Shapes,
and HoverHandler can use the new cursorShape property to show when a
stylus is in use.
* [QTBUG-68075] Pointer Handlers now have a dragThreshold property to
define the distance at which DragHandler will activate and TapHandler
will deactiveate, for example.
- FolderListModel:
* [QTBUG-82298] The fileUrl property was added to replace the fileURL
property, which is now deprecated.
- Image:
* Image now has a sourceClipRect property to render a clipped image from a
region of the sourceSize.
* [QTBUG-80616] Image now has a colorSpace property.
- Item:
* Item.mapToItem() and mapFromItem() now work with QPointF and QRectF types
as well as with raw numbers.
* Item.mapToGlobal() and mapFromGlobal() now work with QPointF as well as
with raw numeric coordinates.
- Item Views:
* [QTBUG-81580] DelegateChooser now supports using a property name as
roleValue when an array of QObject instances is used as the model for a
* [QTBUG-74046] ListView no longer allows the user to press on an Overlay or
PullBack header or footer and start scrolling, but only on the content
delegates.
* [QTBUG-80507] ListView now has support for reusing delegate items. This can
be switched on by setting the reuseItems property of ListView to true.
- MouseArea:
* [QTBUG-74987] MouseArea no longer gets stuck in pressed state if it
is set invisible on press.
- MultiPointTouchArea:
* [QTBUG-81944] The TouchPoint.x and y properties are updated together
before the change signals are emitted.
- Particles:
* [QTBUG-76827] QQuickItemParticle::give() is now implemented.
- RHI / scene graph:
* [QTBUG-82927] QSGRenderNode is now usable in Quick3D.
* [QTBUG-78570] Added API to get the platform specific texture handle.
* [QTBUG-80690] Fixed invalid core profile shader code.
* [QTBUG-80498] We now avoid unnecessary rendering of an extra frame with QSG_RHI=1
* [QTBUG-80365] Initialization failure now results in a sensible error dialog
rather than an infinite loop.
* [QTBUG-82988] QSGSimpleMaterial and QSGSimpleMaterialShader are now
deprecated.
- Shapes:
* Added PathText path element which can be used together with Qt Quick Shapes
to get text rendering that does not cache glyphs in a texture, but
triangulates the outlines of the glyphs instead.
- Text:
* [QTBUG-78277] Added new API that exposes implicitWidth, and isLast on the
QQuickTextLine for use in the lineLaidOut signal. This allows the user to
layout other items relative to the lines of text.
* [QTBUG-80759] Reduced redundant renderering of glyphs, thus fixing incorrect
rendering of superscripts.
- TextInput:
* [QTBUG-76320] Inputmask X character now requires non-blank input.
- QQuickItem:
* [QTBUG-68176] ParentChange now avoids roundoff error when restoring the old position.
- QQuickWidget:
* [QTBUG-78323] When QQuickWidget is resized, an in-scene dialog or other
content that is rendered into an offscreen window is now resized correctly.
- QQuickWindow:
* [QTBUG-78141] LanguageChange events are now delivered to items to enable
them to update translations.
* [QTBUG-79268] createTextureFromId() is now deprecated.