What's New in Qt 6.12
This page is work in progress.
New and Restored Modules in Qt 6.12
Qt 6.12 adds the following modules and tools:
- The Qt Qml Design Support module with a set of types for registering and referencing objects in QML. It is meant for future Qt Quick design tooling.
New Features in Qt 6.12
Qt Bluetooth Module
- The Android backend now respects the advertising minimum and maximum interval parameters provided via QLowEnergyAdvertisingParameters when starting the BTLE advertising.
Qt Canvas Painter Module
- The Qt Canvas Painter module is moving out of Technology Preview state, and is now fully maintained (supported).
- The module gained QtCanvas2D, a new QML API backed by Qt Canvas Painter. This API remains in technology preview.
- QCanvasPath gained an addPath() overload for parsing SVG path strings directly.
- QCanvasPainter gained QCanvasPainter::FillRule and QCanvasPainter::setFillRule() to support the EvenOdd fill rule for path fills.
- QCanvasGradient gained setImage() to create gradients directly from an image.
- QCanvasRadialGradient gained constructors and setInnerCenterPosition() / setOuterCenterPosition() to support non-symmetric (two-center) radial gradients.
Qt Core Module
- QRangeModel's RowOptions and ItemAccess customization points were extended to support
headerData(), and per-row and per-itemflags(). QRangeModel gained drag'n'drop handling support with custom and type-safe mime type handling in both customization points, and with supportedDragActions and supportedDropActions properties. QRangeModel now also implements sort() with support of a sortCollator for locale-aware sorting, and match() for fast content matching. - Added qSharedPointerStaticCast as a new free function for static casts of QSharedPointer.
- QSortFilterProxyModel gained the DataChangeRelevanceFlag enum and the virtual dataChangeRelevanceFlags() method, allowing subclasses to control whether a source
dataChangedsignal triggers re-filtering or re-sorting. - The new QAbstractItemModel::compareData() is a new protected API for comparing two QVariants in a way that is specifically designed for item view use cases.
- qfloat16 gained increment and decrement operators and a unary operator+.
- QVariant gained constructors from rvalue references.
- QMap and QMultiMap now implement all six relational operators.
- QVarLengthArray gained removeAt(), matching the QList API.
- QTimeZone now accepts CLDR-canonical IANA alias IDs in its constructor and in isTimeZoneIdAvailable(). QTimeZone::availableTimeZoneIds() now includes those aliases.
- QFile::copy() now accepts an optional QFileDevice::Permissions argument. QSaveFile now defers applying the requested permissions until commit().
- Qt::compareThreeWay() gained an overload for
std::pair. - QCalendarPermission gained a WriteOnly access mode.
- QFileSystemWatcher can now use
inotifyon FreeBSD 15 and later. - QStandardPaths on macOS now includes the system-wide
/Library/Preferencesdirectory in standardLocations(). On iOS, PublicShareLocation returns the correct path and TemplatesLocation is properly reported as unsupported. - QEasingCurve gained cubicBezier(), a convenience helper for creating cubic Bezier easing curves.
- QJsonObject gained cbegin() and cend() STL-style const iterators. QJsonDocument gained rvalue constructors from QJsonArray and QJsonObject.
Qt D-Bus Module
Qt Graphs Module
- Qt Canvas Painter can now be used as a rendering backend for 2D graphs. Enable it at configure time with the
-feature-graphs-2d-high-performance-backendconfigure flag. - Added QLogValueAxis (LogValueAxis in QML), a new logarithmic axis type for 2D graphs.
- QXYSeries gained declarativePoints, declarativePointHint, declarativeMin, and stepSize properties for declarative data input from QML.
- QPieSeries gained sliceData and sliceLabels properties for declarative data input from QML.
- QValueAxis and QLogValueAxis gained a labelPostFormat property for customizing axis label text.
- Q3DGraphsWidgetItem gained panEnabled and panModeEnabled properties to enable panning in 3D graphs.
- QDateTimeAxis gained a tickCount property.
Qt GRPC Module
- Added client-side request compression. The new QtGrpc::CompressionAlgorithm enum can be selected through QGrpcChannelOptions::setRequestCompression() and QGrpcCallOptions::setRequestCompression() to compress outgoing messages.
- Added supportedCompressionAlgorithms(), acceptedCompressionAlgorithms() and setAcceptedCompressionAlgorithms() to QGrpcChannelOptions to control which compression algorithms the client advertises in the
grpc-accept-encodingrequest header and is willing to accept in server responses. - Added maximumReceiveMessageSize() and setMaximumReceiveMessageSize() to QGrpcChannelOptions and QGrpcCallOptions to bound the size of incoming messages.
Qt GUI Module
- Added indirect rendering support to QRhi. Buffers of type
IndirectDrawBuffercan now be created, and indirect draw calls issued via QRhiCommandBuffer. - QRhi gained the ShaderDrawParameters feature flag to query support for shader draw parameter built-ins (e.g.
gl_DrawID). - The QRhi Vulkan backend now uses
VK_EXT_device_faultto report additional details on device loss. - QAccessibilityHints gained a motionPreference property for reduced-motion accessibility preferences.
- QStyleHints gained toolTipWakeUpDelay, allowing applications to query or adjust the delay before a tooltip appears.
- QImageReader gained effectiveSize(), which returns the image size respecting autoTransform().
- QTextCursor::deletePreviousChar() (Backspace) now correctly handles multi-code-unit emoji sequences.
- On Android, pressing the back key now calls
moveTaskToBack()instead of exiting the application. - Added Qt::InputMethodHint::ImhNoFullscreen to request that the input method does not occupy the full screen.
Qt HTTP Server Module
- QHttpServerConfiguration gained setMaximumConnections() to limit the total number of simultaneous connections, and setMaximumConnectionsPerHost() to limit connections per IP address.
Qt Lottie Animation Module
- Added support for the Lottie text layer, including glyph path rendering.
- Added support for animated dimensions in Lottie ellipse, rectangle, and polystar shape elements, as well as gradient strokes, layer masks, and the layer Auto Orient feature.
- Added support for the Lottie time remapping and time stretching features.
- Introduced LottieVectorImageController for controlling Lottie animation playback in a VectorImage. The type exposes currentFrame, frameRate, startFrame, and endFrame properties, along with playback methods such as play(), pause(), and gotoAndPlay().
Qt Multimedia Module
- QScreenCapture and QWindowCapture gained a frameRate property to control the capture frame rate. The same property is available on the ScreenCapture and WindowCapture QML types.
- QAudioSource and QAudioSink gained nativePeriodFrameCount() and setNativePeriodFrameCount() for querying and controlling the native audio buffer period size.
- Added QMediaCaptureSession::setNativeVideoSource() and the GStreamerVideoSource QML element, enabling a custom GStreamer pipeline to feed video frames into a QMediaCaptureSession.
- QMediaMetaData::ThumbnailImage is deprecated; backends will no longer populate it. Use CoverArtImage instead.
- QSoundEffect now always emits sourceChanged after setSource(), even when the URL does not change.
Qt Network Module
- Introduced QSslKeyingMaterial and QSslConfiguration::keyingMaterial() / setKeyingMaterial() to expose TLS keying material exporters (RFC 5705).
- QHostInfo gained clearCache() to flush the DNS result cache programmatically.
- QHttpHeaders gained QDataStream stream operators, rangeValues() for parsing the
Rangeheader, and setRangeValues() for setting it. The new QHttpHeaderRange class represents a single byte range within that header.
Qt OpenAPI Module
- qt_add_openapi_client() gained
GENERATE_DOCUMENTATION,DOCUMENTATION_OUTPUT_DIRECTORYoptions to generate Doxygen based documentation alongside the client code. - Added support for the oneOf schema feature.
- Renamed generated model property getters. Q_PROPERTY now exposes the same property names as those used in the YAML file.
- Generated client API methods are no longer virtual.
Qt Positioning Module
- QGeoSatelliteInfo::SatelliteSystem gained entries for the IRNSS and SBAS satellite systems.
Qt Protobuf Module
- Qt properties in the generated message classes are now marked with the FINAL modifier by default. This enables QML tooling to apply performance optimizations and generate more efficient code. Use the new option
GENERATE_NON_FINAL_PROPERTIESof qt_add_protobuf() to revert to the old behavior.
Qt Qml Module
- QQmlEngine gained setExternalSingletonInstance() to register an externally created C++ object as a QML singleton. QML_UNCREATABLE can now be combined with QML_SINGLETON.
- string.arg() in QML now accepts multiple arguments, consistent with JavaScript conventions.
- Added Qt.escapeHtml() global function for escaping HTML special characters in QML.
- When instantiating a component with missing required properties, the engine now reports an error instead of silently constructing an incomplete object.
- QtQml.Models import: The SortFilterProxyModel gained RangeFilter, RegExpFilter, AllOfFilter, and AnyOfFilter composite filter types, and an improved FunctionFilter accepting role names as separate arguments.
- Qt.labs.qmlmodels import: TreeModel gained insertRow() and moveRows() methods.
- Qt Qml Compiler:
QQmlSA::FixSuggestion::hint(),QQmlSA::FixSuggestion::setHint()were removed.QQmlSA::FixSuggestion::fixDescription()was renamed to QQmlSA::FixSuggestion::description().
Qt Quick Module
- Added strokeGradient property to ShapePath.
Qt Quick Controls Module
- Added the
QtQuick.Controls.Nativestyle.import QtQuick.Controls.Nativechooses the best-suited style for the platform you compile for at compile time. It therefore combines the benefits of compile-time style selection with the possibility to have a platform-specific look-and-feel for your application. - ToolTip gained a policy property to control automatic tooltip visibility.
- ComboBox gained a highlightOnHover property.
- RangeSlider gained a crossingEnabled property to allow or prevent the two handles from crossing each other.
- Menu gained a separatorsCollapsible property.
- MenuItem now displays the keyboard shortcut from an associated Action.
- SearchField now allows navigation with keys if its TextInput is empty.
- A subset of the existing TextField APIs were added to SearchField for convenience: selectTextByMouse, selectedText, selectionStart, selectionEnd, cursorPosition, select(), selectWord(), and deselect().
Qt Quick Dialogs Module
Qt Quick Effects Module
Qt Quick Test Module
- TestCase's optional property is deprecated in Qt Quick Test. Use skip() instead.
Qt Quick 3D Module
- Added the SkyMaterial QML type for rendering a procedural sky and generating image-based lighting data.
- Added QuadTextureProvider to QtQuick3D.Helpers import. A QML type used to render a quad texture using a custom fragment shader.
- Model gained an instancingLodFactor property for manual level-of-detail control when using GPU instancing.
- ExtendedSceneEnvironment gained ssrThickness and ssrMaxSteps properties for finer control of screen-space reflections.
- RuntimeLoader gained query() and queryAll() methods for finding objects by name or type within a dynamically loaded scene.
Qt Quick 3D XR Module
- Added support for mono view configuration (
XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO), enabling Qt Quick 3D XR applications to run on 2D XR devices such as AR glasses.
Qt Quick 3D Physics Module
- Added five joint types for constraining physical bodies: DistanceJoint, FixedJoint, PrismaticJoint, RevoluteJoint, and SphericalJoint. All share the common base type PhysicsJoint.
Qt Quick VectorImage Module
- Added asynchronous property for loading vector image.
- Added status property for tracking the progress of loading the image.
- Added retainWhileLoading to be used in combination with
asynchronous. - Added generatedItem property for accessing the generated subtree.
Qt Serial Port Module
Qt Serial Bus Module
Qt Sql Module
Qt SVG Module
- Animated SVG files are now supported by QMovie and AnimatedImage.
Qt Labs StyleKit Module
- Introduced QStyleKitStyle, a QStyle subclass that applies StyleKit-based styling to QWidget applications.
- The style now provides implementations for the RoundButton and MenuSeparator Qt Quick Controls types, replacing the generic fallback.
Qt TaskTree Module
- QtTaskTree::For gained an overload accepting
qsizetypefor the iteration count. Use this as a shortcut forFor(RepeatInterator(n)). - QtTaskTree::Forever is now implicitly convertible to QtTaskTree::Group.
- QtTaskTree::ListIterator gained an overload accepting a getter function returning QList.
Qt Test Module
- Benchmark results now include variance and standard deviation across measurement backends (time, CPU ticks, events, Valgrind).
- The plain-text benchmark logger now formats floating-point results using scientific notation for consistency.
- When non-existent test functions are specified on the command line alongside valid ones, the valid tests are still executed.
Qt VirtualKeyboard Module
Qt WebEngine Module
Qt PDF Module
- QPdfSearchModel gained a status property and a Status enum to track whether a search is in progress, idle, or complete.
- QPdfView now supports control-mouse-wheel zooming centered on the cursor position.
Qt WebView Module
Qt Widgets Module
- QTreeView gained QTreeView::itemDecorationRect(), which returns the bounding rectangle of the decoration (icon) for a given index.
- QStyle::StandardPixmap gained QStyle::SP_TabScrollLeftButton, QStyle::SP_TabScrollRightButton, QStyle::SP_TabScrollUpButton, and QStyle::SP_TabScrollDownButton for tab bar scroll buttons.
- QDialogButtonBox gained QDialogButtonBox::standardButtonText() and QDialogButtonBox::standardButtonShortcut(), which return the text and the shortcut of a QDialogButtonBox::StandardButton respectively.
- On macOS, QMainWindow's unified title and toolbar mode has been modernized to use effect views for background styling.
Qt XML Module
Qt MQTT Module
Tools
Qt Assistant
- Qt Assistant now renders light/dark themed SVG diagrams correctly when a dark color scheme is active, matching the behavior of the online Qt documentation.
QML Command Line Tools
- Added the
--only-explicit-categoriesoption to qmllint to suppress all default warnings. - Non-registered types used in properties and methods of registered types are now recorded in qmltypes as "opaque" types. This avoids warnings in tooling, allows auto-completion and go-to-definition to work in qmlls, and enables binding compilation to C++ in more places.
- Changed qmllint and qmlls to only warn once on unknown types, instead of generating warnings foreach binding and usage of the unknown type.
- Added new warnings to qmllint and qmlls for:
- Shadowed QML type members.
- Incompatible file selected variants (opt-in).
- Recursively instantiated QML types.
- QML types referred by their filename instead of their qmldir or
QT_QML_SOURCE_TYPENAMEname. - Javascript usages of the
new Array()overload taking more than 1 argument.
- Added functionality in QML Language Server to:
- Wrap Components into a Loader via a code action.
- Find C++ definitions of types declared via
QML_FOREIGN. - Show progress during background rebuilds of QML type information.
QDoc Documentation Generator
- C++20 concepts: The new \concept topic command generates a dedicated reference page for a C++20 concept, including a list of the documented types and functions constrained by it. Concept references in C++ synopses link to these pages in both HTML and DocBook output, and template parameters constrained directly by a concept (such as
template <Integral T>) display the concept name instead of thetypenamekeyword. Concept links work across module boundaries through.indexfiles. enable_if-based SFINAE constraints render as readablerequiresclauses instead of opaque unnamed boolean template parameters, extending the C++20 requires clause support introduced in Qt 6.11. When a function also has an explicitrequiresclause, the two are combined.- Explicitly defaulted and deleted functions carry
[default]and[delete]tags in the synopsis, while compiler-generated special member functions are tagged[implicit]. These tags link to cppreference.com. For such functions without an \fn block, QDoc auto-generates documentation without emitting warnings. Explicit documentation overrides the generated text, and setting the showautogenerateddocs configuration variable tofalseomits it from the output. - QDoc distinguishes hidden friends — friend functions findable only through argument-dependent lookup — from friend declarations that merely grant access. Document hidden friends, including those defined out of line, using their natural free-function syntax, such as
\fn operator==(const MyClass &, const MyClass &), instead of a class-qualified name. - A unified table replaces the scattered paragraphs of comparison documentation generated by the \compares and \compareswith commands, showing at a glance which types a class compares with and which comparison category applies to each relationship.
- The \a command now validates template parameter names. QDoc warns about undocumented template parameters in classes and type aliases, and about undocumented non-type or template-template parameters in functions.
- Customize the status descriptor and message generated by the \preliminary command with the preliminary configuration variable, allowing terminology such as "Technology Preview" in place of the default. Status commands prioritize consistently:
\preliminaryoverrides\modulestate, and\internaloverrides both. - A status set on a
\moduleor\qmlmoduletopic, such as\preliminaryor\deprecated, propagates to the module's members unless a member sets its own status. - The new \qmluncreatabletype topic command documents QML types that are registered with the QML type system but cannot be instantiated. QDoc also detects types annotated with the
QML_UNCREATABLEmacro automatically. - Attached properties, signals, and methods are annotated in the main QML reference pages, not only in the "all members" pages.
- The \qmlmethod command requires a complete signature; QDoc warns when the return type is missing or the parameter list doesn't parse.
- Include statements in class documentation reflect the actual header file names reported by Clang. Projects using Qt-style convenience headers (such as
<QString>) continue to work automatically. - Each project gets a single
.indexfile in the base output directory, replacing the per-format copies in format-specific subdirectories. Relative paths in the indexes configuration variable resolve against the.qdocconffile's location, consistent with other path variables. - Generated HTML files include automatic
<meta name="keywords">entries based on page type (class, QML type, module, example, and so on), easing post-processing and sitemap generation. Code blocks carry tags compatible with highlight.js syntax highlighting. - Smaller improvements to documentation authoring: use \meta
qdoc-suppress-inheritanceto suppress the "Inherits:" row for types that inherit a base class for documentation purposes only; \list honors start values of zero and below;\#represents a literal#character in\llink targets; and \details enforces its documented brace-delimited summary argument. - Technology Preview: A new template-based generator renders documentation from a structured intermediate representation using Inja templates, and the templates define the output format. QDoc ships with HTML and Markdown templates that work out of the box; you can also supply your own templates and themes, and a single run can produce several template-based formats. Configure QDoc with
QT_QDOC_ENABLE_TEMPLATE_GENERATORto try out the new generator pipeline. - Added LLVM/Clang 22 compatibility.
Qt Linguist
- lupdate now preserves the existing line endings in
.tsfiles. On Windows, files with CRLF line endings are updated in-place with CRLF; files with LF line endings and new files keep LF. - Qt Linguist has a new option -web-help to use online web documentation if desired.
Resource Compiler (rcc)
- rcc now deduplicates resource data using content-based SHA256 hashing. Identical files embedded in a Qt resource collection are stored only once, reducing the size of compiled-in resources without any change to application source code.
Platform Changes
Build System Changes
Building Qt
- Building Qt now requires CMake 3.25 or later.
- Added the
static_compiler_runtimeCMake feature to statically link the C++ runtime libraries. On Windows (MSVC) this uses the Hybrid CRT method, removing the dependency on the Visual C++ Redistributable.
CMake API
- Using Qt now requires CMake 3.25 or later.
- The following CMake API has been taken out of Technology Preview and is now fully supported: qt_finalize_project(), qt_extract_metatypes(), qt_deploy_translations(), QT_TARGETS_FOLDER, QT_RESOURCE_PREFIX, QT_DEPLOY_SUPPORT, and QT_ENABLE_VERBOSE_DEPLOYMENT.
- The
qt_no_entrypointtarget property has been renamed to QT_NO_ENTRYPOINT. The old name is still recognized for backward compatibility. - Added CMake policy
QTP0006. When set toNEW, qt_generate_wayland_protocol_client_sources() and qt_generate_wayland_protocol_server_sources() default toPRIVATE_CODEinstead ofPUBLIC_CODE. - qt_add_shaders() progress messages are now logged at
DEBUGlevel instead ofNOTICE, suppressing them from the default build output. Pass--log-level=NOTICEto CMake to restore the previous behaviour. - qt_add_qml_module() gained a
NO_GENERATE_QTCONFoption to suppress automaticqt.confgeneration in the build directory. - The build system now offers a <exe>_qmlpreview target for each executable with a QML module. When you "build" that target, the build system starts the qmlpreview utility with the correct arguments and allows you to QML-preview your executable. In particular it automatically resolves the .qrc file paths.
- Two new target values, QT_WINDOWS_APP_PROJECT_IDENTIFIER and QT_WINDOWS_APP_PROJECT_EXECUTION_LEVEL are now available. See also the Windows section below.
Desktop Platforms
Windows
- CMake projects now automatically generate and embed an application manifest for Windows executables built with qt_add_executable. The manifest declares Windows 10/11 compatibility, enables long-path awareness, and configures the UAC execution level. Two new CMake target properties control the generated manifest: QT_WINDOWS_APP_PROJECT_IDENTIFIER sets the assembly identity name, and QT_WINDOWS_APP_PROJECT_EXECUTION_LEVEL sets the execution level. See Qt for Windows - Deployment for details.
- windeployqt gains
--appxand--appx-certificateoptions for generating anAppxManifest.xmlsuitable for packaging as a Windows Store appx package. - QOperatingSystemVersion::Windows11_25H2 (10.0.26200) is added as a named OS version constant.
- QScreen::colorSpace() now returns the screen's actual color space derived from its ICC profile on Windows, using
ColorProfileGetDisplayDefault. - The DirectWrite font backend now reads each font's GASP table to select the appropriate antialiasing strategy per font and point size, matching the font designer's intent more closely.
- The shader disk cache is re-enabled for current Intel GPU drivers. It had been unconditionally disabled for Intel graphics on Windows for several years; a driver version check is now used instead, improving Qt Quick 3D performance on modern Intel hardware.
- QWizard no longer applies the Aero wizard style when the system is in dark mode, where it does not render correctly.
Linux
To be updated.
macOS
- QScreen::grabWindow() now uses ScreenCaptureKit instead of the deprecated
CGDisplayCreateImageForRect. A permission prompt will be shown the first time the API is used. - QWindows parented into non-flipped
NSViews now maintain their position relative to the superview's top-left corner when the superview is resized. QCocoaNativeInterface::setEmbeddedInForeignView()is no longer necessary or supported to embed a Qt view hierarchy in a foreignNSView. Qt now manages this automatically.- Sandboxed apps built against a static Qt build are now relocatable by default on Apple platforms.
- QMainWindow's unified title and toolbar mode is now implemented via Qt::ExpandedClientAreaHint and Qt::NoTitleBarBackgroundHint instead of the deprecated textured
NSWindowstyle. - QStandardPaths::standardLocations() now includes the system-wide
/Library/Preferencesdirectory forConfigLocation,GenericConfigLocation, andAppConfigLocation.
Wayland Client on Linux
Mobile Platforms
Android
Qt for Android
- Added multi-ABI support for Feature Delivery projects.
Qt Quick for Android
iOS
- QStandardPaths::PublicShareLocation now returns
<APPROOT>/Public(matchingNSSharedPublicDirectory) instead of the previously synthesized path inside the Documents directory. - standardLocations(
PicturesLocation) no longer contains a duplicate entry for the writable Documents/Pictures path. - QStandardPaths::TemplatesLocation is now correctly reported as not supported on iOS, matching the existing documentation.
Embedded Platforms
Boot to Qt and Qt Onboard
- New platforms:
- Orange Pi 2
- NXP i.MX95
- Qualcomm Dragonwing IQ6
- Qualcomm Dragonwing IQ9
- Renesas RZ/G3E
Real-Time Operating Systems
QNX
- Added Vulkan support on QNX.
- Qt Multimedia now builds on QNX 8.0. Audio playback and recording are not yet available, as the audio backend has not yet been implemented for QNX SDP 8.0.
VxWorks
- Added VxWorks 26.03 support.
WebAssembly
- QAudioSource and QAudioSink now use the Web Audio API AudioWorklets backend instead of OpenAL, enabling browser-native low-latency audio capture.
- Video frames are now uploaded to WebGL using
texImage2Dfor zero-copy rendering when using Qt Quick. - Added QCameraFormat support.
Modules Deprecated in Qt 6.12
The following modules are deprecated. We strongly advise against using them in new code.
To be updated.
For more information about the life-cycle of modules in Qt, see QUIP-14.
List of API Changes
These pages contain an overview of API changes in Qt 6.12:
Known Issues
For information about known issues in Qt 6.12 see the Qt Wiki.
© 2026 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.