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.