Qt 6.7 Released!

Qt 6.7 is out with lots of large and small improvements for all of us who like to have fun when building modern applications and user experiences.

Several additions are released as technology previews, and we are looking forward to your feedback so that we can get everything ready for the next LTS release!

Check out the highlights here:

Use C++20 with Qt

C++20 is still opt-in and experimental for many compiler toolchains, and for the time being we don't see any reason to require C++20 to build or use Qt. However, we want our users to be able to use the new standard as much as they like in their own code. Some of the changes made between C++17 and C++20 might require adjustments to existing code, and they required adjustments in Qt. For Qt 6.7 we have continued to make adaptations that make Qt feel like a natural part of a modern C++ stack.

One helpful addition to the C++20 language is the three-way comparison operator<=>(), also known as the "spaceship" operator. When implementing this operator, types are required to specify their ordering category. In Qt 6.7, we have added Qt::{strong,weak,partial}_ordering classes as C++17-compatible implementations of the respective std::*_ordering types. For type authors, Qt 6.7 provides helper macros that can be used to implement relational operators. These macros will expand to operator<=>() in C++20 builds, and fall back to all six operators in C++17 builds.

A useful addition to the standard library in C++20 that we wanted to use ourselves, and also make available to Qt users, is std::span. As a non-owning representation of a contiguous sequence of objects, a span is cheap to construct and pass through function calls, and with QSpan we now have a C++17 implementation of that type.

We also continued to add std::chrono support to relevant Qt APIs. Transfer timeouts in Qt Network APIs can now be specified as std::chrono types and literals, such as 5s for 5 seconds.

Qt Graphs with support for 2D and 3D visualizations

In Qt 6.6 we introduced a first technology preview of Qt Graphs as a modern Qt 6 framework for visualizing data on top of a hardware accelerated rendering architecture.

With Qt 6.7, we are adding support for 2D bar, line, and scatter graphs, in addition to the 3D visualizations that have already been available since Qt 6.6. The module integrates with Qt Quick animations and effects, and provides theming, and handler-based interaction APIs.

2d-graphs

Qt Graphs is still under active development, and continues to be a technology preview for this release. We have made some substantial improvements to the data API and architecture to reduce the amount of memory allocations, and to integrate consistently with Qt's abstract item model. We expect additional architectural and API improvements before we take it out of technology preview for Qt 6.8 LTS, and are looking forward to hearing about your use cases and wishes so that we can make sure that we can accommodate them in the best possible way.

Connectivity, protocols, and distributed architectures

Developers of distributed systems can now work more efficiently with HTTP and REST APIs with the introduction of QHttpHeaders, QRestAccessManager, and QRestReply as new classes for REST-specific use cases.

Qt gRPC has introduced new classes for client, server, or bi-directional streaming calls, allowing for seamless messaging that get triggered automatically on value changes. The new Interceptor API makes it possible to add callback functions for selected gRPC messages, for instance to implement caching or logging. With Qt Protobuf in Qt 6.7, developers can now serialize Protobuf-messages to and from JSON, and benefit from generator improvements that support optional fields, and preserve the casing of enum values.

These new features make it easier for developers to build robust and scalable applications with Qt. Qt gRPC and Qt Protobuf will graduate from technology preview in the Qt 6.8 release, when the work to complete support for HTTP/2 has been completed.

Vector Graphics

Since its introduction, Qt SVG has supported the static features of the SVG 1.2 Tiny profile. That particular profile has over the last years become less and less relevant, and authoring tools have for a long time not followed any specific profile. For Qt 6.7, we analyzed which static elements from SVG 1.1 and 2.0 are commonly used in SVG assets, and added support for those features that we encountered most frequently: <symbol>, <marker>, <pattern>, <mask>, and the various <filter> elements. With Qt SVG in 6.7, applications can render the majority of SVG files relevant for UI builders.

SVG with mask as rendered by your browser SVG with mask as rendered by Qt SVG

 

svg-mask

 

svg-mask

 

If full support for SVG 2.0 is required, then the Qt WebEngine module continues to be the right choice.

In addition to importing SVGs as pre-rendered pixmaps into Qt UIs, we are also working on importing vector graphics assets directly into the Qt Quick scene graph. The new (and experimental) svgtoqml tool converts SVG to QML, and we have made improvements in the Qt Quick Shapes module to render in higher quality. The curve renderer introduced as technology preview in Qt 6.6 is now fully supported, and can be enabled using the preferredRendererType property.

Improvements to Fonts and Icons

After introducing support for typographic font features in Qt 6.6, we have followed up with support for variable fonts in Qt 6.7. Variable fonts combine variations of a single type face into a single font file, allowing applications to select any value of "weight" or "cursiveness." Depending on what variable axes the font designer creates, a glyph might be animated or show different layers. Read more about the variable font support and other text improvements in Eskil's blog post.

The API is now stable and consistently uses the new QFont::Tag class for specifying font features and axis names in a type-safe fashion.

The improved support for modern fonts has enabled us to add support for native icon libraries, which are often provided through fonts. The QIcon::fromTheme implementation now maps the XDG icon name to the corresponding symbol in the native icon libraries on Apple, Windows, and Android platforms. For the future we plan to use the new capabilities of our font API to add support for more icon features, such as outlined or filled versions of an icon.

variable-fonts

Hybrid applications with native UI elements and rendering

On both desktop and mobile platforms, applications often need to combine UI elements from different technologies and frameworks. Qt uses and integrates tightly with the native technologies on each platform to create basic UI elements such as windows, and it has for a long time been possible to use UI elements from other frameworks within a Qt Widgets application.

With Qt 6.7, we are now adding support for embedding native windows into a Qt Quick scene as well. This allows use of native controls such as AppKit's MapView or a Windows media player inside a Qt Quick UI, with correct positioning and stacking. By layering windows, Qt Quick UI elements can be overlaid on top of the native components as well.

foreign-windows

In addition, applications can now add rendering code, using any of the graphics APIs supported by Qt, to a Qt Quick or Qt Widgets application, by using the QRhiQuickItem and QRhiWidget classes, respectively. While such code might often not be fully cross-platform (as Vulkan, OpenGL, Direct3D, or Metal are not equally well supported on all possible target platforms), it makes it possible to integrate 3rd party frameworks that use those technologies, or to write highly optimized rendering code for any specific platform.

Updated Platform support

As with every minor release we have updated the list of supported platforms to include the latest stable versions of relevant operating systems. On desktop and mobile, Qt 6.7 fully supports macOS 14 and iOS 17, Windows 11 23H2, and Android 14. RedHat 9.2, Open Suse 5.15, SUSE Linux Enterprise Server 15 are the latest supported Linux distributions (Ubuntu remains on 22.04). Prebuilt binaries for Windows using the LLVM-based MinGW toolchain are available from the installer, and Windows and Linux on ARM are both available as technology preview.

On embedded, the Boot2Qt reference images support Yocto 4.3 Nanbield. As real-time operating systems, Qt 6.7 now includes a source-only technology preview for VxWorks 7 using SR 24.03 on iMX6 hardware, and pre-built binaries for QNX 7.1 are available from the online installer.

New and improved examples and demos

In addition to improvements in the framework, we have curated the examples and demo applications that ship with Qt, and refreshed the UI and coding style. We also created a few new applications that showcase what is possible when designers and developers work together to combine the UI, visualization, and backend capabilities of Qt.

The Lightning Viewer example uses Qt Location and Qt Quick Controls to visualize simulated lightning data, received via Qt WebSocket. The style for the controls was entirely created in Figma.

lightningviewer-1

The completely recreated StocQt example uses Qt Graphs to visualize stock data based on the NASDAQ-100. The example's UI was created using Qt Design Studio, and if an API key is provided through the settings dialog, then the data is real-time information as received from the Financial Modeling Prep service.

stocqt

The new OSM Buildings example combines Qt Quick 3D with Qt Positioning and Qt Network to implement a 3D viewer of buildings map data as received from the OpenStreetMap service.

osmbuildings

Virtual assistants are becoming increasingly popular in user interfaces, and the new Virtual Assistant example shows how easy it is to bring a 3D model to life through timeline animations.

virtual-assistant

And last but not least, the new Volumetric rendering example uses the new support for 3D textures in Qt Quick 3D to implement volume ray casting.

volumetric-rendering

Qt for Python

Once new functionality is added to Qt, our Python offering needs to adapt those in order to enable them for our Python users. Besides what's described here, many other changes were made to PySide and Shiboken that will be described in a follow-up post. Stay tuned!

The many small things that make a big difference

The above is a list of the larger new features, and like every minor release, Qt 6.7 brings many small improvements to existing classes and tools. Those additions are too numerous for this post, but you can find a comprehensive list of all additions in the documentation of What's New in Qt 6.7.

Thanks

I’d like to thank all the contributors who have helped with making Qt 6.7 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. And a special Thanks goes to all of you who have helped making Qt better by reporting bugs, sending us your feedback, 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!

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, and - as mentioned above - through Debian repositories.


Blog Topics:

Comments

K
Kelteseth
1 point
12 months ago

Why are we still using gifs in 2024? You do know that you can have videos as autoplay when setting it to mute?

R
Robert
0 points
12 months ago

Because GIFs are silent!

K
Kelteseth
1 point
12 months ago

And videos that do not contain any audio are not?

Alex
1 point
12 months ago

Will we get an update on dark mode support on Windows? Judging by git log, there is a new native QStyle for Windows 11 that supposedly supports dark mode?

Volker Hilsheimer
1 point
12 months ago

Hey Alex. Qt 6.7.0 got a new Windows 11 style for widget applications. This style is used by default on systems running Windows 11 (and theoretically above) and supports Windows dark mode out of the box.

Alex
0 points
12 months ago

Can you override dark mode based on app's own settings? Currently I'm using Fusion style with custom QPalette for thi s.

Adesh Singh
0 points
10 months ago

Hi Volker is Qt 6.7.1 or Qt 6.7.0 support also Qt Quick application , if yes could you please share details how to enable for qt quick application

I am not able to do this .

Volker Hilsheimer
0 points
10 months ago

A Fluent design system based style for Qt Quick is in the works for Qt 6.8, if that is what you asked.

Adesh Singh
0 points
10 months ago

Thanks Volker That's what I want to know .

Adesh Singh
0 points
10 months ago

When we got this release (Qt6.8 ) for qt quick https://wiki.qt.io/QtReleasing (is this helpful for checking )

P
Philippe
0 points
10 months ago

Hmm, this new Windows 11 style is not a success I must say (in Light theme, at least). Is there a way to select the old default?

C
Cristian Adam
0 points
9 months ago

Just call your application with the command line -style windowsvista or programatically via QApplication::setStyle(QLatin1String("windowsvista"));

See https://codereview.qt-project.org/c/qt-creator/qt-creator/+/568741 how Qt Creator changed back to windowsvista.

J
Jason Haslam
1 point
12 months ago

Thanks for all your hard work! Is there any news on web engine for Windows on ARM? Is this planned?

M
Maurice Kalinowski
0 points
11 months ago

Hi Jason,

first of all this depends on the availability of Chromium for that platform. Having said that, latest announcement are looking promising that this might be feasible.

Certainly, we will keep providing updates once we know more.

S Page
1 point
11 months ago

Good stuff. @Volker Hilsheimer, minor typo;

Since it's introduction

This isn't a contraction of "it is" or "it has," so no apostrophe.

Volker Hilsheimer
0 points
11 months ago

Thanks!

L
Liviu Lalescu
0 points
12 months ago

Thank you! But I am trying to download the sources opensource base tar.xz and zip and I get a 404 error from a site from China (I am from Romania, Europe).

Also, is it OK if in the Maintenance Tool I see that the binaries are from 25 March?

J
Jani Heikkinen
2 points
12 months ago

Hi! Binaries from 25 March are the correct ones. Mirroring of source packages should be OK now as well, please try again

L
Liviu Lalescu
1 point
12 months ago

Thank you, Jani and Qt team! I confirm I got the sources correctly now.

D
Dan M
0 points
11 months ago

I get the error about tools_qtcreator_gui meta.7z missing from mirror.sjtu.edu.cn . Why can't the Maintenance Tool just choose a different mirror if the one it chose by default for some reason is not working (or lagging behind)? Why can't it provide an option to switch to a different mirror (I know "hacks" exist to force it manually, but it has no business being that complicated).

Dian Obreshkov
0 points
12 months ago

I noticed that 6.7 was available in the online installer yesterday - was that the final version being released today?

V
Vladimir Minenko
1 point
12 months ago

Yes, today is the actual release day. Since today is the first day just after the Easter public holidays for many people, at least in Central Europe, some work has been done in the days before as preparation.

Ghenady Kuznetsov
0 points
12 months ago

Build is very slow with Qt 6.7.0 and MSVC2022 comparative to Qt 6.6.3. MS Compiler driver CPU load is about 35%. Upd: Qt 6.8.0 is ok.

V
Vladimir Minenko
0 points
11 months ago

Can you please provide some details? What does it mean "CPU load is about 35%" 35% more or in total? Ideally, please file a bug report on https://bugreports.qt.io/projects/QTBUG

Ghenady Kuznetsov
0 points
11 months ago

I guess there something wrong with parallel build. When i look in windows task manager while my app is building, i see one cl.exe process is stucked for a while and highly loads the CPU.

With Qt 6.6.3 and 6.8.0 all is good.

Qt 6.7.0 Elapsed time: 04:07

Qt 6.6.3 Elapsed time: 00:22

Upd: build in Debug mode is fine.

V
Vladimir Minenko
0 points
11 months ago

Which app do you build? Is it your own project or something we can try? If you feel confident that it is a problem in Qt and not a sort of a side-effect in project env, please file a bug report. Like all bug reports, it should be reproducible. So it should be a Qt example or an app which you would attach to the report. Thanks!

Ghenady Kuznetsov
0 points
11 months ago

Well, maybe this is a coincidence of some factors, coz building of my other projects is ok.

I'll wait for Qt 6.7.1 release. But if i find the cause i will post here.

Ghenady Kuznetsov
0 points
11 months ago

The problem occurred when building a UI with multiple layouts.

https://bugreports.qt.io/browse/QTBUG-124376

Bechir Zouaoui
0 points
11 months ago

the new PySide6 versions might use a different SVG rendering engine compared to the previous one. This could lead to compatibility problems with your existing SVG files. how to fixe that ?

Andrei Cherniaev
0 points
10 months ago

Updated Platform support is very important! I hope Qt will start to work in Ubuntu 24...

R
Robert
0 points
9 months ago

Are there already any plans when svgtoqml might become official?

G
gongjianbo
-1 points
11 months ago

Qt new modules are meaningless for open-source users, they are all GPL License, but Flutter is BSD License.

Volker Hilsheimer
2 points
11 months ago

At the risk of feeding a troll: last time I checked, GPL was a free-software-foundation endorsed Open Source license.

J
Junchong Tang
0 points
11 months ago

LGPL modules have not developed well, such as QtCharts, which has resulted in several tripartite libraries due to poor use.

G
gongjianbo
-1 points
11 months ago

LGPL users switching to other frameworks will have a better experience