Version 6.0 of cross-platform development framework for GUIs and apps Qt has seen its promised December release and is now ready for downloading. However, those who heavily rely on add-ons might have to wait until September 2021 to really get going.
According to chief maintainer Lars Knoll, the decision to take it slow on these modules was made intentionally, “to free up time to ensure that we could complete all the changes we needed to make for the Qt framework’s essential modules”.
Version 6.1 will “focus mainly on bug fixing and stability” with a feature freeze planned for late January, and a final release scheduled for late April.
The hope is that Qt 6.2, which is supposed to see the light of day in September, will include ports of the “most important add-ons”, though there isn’t much information on who decides what makes the grade. The fact that some of the add-ons are now distributed as separate modules, however, might help to speed up the process, since it allows for independent releases should “market requirements” make it necessary.
The time freed up was used to work on a plethora of under the hood enhancements like the new graphics architecture and a new property and binding system in the project’s core component. Changing the graphics architecture was mainly done so the framework would no longer rely on OpenGL, originally chosen for the project back in 2012. Since then, a lot has changed in the world of hardware-accelerated graphics, the introduction of APIs Metal and “next generation OpenGL” Vulkan just being two examples.
Qt 6.0 therefore builds all 3D graphics on top of an abstraction layer called Rendering Hardware Interface (RHI), which lets the framework use whatever native 3D graphics API the underlying platform provides. Another new module, QtShaderTools, has been added to deal with the different shading languages of said APIs. Anyone still needing to use the OpenGL specific classes can find them in the QtOpenGL module.
The new property and binding system is amongst Knoll’s “most exciting features” of the release and was designed with ease of use, performance, and memory efficiency in mind. Property bindings are one of the central features of the Qt Modeling Language QML and allow users a way of specifying relationships between object properties.
However, in Qt 5 this was only supported when using the Qt Quick library. The new system aims at making the bindings available to C++ developers as well. Devs are advised to add binding support to their existing properties in order to benefit from the new system. However “most properties in Qt 6 itself still have not been ported to support the new binding engine”, so there might not be a huge rush to do so.
Speaking of C++, programmers working in that language need to make sure they use a C++17 compatible compiler when using Qt 6, since this has become a requirement with the new release. The latter has been built using CMake, since the tool has taken over from qmake. Build systems working with the old tool should continue to work, though using CMake is recommended for new projects.
Qt 6.0 is meant to work on Windows 10, macOS 10.14 and newer, Linux (Ubuntu 20.04, CentOS 8.1, OpenSuSE 15.1), iOS 13 or newer, and Android with an API level of 23 or newer. It is also supposed to support “a wide range of embedded devices running Linux”, with real-time operating systems being the exception.
More details and compatibility information can be found in the announcement post. Developers looking to use Qt 6.0 in Qt Creator and Qt Design Studio are meanwhile promised new versions supporting the updated framework before Christmas.