blob: 753082a43d5e5d8324064a1c0f67f2c72aef2c76 [file] [log] [blame] [edit]
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.