After several months of development and several test versions, The Qt Company has launched the stable branch of Qt 6, which includes significant architectural changes.
The new version claims to be compatible with Windows 10, macOS 10.14+, Linux (Ubuntu 20.04+, CentOS 8.1+, OpenSuSE 15.1+), iOS 13+ and Android (API 23+) platforms.
Main novelties of QT 6
Of the main novelties that were mentioned and in which they were working, one of them is the abstracted graphical API that does not depend on the 3D API operating system. A key component of the new Qt graphics stack is a scene rendering engine that uses a RHI (Rendering Hardware Interface) layer. to provide Qt Quick applications not only with OpenGL, but also on the Vulkan, Metal and Direct 3D APIs.
It has been elaborated a Qt Quick 3D module with API to create user interfaces based on Qt Quick, combining 2D and 3D graphic elements. Qt Quick 3D allows you to use QML to define 3D interface elements without using the UIP format. In Qt Quick 3D for 2D and 3D, you can use a runtime (Qt Quick), scene layout, and animation frame, and use Qt Design Studio for visual interface development.
The module solves problems such as the high overhead of integrating QML with Qt 3D or 3D Studio content, and provides the ability to synchronize frame-level animations and transformations between 2D and 3D.
Another novelty is restructuring the codebase was carried out with a breakdown into smaller parts and a reduction in the size of the base product. Developer tools and custom components are now available as add-ons through the Qt Marketplace.
On the other hand, we can find that a layout engine and skins are incorporated unified to achieve the look and feel of native Qt Widgets and Qt Quick based applications from different mobile and desktop platforms.
Qt Quick 6 adds support for native macOS and Windows styles (Support for the native Material and Fusion styles for Android and Linux was implemented in Qt5). A native style implementation for iOS is expected in the next significant release of Qt.
The platform support functionality previously provided by the QtX11Extras, QtWinExtras, and QtMacExtras modules has been moved to the platform-specific APIs available directly from Qt.
The Toolkit CMake is used as the build system instead of QMake. Support for building applications using QMake is maintained, but Qt is now built using CMake.
Also, transitioned during development to the C ++ 17 standard (previously C ++ 98 was used and with Qt 5.7 – C ++ 11) and the ability to use in C ++ code some of the functions offered for QML and Qt Quick was added. This includes a new property system for QObject and similar classes.
An engine has been integrated to work with links from QML in the core of Qt, allowing to reduce load and memory consumption for links and make them available to all parts of Qt, not just Qt Quick.
Of the other changes that stand out:
- Unification of data structures, duplicated in QObject and QML (will reduce memory consumption and speed up startup).
- Avoid generation of data structures at run time in favor of generation at compile time.
- Hide internal components by using private properties and methods.
Improved integration with development tools for compile-time refactoring and bug diagnosis.
- Tools have been added to handle compile-time graphics-related resources, such as converting PNG images to compressed textures or converting shaders and meshes to binaries optimized for specific hardware.
- Extended support for additional languages such as Python and WebAssembly.
- String handling and Unicode handling significantly improved.
- The QList and QVector classes are merged, the resulting summary class uses an array-like QVector container model.
Finally, it is expected to reach parity with Qt 5 in systems support in real time in version Qt 6.2.
The next significant release of Qt 6.1 is expected in April and Qt 6.2 LTS in September 2021.