KDAB contributions to Qt 5.8
Qt 5.8 has just been released! Another great release of Qt, made possible by thousands of commits by over a hundred different contributors:
And here we are again, with the usual showcase of the most outstanding contributions to Qt 5.8 developed by KDAB engineers.
In no particular order:
Qt 3D continues to receive lots of improvements and bugfixes, thanks to the hard work of several KDAB engineers. In general, we’ve greatly improved the test coverage, added more documentation to the public APIs, and fixed a large number of bugs across all of Qt 3D. If you are testing Qt 3D and you are encountering bugs, try upgrading to Qt 5.8.
Other improvements and changes include:
- The new QPaintedTexture class allows painting to a QTexture2D using an imperative QPainter.
- QObjectPicker is now also able to pick back facing triangles.
- QPickEvent includes details of mouse buttons and keyboard modifiers.
- QAxisAccumulator has been added in order to allow tracking and integration of QAxis values, by treating the axis values as velocity or acceleration values.
- Added concept of input proxy devices, in order to allow new device plugins to easily enumerate axes and buttons.
- The mouse wheel is now exposed in public APIs.
Last, but not least, a lot of work went into optimizing Qt 3D’s rendering backend:
- The texture system has been reworked, to improve sharing of textures on the backend and to minimize uploads to the GPU.
- By default texture coordinates are not mirrored any more. This allows for results consistent with third-party editors when loading assets.
- The uniform handling system has been overhauled in order to remove usage of QVariant on the backend.
- Several job types have been parallelized, and now the OpenGL submission thread proceeds in parallel with building the next frame.
tvOS support for Qt
KDAB’s Senior Software Engineer Mike Krus added support for the tvOS operating system to Qt 5.8. Since he was there, he was also appointed tvOS platform maintainer.
At this stage, the tvOS platform is still a Technical Preview, aiming to become fully supported in the upcoming Qt versions. Support for the tvOS controller was also added to the qtgamepad module.
Q_NAMESPACE, Q_ENUM_NS and Q_FLAG_NS
These three macros allow you to generate meta-object information for enumerations and flags defined at the namespace level, that is, without an enclosing class with the Q_OBJECT or the Q_GADGET macro. The meta-object information is available in C++ and in QML. Stay tuned for a dedicated blog post!
Again in no particular order:
- The QT_NO_NARROWING_CONVERSIONS_IN_CONNECT macro was introduced. When this macro is defined, and when using the PFM-based QObject::connect (the “new style” connect), implicit but narrowing conversions between the arguments of a signal and a slot are disabled.
- QObject::dumpObjectInfo and QObject::dumpObjectTree are now fully functional even in a non-debug build of Qt, such as the builds installed using the official binary installers. This should help developers gain debug information about their QObject hierarchies. Of course, for anything more complex there’s GammaRay 😉
- Qt on Android gained private APIs for the Android 6+ permissions model. These APIs should become public in Qt 5.9.
- On the Qt Widgets side, several QMainWindow-related crashes have been fixed (QTBUG-56628, QTBUG-57492, QTBUG-56866 and more). Also, a subtle bug in the stylesheet parser has been fixed, which caused entire applications to crash.
- The QMAKE_CD qmake variable was introduced. This variable allows to correctly change directories on all operating systems (on Windows, changing a directory to one on another drive requires special attention).
- Building a QDateTime from a QString is now 33% faster, thanks to some careful profiling-driven optimizations.
Once more, KDAB confirms its commitment and investment into making Qt the best cross-platform UI framework. Stay tuned for more in-depth blogs about some of the changes introduced in Qt 5.8. In the meanwhile, you can download Qt 5.8 here.
KDAB believes that it is critical for our business to contribute to the Qt framework and C++ thinking, to keep pushing these technologies forward to ensure they remain competitive.