We are pleased to announce the release of the alpha version of Qt 5 - the first significant release of Qt since the launch of the Qt Project community. The Nokia development team thanks all enthusiasts of this community who are directly involved in the creation of Qt 5 Alpha, because many of the features of Qt 5 became available precisely because of their solid work. We are very pleased that the Qt Project has become a place where people unite to work together to develop their favorite framework.
The main purpose of the alpha version of Qt 5 is to get feedback from developers, which will help improve all subsequent releases. In the alpha release of Qt 5, emphasis was placed on providing basic Qt Essentials modules that form the basic functionality of Qt 5. These are cross-platform modules, sufficient to create most applications.
Qt 5 Alpha will not be distributed as a binary package, but source files are available for self-compilation. Of course, compilation instructions are also available. ')
The development of Qt 5 began about 9 months ago, with several main objectives, described in May last year by Lars Knoll, Qt Development Director at Nokia. Below is a list of these goals and what has already been achieved.
Basic concept
Almost a year ago, Lars Knoll wrote:
“Qt 5 should be the foundation for implementing new ways of developing applications. Retaining the tools for creating Qt applications in the C ++ language, the emphasis should be shifted towards using C ++ mainly to create the functionality of modular backends for Qt Quick. ”
We found a good way to approach this concept in Qt 5.0. This model works great in embedded systems that use full-screen interfaces. To use this model in desktops, most of the foundation has already been prepared, but it can be fully used in Qt 5.1 or 5.2 versions.
Open development
We wanted to conduct an open source development of Qt 5 with the support of a powerful community. After the launch of the Qt Project, we witnessed the formation of an energetic community, thanks to which many shortcomings were corrected and new features appeared in Qt 5.
Major architectural changes
Transfer all Qt ports to use Qt Platform Abstraction layer (QPA) abstraction layer.This change simplifies porting Qt to other window systems and devices.
Thanks to QPA, we fundamentally changed the Qt integration tools with window systems. QPA was introduced in Qt 4.8 as a replacement for QWS / Qt Embedded, but now it will be enabled for all platforms. This solution required significant processing of a huge part of the code responsible for providing support for various platforms, but it helped us to create a cleaner architecture with abstract platform-dependent code. This greatly simplifies the transfer to the new window systems, and the backends already written for QNX, Android and iOS, is proof of this.
Changing the graphics stack architecture.Increased productivity through the use of Qt Quick and OpenGL (ES) 2.0
Qt 5 introduces a new graphical architecture for Qt Quick based on the QML Scenegraph running on top of OpenGL. For the new architecture to work, the system must support at least OpenGL (ES) 2.0. QtGui now contains a set of QOpenGL * classes that have replaced the QGL * classes (although they remained for compatibility). Also in Qt 5 a new QGuiApplication class is introduced, which is much easier for the QApplication and QWindow classes when performing processing tasks on the root window screen.
Video Effects in Qt 5
QWidget support is preserved, but limited by the ability to use software rasterization backend, OpenGL backend, and backend for generating and printing PDF. Support for platform-related backends using X11 or CoreGraphics was discontinued, which allowed switching to a completely new graphical architecture in Qt 5, while maintaining full compatibility with Qt 4.x on the QWidget side.
Modular repository structure for increased flexibility and integration of desktop and mobile systems - the ability to add and remove custom modules as needed and full integration of the Qt Mobility API
To a large extent, this is an organizational aspect that does not directly affect Qt-developers. However, casting Qt to a modular view will allow us to independently develop separate subsystems of the framework.
The process of modularization has not yet been completed: for example, the qtbase repository contains many modules that have yet to be broken apart. So most likely the work on dividing modules into modules will continue after the release of Qt 5.0. In addition, Qt modularization greatly simplifies the acceptance of third-party modules in Qt.
Qt 5 also meets various mobile-specific requirements, such as geolocation support and working with various sensors. So, Qt 5 will integrate the Qt Mobility API. Some of these APIs will be part of the Qt Essentials core module group. By offering a modularized approach, other modules can be added effortlessly, and now we are sure that the list of features in Qt 5 is richer than in any other version of Qt.
Selecting in a separate library all QWidget related features
Selecting QWidgets into a separate repository, we simultaneously take care of those who want to continue to use its capabilities, and move towards a model in which all interfaces are developed using QML and Qt Quick. Separating QWidget-related functions into your own library is a good measure for achieving Qt 5 architectural purity in the long run.
New opportunities
Qt 5 in addition to architectural changes offers a number of new features. Their entire list can be found on the special page of the Qt Project community, and here we will list only the main ones.
Qt core
Appearance of the QStandardPaths class for defining the standard location of media files and documents on each of the supported platforms.
Enable JSON parser and optimized binary representation for JSON data.
Adding support for defining MIME types for both file extension and content.
Adding a new syntax for connecting signals and slots, which is checked at the compilation stage. PCRE included.
Editing and optimization of many data structures for increased performance.
Adding support for C ++ 11.
QtGui
Deliver all QtWidget related capabilities to a separate QtWidgets library. Adding native OpenGL support to QtGui and the emergence of the ability to work with root windows through the QWindow class.
Qt Networks
Add support for DNS queries. Removing the QHttp and QFtp classes in a separate module. Correction of a number of small errors.
Qt Widgets
Implementing porting to a new QPA architecture while maintaining compatibility with Qt 4.x.
Qt quick
Designing a Qt Quick version from Qt 4.x as a Qt Quick 1 module for backward compatibility (this module will not be developed in the future).
Extracting from QML and JS parts of Qt Quick, responsible for graphics, into separate modules. The emergence of new JS-classes QJSEngine and QJSValue, using the V8 engine, which provides greater performance processing of JavaScript-code.
Add a number of improvements to the QML engine related to performance and language.
Include the OpenGL-based QML Scenegraph implementation in the Qt Quick module.
Add support for shader effects, particles and many other graphic effects.
Qt 3D and Qt Location
The appearance of several additional modules in Qt Essentials: first of all, it is Qt 3D for including 3D content and Qt Location for accessing GPS, maps and other location services.
Qt webkit
The WebKit C ++ API has not changed since Qt 4.x, but now Qt WebKit uses a later version of the WebKit engine, which provides better support for HTML5 and CSS3 technologies.
Porting from Qt 4.x to Qt 5
Now there is a problem with binary compatibility and, to a lesser extent, compatibility at the source level between Qt 4.x and Qt 5. Nevertheless, we have done a lot of work to easily transfer existing code to the Qt 5 platform. For example, at the moment we have Qt Creator, which can be built and run on both Qt 4.x and Qt 5 without changing the source code.
If you want to try compiling your own Qt 5 project, you can find detailed instructions here .
It is also worth noting that now there is no need to port your own applications to Qt 5, since Qt 4.8 still continues to be supported by the community and companies such as Digia. However, we believe that Qt 5 contains enough advantages sufficient for switching to it in the long run.
Next steps
Since the start of Qt 5 development, a lot has been done, and you can help us bring Qt 5.0 to a finished look by downloading its alpha version, trying new features and letting us know about your feelings.
Qt 5 Alpha is the first step towards the final release of Qt 5, and the main effort now will be to optimize the code and fix the remaining problems; we will try to complete Qt 5.0 development as soon as possible.
Once again, I want to say thanks to all members of the Qt Project community for their assistance.