Difference between revisions of "New Features in Qt 6.2"

From Qt Wiki
Jump to: navigation, search
(Added Android new features and changes.)
Line 155: Line 155:
  
 
==Platform Changes==
 
==Platform Changes==
 +
 +
===Desktop===
  
 
===Mobile===
 
===Mobile===
Line 160: Line 162:
 
====Android====
 
====Android====
  
* Some of the calls under (e.g. sdkVersion(), context(), etc.) QtAndroid namespace, previously under QtAndroidExtras, is now under QNativeInterface::QAndroidApplication ([https://bugreports.qt.io/browse/QTBUG-90496 QTBUG-90496]).
+
*Some of the calls under (e.g. sdkVersion(), context(), etc.) QtAndroid namespace, previously under QtAndroidExtras, is now under QNativeInterface::QAndroidApplication ([https://bugreports.qt.io/browse/QTBUG-90496 QTBUG-90496]).
* Permissions can be requested via a new API ([https://bugreports.qt.io/browse/QTBUG-90498 QTBUG-90498]).
+
*Permissions can be requested via a new API ([https://bugreports.qt.io/browse/QTBUG-90498 QTBUG-90498]).
* The remaining QtAndroidExtras APIs are left as private APIs under qtbase until clear cross-platform alternatives are in place (e.g. Intents, Services, etc.) ([https://bugreports.qt.io/browse/QTBUG-93689 QTBUG-93689]).
+
*The remaining QtAndroidExtras APIs are left as private APIs under qtbase until clear cross-platform alternatives are in place (e.g. Intents, Services, etc.) ([https://bugreports.qt.io/browse/QTBUG-93689 QTBUG-93689]).
* Removed Ministro dead code, since it's been unsupported by Android ([https://bugreports.qt.io/browse/QTBUG-85201 QTBUG-85201]).
+
*Removed Ministro dead code, since it's been unsupported by Android ([https://bugreports.qt.io/browse/QTBUG-85201 QTBUG-85201]).
* Simplified the AndroidManifest.xml file to only contain relevant tags for the user, removing the clutter that the user don't need to maintain ([https://codereview.qt-project.org/c/qt/qtbase/+/356221 patch link]).
+
*Simplified the AndroidManifest.xml file to only contain relevant tags for the user, removing the clutter that the user don't need to maintain ([https://codereview.qt-project.org/c/qt/qtbase/+/356221 patch link]).
* QCDebug() and friends use the category as a tag in Android logcat ([https://bugreports.qt.io/browse/QTBUG-94708 QTBUG-94708]).
+
*QCDebug() and friends use the category as a tag in Android logcat ([https://bugreports.qt.io/browse/QTBUG-94708 QTBUG-94708]).
* Update Android Gradle plugin to 4.1.3 ([https://codereview.qt-project.org/c/qt/qtbase/+/342035 patch link]).
+
*Update Android Gradle plugin to 4.1.3 ([https://codereview.qt-project.org/c/qt/qtbase/+/342035 patch link]).
  
 
===Embedded===
 
===Embedded===
  
====Boot to Qt====
+
====Embedded Linux / Boot to Qt====
  
 
====QNX====
 
====QNX====
 +
 +
==== INTEGRITY ====
  
 
==Changes in Installer==
 
==Changes in Installer==

Revision as of 09:47, 5 July 2021

NOTE: DRAFT / WORK IN PROGRESS

New & Restored Modules

New modules:

  • Added QtQuick.Dialogs module. This provides native dialogs with Qt Quick fallbacks for platforms where Qt does not have native dialogs. Currently FileDialog and FontDialog are available, with more to be added in future versions.

The following additional modules are available, that were not present in 6.1:

  • Qt Bluetooth
  • Qt Multimedia
  • Qt NFC
  • Qt Positioning
    • The Qt Positioning module has been ported to Qt 6 and the CMake build system.
    • Many of the properties are now bindable.
    • Rename QGeoPolygon::path() to QGeoPolygon::perimeter.
    • QGeoLocation now uses QGeoShape instead of QGeoRectangle as a bounding area.
    • The error() signal in multiple positioning classes is renamed to errorOccurred().
    • QGeoPositionInfoSourceFactoryV2 is removed, and QGeoPositionInfoSourceFactory now supports custom parameters for the created objects.
    • NMEA support is redesigned. The serialnmea plugin is renamed to nmea and now supports reading the input stream from a TCP socket or a raw file. The nmeaSource property is removed.
  • Qt RemoteObjects
    • The Qt RemoteObjects module has been ported to Qt 6 and the CMake build system.
  • Qt Sensors
  • Qt SerialBus
    • The Qt SerialBus module has been ported to Qt 6 and the CMake build system.
    • The QCanBusFactory has been removed and QCanBusFactoryV2 was renamed to QCanBusFactory.
    • QModbusRtuSerialSlave and QModbusRtuSerialMaster have been renamed to QModbusRtuSerialServer and QModbusRtuSerialClient and the new names shall be used in new code.
  • Qt Serialport
  • Qt WebChannel
    • The Qt WebChannel module has been ported to Qt 6 and the CMake build system.
    • QWebChannel properties are now bindable.
    • The property update interval of QWebChannel can be configured. It still defaults to 50ms.
    • QWebChannel supports property updates for BINDABLE properties. However, the client side does not provide a generic callback mechanism if the host property does not have a NOTIFY signal.
    • Signals from objects living in a different thread are now handled correctly (QTBUG-51366)
  • Qt WebEngine
    • The Qt WebEngine module has been ported to Qt 6 and the CMake build system.
    • The Qt WebEngine submodule for Qt Quick has been renamed from QtWebEngine to QtWebEngineQuick
    • Several classes have been moved from QtWebEngineWidgets to QtWebEngineCore including QWebEnginePage
    • Some functionality previously only accessible by deriving from QWebEnginePage can now be accessed using synchronous signals.
  • Qt WebSockets
    • The Qt WebSockets module has been ported to Qt 6 and the CMake build system.
  • Qt WebView
    • The Qt WebView module has been ported to Qt 6 and the CMake build system.

New Features (within existing modules)

QtCore

  • Added
    • QByteArrayView::compare().
    • QFlags::test(Any)Flag(s) methods.
    • QHashSeed, to control hashing (seeds are now size_t); this shall replace qGlobalQHashSeed and qSetGlobalQHashSeed.
    • PRIxQTDATATYPE macros to facilitate printf()-style formatting without casts or warnings.
    • A permissions API to QCoreApplication (for things like access to camera, file system, network on devices).
  • Many properties are now bindable.
  • Grapheme clusters can now handle emojis.
  • UNC paths and network shares on Windows are now handled consistently.
  • QCalendar now supports construction from the ID of a custom backend.
  • QChar, QPoint and QPointF are now primitive, rather than merely relocatable.
  • QCoreApplication's exit() is now, like quit(), a slot (as the documentation has long claimed); same for QEventLoop and QThread.
  • QDateTime now takes account of time-zones throughout time_t's range (in so far as the platform supplies such information), rather than artificially limiting the range to 1970–2037.
  • QFlags has fleshed out its value-type behavior (and is now used more systematically).
  • QList (hence also QVector) is now, when building for C++20, a contiguous_iterator satisfying contiguous_range.
  • QLocalSocket::waitFor*() now support duplex operation on Windows (like they already did on Unix).
  • QLockFile's methods now have std::chrono overloads (and avoid needless conversion between UTC and local time).
  • QString can now be built from char8_t (when available).
  • QThreadPool's thread priority is now configurable; and the threads share the pool's name, if it has one.

… and there's been lots of tidy-up, bug-fixing and improvements to documentation.

QtGui

  • Floating point image formats added to QImage for both 16-bit and 32-bit floats.
  • Converting RGB images to, or painting RGB colors onto, grayscale images is now gamma corrected and produces in the luminance values of the input color space.

QtQuick

  • Added support for selecting cells in a TableView by assigning it a ItemSelectionModel

QtQuickControls

  • New control added: SelectionRectangle. This control can be used to select cells in a TableView by using a styled selection rectangle.

QtWidgets

QtNetwork

  • QSslSocket
    • TLS backends, that were previously (Qt 6.1) converted into plugin-like classes, now moved out of QtNetwork and became real plugins.
    • Several TLS backends may co-exist at runtime, for example, OpenSSL and Schannel, or OpenSSL and SecureTransport.
  • QNetworkInformation
    • Introduced isBehindCaptivePortal, a new property that can be used to see if the user is connected to a network with a captive portal.

QtQml

  • Core language
    • Added support for optional chaining
    • Added as casts: those mostly help tooling, but can also be used to replace some usages of instance of (return (obj instanceof Item) ? obj.width : 42 vs (obj as Item)?.width ?? 42)
  • Public CMake API for QML modules (qt_add_qml_module)
    • takes care of generating qmldir and qmltypes
    • can automatically create plugin if plugin only registers types
    • built-in support for linting target
  • Tooling
    • qmllint
      • Added support for granularly setting warning severity, from disabling them altogether, to making them informational only, to them leading to a non-zero exit code
      • Added settings file (.qmllint.ini) for configuring warning levels on a directory-by-directory basis. A default settings file can be generated using qmllint --write-defaults
      • Warnings can now be disabled in blocks via comments (//qmllint enable/disable <warning-type1> <warning-type2...>)
      • Greatly improved performance when linting files, especially when linting multiple files with lots of imports
      • Added JSON output for use in tooling
    • qmlformat
      • qmlformat now utilizes our new qmldom library and should generally produce better output because of it

QtQuick3D

  • Instanced Rendering, an optimized way of drawing multiple instances of the same objects with different transformations.
  • 3D Particles, an API for adding particle effects to 3D scenes. This includes a technology preview of model blend particles, intended to be finalized in 6.3.
  • Qt Quick Input events for 2D items in 3D (both in scene and in textures)
  • Additional API for ray based picking from arbitrary points in the scene
  • RuntimeLoader
    • Makes it possible to load glTF2 files at runtime
  • Parallax Occlusion Mapping: Enables the use of height maps without the cost of adding geometry
  • Depth Draw Mode on materials: Enables fine control over if and when depth rendering takes place for a material.

QtDataVisualization

  • Background rendering mode fixed.
  • RenderDirectToBackground_NoClear deprecated, as not clearing window is no longer an option in Qt 6.x.
  • Lots of minor bug fixes.

QtCharts

  • More marker shapes are available to pick from in QScatterSeries and QLegend.
  • Added Light marker feature to QXYSeries and QLegend. This is a lighter weight rendering of points.
  • Added ability to select points in a series via method calls to QXYSeries and QBarSet.
  • Added ability to set a color or use a custom light marker to be used for selected points in QXYSeries.
  • Added ability to set a color to be used for selected bars in QBarSet.
  • Added a feature to display the best fit line of QXYSeries through new methods added to QXYSeries.
  • Added ability to customize the look of individual points in a series to QXYSeries. The feature allows one to set points visibility, points label visibility and points size.
  • Added method “sizeBy” to QXYSeries that adjusts size of the points in the series according to passed values.
  • Added method “colorBy” to QXYSeries that adjusts color of the points in series according to passed values and gradient.
  • Added a new axis class QColorAxis to support colorBy feature, displaying a color scale.
  • Added ability to disable label truncation in axes.
  • Improved performance by caching recently used text bounds.
  • Added interactive support to QLegend via a setInteractive method. Once enabled, allows the legend to be detached on double-click, and once detached, dragged and resized on the chart. Legend can then be automatically attached to an edge of the chart by dragging it off of the edge.
  • Added attachedToChartChanged signal to QLegend.
  • Updated legend example.

Platform Changes

Desktop

Mobile

Android

  • Some of the calls under (e.g. sdkVersion(), context(), etc.) QtAndroid namespace, previously under QtAndroidExtras, is now under QNativeInterface::QAndroidApplication (QTBUG-90496).
  • Permissions can be requested via a new API (QTBUG-90498).
  • The remaining QtAndroidExtras APIs are left as private APIs under qtbase until clear cross-platform alternatives are in place (e.g. Intents, Services, etc.) (QTBUG-93689).
  • Removed Ministro dead code, since it's been unsupported by Android (QTBUG-85201).
  • Simplified the AndroidManifest.xml file to only contain relevant tags for the user, removing the clutter that the user don't need to maintain (patch link).
  • QCDebug() and friends use the category as a tag in Android logcat (QTBUG-94708).
  • Update Android Gradle plugin to 4.1.3 (patch link).

Embedded

Embedded Linux / Boot to Qt

QNX

INTEGRITY

Changes in Installer

Porting guide

When creating Qt 6, we retain as much compatibility with Qt 5 as possible, but some changes were inevitable to make Qt a better framework. To make it easier to port to Qt 6, we have created a Porting guide to summarize those changes and provide guidance to handle them. In the guide, you can find links to articles about changes that may affect your application and help you transitioning from Qt 5 to Qt 6.