Qt 5.12 introduces many new features and improvements as well as bugfixes over the 5.11.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.12 series is binary compatible with the 5.11.x series. Applications compiled for 5.11 will continue to run with 5.12. 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-51710] Added TableView with a similar architecture as ListView (inheriting Flickable and using QQmlInstanceModel internally) but 2-dimensional. It works best with a QAbstractItemModel that defines multiple columns and rows (i.e. it's the QtQuick counterpart to QTableView) but can also present a single-column view of other model types. As an optimization, it maintains a pool of the delegate instances that are visible (plus a few extras); during scrolling, as delegates fall out of view, they are re-bound to show cells that have just come into view. - [QTBUG-26681] Added DelegateChooser, a new type of Component to choose different delegates in an Item View (e.g. TableView) depending on model roles. DelegateChoice instances specify the available choices. - Pointer Handlers and the Keys handler are now collectively called Input Handlers [QTBUG-66651], and are fully supported as part of Qt Quick 2.12 and forward. The Qt.labs.handlers import is now removed. - [QTBUG-68072] Added HoverHandler to detect the position of the hovering mouse or stylus pointer. - The JavaScript engine now supports ECMAScript 7. - ECMAScript modules can now be loaded directly with QJSEngine::importModule() and imported in .qml files when using the .mjs file extension. - Qt Quick applications can now be deployed via WebAssembly. - The new Qt.labs.wavefrontmesh import provides an experimental WavefrontMesh type which can read a Wavefront .obj file containing a 2D shape, and generate a 2D mesh for use with ShaderEffect. **************************************************************************** * Important Behavior Changes * **************************************************************************** - [QTBUG-7329][QTBUG-41977][QTBUG-69196] The automatic translation loading in qml, qmlscene and QQmlApplicationEngine now tries to load translations for all languages in QLocale::uiLanguages(). This might require shipping an empty translation for the source language. **************************************************************************** * QtQml * **************************************************************************** - LoggingCategory: * [QTBUG-67094] Added defaultLogLevel property. It is possible to define default log level that LoggingCategory is enabled for. - QJSEngine: * [QTBUG-39041] Added API to throw run-time errors. * Added function to import ECMASCript modules from the file system or the Qt resource system. * [QTBUG-71083] Fixed a stack overflow in the parser. * [QTBUG-70632] It's now OK to declare a class in a .mjs module. * [QTBUG-69475] Fixed quadratic behavior when allocating large objects. - QQmlEngine: * [QTBUG-56150] QML cache files are now always stored in the application's cache directory when being generated at run-time. If precompiled QML files exist at the source location, then they are loaded and no cache file is being generated. The application's uninstaller is responsible for cleaning up the cache during removal. * [QTBUG-39970] Added API to access singletons associated with a QQmlEngine. * [QTBUG-53111] The onStatusChanged signal from the incubator object that is returned from Component.incubateObject() is more reliable. * [QTBUG-70425] Fixed translation contexts for paths with drive letters on Windows * [QTBUG-68350] Fix QQmlEngine::retranslate() with ListElement objects that use translation functions such as qsTr. * [QTBUG-51581] Properties of the JS global object will now be looked up after local properties in the QML object. This can lead to runtime incompatibilities if your qml file is named the same as a property of the global object (e.g. Date.qml). * [QTBUG-71184] Enums in subclasses can overwrite inherited enums. * Added option to disable unscoped registration of enum classes. * [QTBUG-69884] Fixed the visibility of the Connections.enabled property to appear only when importing QtQml/QtQuick >= 2.3, which was introduced with Qt 5.7. Otherwise it would accidentally shadow an "enabled" context property, for example. - QtTest: * We now call cleanupTestCase() on the object given to QUICK_TEST_MAIN before starting destruction. * Add test init function to be called when application object is available. * [QTBUG-47111] ignoreWarning now supports ignoring regular expressions as well as strings. **************************************************************************** * QtQuick * **************************************************************************** - Input Handlers: * The QQuickEventPoint::GrabState enum is renamed to GrabTransition. * [QTBUG-68941] PinchHandler.scale is now persistent between gestures, i.e. it's the same as the target Item's scale property if there is a target. Added an activeScale property to provide the scaling value during a single pinch gesture (activeScale will be 1.0 whenever the PinchHandler is not active, whereas the scale property was unintuitively behaving that way in previous versions). This change is intended to increase flexibility when the scaling is not done by setting an Item's scale property, but by other means. * [QTBUG-68077] The pointDistanceThreshold property is renamed to margin, and now allows activating any pointer handler within a margin around the parent Item. This makes it easier to pinch a PinchHandler on a small item, makes it easier to comply with Fitts's Law when a button with a TapHandler is near a screen edge, etc. If margin is set, it overrides the parent Item's containmentMask, if any. * [QTBUG-68106] DragHandler is now a multi-point handler: if declared with minimumPointCount: 2 for example, it will require two fingers to initiate the drag. This is especially useful with target: null to handle 2-finger-drag for some alternate purpose. * DragHandler and PinchHandler (and other future MultiPointHandler subclasses) now have a centroid property, since that is usually the focal point of the action or gesture being performed. * [QTBUG-68101] QQuickHandlerPoint (i.e. a handler's centroid or other exposed point property) includes a modifiers property so that you can see which keyboard modifiers are being held. * [QTBUG-61749][QTBUG-64847] The TapHandler.tapped signal includes an eventPoint parameter so that you can see which button was tapped. * [QTBUG-68074] The PointerHandler.grabChanged signal includes a stateChange parameter so that you can see whether the grab was acquired or lost. * [QTBUG-70075] PinchHandler.centroid now has correct property values on a macOS trackpad. * [QTBUG-70292] The PinchHandler.pinchOrigin property is removed. * [QTBUG-66360] PointHandler handles presses and releases of multiple mouse buttons correctly. * [QTBUG-69607] DragHandler doesn't react to mouse wheel events. * [QTBUG-65012] TapHandler doesn't emit longPressed if the point is dragged. - AnimatedSprite: * Added finished() signal to AnimatedSprite as a convenient way to react to an animation finishing. - Animation: * Added finished() signal to Animation as a convenient way to react to an animation finishing naturally. - Canvas: * [QTBUG-31807] Added set/get lineDash and lineDashOffset to Context2D to allow non solid lines to be drawn. - Image: * [QTBUG-66116] Fixed a memory leak in Image in an invisible window. - Item: * There's now a warning whenever an Item has multiple states with the same name. * [QTBUG-68271] Fixed an infinite loop in tab focus chain when visiting invisible items. - MultiPointTouchArea: * [QTBUG-70258] Avoid emitting gestureStarted until the drag threshold is actually exceeded. In a QML onGestureStarted callback, gesture.touchPoints[0].startX and startY now have correct values. - Rectangle: * Added support for horizontal gradients. - Repeater: * [QTBUG-54752] If the model is an integer, it must be less than 100,000,000 to avoid running out of memory. - Shape: * [QTBUG-66843][QTBUG-66457] The Shape item will not try to use GL_NV_path_rendering by default, unless explicitly requested. Thus the default value of enableVendorExtensions is now false. - Flickable and Item Views: * [QTBUG-62902] Added a synchronousDrag property that makes the content jump to the position it would have had if there was no drag threshold, as soon as dragging begins. * [QTBUG-70742][QTBUG-70941] We now cancel flicking when the model is reset, and when programmatically positioning the content, to avoid wasting time instantiating irrelevant delegates. * [QTBUG-49224] Fixed a crash by avoiding movement during layout. * [QTBUG-67051] Improved interaction between snapping and sections. * [QTBUG-69863] GridView LeftMargin and RightMargin are taken into account when calculating positions and columns. * [QTBUG-69059][QTBUG-61144] Fixed the regression that when a mouse-handling Item or Control is used in a Flickable with a pressDelay, the delegate item did not receive touchscreen taps (in the form of mouse clicks). This fix was in 5.9.4 but somehow did not get merged forward into 5.10 and 5.11. * [QTBUG-59620] PathView calls setKeepMouseGrab() so that a parent Flickable will not steal the grab from it. - Text: * [QTBUG-53279] Fixed an issue where updating text inside a layout would not cause it to correctly adapt to its new width. * [QTBUG-69356] Support pregenerated loading distance field glyph caches to decrease startup time for applications with large amounts of text. - QQuickWindow: * [QTBUG-52748] You can now disable touch->mouse event synthesis in QtQuick by calling qGuiApp.setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, false). This will simplify and speed up event delivery, and it will also prevent any and all interaction with mouse-only items like MouseArea and Flickable on a touchscreen. * [QTBUG-70998] Touch->mouse synthesis is canceled when the touch is ungrabbed, rather than when a new touchpoint is pressed. Thus if you are using one finger to interact with a legacy mouse-handling Item, and you press a second finger, the first interaction doesn't necessarily end right away, unless some other handler steals the grab from the first Item. * [QTBUG-70898] Emit a warning rather than crashing if user code calls sendEvent() while a pointer event is being delivered. Nested event delivery is not possible because of the way that the QQuickPointerEvent instances are reused for subsequent events. - FolderListModel: * [QTBUG-48757][QTBUG-70212] Added a sortCaseSensitive property that can be set to false to sort filenames in a case-insensitive manner. - Software renderer: * [QTBUG-70740] Fixed a memory leak. * Fixed QSGImageNode with QSGLayer. * [QTBUG-68085] Italic text is no longer cut improperly due to line wrap. * [QTBUG-70422] If Qt is built without support for threads, single-threaded rendering is used. (This includes the WebAssembly use case.) - Platform Specific Changes: * [QTBUG-63026][QTBUG-65160] Now that macOS provides a proper ScrollMomentum phase in QWheelEvent, Flickable responds more precisely when simulated momentum on the trackpad comes to an end, rather than using a timer to wait for it to end. This improves robustness in some cases where scrolling was jumpy in older versions.