I'm thrilled to announce that we've released Qt 5.15 LTS today. Qt 5.15 is going to be the last feature release of the Qt 5 series. As such, it is a bit special, and a lot of work has gone into preparations towards Qt 6, our next major release. While Qt 5.15 is supported as usual for all our users, Qt 5.15 will also provide long-term support for three years to all commercial license holders, including the new Qt for Small Business. Option for extended support is available after the three year support period.
As the last release of the Qt 5 series, we wanted to make sure that Qt 5.15 is a great release that you can easily upgrade to with your ongoing projects. It is, as always, fully backward-compatible with previous Qt 5 releases. A large amount of work has gone into bug fixes, and Qt 5.15 is the best and most stable release we've done in the Qt 5 series.
Qt 5.15 also serves as a stepping stone towards Qt 6. While Qt 6 will feature some more substantial changes in Qt's fundamentals, we are trying to keep it as easy as possible to migrate codebases from Qt 5 to Qt 6. To help with that transition, we have flagged a lot of functionality to be removed in Qt 6 as deprecated. Enabling and fixing warnings about deprecated functionality in 5.15 will bring you a long way towards moving your codebase to Qt 6.
But Qt 5.15 also has plenty of new features of its own. To have a look at some of them, read on and/or sign up for the upcoming Qt 5.15 LTS webinar with Tuukka Turunen and myself.
Abstracting 3D graphics APIs
Probably the most significant changes have happened on the graphics side. A lot of the changes are happening under the hood though and are not immediately visible to our users. For the last year, we have been working on a complete revamp of the architecture of our graphics stack. This upgrade will become central in Qt 6 but is already available in Qt 5.15 as an opt-in.
We had built the graphics stack in Qt 5 around the assumption that we can use OpenGL as the cross-platform API for 3D graphics. Over the last couple of years, significant changes in the industry have made developing and deploying applications that use 3D graphics more complicated. Apple started working on Metaland has deprecated OpenGL support on macOS and iOS some time ago. The Khronos grouphas been working on replacing OpenGL with Vulkan, which is making its way to Android and Linux. Microsoft's Direct 3D 12 is a completely rewritten API and not compatible with older Direct 3D versions at all. At the same time, OpenGL will not be going away for quite some time to come.
With Qt's cross-platform promise, we want to have a solution that works everywhere. To achieve that, we have started working on an abstraction layer for all those different APIs a bit more than a year ago. It's called the Qt Rendering Hardware Interface (RHI) and can be used to run Qt Quick applications on top of Direct 3D, Metal, and Vulkan as well as OpenGL. It is supported as a Technology Preview in Qt 5.15, you can opt into using Qt RHI by enabling it via an environment variable. In Qt 6, this layer will form a very central part of Qt's architecture.
For more details about the RHI, please look at Laszlo's blog posts (here, here, and here) on the topic.
Qt Quick 3D
Another significant new feature of Qt 5.15 is also related to graphics. Back in Qt 5.0 times, we introduced Qt Quick as a cornerstone of Qt's architecture. Its focus was to simplify the creation of animated, touch-based 2D user interfaces. Today, Qt 5.15 comes with a fully-supported Qt Quick 3D, which extends the easy-to-use philosophy to integrating 3D content into Qt-Quick-based applications. With Qt Quick 3D, you can easily define a 3D scene in QML, define your meshes, lights, and materials and combine everything seamlessly with your 2D UI.
Where you needed to develop the 2D and 3D parts separately using different technologies (using Qt 3D, Qt 3D Studio, or raw OpenGL), you now have one integrated solution at your fingertips.
We have developed a cool demo, with which you can test the different features in Qt Quick 3D 5.15, like changing the light type and count, model complexity and count, texture size, materials, and anti-aliasing method and quality, among other things. That way, you can quickly test if, for example, the number of models drawn has more effect on the performance on their hardware than the number of triangles in a model. Here's a video demo:
Qt Quick 3D was introduced as a Technology Preview in Qt 5.14. Qt 5.15's fully supported version makes use of many additional features like support for post-processing effects, a new C++ API for custom geometry, a Quaternion-based API for rotations, and support for spotlights. You can now more easily use 2D Qt Quick inside a 3D scene and at a higher overall performance thanks to a great deal of behind-the-scenes work. Have a look at Andy's talk from the Qt Virtual Tech Con for details.
Qt Design Studio 1.5
Qt Quick 3D adds a huge amount of options to make cool new applications that include both 2D and 3D elements in the user interface. As you might know, we have been putting a significant amount of work into making all of that functionality available to designers through Qt Design Studio. Because of that I am extremely happy to let you know that all of the functionality of Qt Quick 3D is also supported in Qt Design Studio 1.5 that we have also released today. Please have a look at the separate blog post on Qt Design Studio for more details.
QML now has the concept of 'required' properties for components. These are properties that have to be set by a user of the component. Components can now be specified inline in a QML file. We've also added a new, declarative way of registering types.
We have improved the qmllint tool to give you far better warnings about possible problems in your QML code base. We've also added a new qmlformat tool that can help you format your QML files according to our QML coding style guidelines.
Finally, we've also worked on making sure that QML used in Qt for MCUs and Qt 5.15 are compatible.
A couple of new features have also appeared in Qt Quick. We've added support for color spaces to the Image element and added a new PathText element to Qt Quick Shapes. The pointer handlers have a new cursorShape property to set the shape of the mouse cursor on desktop systems, and a new HeaderView item makes it easy to add horizontal or vertical headers to a TableView.
Qt Lottie, a module that we introduced as a Technology Preview in Qt 5.14, is now fully supported. The module allows you to integrate After Effects animations into your Qt-based application. Learn more about Qt Lottie in this webinar and this blog post.
Qt WebEngine has been updated from Chromium 77 in Qt 5.14 to Chromium 80 and comes with all the new features from that Chromium update.
Qt 3D has gained better profiling and debugging support and a couple of smaller new features.
Qt Multimedia now supports rendering to multiple surfaces. In Qt GUI, image scaling and conversion routines are now multi-threaded for many use cases.
Qt Network now supports TLS 1.3 session tickets and configurable timeouts.
In Qt Core, QRunnable and QThreadPool can now work together with std::function and a new QFile::moveToTrash() method makes moving items to the trash can possible in a cross-platform way.
Finally, we've also added support for the native file dialog on Android.
You can find a lot of information about Qt 5.15 and Qt 6 in the talks from Qt Virtual Tech Summit that we had last week.
Qt 5.15 is available now for all our users. For our open source users, it will be supported in the same way as other regular Qt releases until the release of Qt 6. For commercial customers, Qt 5.15 will be long-term-supported (LTS) for three years with regular bug fix releases beyond the release of Qt 6.
Remember that Qt 5.9 will stop receiving support by the 31st of May. While we have gone through great lengths to make sure Qt 5.15 will be easy to upgrade to, you still have the option to extend your support, should you need it. Watch Andy Shaw's very informative talk from Qt Virtual Tech Con to learn more about your options or contact us with any questions you may have.
Finally, I'd like to thank everybody who helped make this release possible and contributed to it.