Qt 6 Feature Development Plan Published

Lars Knoll, Creator of the KHTML Engine, Qt Project Lead and CTO of the Qt Company, рассказал about plans to create the next major branch of the Qt framework. Once the functionality of the Qt 5.14 branch is completed, development will focus on preparing the release of Qt 6, which is expected at the end of 2020.

Qt 6 will be developed with an eye to ensuring compatibility with Qt 5, but it is possible that some problems will arise, since the planned architectural changes and cleaning will not be possible to implement without losing a certain level of compatibility. To smooth the transition, some features of Qt 6 are planned to be included in a reduced form in Qt 5.14 and Qt 5.15 LTS releases. A toolkit will also be prepared to simplify the migration to Qt 6.

Among the main goals for the next significant branch is bringing the functionality in line with the requirements of 2020, cleaning up the code base and simplifying the maintenance of the project. Expected changes:

  • Significant QML upgrade:
    • Strong typing support.
    • Ability to compile QML into C++ representation and native code.
    • Making full JavaScript support an option (using a full JavaScript engine requires a lot of resources, which hinders the use of QML on hardware such as microcontrollers).
    • Rejection of versioning in QML.
    • Unification of data structures duplicated in QObject and QML (will reduce memory consumption and speed up startup).
    • Moving away from generating data structures at run time in favor of generating them at compile time.
    • Hiding internal components through the use of private methods and properties.
    • Improved integration with development tools for refactoring and error diagnosis at compile time;
  • Adding a new Rendering Hardware Interface (RHI) abstract layer to enable seamless use of various graphics APIs, including OpenGL, Vulkan, Metal and Direct 3D (previously Qt was tied only to OpenGL). All existing rendering infrastructure will be migrated to RHI, including QPainter, Qt Quick Scenegraph and Qt3D. It is also planned to add the Qt Shader Tools module to support various shader development languages ​​and provide cross-compilation of shaders both at the build stage and at runtime;
  • Preparation of a unified API for creating user interfaces that combine elements of 2D and 3D graphics. The new API will allow you to use QML to define 3D interface elements without using the UIP format. The new interface for integrating 3D content with Qt Quick plans to address issues such as the high overhead of integrating QML with content from Qt 3D or 3D Studio, and the inability to synchronize animations and frame-level transformations between 2D and 3D. Joint nested rendering of 2D and 3D will be implemented using a new rendering engine. A preliminary implementation of the new Qt Quick with 3D support is expected in the Qt 5.14 release;
  • Adding tools to process graphics-related resources at compile time, such as converting PNG images to compressed textures or converting shaders and meshes to hardware-optimized binary formats;
  • Embedding a unified engine for themes and styles, allowing you to achieve the appearance of applications based on Qt Widgets and Qt Quick, native to different mobile and desktop platforms;
  • Unification of tools for creating a user interface. To avoid duplication of functionality and the termination of delivery of two separate products, it is expected that Qt 3D Studio functionality will be integrated into Qt Design Studio, many of whose subsystems and plugin connection framework are built on the same code base as Qt Creator.
    Qt Design Studio also plans to provide high-quality integration with content creation packages such as Photoshop, Sketch, Illustrator, Maya and 3D Max. C++, QML, and Python are cited as the primary languages ​​supported by the unified development toolkit. Unification also means that Qt Creator can access interface design tools, and provide interface designers with the capabilities of developer tools, such as compiling a project or testing an application on a device;

  • It was decided to use CMake instead of QMake as the build system. Support for building applications with QMake will be retained, but Qt itself will be built using CMake. CMake was chosen because the toolkit is widely used among C++ project developers and is supported by many IDEs. Development of the Qbs build system, which claimed to be a replacement for QMake, terminated;
  • Transition during development to the C++17 standard (previously used C++98). Qt 6 plans to implement support for many modern C++ features, but without losing backwards compatibility with code based on past standards.
  • Ability to use from C++ some of the functionality offered for QML and Qt Quick. In particular, a new system of properties for QObject and similar classes will be presented. An engine for working with bindings will be integrated from QML into the Qt core, which will reduce the load and memory consumption for bindings and make them available to all parts of Qt, not just Qt Quick;
  • Continued work to expand support for additional languages ​​such as Python and WebAssembly;
  • Restructuring with a breakdown into smaller components and a reduction in the size of the base product. Developer tools and specialized components will be delivered as add-ons distributed through the new store catalog. Third-party add-ons to Qt, both free and paid, will also be accepted for distribution.

Source: opennet.ru

Add a comment