Qt 6.8 LTS Released!

We are thrilled to announce the release of Qt 6.8, packed with support for new desktop, mobile, and embedded platforms, hundreds of improvements, and exciting new features to boost your development experience and meet the needs of demanding applications.

Check out the highlights here:

For this release we have focused on improving and stabilizing existing functionality. With over 500 bug fixes and performance improvements since Qt 6.7, your existing code will run better without changing a single line. On macOS, Qt Quick applications now integrate with the native menu bar, and for a native Windows 11 look they can use the new Fluent style. Resizing Quick windows is snappier on macOS with Qt 6.8, and on Windows the application start-up time has been improved by changing the default font database to DirectWrite.

Several modules that were under technology preview have been completed: Qt Graphs, Qt HttpServer, and Qt GRPC are promoted to be fully supported from this release on. Thanks to the feedback from our users we were able to finish those modules with substantial improvements since their initial introduction as technology previews.

For commercial users, Qt 6.8 is long-term supported, and with this release we are switching from 3 years to 5 years of support and maintenance. In addition, we support the creators of software products with the upcoming Cyber-Resilience Act regulations in the European Union by providing Software Bill of Material (SBOM) documents for Qt libraries in the SPDX v2.3 format, with information needed to improve software security.

Deploy to new Platforms, Architectures, and Devices

By upgrading to Qt 6.8, you can make your existing mobile application available to users running iOS 18 or Android 14.

Developing for Windows on Arm is now fully supported, enabling users to target the new Microsoft CoPilot+ PCs launched this year. Your desktop application can be deployed to macOS 15, and also Linux desktops on Arm. This completes support in Qt for the Arm architecture across all device categories, from embedded to mobile and desktop.

As a completely new category of devices, you can now create applications and user experiences for Apple Vision Pro and Meta Quest 3 XR headsets. For device creators we have added support for Raspberry Pi 5 and NVIDIA AGX Orin, as well as a number of SoCs from our technology partners at NXP, Toradex, and STM. With the StarFive VisionFive 2, Qt 6.8 supports a single-board computer based on the new and increasingly popular RISC-V platform.

Build Smaller and Leaner Qt Applications

With Qt 6.8's Configure Options, developers can fine-tune Qt for performance and efficiency, precisely catering to the specific of their applications. By removing unused features and components from the Qt framework, applications can reduce ROM usage by up to 77%, lower RAM consumption by 32%, and launch significantly faster.

Read our walkthrough of reducing the binary size of the coffee-machine example, and the documentation about building an optimized Qt for more information.

Qt Graphs: Fully Supported for 3D Data Visualization

With Qt 6.8, Qt Graphs is now fully supported, offering developers a powerful toolkit for creating interactive and dynamic 2D and 3D visualizations. Whether you're working on scientific simulations, financial charts, or real-time data analysis, Qt Graphs provides the rendering capabilities and performance optimizations needed to bring your data to life. Qt Graphs 3D now supports transparency in Bars3D, and gives more control over label margins, title positions, and grid line rendering. Qt Graphs 2D can render custom bars using QML components, supports Stacked and StackedPercent bars, can display labels on bars and titles on axis, and has more data mapping APIs.

We have unified the theming API for 2D and 3D graphs, and moved Qt Widgets specific APIs into a separate Qt Graphs Widgets module, so pure Qt Quick applications do not need to link against Qt Widgets anymore. For more details on the changes we made to Qt Graphs while it was under technology preview, see Sami's blog post.

Users wanting to migrate from Qt Charts or Qt DataVisualization can find migration guides in our documentation.

Qt Multimedia: Custom data and audio post-processing

Qt Multimedia has been a cornerstone for building media-rich applications, and in Qt 6.8, we've made it even better. With QVideoFrameInput, QAbstractVideoBuffer, and QAudioBufferInput, applications can send custom media data into a recording session, and with QAudioBufferOutput, decoded audio data can be received for post-processing.

On Linux desktops, QScreenCapture now supports the Wayland compositor, using the ScreenCast service via the XDG Desktop Portal.

Qt Quick: More Effects and Scalable Vector Graphics

Qt Quick continues to be a go-to module for building fast and fluid user interfaces. In Qt 6.8, we've made several performance optimizations to enhance rendering speed, especially for complex scenes. The Qt Quick Effect Maker learned about glow and masked blur, can animate sprites, and bend items into a circle or arc. This means smoother animations and better responsiveness in resource-intensive applications.

 

A key addition in this release is the Qt Quick Vector Image module, which enables the seamless integration of SVG files as scalable vector graphics within Qt Quick scenes. This is a perfect option for developers looking to create resolution-independent and responsive UI elements, ensuring that your designs look sharp and consistent across different devices and screen sizes. In the Qt Quick Shapes module, the ShapePath element can now take any texture provider item to fill the shape, applying an arbitrary transform.

decorative-angel-zoomed-vectorimage

Read more about the improvements in vector graphics in Qt 6.8 in Eskil's dedicated blog post.

QQuickRenderTarget has gotten new APIs that give developers more control over texture handling, and make it easier to integrate Qt Quick 3D with external engines, frameworks, and APIs.

TableView now allows programmers and end-users to move columns and rows, and Image and BorderImage types can retain the previous image until a newly set image is loaded asynchronously.

Qt Quick Controls: Better integration into the desktop

Qt 6.8 adds an implementation of the Fluent WinUI3 design system as a Qt Quick Controls style. That new style makes application look and feel native on Windows 11, but is implemented using Qt Quick primitives and is available on all platforms.

On macOS, the Quick MenuBar and menus integrate by default with the native menubar of the system. Context menus and other popups can be made into top-level popup windows as well, which is now the default behavior for Qt Quick dialogs on desktop platforms. Applications can use the new popupType property to control this for each popup.

 

New XR Module: Powering Immersive Experiences

With the growing importance of virtual, augmented, and mixed reality applications, we are excited to introduce a new module in Qt 6.8 dedicated to supporting XR devices. The new Qt Quick 3D Xr module makes it easier for developers to build immersive experiences for virtual reality (VR) and augmented reality (AR) platforms, ensuring Qt remains a top choice for application developers no matter the target device.

xr

The new module implements support for spatial input via hand tracking and controllers, as well as for spatial anchors and locomotion. This allows users to interact with a Qt Quick 3D-built environment when using Apple VisionPro, or an OpenXR device such as the Meta Quest 2 and 3.

For optimal rendering performance in a head-mounted display, we have completed the support for multi-view rendering in the Qt Quick scene graph, in our standard Quick items and materials, and in the Qt Shader Tools build system integration.

Qt Quick 3D: Improved Shadows and Material enhancements

Qt Quick 3D 6.8 renders better shadows by using cascaded shadow maps and percentage-closer filtering soft shadows. 

Technical artists can adjust the Fresnel through new properties of PrincipledMaterial, and apply masking based on the vertex color attribute. Custom materials now support the same properties as PrincipledMaterial.

Networking with Qt Network, Qt Network Auth, Qt GRPC, and Qt HttpServer

QNetworkAccessManager can now send HTTP requests over a local socket, and applications can use the QFormDataBuilder for easy creation of multi-part HTTP messages.

In the Qt Network Auth module, we have made many improvements and addressed many issues based on input from users. In addition, the new QOAuthUriSchemeReplyHandler class allows handling of private/custom or https URI scheme redirects, and Proof of Key Code Exchange is supported by the QOAuth2AuthorizationCodeFlow class.

QDnsLookup learned about TLS Association records, and can now send DNS over TLS, and informs the client whether the DNS server has performed any verification on data authenticity.

The Qt GRPC and Qt Protobuf modules are now fully supported and have a stable API, with added support for streaming.

Other Enhancements Across Modules

In addition to the major additions above, we’ve made a series of enhancements across the framework to further streamline development. For a comprehensive list of all features, check our What's New in Qt 6.8 documentation page.

Qt Core

The new QChronoTimer integrates with std::chrono and improves the precision of time-based operations. In hot code paths, QString, QByteArray, and QList can now resize without data initialization.

QHash now supports heterogenous lookups for some Qt types, notably QString and QStringView, and QDirListing provides an iterator-based API for directory entries:

using F = QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s},
                    F::FilesOnly | F::Recursive);

for (const auto &dirEntry : dirList) {
    QFile f(dirEntry.filePath());
    if (f.open(QIODevice::ReadOnly))
        qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}

Developers targeting the Android platform can use the QtJniTypes namespace to declare Java types with their JNI signature, and rely on compile-time signature generation when interfacing with JNI via QJniObject. The QJniArray type makes it easy to work with Java arrays from C++ code.

Q_DECLARE_JNI_CLASS(TimeZone, "java/util/TimeZone");
using namespace QtJniTypes;

const QJniArray availableIDs = TimeZone::callStaticMethod<String[]>("getAvailableIDs");
for (const auto &availableID : availableIDs) {
    // ~~~
}

And we have continued to add support for the C++20 space-ship operator<=>() to Qt value types, and floating-point geometry types such as QPointF and QMarginsF now support fuzzy comparison and null-checks.

Qt GUI

Applications developed with Qt 6.8 can now explicitly request a color scheme to override the system setting with an explicit Dark or Light appearance:

 

 

Applications can also override the context menu trigger to provide consistent application behavior across platforms.

We have made several additions to our color space support, and added more APIs for fine-grained control over the merging and styling strategy of fonts.

The accessibility framework now supports the reporting of attributes, and allows applications to raise announcement events that are picked up by assistive technologies.

Qt Sql

Users of the Qt Sql module can now specify the numerical precision policy, and a QSqlDatabase can change the thread affinity of the database connection. The PostgreSQL and MySQL/MariaDB drivers now correctly handle date and time data when the server is in a different time zone than the client.

Qt Test

Test authors can now make failing or skipped tests throw an exception, making it easier to write tests that use sub-routines. The timeout-macros now accept std::chrono literals, resulting in more readable test code.

Qt WebEngine

The new QWebEngineFrame class adds frame-specific APIs, such as printing or running JavaScript on specific frames. QWebEngineClientHints gives applications more control over the browser identifications, and QWebEnginePermission makes it easy to manage new and existing website permissions.

Qt Widgets

We have made several improvements to our rendering code for high-DPI displays so that widget-based applications look crisp on all screen types.

Tools

Our documentation generator QDoc, which interfaces with Clang, now requires minimum Clang 17. It has moved from the C-based to the C++-based APIs. This improves our ability to implement support for new C++ language features in QDoc. In addition, QDoc has been extended with a range of new commands. Check out the release notes for the specific details.

The QML Language Server now provides semantic syntax highlighting, has improved support for the JavaScript language, can generate snippets for Quick types, and give documentation hints.

Upgrade Today

With these powerful new features and performance improvements, Qt 6.8 continues to empower developers to build responsive, visually engaging, and media-rich applications across a wide range of platforms. I’d like to thank all the contributors who have helped with making Qt 6.8 a reality. You can find a full list of all community members that landed a patch to the Qt source code at the end of the release notes. A special Thanks 💚 goes to all of you who have helped making Qt better by reporting bugs, sending us your feedback and contributions, or by telling us about your use cases. And last but not least, I'd like to thank everyone involved in getting the release out of the door!

We can't wait to see how you'll leverage the latest version of Qt to create the next generation of apps. Upgrade to Qt 6.8 today and take your projects to the next level!


Blog Topics:

Comments