What's New in Qt 6.9

New and Restored Modules in Qt 6.9

Qt 6.9 adds the following modules and tools:

Removed Modules in Qt 6.9

The following module(s) is deprecated. We strongly advise against using them in new code.

New Features in Qt 6.9

Qt Core Module

  • QJniArray can now create an empty array of a fixed size, and change values in an array using a non-const iterator or operator[]
  • QLocale::uiLanguages() now includes fall-back entries obtained by removing later components of names. Callers that have been doing such truncations for themselves are now encouraged to trust that QLocale knows the right things to try and the right order to try them in.
  • QLocale::bcp47Name() now represents the C locale as "en-POSIX", to distinguish it from plain "en" and better align with the BCP47 spec. The variant POSIX is likewise now recognized as meaning the C locale, when constructing one from its name.
  • QTimeZone::abbreviation() on Windows now returns an abbreviation rather than the full name.
  • QTimeZone::displayName() should now actually provide locale-appropriate names for zones on all platforms, where previously some failed to support this.
  • Converting timestamp strings with a timezone part to QDateTime now recognizes long-form display names of zones.
  • QMetaEnum and QFlags can now support types requiring up to 64-bits.
  • QJsonValue can now parse and serialize JSON using fromJson and toJson directly, without going through QJsonDocument. This allows it to parse and serialize primitive values like strings or numbers as well as compound values.

Qt Graphs Module

  • Added transparency support to Surface3D, utilizing order-independent transparency from QtQuick3D. Only approximate technique (WeightedBlended) has been implemented to QtQuick3D this far, so no accurate techniques can be used yet.
  • Added rootNode property to allow injecting graphs to a View3D in QtQuick3D applications.
  • Added another picking method, doRayPicking, to be used with View3D graph injections.
  • Added QSpline3DSeries class to allow users render their data in splines.
  • Added valueColoringEnabled property to Bars3D, which allows each bar to be colored separately based on its value.
  • Added scaleLabelsByCount property to QAbstract3DAxis, allowing users to define whether axis labels should be scaled based on the total amount of labels.
  • Added labelSize property to QAbstract3DAxis, allowing users to set the sizes of axis labels by each axis.
  • Added support for setting the minimum and maximum rotations in X and Y directions to Bars3D, Scatter3D, and Surface3D.
  • Added alignment property to QAbstractAxis, allowing users to align axes left, right, top, or bottom.
  • Added plotArea property to QGraphsView, allowing users to define the rectangle a graph will be drawn in.
  • Added zooming and panning support to QGraphsView.
  • Added custom input handling support to area, line, pie, and scatter graphs.

Qt GRPC Module

Qt GUI Module

  • QBrush and QPen got optimized operators for comparing with or assigning from color and style values.
  • QPainter::setBrush() got new optimized overloads for setting a color as a solid brush.
  • QPainterStateGuard is a new RAII class to ensure balanced save/restore operations on a QPainter.
  • Added QWindow::safeAreaMargins() to reflect the safe area of the window.
  • Added parsing and automatic detection of emoji sequences in text, ensuring the use of color fonts when needed as according to the Unicode specification. This parser can be disabled per layout using QTextOption::DisableEmojiParsing, or by disabling the emoji segmenter when configuring Qt.
  • Added QFontDatabase::addApplicationEmojiFontFamily() and related functions for customizing the default emoji font used by the application.
  • Added QFontInfo::variableAxes() for retrieving information about the variable axes supported by a font.
  • QRhi: when running with OpenGL ES on mobile GPUs with support present, GL_EXT_multisampled_render_to_texture is utilized whenever possible. For clients such as Qt Quick and Qt Quick 3D this potentially brings significant performance improvements in multisampled rendering on tiled GPU architectures.
  • QRhi: On Windows with Direct 3D 11 and 12, QWindow update requests are now driven by a dedicated vblank watcher thread, reducing CPU load and latency. This means that clients such as Qt Quick are expected to have a reduced lag when interactively dragging items by mouse or touch for example.
  • QRhi: Added support for variable rate shading, where applicable (Direct 3D 12, Vulkan, Metal). This enables dynamic foveation support with Qt Quick 3D XR on visionOS.
  • QRhi: Per-render target blending is now optionally supported for OpenGL as well.
  • QRhi: Added support for a number of integer and depth texture formats.
  • QRhi: Added support for passing in application-provided wait/signal semaphores when on Vulkan. These are then passed on to to vkQueueSubmit and Present, thus allowing integration of external rendering/compute engines that rely on multiple threads and require appropriate synchronization with the scenegraph renderer.

Qt HttpServer Module

Qt Multimedia Module

Qt Network Module

Qt Network Auth Module

Qt OPCUA Module

Qt Positioning Module

Qt Protobuf Module

Qt QML Module

  • QML Language Server now provides an outline view of the document structure. This allows clients (e.g., IDEs or code editors) to represent a qml document’s structure as an interactive outline, displaying objects, properties, methods and other code elements in a hierarchical view.
  • Added the maximum line length feature to qmlformat: qmlformat now controls where to break lines based on a maximum allowed line length, ensuring a consistent and readable QML document.

Qt Quick Compiler

Qt Quick Module

  • Added SafeArea attached property to manage safe areas of an Item or Window.
  • Added Shear component for a convenient way of applying shearing transforms to items.
  • Added FontMetrics.capitalHeight property which was previously missing from the Qt Quick API.
  • Added FontInfo type for retrieving the results of font resolution, matching the QFontInfo class in C++.
  • Reintroduced support for the FramebufferObject rendering mode of QQuickPaintedItem when the graphics API in use is OpenGL. This is provided as a porting aid for Qt 5 era applications that require the use of QPainter's legacy OpenGL paint engine for their QQuickPaintedItems.
  • Optimized the scenegraph renderer's buffer pooling logic to prevent spikes in memory usage in scenes with large geometries. Additionally, there is a reduction in overhead for scenes with a lot of items, in particular when running with OpenGL.

Qt Quick Controls Module

  • Added ContextMenu. This can be attached to any item in order to show a context menu upon a platform-specific event, such as a right click or the context menu key.

Qt Quick Dialogs

Qt Quick Shapes Module

Qt Quick Effects Module

  • New RectangularShadow element for fast rounded rectangle shaped shadow/glow. The API is similar to CSS box-shadow, with color, offset, spread and blur values.

Qt Quick 3D Module

  • Added WeightedBlended Order Independent Transparency (OIT) implementation for rendering transparent objects.
  • Added support for 32-bit unsigned integer texture formats.
  • Improved control over shadow map bounds for instancing models, potentially allowing for better performance when calculating becomes expensive.
  • Added support for 4K shadow maps with a new 'Ultra' resolution setting.
  • Added the option of forcing medium precision for floats in GLSL ES fragment shaders. Provided mainly as a tool for performance tuning. Set the environment variable QT_QUICK3D_MEDIUM_PRECISION to a non-zero value. Has no effect on other kinds of shaders (and that includes non-ES GLSL too).
  • DebugView now supports visualizing bounds for point light shadows.
  • Ported the built-in geometries from Qt 3D to QtQuick3D.Helpers. PlaneGeometry, SphereGeometry, CylinderGeometry, ConeGeometry, and TorusGeometry are now available in QtQuick3D.Helpers.
  • Added a port of the ExtrudedTextMesh from Qt 3D to QtQuick3D.Helpers.
  • Added support for using instancing with custom materials in the material editor.

Qt Quick 3D XR Module

  • Added support for haptic output with controllers using amplitude, duration, and frequency through a new XrHapticFeedback item.
  • Added new property in XrInputAction to conditionally disable an action without having to test for it in all the handler functions.
  • Added Metal backend for OpenXR to support running in Meta XR Simulator on macOS.
  • The property multiViewRenderingEnabled is now read-only and toggling multiview rendering is no longer possible at run-time. If multiview rendering is supported, it is enabled for the lifetime of the application. In porting situations, where multiview rendering is not desired, it can be disabled by setting the environment variable QT_QUICK3D_XR_DISABLE_MULTIVIEW to a non-zero value.

Qt Quick VectorImage Module

Qt Shader Tools Module

Qt Sql Module

Qt SVG Module

Qt Test Module

Qt VirtualKeyboard Module

  • Added a new Japanese layout which uses flick keys.
  • Added support for adjusting key sound volume.

Qt WebEngine Module

Qt Widgets Module

  • QAbstractItemView got a new property updateThreshold to specify when a full view update should be done instead trying to figure out the parts where something changed within dataChanged(). This is especially useful when a lot of items change in a large model as the update rect calculation might take longer than a full view update.
  • QComboBox can draw its label using the item view's delegate by setting the labelDrawingMode property to UseDelegate.
  • QHeaderView has been optimized to dramatically reduce memory usage for huge models as long as the sections are not resized, hidden or reordered.

Tools

QDoc Documentation Generator

  • QDoc now accepts formatting commands in macro arguments.
  • Authors can now override the underlying return type of a function that's documented with an fn-command with auto.
  • QDoc can now generate documentation from comments in C++ headers. This is added as a technical preview in QDoc with Qt 6.9, and we'd love to get feedback from our users. Enable the documentationinheaders QDoc configuration variable to try it out.
  • QML enumeration documentation can be generated from C++ enumerations with the new qmlenumeratorsfrom command.
  • The generatelist and annotatedlist commands now support custom sort order for the generated lists.
  • deprecated accepts future versions, and QDoc generates appropriate text when it recognizes a version as being in the future.
  • Clang library requirements: QDoc requires Clang libraries from LLVM 17. It's also confirmed to work with Clang libraries from LLVM 18, 19, and 20.
  • QDoc now supports adjusting the CMake requisites for third-party projects with the cmakecomponent, cmakepackage, and cmaketargetitem commands.
  • Example-related warnings are now configurable through the new examples.warnaboutmissingimages and examples.warnaboutmissingprojectfiles configuration variables.

Platform Changes

Build System Changes

  • Building Qt and using Qt in CMake projects now requires CMake version 3.22 or later.

Desktop Platforms

macOS

WebAssembly

Windows

Wayland Client on Linux

  • Added support for the new xdg-toplevel-icon-v1 protocol to make QWindow::setIcon work if the compositor supports this protocol as well.
  • The underlying wl_surface of a window now shares its lifetime and is no longer destroyed when the window is hidden.

Mobile Platforms

Android

  • Support uncompressed native libs within APKs and remove the need for packagingOptions.jniLibs.useLegacyPackaging true.
  • Introduce qt_add_android_permission() CMake function.
  • Add QT_ANDROID_COMPILE_SDK_VERSION CMake property to set the SDK level for building Java code.
  • Add QT_ANDROID_APP_ICON CMake property to set an app's icon.
  • Add QT_ANDROID_APP_NAME CMake property to set an app's name.
  • Decouple location and bluetooth permissions for API level 31+.
  • Allow setting a maximum for queued background UI events.
  • Add script to easily deploy, run apps and get logs from terminal.
  • QML for Android and QtQuickView:
    • Add setData() and dataChanged() methods to QtAbstractItemModel.
    • Add OnDataChangedListerner callback interface.
    • QtQuickViewContent: Add onStatusChanged() overload that passes the underlying QtQuickViewContent object.
    • Support multiple embedded views from an Android Service.

iOS

visionOS

Embedded Platforms

Boot to Qt

RealTime OSs

List of API Changes

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.