Qt 6.5 LTS released!
April 03, 2023 by Volker Hilsheimer | Comments
Today we have released Qt 6.5! In the 6th release of the Qt 6 series, we introduce lots of new functionality for graphics and UI developers and the application backend. In addition, Qt 6.5 brings many fixes and general improvements and will be a long-term supported release for commercial license holders.
Let's start with some highlights that Qt 6 applications get practically for free.
Improved theming and styling
With Qt 6.5, applications can easily support dark mode on Windows. On Windows, supporting a dark theme is an explicit choice that an application developer has to make. Implicitly switching an application to dark mode if that application expects window backgrounds to be light could break a lot of user interfaces. But as long as the application uses a style that doesn't override the palette explicitly, such as the Fusion style, Qt will respect the user's choice of color scheme and use the dark system palette. Qt will also configure the title bar and window frame to be in sync with the overall appearance.
In addition, applications can react to changes in the system theme by handling the QStyleHints::colorScheme property change notification.
In Qt Quick Controls, we completed the iOS style, implementing also many controls that don't have an equivalent on native iOS. For applications targeting Android, we have updated the Material style to the Material 3 design system. Applications using the Material style will automatically get a refreshed look. We added a few APIs to allow UI developers to modify certain visual aspects, such as the containerStyle for TextField or TextArea, or the roundedScale for buttons, popups, and drawers.
And on macOS, applications using QMessageBox or QErrorMessage will show the native dialogs with a modern, centred UI design.
Platform improvements, from devices to web
With Qt 6.5, we are adding support for Android 12 while making sure that Qt keeps working as expected on older versions. Even with the significant changes on the platform, a single build of your Qt application can now be deployed to devices running any Android version from 8 to 12 without any changes.
We have upgraded our Boot2Qt software stack for device builders to use the Yocto 4.1 (Langdale) release, which gives access to application development for embedded hardware across many industries. On the Linux Desktop, commercial Qt 6 Debian 11 packages will later on be available via apt
, which makes deploying makes it convenient to deploy commerical Qt applications to debian-based Linux distributions.
Qt 6.5 for WebAssembly follows up on the initial supported release in Qt 6.4 and adds support for video rendering and accessibility for widgets. Qt WebEngine has been updated to Chromium 108, and even includes Chromium 110 security patches. Now it supports hardware accelerated video rendering on Linux under Vulkan for both X11 and Wayland.
Beautiful and performant effects for 2D and 3D
The new Qt Quick Effects module gives Qt Quick UI developers access to ready made graphical effects, which can be combined into a single effect without paying a performance penalty. The interactive Qt Quick Effect Maker tool makes it easy to build and combine complex custom effects. The combination of those technologies replaces the Qt Graphical Effects module from Qt 5 with a solution that performs better, is easier to use, and more flexible to extend.
Qt Quick 3D learned how to automatically and explicitly adjust the level of detail for models, so simplified meshes can be generated and used for objects far away from the camera. With SceneEnvironment's new support for fog, distant objects can also be made to fade out. For more complex post-processing effects, the ExtendedSceneEnvironment allows combining effects, such as depth of field, glow, or lens flare, into a single, high-performant post-processing effect that only requires a single render pass.
Qt everywhere - connectivity everywhere
Communication with web services and data exchange between devices has always been possible with Qt's low-level classes in Qt Network and the higher-level serialization support for JSON and CBOR.
With the new Qt GRPC Qt module, we now add a framework for integration of gRPC and Protocol Buffer technologies in Qt. Qt GRPC allows communication with gRPC services, and with Qt Protobuf, it provides the infrastructure for serializing Qt-based classes. With those modules, developers can define data and messages in protobuf specifications (.proto
) files. Qt integrates the standard tools into the build system to generate C++ types through which applications can communicate with service endpoints.
In Qt Network, we have introduced the capability to configure HTTP 1 connections, and we added a number of CAN bus support classes to the Qt Serial Bus module, providing support for encoding and decoding CAN bus messages, processing frames, and parsing DBC files.
The gRPC, protobuf, and CAN bus additions are all under Technology Preview in Qt 6.5, and we are looking forward to your feedback!
Qt Location back as Technology Preview
The Qt Location module is back in Qt 6.5 as a technology preview. As described a few months ago in a separate blog post, the Qt 6 version of Qt Location takes fewer detours. Rendering of items is now implemented via Qt Quick Shapes, and thanks to the improved QML type system in Qt 6 we have been able to remove a lot of wrapper classes. In this initial release of Qt Location for Qt 6, we only support the Open Street Maps backend. We have removed some of the functionality available through common APIs, but only implemented for a single backend. Refer to the porting guide for a list of API changes.
We have split the Qt Quick Map component into two types: the Map type is responsible for displaying a map but doesn't provide any interactivity. The new MapView type replaces the MapGestureArea
and implements typical interaction features such as pinch-zooming and panning through Qt Quick input handlers.
While the module itself is under technology preview, the GeoJSON support is on par with the rest of the module and no longer experimental.
New functionality in existing modules
Qt 6.5 adds plenty of new features on top of Qt 6.4 and the previous Qt 6 releases, and this blog post focuses on those improvements. Before diving into the details for each module, perhaps this is a good time to point those of you who are still on Qt 5.15 today at the overall feature comparison page.
Qt Core
Many platforms require explicit permission from the user before an application can access certain services. With Qt's new permission APIs, applications can now check and request permission for features that require such consent. In this first release, we include types to ask for permission to access the location, Bluetooth, camera, and microphone capabilities of the device, as well as access to the user's calendar and contacts data.
Qt GUI
Applications that need to exchange platform-specific data formats via the native clipboard can now implement QWindowsMimeConverter and QUtiMimeConverter to support Windows or macOS-specific formats. If you have implementations of QWindowsMime
or QMacMime
in Qt 5, then those will almost directly translate to the new APIs but require less boiler-plate code to register the converters with Qt.
The new setBadgeNumber API in QGuiApplication
makes it easy for applications to inform the user about the number of actionable items, like unread messages, in the dock or taskbar.
And we updated our Vulkan support to use modern underlying infrastructure, added markdown and HTML support for checkable list items, and provided access to the string indexes for a run of glyphs in QTextLayout.
Qt Multimedia
The FFmpeg media backend is now the default for macOS, Windows, Android, and desktop Linux - on embedded systems, GStreamer continues to be the default, but FFmpeg can be enabled explicitly. This backend makes the same functionality available consistently on almost all platforms. The Qt Spatial Audio module is now fully supported after its introduction as a technology preview with Qt 6.4.
As long as the FFmpeg backend is used, Qt applications can now capture the screen using the new QScreenCapture class, which is a new type of video input. The video from a screen recording can be directed through QMediaCaptureSession
for further processing, such as a QMediaRecorder
or QVideoWidget
.
Qt QML and Qt Quick Compiler
One tool of the Qt Quick Compiler, the QML type compiler, qmltc
, supports more QML constructs now, most notably translation bindings, inline components, singletons, and signal handlers. The QML script compiler implemented in the tools qmlcachegen
and in qmlsc
, can now handle more JavaScript constructs, such as output via console
, let
and const
, or string building via arg
. These improvements are available in both editions of the Qt Quick Compiler, the dual-licensed version that is included in Qt 6.5, and in the commercial-only Qt Quick Compiler Extensions add-on. All of this results in the generation of more and better C++ code from QML and JavaScript.
The QML module improvements in Qt 6.5 make it much simpler to create QML elements via their module URI and type name. The support for sequence types has been standardized and extended, with support for methods like map()
, reduce()
, or forEach()
. Value types that have a suitable constructor or are registered as structured types can be instantiated directly from QML. This removes the need for constructor helper functions in singleton C++ types.
Qt Quick and Quick Controls
TableView got support for interactive features such as in-place editing of cells, resizing rows and columns, and multi-selection. TreeView's delegate also supports in-place editing, and the Qt Quick input handlers got a few new properties.
Qt Widgets
QOpenGLWidget now supports stereoscopic rendering as long as the underlying system supports it.
And we have made a few smaller additions to QKeySequenceEdit, which can now be configured to limit the length of a key sequence and to allow the end-user to finish recording a sequence with one or more key combinations.
Other improvements across Qt
In addition to the above, we simplified the QDateTime
and QDate
APIs by folding the time specification into the QTimeZone
; we made it easier to use QBindable
for properties with a notify signal, and give applications more control when working with animations using a BoundaryRule. Positioning-aware applications can use the new SatelliteSource
type directly from QML.
Stability
Qt 6.5 is the second LTS release of Qt 6, and we have added a lot of new functionality in the last 18 months since the Qt 6.2 LTS release. While doing that, we have also fixed a lot of bugs: according to our JIRA bug tracker, we have fixed close to 3500 tickets in that timeframe! And we have also used the time and your feedback to improve the stability of new features. In Qt 6.5, the Qt Quick 3D Physics module we introduced as a technology preview with Qt 6.4 has matured and is now fully supported.
Big thanks to all contributors
I’d like to thank everybody who has helped make Qt 6.5 a reality. You can find a full list of all 286 contributors to the Qt source code at the end of the release notes. And I'd also like to thank all of you who have helped make Qt better by reporting bugs, sending us your feedback, or telling us about your use cases. And last but not least, I'd like to thank all of you who keep our CI and code review systems running.
As always, the new release will be available in the Qt installer. You can also get the release from our download page or your Qt Account page.
Blog Topics:
Comments
Subscribe to our newsletter
Subscribe Newsletter
Try Qt 6.8 Now!
Download the latest release here: www.qt.io/download.
Qt 6.8 release focuses on technology trends like spatial computing & XR, complex data visualization in 2D & 3D, and ARM-based development for desktop.
We're Hiring
Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.