What's New in Qt 6.6

New and Restored Modules in Qt 6.6

Qt 6.6 adds the following modules and tools:

New and Restored Modules in Technical Preview

Note: API and ABI stability is not guaranteed.

Released Modules which Accomplished Technical Preview

Note: This section might be empty is there are no changes.

Qt Graphs Module

Qt Graphs is meant to be the replacement module for Qt Data Visualization. It uses Qt Quick 3D as the rendering engine to provide support for native graphics backends, instead of relying on OpenGL 2.1, like Qt Data Visualization does.

The module will provide most, if not all of the functionality of Qt Data Visualization. Some advanced features may be incomplete in Technical Preview.

New Features in Qt 6.6

Qt Core Module

  • Added Q_NODISCARD_CTOR macro that should be applied to mark constructors nodiscard. The macro resolves to [[nodiscard]] on compilers that support it, and does nothing on other compilers.
  • Added assign() overloads to the following Qt containers: QVarLengthArray, QList, QByteArray and QString. These functions are a convenient way to assign new data while reusing the existing capacity().

Qt GRPC Module

  • Added QGrpcChannelOptions and QGrpcCallOptions. Those are the new methods to pass options to channels and calls.
  • Added QGrpcMetadata to pass additional metadata to the calls.
  • Integrated QML-types support for auto-generated QtGRPC classes.

Qt GUI Module

  • Added QFont::setFeatures() for direct access to OpenType features in the font.
  • The QRhi family of classes are now fully documented and offered as APIs with a limited compatibility promise. The Qt Rendering Hardware Interface is a 3D graphics API and shading language abstraction layer that is used by modules such as Qt Quick and Qt Quick 3D to implement cross-platform, portable rendering engines and material systems that can function on top of Direct 3D 11/12, Vulkan, Metal, OpenGL, and OpenGL ES. Applications that wish to perform their own low-level rendering without directly relying on potentially platform-specific 3D APIs and shading languages can now use QRhi and the related classes to augment a Qt Quick scene, render to a QWindow, perform offscreen rendering into a texture, or to dispatch GPU compute workloads. In previous Qt 6 releases the QRhi classes were fully private and the documentation was not provided as part of the standard Qt documentation set. Now they are treated similarly to the QPA (QPlatform*) classes, meaning they form a special set of classes that do not offer all the standard patterns and source/binary compatibility promises of public Qt APIs, but are nonetheless available for use by intermediate/advanced level application developers. The documentation for the QRhi APIs is now part of the standard Qt documentation. Also introduced the rhiwindow example.
  • Added a Direct 3D 12 backend for QRhi. This does not currently affect any applications because Qt Quick's and QQuickWidget's default backend choice continues to be Direct 3D 11 on Windows, and this is not expected to change in the foreseeable future either. The new D3D12 backend should be considered experimental for the time being, and is useful primarily for applications that have a need to get Qt to perform its rendering via Direct 3D 12 in order to simplify interoperating with the application's own or some external component's rendering or compute engine requiring D3D12.
  • Qt 6 applications can now support custom or platform specific clipboard formats, using the new QUtiMimeConverter (for macOS) and QWindowsMimeConverter for Windows) classes. Those classes are unified versions of the QMacPasteboardMime and QWindowsMime types from Qt 5. See the porting guide for help with adapting an existing implementation.

Qt Location Module

  • Nothing to see here.

Qt Network Module

  • Nothing to see here.

Qt PDF Module

  • The new QPdfLinkModel class provides the link geometry and destinations on a specified page.
  • QPdfDocument::pageModel() implements Qt::DecorationRole to render page thumbnails on-demand.
  • The new QPdfPageSelector class is a specialized QSpinBox for selecting a page in widget-based PDF viewers.

Qt Positioning Module

  • The Qt Positioning library no longer requests the location permissions, but only checks if they are provided or not. The client applications must request the permissions using the new QPermission API.

Qt Protobuf Module

  • Enabled using certain Qt Core and Qt GUI types as a part of *.proto schema.
  • Integrated QML-types support for auto-generated QProtobufMessage classes.
  • Migrated to the implicitly shared data for auto-generated QProtobufMessage classes. This allows accessing the message types by-value from a QML context without making a lot of copies.
  • Added the Qt Protobuf Well-Known Types support for the google.protobuf.Any type.
  • Integrated support for the oneof type, a union-like type in protobuf, that need not contain a value.

Qt Bluetooth Module

  • The Qt Bluetooth library no longer requests the bluetooth permissions, buts only checks if they are provided or not. The client applications must request the permissions using the new QPermission API.
  • Qt now provides a native 128-bit unsigned int type as quint128. On platforms that support it, the QBluetoothUuid(quint128) constructor and the QBluetoothUuid::toUInt128() method now use this type instead of a custom struct that earlier Qt versions used. As long as your code treats quint128 as an opaque type, the change is source- and binary-compatible, but consider using the new overloads taking QUuid::Id128Bytes if you encounter any issues. Platforms that do not support the 128-bit int types (such as MSVC) still use the custom struct from Qt Bluetooth.

Qt QML Module

  • Added support for managing QML Application Permissions. The Qt QML Core module exposes the Qt C++ Application Permissions functionality to QML via a set of permission types that can be used to check or request permission in a cross platform manner.
  • The XMLHttpRequest object has now been updated with two more features, in order to bring it closer to modern browsers. The responseURL property has been added, which can be used to confirm whether any redirects has occurred. Similarly, the overrideMimeType method has been added, which can be used to make the XMLHttpRequest object parse the response based on a specific mime type, rather than what's in the Content-Type header of the response.

Qt Quick Module

  • Added font.features property for direct access to OpenType features in the font.
  • TableView has a selectionMode property to control whether single or multiple cells can be selected.
  • TreeView has a rootIndex property to show only a subtree from the model.
  • AnimatedImage now supports the sourceSize property.
  • The environment variable QT_QUICK_FLICKABLE_WHEEL_DECELERATION lets you customize the deceleration after scrolling with a "clicky" wheel mouse. By default, acceleration is now turned off so that scrolling distance is proportional to the number of "clicks" (unless the platform provides its own acceleration); but you can set a value less than 15000 to restore old behavior. The flickDeceleration property now applies only to touch flicks.
  • Most properties are now FINAL, meaning that they can no longer be shadowed by declaring new properties with the same names. A warning will be emitted if a FINAL property is shadowed. We recommend that users rename such properties to avoid unexpected behavior changes.
  • Added and exposed a number of QRhi-related functions in QQuickWindow, QQuickRenderControl, and QSGTexture. Querying the QRhi, QRhiSwapChain, or QRhiCommandBuffer used by the onscreen or offscreen Qt Quick rendering is now simplified. Some functions previously hidden from the documentation due to relying on QRhi* classes are made visible. Added createTextureFromRhiTexture() to QQuickWindow serving as the counterpart of createTextureFromImage().
  • Updated the scenegraph examples: added rhiunderqml, replaced the legacy, OpenGL-only fboitem example with a new, portable rhitextureitem example, and updated the customrendernode example. These together demonstrate the three ways to extend a Qt Quick scene with custom low-level 2D/3D rendering (the three approaches being: underlay/overlay, custom item backed by rendering to a texture, custom item with QSGRenderNode).
  • Added Path::simplified property for automatic simplification of paths before rendering them. This mirrors the QPainterPath::simplified() function.

Qt Quick Controls Module

  • Added live property to SpinBox. This controls whether the value is updated when the user edits the displayText.
  • Added wrapped signal to Dial. This is emitted when the dial wraps around, i.e. goes beyond its maximum value to its minimum value, or vice versa.
  • Added startAngle and endAngle properties to Dial. These properties control the start and end angle of the dial in degrees.

Qt Quick Layouts Module

Qt Quick Shapes Module

  • Added experimental curve rendering backend, which will render curves with higher quality than the default geometry renderer and apply anti-aliasing without the use of MSAA. It can be selected using the Shape::preferredRendererType property.

Qt Quick 3D Module

  • Added a QML API for creating TextureData procedurally called ProceduralTextureData. Previously this was only possible via C++ by subclassing QQuick3DTextureData.
  • Added a QML API for creating mesh geometry procedurally called ProceduralMesh. Previously this was only possible via C++ by subclassing QQuick3DGeometry.
  • It is now possible to import PLY files.
  • Added support for creating 3D textures with QQuick3DTextureData.
  • Added initial Renderer Extensions support. This is the first steps to allowing adding additional passes and enabling the customization of the built in render passes. View3D has a new property called extensions which takes an array of QQuick3DRenderExtension sub-classes. This is further supported using the helper functions in QQuick3DExtensionHelpers.

Qt Sql Module

  • A plugin for Mimer SQL was added
  • MySQL/MariaDB gained the new connect options MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_TLS_VERSION, MYSQL_OPT_SSL_MODE
  • The ODBC plugin now returns all native error codes in QSqlError
  • QSqlQuery got two new functions boundValueName()/boundValueNames()

Qt Test Module

  • Nothing to see here.

Qt TextToSpeech Module

The QTextToSpeech class learned a few more tricks that are available with all engines:

  • Applications can add multiple chunks of text to a synthesizing engine via enqueue.
  • The new aboutToSynthesize signal gets emitted just before a chunk of text gets synthesized.
  • Selecting one of the voices provided by the engine using a set of criteria is now easy with the findVoices member function. QML code can in addition use the VoiceSelector type as an attached property.

Not all new features are available with every engine. Applications can use the new Capabilities flag and engineCapabilities property to check which of the following new features the currently used engine supports:

  • If the engine has the Synthesize capability, QTextToSpeech can now synthesize text into PCM data. The synthesize function can be used with a callable that receives chunks of PCM data when it has been synthesized.
  • If the engine has the WordByWordProgress capability, QTextToSpeech emits the sayingWord signal for each word in the current chunk of text as it gets spoken.

Qt WebEngine Module

  • Response interceptors added to QWebEngineProfile and QWebEnginePage to intercept server responses, instead of client requests.
  • Response headers added to QWebEngineLoadingInfo.
  • Made it possible to add additional response headers in QWebEngineUrlRequestJob.
  • Added QWebEngineUrlScheme::FetchApiAllowed flag for enabling HTML5 Fetch API for custom url schemes.
  • qWebEngineGetDomainAndRegistry() function to read effective top-level domain as Chromium/QtWebEngine sees it.
  • Added QWebEngineSettings::DisableReadingFromCanvas setting to disable canvas reading for extra protection against fingerprinting.

Qt WebView Module

  • Nothing to see here.

Qt Widgets Module

  • Nothing to see here.

Platform Changes

Desktop Platforms

Windows

  • Nothing to see here.

macOS

  • Building user projects or Qt for macOS itself now requires at least CMake version 3.21.1.
  • QMessageBox::setCheckBox() is now respected when using native message boxes.

X11

  • Nothing to see here.

Mobile Platforms

Android

  • Added FileProvider support when using QDesktopServices::openUrl().
  • Added AndroidX by default (a dependency for FileProvider).
  • Introduced QTP0002 CMake policy for android-specific target properties.
  • Updates for the list of examples that are supported on Android.
  • Android 13 as the maximum supported version

iOS

  • Nothing to see here.

Embedded Platforms

Boot to Qt

  • Support was added for Yocto 4.2 (mickledore).
  • The Support Levels for Target Hardware were updated with new supported boards:
    • Tier 1 support for the NXP i.MX 93 board added.
    • Tier 1 support for the Jetson AGX Xavier board added.
    • Tier 3 support for the NXP i.MX 8QuadXPlus board added.
    • Tier 3 support for the Toradex Apalis iMX8 board added.
  • Toradex and ST targets are now using latest Yocto LTS version (kirkstone).

List of API Changes

  • Nothing to see here.