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

# What's New in Qt 6.12

## New and Restored Modules in Qt 6.12

Qt 6.12 adds the following modules and tools:

## 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-item `flags()`. 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 DataChangeRelevance enum and the virtual dataChangeRelevances() method, allowing subclasses to control whether a source `dataChanged` signal 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 `inotify` on FreeBSD 15 and later.
- QStandardPaths on macOS now includes the system-wide `/Library/Preferences` directory 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-backend` configure 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-encoding` request 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 `IndirectDrawBuffer` can 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_fault` to 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

### 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 `Range` header, 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_DIRECTORY` options to generate Doxygen based documentation alongside the client code.
- Added support for the https://swagger.io/docs/specification/v3_0/data-models/oneof-anyof-allof-not/#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_PROPERTIES` of qt_add_protobuf() to revert to the old behavior.

### Qt Qml Module

- Added new method insertRow to QQmlTreemodel to insert rows into specific positions in the model.
- Added new method moveRows to QQmlTreemodel to rearrange the structure of the model.

### Qt Quick Module

- Added strokeGradient property to ShapePath.

### Qt Quick Controls Module

- Added the `QtQuick.Controls.Native` style. `import QtQuick.Controls.Native` chooses 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

### Qt Quick 3D XR Module

### Qt Quick 3D Physics Module

### 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 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 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

### QDoc Documentation Generator

### Qt Linguist

## Platform Changes

### Build System Changes

### Desktop Platforms

#### Windows

#### Linux

#### macOS

#### Wayland Client on Linux

### Mobile Platforms

#### Android

##### Qt for Android

- Added multi-ABI support for Feature Delivery projects.

##### Qt Quick for Android

#### iOS

### Embedded Platforms

#### Boot to Qt

#### Real-Time Operating Systems

## Modules Deprecated in Qt 6.12

The following modules are deprecated. We strongly advise against using them in new code.

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:

- New Classes and Functions in Qt 6.12
- Obsolete Classes

## Known Issues

For information about known issues in Qt 6.12 see the Qt Wiki.