- Qt 6.12
- What's new in Qt 6
- What's New in Qt 6.11
- Qt 6.12.0 Reference Documentation

# What's New in Qt 6.11

## New Modules in Qt 6.11

Qt 6.11 adds the following modules:

- Qt Canvas Painter - An accelerated 2D painting solution for Qt Quick and QRhi-based render targets.
- Qt OpenAPI - An extension of the upstream Open API generator that generates Qt HTTP clients, typically used for RESTful APIs.
- Qt TaskTree - Provides a declarative way to compose and execute asynchronous task workflows.
- Qt Labs StyleKit - A dedicated styling API that streamlines styling Qt Quick Controls through a set of shared design attributes.

The new modules are in Technology Preview, excluding their API from Qt's compatibility promises. But we very much welcome feedback to further improve them! Be it via the Qt Support Center the Qt Bug Tracker, the Qt Forum, or the comments of the linked blog posts.

### Qt Canvas Painter Module

Qt Canvas Painter is an accelerated 2D painting solution for Qt Quick and QRhi-based render targets. See the also the Qt Canvas Painter blog series for an overview.

### Qt OpenAPI Module

Qt OpenAPI extends an Open API generator to generate Qt HTTP clients, typically used for RESTful APIs. In addition to the documentation, the REST Better with the Support of OpenAPI in Qt 6 blog post gives a good overview.

### Qt TaskTree Module

Qt TaskTree provides a declarative way to compose and execute asynchronous task workflows in C++. See the Introduction blog post series for an overview.

### Qt Labs StyleKit Module

Qt Labs StyleKit is a dedicated styling API that streamlines styling Qt Quick Controls through a set of shared design attributes.

## New Features in Qt 6.11

### ActiveQt Module

No noteworthy changes.

### Qt Bluetooth Module

No noteworthy changes.

### Qt CoAP Module

- QCoapClient::bindInterface allows to bind the communication to a specific network interface.

### Qt Core Module

- QDate is now weakly incrementable, i.e. implements pre- and post-fix increment (and decrement) operators, and can be used in a C++20 `std::views::iota`.
- QJniObject APIs can now be called with `std::expected` (or an equivalent type) as the return type, in which case Java exceptions are not consumed by the framework and instead passed back to the caller as the unexpected result.
- QRangeModel::ItemAccess provides a customization point for accessing role data of a multi-role item type.
- QRangeModel can now be used with C++ ranges that don't provide a constant `std::begin/end` implementation, such as C++20 `std::views::filter`.
- With ranges that use the same QObject subclass for multi-role items, the new QRangeModel::autoConnectPolicy can be set to Full or OnRead to connect the changed-signals of all exposed properties of QObject items to the corresponding dataChanged() signal emission.
- QRangeModelAdapter provides a typical C++ container API to the range a QRangeModel operates on, ensuring that relevant QAbstractItemModel signals are emitted on changes, without user code having to work with QModelIndex. This new class is under technology preview.
- On Windows, Qt now automatically generates an application manifest for executables built with CMake. The manifest derives the application version from `PROJECT_VERSION`, supports customization of the project identifier and execution level via CMake variables, declares compatibility with Windows 10 and Windows 11, and enables `longPathAware`.

### Qt Concurrent Module

No noteworthy changes.

### Qt D-Bus Module

No noteworthy changes.

### Qt Graphs Module

- Added new QCustomSeries class to allow users to create their own 2D graph types, such as candlestick or box-plot graphs
- Added multi-axis support to 3D graphs in the form of rowAxis, valueAxis, and columnAxis properties in QBar3DSeries, and axisX, axisY, and axisZ properties in QScatter3DSeries and QSurface3DSeries
- Added subSlicesCount, subSlicesSum, subSlicesRatio, and sliceChildren properties in QPieSlice to allow creating sub slices in pie and donut graphs
- Added visualMin and visualMax properties in QDateTimeAxis and QValueAxis to hold the visible axis ranges
- Added gradient and selectedGradient properties in QAreaSeries to allow using gradients in area graphs
- Added labelPosition property in QBarCategoryAxis to allow adjusting the label placement in bar graphs
- Added timeZone property in QDateTimeAxis to allow setting your own time zone for the axis
- Added pan and zoom properties in QDateTimeAxis to allow panning and zooming the same way as in QValueAxis
- Added color and subColor properties in QAbstractAxis to allow overriding theme colors for the axes
- Added joinStyle, lineStyle, strokeStyle, dashOffset, and dashPattern properties in QLineSeries to allow further styling in line graphs
- Added optimized property in QSplineSeries to allow using Catmull-Rom interpolation instead of the more performance-heavy and accurate default method
- Added customRowLabels and customColumnLabels properties in QBar3DSeries to allow overriding row and column labels
- Added rotationAbsolute property in QCustom3DItem to fix problems in custom item rotations
- Added rowsSanitized property in QSurface3DSeries to automatically remove rows with invalid data
- Added cutoffMargin in GraphsItem3D and Q3DGraphsWidgetItem to adjust the sensitivity of culling items near graph margins
- Added support for multiple QBarSeries in one GraphsView.
- Added support for negative values in QBarSeries.
- Added support for invalid values in LineSeries which results in visual gaps.

### Qt GRPC Module

- Added the new Client Interception mechanism to QtGrpc to enable interception and modification of outgoing requests and incoming responses.
- Qt 6.11 adds comparison operators (`operator==` and `operator!=`) for QGrpcCallOptions and QGrpcChannelOptions, enabling direct equality checks between option objects.
- QGrpcOperation class introduces a serverInitialMetadataReceived() signal that notifies RPC handlers as soon as the server initial metadata is received.
- QGrpcChannelOptions and QGrpcCallOptions classes now provide filterServerMetadata() and setFilterServerMetadata() methods to control whether protocol-related metadata is included in server responses.
- The QtGrpc namespace introduces the RpcType enum and RpcDescriptor struct to describe gRPC methods with their service name, method name, and communication pattern.

### Qt GUI Module

- Accessibility events of the new QAccessible::RoleChange type get emitted by the docking window framework when dock widgets change between docked and floating.
- The new accessibility role Switch is used by the Switch type in Qt Quick Controls.
- The new accessible attribute Orientation is used by sliders and similar controls to report their orientation to accessibility clients.
- QRawFont got an API to get the glyphCount() and to look up the glyphName() for a glyph index of the font.
- QTextCharFormat got new APIs to set font features and variable axes.

### Qt Help Module

No noteworthy changes.

### Qt HTTP Server Module

- Added support for HTTP/1.0 clients.
- Qt 6.11 introduces configurable request size limits to QHttpServerConfiguration, allowing applications to protect against oversized requests. New methods include setMaximumUrlSize(), setMaximumTotalHeaderSize(), setMaximumHeaderFieldSize(), setMaximumHeaderFieldCount(), and setMaximumBodySize(). When limits are exceeded, the server responds with appropriate HTTP error codes (414, 431, or 413).
- Route handlers can now return `QFuture<void>` and respond using a QHttpServerResponder&& argument in another thread, enabling CPU-intensive request processing to be offloaded from the main server thread. For HTTP/2 connections, multiple requests can be processed concurrently, while HTTP/1.x connections process requests sequentially but still benefit from background processing. Socket I/O always remains in the QHttpServer thread.
- isResponseCanceled() was added to QHttpServerResponder, allowing handlers to detect when a client has disconnected and exit early to avoid unnecessary processing.

### Qt Image Formats Module

Some bundled third-party modules were updated, see License Changes.

### Qt Lottie Animation

- Added support for path fill rules.
- Added CMAKE command qt_target_qml_from_lottie for converting from Lottie to QML at build time.
- lottietoqml and VectorImage backend are no longer tech preview.
- VectorImage: Added support for animating shapes along paths.
- VectorImage: Added support for morphing animations (interpolating between two shapes.)
- VectorImage: Added support for matte layers.

### Qt MQTT Module

No noteworthy changes.

### Qt Multimedia Module

- Added callback-based overloads for the start methods of QAudioSource and QAudioSink to allow real-time audio processing.

### Qt Network Module

- QNetworkRequest can now specify the TCP Keep Alive parameters for the current request. Also, the default TCP Keep Alive parameters have been changed in QNetworkAccessManager and now the inactive connections are terminated after two minutes of inactivity.

### Qt Network Authorization Module

No noteworthy changes.

### Qt NFC Module

No noteworthy changes.

### Qt OPC UA Module

- The bundled Open62541 was updated to v1.4.13. See also License Changes.

### Qt OpenGL Module

No noteworthy changes.

### Qt Positioning Module

- Qt for WebAssembly applications can now use the browser's GeoLocation API as backend.

### Qt PrintSupport Module

- Accessibility improvements to print dialogs: Label buddies and proper focus order were established to improve screen reader support and keyboard navigation.

### Qt Protobuf Module

- The qprotobufmessage_cast() function provides safe downcasting of QProtobufMessage pointers. Similar to qobject_cast() or `dynamic_cast()`, it enables easy and safe run-time type checking and conversion.

### Qt Qml Module

- Added workspace support in QML Language Server.
- Added go to C++ definition support in QML Language Server.
- Added support to silence context property warnings via a `.contextProperties.ini` configuration file for qmllint.
- Introduced `override` and `virtual` keywords which, together with the existing `final` keyword and tooling support, help prevent accidental property shadowing and allow explicit property overriding in QML. See Property Shadowing and Override Semantics for details.
- Gave the easingCurve value type a name and transformed the Easing namespace into a singleton.
- Added APIs to QQmlContext to get the list of child contexts and to find an object by id.
- Added GroupAttributesTogether option to qmlformat. This implies the NormalizeOrder option and reorders QML categories without sorting attributes (property definitions, property bindings, methods, signals, and enums).
- Added SingleLineEmptyObjects option to qmlformat. This prevents empty objects from expanding into a second line.

### Qt Quick Module

- Added CMAKE command qt_target_qml_from_svg for converting from SVG to QML at build time.
- Added APIs to Flickable to position or flick the view to a child and to flick to a position.

### Qt Quick Controls Module

- Added DoubleSpinBox, which is similar to SpinBox but supports floating-point values.
- Added defaultButton and defaultStandardButton to DialogButtonBox. When set, the respective button will be highlighted and receive activeFocus whenever the DialogButtonBox gets focus.

### Qt Quick Dialogs Module

No noteworthy changes.

### Qt Quick Effects Module

- Qt 6.11 adds four new properties to RectangularShadow for independent corner radius control: topLeftRadius, topRightRadius, bottomLeftRadius, and bottomRightRadius. Each property falls back to the existing radius property if not set, or creates a sharp corner when set to zero, enabling more flexible shadow shapes with different corner radii per corner.

### Qt Quick Layouts Module

No noteworthy changes.

### Qt Quick Particles Module

No noteworthy changes.

### Qt Quick Timeline Module

No noteworthy changes.

### Qt Quick Test Module

No noteworthy changes.

### Qt Quick Widgets Module

No noteworthy changes.

### Qt Quick 3D Module

- Added QML API for user-defined render passes, enabling custom rendering pipelines directly in QML without C++ knowledge
- Added ssrEnabled property in ExtendedSceneEnvironment to enable screen-space reflections (SSR)
- Added screen-space global illumination (SSGI) effect to ExtendedSceneEnvironment, providing ambient occlusion and real-time indirect lighting
- Added per-object motion vector generation for Temporal AA and motion blur effects
- Added layering support to allow grouping nodes and controlling which layers the camera renders
- Added linked list order-independent transparency (OIT) rendering method
- Added `NORMAL_ROUGHNESS_TEXTURE` support in post-processing effects and custom materials
- Added blue noise sampling to PCF soft shadows for improved quality with less visible noise patterns
- Added proper handling of pre-multiplied alpha for Qt Quick content in textures
- Added `VIEW_MATRIX` and `PROJECTION_MATRIX` exposure to post-processing effects
- Added pickInRect() method in View3D for rectangle-based object selection
- Added closestPointPick() method in View3D to find the closest point on a surface to a given point
- Added rayPick() overload that accepts a specific model parameter
- Added scene shape for particle emitters that dynamically calculates shapes based on scene geometry
- Added QQuick3DTextureProviderExtension API for simplified custom texture provider creation
- Added scheduleRenderResults() function in QSSGFrameData to request specific render pass results
- Updated Assimp to v6.0.2

### Qt Quick 3D XR Module

- Added OpenGL desktop Linux support (Monado, Xlib, Wayland platforms)
- Extended processTouch() to deliver touch events to any pickable Model, not just XrItem
- Enhanced touchpointState() to return surface position and normal vector information for 3D touch interactions
- Added Popup and Menu support in XrItem through dedicated QQuickOverlay
- Updated OpenXR to v1.1.49

### Qt Quick 3D Physics Module

No noteworthy changes.

### Qt Quick VectorImage Module

- Added support for SVG masks.
- Added support for SVG post-processing filters to match the support in Qt SVG: feGaussianBlur, feColorMatrix, feOffset, feFlood, feBlend, feComposite and feMerge.
- Added support for animating shapes along paths.
- Added support for the SVG <symbol> tag.

### Qt Serial Port Module

No noteworthy changes.

### Qt Serial Bus Module

No noteworthy changes.

### Qt Sql Module

No noteworthy changes.

### Qt SVG Module

- Added support for CSS motion path animation through `offset-path` and `offset-distance`. Note that `offset-path` supports only the path function for defining a path.
- Added support for CSS animation timing function on an animation as a whole. Currently, only the predefined keywords are supported (`linear`, `step-start`, `ease`, etc.).

### Qt Test Module

- Added QTest::currentGlobalDataTag() function to retrieve the name of the current global test data.
- Added QTest::defaultTryTimeout to allow configuring the default timeout used by the QTRY_* functions.
- QCOMPARE now prints the sign for negative zeroes and NaN values, and prints NaN payloads.
- QTEST_THROW_ON_FAIL and QTEST_THROW_ON_SKIP now work when the QCOMPARE/QSKIP is invoked from within QtConcurrent.
- QTest::failOnWarning() now fails on any message type >= warning, including critical messages.
- On macOS, display sleep and App Nap are now unconditionally disabled for the entire test execution.
- Updated Callgrind support to Valgrind v3.25.1, adding support for RISCV 64-bit Linux.

### Qt VirtualKeyboard Module

- Qt 6.11 introduces the arrowKeyNavigationEnabled property in VirtualKeyboardSettings, allowing developers to control whether arrow keys (Left, Right, Up, Down) and the Return can be used for navigating between keyboard keys when the input panel is visible. The property default is based on the build-time configuration flag `QT_VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION`.
- Added keyboardDesignMaximumHeight property to KeyboardStyle type. Use this to prevent the keyboard overlapping most of the screen.

### Qt WebEngine Module

- Qt WebEngine is now based on Chromium 140.
- Chromium has added new Rust components which are intended to replace their C++ counterparts. Qt WebEngine can now be optionally built using these Rust components. This requires installing a Rust toolchain and configuring with `-feature-webengine-rust-build`. The default behavior is to build with the older C++ components.
- Added OnlyPersistentCookies policy to prevent session cookies from being saved to disk.
- Added TrimAccessibilityIdentifiers setting to force HTML 'id' attributes to be used as automation IDs for accessibility.
- Added support for the HTML `inputmode` global attribute.
- Improved `fetch()` API handling of redirects to cross-origin resources.
- Removed Pepper Plugin API code.
- Enabled `chrome://usb-internals` debug page.

### Qt WebView Module

- Added C++ bindings for WebView, allowing you to use the module in Qt Widgets-based applications. The new C++ APIs are released in Technology Preview status, and may be changed in the future.

### Qt Widgets Module

- QWizard got a new StretchBanner option to stretch the banner across the entire width of the wizard.
- QAbstractItemView got a new keyboardSearchFlags property that allows tuning how the default implementation of keyboardSearch() matches the given string against the model's data.
- QColumnView got a new previewColumnVisible property that specifies whether the preview column is visible.
- The new QStyleOptionMenuItemV2 class adds a flag that indicates whether the mouse is pressed on the item getting rendered by the style.
- QTabBar now emits tabCloseRequested when a tab is middle clicked if tabsClosable is true.

### Qt XML Module

No noteworthy changes.

## Tools

### QDoc Documentation Generator

- Added comprehensive support for QML singleton types, including a new `\qmlsingletontype` command, automatic detection of the `QML_SINGLETON` macro, and recognition of `pragma singleton` in QML files.
- QDoc now has full support for QML module aliases (`import ... as ...` syntax), including linking, syntax highlighting for qualified identifiers, and correct markup for property notation such as `anchors.fill` and attached properties such as `Component.onCompleted`.
- You can use the new `\toc`/`\endtoc` and `\tocentry` command for specifying hierarchical table of contents structures in documentation source files. QDoc generates `<project>_toc.xml` files for navigation sidebars.
- The \overload command now takes an optional argument. Use the `\overload primary` syntax to designate the primary function in an overload set.
- QDoc now generates contextual connection examples for overloaded signals and slots.
- The `includeprivate` configuration variable enables documentation of private C++ members. Pure virtual functions are now unconditionally documented.
- C++20 Concepts: QDoc now extracts and displays C++20 requires clauses for function and class templates. Both template-head and trailing constraint positions are supported.
- The \code command now accepts an optional argument to specify the programming language for the code block. Use "text" to disable syntax highlighting.
- The `\meta keywords` argument adds custom keywords as HTML `<meta>` elements for search engine optimization and post-processing.
- Explicit linking to QML attached properties is now supported using the "attached" link criterion, allowing disambiguation when regular and attached property names conflict.
- Template declarations with more than two parameters are now rendered in a multi-line format for improved readability. The HTML output uses the `template-block` CSS class for custom styling.
- QDoc now warns about undocumented C++ properties declared with `Q_PROPERTY`, ensuring consistent documentation coverage across all API elements.
- QDoc now warns about self-linking in `\sa` commands where a document links to itself.
- The `logwarnings` configuration variable makes QDoc write all warnings to a `<project>-qdoc-warnings.log` file. The new `logwarnings.disablecliargs` sub-option omits CLI arguments from the log header for portable logs.
- QDoc warnings now include the project name prefix for multi-module builds.
- Configuration Improvements:
  - `codelanguages`: Specifies additional programming languages accepted in \code blocks, allowing documentation to include code in languages without built-in syntax highlighting markers.
  - `imagesoutputdir`: Custom output subdirectory for images to solve file name clashes in multi-module builds.
  - `internalfilepatterns`: Automatically marks classes as internal based on file/path name patterns, such as `*_p.h`.
  - `projectroot`: Sets the root directory for converting absolute paths to relative paths in warning logs, improving portability across build environments. Also available as the `QDOC_PROJECT_ROOT` environment variable.
- Formatting commands now work in `\title` arguments, `\generatelist` works correctly in Qt help project TOC structures, and custom enumerator prefixes are supported in `\qmlenum`.
- The HTML structure for QML and C++ member documentation is unified. This change introduces new CSS classes (`qml-member`, `qml-property`, `qml-method`, `qml-property-group`) in QDoc's HTML output.
- Code Parsing: Improved scoped enum resolution, QML inheritance handling with cycle detection, and correct preservation of declared types and variable information in index files.
- Added LLVM/Clang 21 compatibility, with minimum supported version updated to 17.0.6.
- The `\tableofcontents` command is officially deprecated.

### Qt Linguist

- Added labels as a way to categorize ID-based translations into meaningful groups without affecting the runtime behavior. See the Text ID based translations documentation and the blog post for more details.
- Added new i18n examples to the documentation.
- Added AI translation for Qt Linguist for automatic translations using LLMs. See the AI translation documentation and the blog post for more details.
- Added ltext2id executable for migrating projects from text-based translation to ID-based translation. See Using ltext2id for more details
- Added lcheck executable for performing batch validation on TS files. See Using lcheck for more details.
- Added support for C++ attributes in lupdate parser
- Deprecated use of //= metastrings in lupdate parser.
- Deprecated `lupdate -pro` option for processing .pro files directly. Use `lupdate-pro` instead.
- Removed lprodump executable. Its functionality is now available via the `lupdate-pro -dump-json` option.

## Platform Changes

### Build System Changes

- Added a -generate-vcpkg-manifest configure option. This generates a vcpkg.json file in the build directory. To just generate the manifest without configuring Qt, run configure with -generate-vcpkg-manifest -dry-run.
- When configuring with -vcpkg, generate a vcpkg manifest file in the build directory, and set VCPKG_MANIFEST_DIR to the build directory to use that manifest file. You can turn off the manifest generation with -no-generate-vcpkg-manifest. You can turn off setting the manifest directory by passing – -UVCPKG_MANIFEST_DIR to configure.
- Added support for generating CycloneDX SBOM documents in addition to the existing SPDX format. To enable CycloneDX generation, configure Qt with `-sbom -sbom-cyclonedx-v1_6 -sbom-cyclonedx-v1_6-required`.

### Desktop Platforms

#### Windows

- Added support and detection of Windows 11 25H2 (Build 10.0.26200) via QOperatingSystemVersion.
- There are various accessibility improvements to top-level windows and focus.
- Improved refresh rate update handling.
- Added experimental support for ARM64EC when using Visual Studio 2026. To use this configuration add `/arm64EC` to `CFLAGS` as well as `/arm64EC` and `/d2arm64ECMarkAllFuncsPatchable` to your `CXXFLAGS` environment variables on your Windows on ARM machine and configure and build Qt as you normally do.

#### Linux

- The Wayland plugin gained server-side key repeat, preference for server-side decorations, experimental support for `xx-session-management-v1`, and numerous stability fixes (popups, scrolling, offscreen surfaces, clipboard).
- The legacy X11 native painting engine (XRender) for XCB was removed. Use of this engine required enabling it at compile time with a CMake option (`-xcb-native-painting`) and enabling at runtime with the `QT_XCB_NATIVE_PAINTING` environment variable.
- Accessibility was enhanced by adding support for the AT-SPI Collection interface, which provides a more efficient mechanism for retrieving accessible objects within an application’s accessibility hierarchy. This interface also enables browse mode support in the Orca screen reader.
- XKB: key mapping was extended for Qt::Key_Call / Qt::Key_Hangup.

#### macOS

- Sandboxed applications can now access files outside of the application sandbox (so called security scoped resources) for both reading and writing. Files or folders chosen by the user via file dialogs or similar native mechanism are automatically and transparently handled, including persistent access across application and device restarts.
- Added QNativeInterface::QCocoaScreen for accessing the underlying NSScreen.
- Converting between CGImageRef and QImage now supports a wider range of image formats, including QImage::Format_RGB30 and floating-point formats important for HDR content.
- The Apple icon engine now respects the layout direction of the painter, producing RTL-specific icons if available in the SF Symbols icon set.
- File paths selected via native open/save panels are now NFC normalized, ensuring consistent file name comparisons regardless of whether the filesystem stores names in NFD form.

### Mobile Platforms

#### Android

##### Qt for Android

- Qt Jenny now supports implementing Java interfaces and extending Java classes in C++.
- Support for Play Store's Feature Delivery.
- Support for Android 16.
- Updated to Gradle 9.3.1 and Android Gradle Plugin 9.0.0.
- Updated to JDK 21 LTS and bumped compatibility to JDK 17 LTS.

##### Qt Quick for Android

- Added QtQuickView.invokeMethod() for calling QML functions from Java/Kotlin.
- Support for registering signals before QML View is loaded.

#### iOS

- Added support for file icons in the platform theme.
- Added support for QFileOpenEvent for external requests to open files.
- Sandboxed applications can now access files outside of the application sandbox (so called security scoped resources) for both reading and writing. Files or folders chosen by the user via file dialogs or similar native mechanism are automatically and transparently handled, including persistent access across application and device restarts.
- Added support for native save dialogs.

### Embedded Platforms

#### Linux

- EGLFS/KMS now supports hot-plug and hot-reload of displays at runtime (guarded by `QT_QPA_EGLFS_HOTPLUG_ENABLED` environment variable).
- A new ConnMan-based QNetworkInformation backend was added.
- DirectFB: Qt::Key_Call mapping was added.

#### Boot to Qt

- New Tier 2 Platforms:
  - NXP i.MX 8M Plus LDDPR4 EVK
  - Toradex i.MX 95 Verdin
  - Qualcomm RB3 Gen2 Vision Kit

### Web Platforms

#### WebAssembly

- Qt Positioning got a backend for the GeoLocation API.
- Use the new `wasmdeployqt` tool to deploy and ship dynamically linked Qt for WebAssembly applications. This replaces the previous `preload_qt_plugins.py` and `preload_qml_imports.py` Python scripts.

## List of API Changes

These pages contain an overview of API changes in Qt 6.11:

- New Classes and Functions in Qt 6.11
- Obsolete Classes

## Known Issues

For information about known issues in Qt 6.11, see the Qt Wiki.