I’m happy to let you all know that Qt 5.9.0 has just been released. A lot of work has been put into it, making Qt 5.9 the best Qt version we have developed so far.
With Qt 5.9, we have had a strong focus on performance and stability. We’ve fixed a large number of bugs all across Qt, and we have done a lot of work to improve our continuous integration system. This will make it a lot easier for us to create new releases (both patch level and minor releases) from 5.9 onward.
We’ve also added automated performance regression testing to our testing infrastructure, something that will allow us to continuously monitor our work on improving the performance of Qt. Please have a look at the separate blog post for more details.
The new configuration system used in Qt Lite has received many bug fixes, also here, you can find more detailed information in a separate blog post.
Long term supported
One major decision we have taken is to make Qt 5.9 another long-term supported (LTS) release. The previous LTS release, Qt 5.6, is starting to show it’s age, and many users have been asking for a more up to date version of Qt that they can use as a basis for long running projects.
Some of the major changes since Qt 5.6 include more than 2000 bug fixes all over Qt. Additionally, we are now using a C++11 compliant compiler with Qt which has allowed us to modernize our code base. We have also added the Qt Lite configuration system and made significant updates to our graphics architecture. This is in addition to all the other new things that have been implemented in Qt 5.9, explained in the following sections.
As an LTS release, Qt 5.9 will be supported for the next three years to come.
With our improvements on the CI and releasing infrastructure, we are convinced that we will be able to provide you with much more frequent updates and patch level releases for Qt 5.9 than we are able to do for the Qt 5.6 series. As a long term supported release, we will provide you with frequent updates in the first year. After the first year, we will gradually get more and more strict on the changes that will happen in the branch, so as a result, patch level releases are expected to happen somewhat less frequently for the second and third year.
We will as promised also continue to support Qt 5.6, but we strongly recommend everyone starting new projects to use Qt 5.9 as there are a lot of improvements across the board that will be of huge advantage to you.
Lots of new functionality
Even with our focus on performance and stability, we have managed to add more new features into Qt 5.9 than I can mention in this blog. For a more complete list have a look at the ‘New Features’ page in our wiki.
Here are some of the highlighted new features.
Core and Networking
Quite a few new features have been added in the Core and Networking modules. Starting at the base, Qt Core has two new classes. The first class, qfloat16 abstracts 16-bit floating point numbers, as these nowadays are increasingly more important for inter-operation with APIs which make use of the GPU. In addition, a new QOperatingSystemVersion class has been added to conveniently test for the operating system and version your application is running on.
Qt Network has gained support for HSTS (HTTP Strict Transport Security), improving security on HTTPS connections through QNetworkAccessManager.
Our NFC support in Qt NFC has seen some very nice improvements for Android, and Qt Web Sockets can now use external TCP sockets. Classic Bluetooth on WinRT and Bluetooth peripherals on Android are now both supported.
Qt Gui and 3D
Qt GUI has gained a shader cache, that can cache compiled versions of OpenGL shader programs, and we have added support for Compute Shaders. The OpenGL paint engine does now work with OpenGL Core profiles as well.
An enormous amount of work has been done with Qt 3D. Together with the functionality we already had in Qt 5.8, we now have a fantastic 3D engine in Qt 5.9. You can find all the details in a separate blog post by our partner KDAB.
Qt QML and Quick
Quite a bit of work has been put into improving the QML and JS engine for Qt 5.9. We have added a completely rewritten garbage collector, offering better performance and reducing memory fragmentation in the JavaScript heap. The new collector also provides a better basis for further enhancements to our memory management in upcoming Qt versions.
Qt 5.9 also comes with a brand new QML caching infrastructure, offering similar benefits to our users — just like the commercially available Qt Quick Compiler, but in a much more transparent way. The new infrastructure has two modes of operation. In the default mode, the caching infrastructure creates a binary cache of your QML files at the first start-up of the application. Optionally, you can also pre-create that cache at application build time, achieving similar performance and startup time benefits as with the Qt Quick Compiler. Additionally, the new caching infrastructure does not bind your application to a specific patch level version of Qt, as the binary caches are versioned and will get regenerated if required.
Also, a lot of work to improve performance and reduce memory consumption has been done in the engine, making this a significant upgrade compared to our previous Qt 5.6 LTS release.
Qt Quick now makes use of the new OpenGL shader cache added in Qt GUI, improving application startup times. We added an image provider that can share image data between processes, and a new OpenVG backend, allowing it to run on hardware that only has 2D hardware acceleration support.
Qt Quick Controls 2 has added more new features than I can mention here, please have a look at the separate summary blog post, which links to all the details and blog posts on what has been added in Qt Quick Controls since Qt 5.7.
Qt Location and Positioning
For this release, Qt Location has received quite a few new features. We’ve added support for tilting and rotating maps, both through the APIs and through touch gestures. Stacking of maps has been improved, it’s now a lot easier to add overlay items to maps, and we improved the support for blending in copyright notices on the maps.
An entirely new plugin adds support for Mapbox, using their OpenGL based map rendering engine.
A couple of other visual improvements have also happened, like using lower resolution tiles to approximate tiles that are still missing at a higher zoom level until those are downloaded.
On iOS, we improved Qt Positioning, so that it now can collect data even when the application is in the background.
Other modules
Many other modules have also been updated. Most notably, Qt Webengine is now using Chromium 56. Qt Virtual Keyboard now supports external keyboard layouts and many other cool new features.
Qt Gamepad has graduated from Tech Preview status to being fully supported in Qt 5.9. We’ve also added Qt Remote Objects as a new module in Technology Preview status.
There have been significant changes to Qt Wayland that are described in a separate blog post.
Of course, Qt 5.9 also comes with a brand new version of Qt Creator with many great new features. The Qt Quick Designer now contains a built-in code editor, and we now have a completely rewritten the cmake integration. For further details, have a look at the separate blog.
Platform changes
Qt 5.9 adds support for two new platforms. It now supports QNX 7.0, the latest version of the QNX operating system. We have also added support for the INTEGRITY OS, details about this are again in a separate blog post.
Finally, we added support for compiling Qt in a size optimized mode (-Os on GCC), saving around 5-20% in binary size for the Qt libraries and your applications.
Thanks
Finally, I’d like to thank all the people who have contributed to this release. While you can see and follow all the people contributing code through patches to our git repositories, a lot of additional work has happened more invisibly behind the scenes, for example by working on our CI and releasing infrastructure or helping to create collateral and content for the web pages.
I hope you’ll all enjoy this release. You can get it from the usual places, either through your Qt Account or from our download page. Please also don’t forget to give us your feedback, and write a bug report (if you should find one), so that we can improve the 5.9 series even further in upcoming patch releases.
Why not shipping Chromium 59?, they’ve shipped with v8js turbo fan on by default on that version btw.
Chrome 59 is not even released yet 😉
We use the latest Chromium that is available when we go into feature freeze, often even a beta if it is stable enough.
They ship only stable versions (Chromium 59 still in beta)
https://blog.chromium.org/2017/05/chrome-59-beta-headless-chromium-native.html
> Qt 5.9.0 Known Issues
> Ctrl C/V shortcuts do not work in Qt Quick applications
Um, what?
Who cares?
“Qt Quick is not a desktop toolkit” (с) J-P Nurmi
What a stupid comment
Just to clarify, certain keyboard layouts on Windows are affected. As far as I can see, the shortcuts work fine on Windows with the US keyboard layout. I don’t know which keyboard layouts are actually affected. The bug report mentions the Russian keyboard layout.
When can I download Qt 5.9.0 by online installer?
I just see 5.9.0-201705291821 version in online installer
It is Qt 5.9.0. ‘-201705291821’ is just a detailed timestamp of the build
Why isn’t there a msvc2017 32 Bit pre build in the online installer?
We cannot offer pre-built binary packages for every possible windows combinations. With Qt 5.9 there is 32 bit ones for minGW and MSVC2015.
Where is the downvote button?
Out of interest: What are the reasons you cannot use the 64 bit compiler?
We indeed have the need to limit the number of permutations of the Windows packages, and the trend looks like 64 bit versions of Windows are prevalent, and applications are finally moving to 64 bit, too …
I have to target older machines which runs 32 bit versions of Windows
No reason, we use 32 bit and 64 bit compilers.
You should switch to Linux anyway.
That kind of negates the point of using a cross-platform development environment.
Hmm, it is very interesting. I tried to migrate my 5.8 project from my current VS2015 to VS2017 and quickly get bunch of errors within Qt framework. I googled a little and found somewhere (sorry, don’t have a link) that all these issues will be gone with the release of Qt 5.9. I quickly ran back to VS2015 and now I have to have two instances of VS, with 2015 only for Qt-based project.
There are questions worth figuring out: What was the main reason to have pre-built libraries for VS2015 to the detriment of VS2017? Will VS Qt assistant work with Qt5.9 in VS2017? Isn’t it obvious that at some point in the next three years Qt Company will have to drop pre-built libs for VS2015, since even now it is not current MS development environment?
What are the errors? Post the details in the forum; perhaps someone will be able to help you resolve them.
MSVC 2015 binaries are binary-compatible with MSVC 2017. Could you use the 32-bit MSVC 2015 binaries with your MSVC 2017 compiler?
https://bugreports.qt.io/browse/QTBUG-61053
What is the criteria of measuring priority in the issue tracker? This bug is marked with “P0: Blocker,” but why the fix is not applied to the final release????? Then, what is the purpose of tagging such priority?????
Disclaimer: I am using COMMERCIAL Qt licensing.
@Choi: QTBUG-61053 will be part of Qt 5.9.1 release. The fix is available, but did not make it in time for Qt 5.9.0. If you need to use https on iOS, you need to wait Qt 5.9.1 release or build yourself with the fix.
Why have you changed the priority from P0 to P1 just when you responded to that comment?
Because Qt 5.9 has already been released. As such, by definition the issue is not a blocker anymore (P0, blocker, means to actually delay the release, which has already happened).
Hmm… So “P0: Blocker” issues should not be in the release versions, right? So, the decision you guys made was just change its priority to lower ones, instead of making fixed versions…
It seems that my question has been answered. The criterion of giving priority for each issue is to make released versions “look” stable, not measuring the “importantness” of each issue. If the priority is for measuring the importantness, then it had to be leaved as “P0: Blocker”.
As one of the Qt lovers, please take responsibilities for making Qt in a better way. Releasing stable versions without solving all critical issues could happen in some cases, but I think this decision that just changing priorities is not a right way. Please take steps to make this happen less than now.
Okay… Could you tell me when will the Qt 5.9.1 available? Several critical bugs introduced in Qt 5.9.0 make me impossible to use for the application development.
Although Qt 5.9 introduces a large amount of great new features and performance improvements, it seems that the 5.9.0 version is one of the most unstable release I’ve ever seen. Since Qt 5.9 is chosen as the new LTS version, please kindly consider the stability and reliability more carefully…
Qt is a non-blocking framework: https://bugreports.qt.io/issues/?filter=18388
I’ll second that. This bug is essentially a showstopper for us as well. If you’re delivering a Qt SDK, now you’re in a position to have to tell your customers to avoid 5.9.0 on iOS or build it themselves. You can’t build the networking library for end users since there are export restrictions with ssl/encryption libraries.
There are no any web widgets on MINGW version of Qt. Is it will be available in future ?
Congrats. Looks like a great release!
Link doesn’t work: http://blog.qt.io/blog/2017/05/31/ready-made-ui-controls-with-qt-quick-controls-2-a-summary
Wow! Now this sounds like an epic Qt release 🙂 Still need to follow all the referenced blog posts about all those exciting features. As always: great work!
What about dynamic linkage of Qt binaries for iOS to support LGPL3? Is this feature available in this release?
Sort of / not yet. You can manually create a dynamic libraries build by passing the -shared option to configure when building Qt for iOS, but the support for automatically bundling the Qt frameworks into your application bundle is not finished yet. This doesn’t result in the best developer experience, and as such we haven’t called the shared libraries support official yet and continue to deliver static builds through the online and offline installers for now.
Note that you can link statically to LGPL libraries, as long as you provide the object files of your application for relinking : https://www.gnu.org/licenses/gpl-faq.en.html#LGPLStaticVsDynamic
Thanks, nice to know this, I favor static link better than dynamic link(except of runtime plugin), it is way more easier to deploy, solving dependency problems of different libraries are no fun at all
Very nice release as allways! For me it is way easier to use msys2 than the official Qt installer because of all the additional available packages. You guys know of qpm? Would it be possible for the qt company to provide a general purpose c++/qml package manager?
Holy shit nice redesign of the website BTW!
Congrats for the spectacular release! What about QtQuick on Web via emscripten/nacl? Is it still developing stage or discontinued?
> The previous LTS release, Qt 5.6, is starting to show it’s age
its
Fantastic.
Great Job Boys.
Could you guys help us please to find more info on these topics mentioned in this blog-post:
– “Optionally, you can also pre-create that cache at application build time, achieving similar performance and startup time benefits as with the Qt Quick Compiler. ” – how would one do this(it says “Optionally”)? Are there docs on how this works and how to do this?
From this phrase I understand that it should be something similar to resource files, where you have to do additional steps in order to compile-in the resource file.
– “The new infrastructure has two modes of operation.” – are there docs explaining what each mode does and how to use it?
– “We added an image provider that can share image data between processes, and a new OpenVG backend” – where can we find docs about this image provider and this new OpenVG backend?
If docs do not exist, even links to Jira issues would be helpful.
For the OpenVG backend, see http://doc.qt.io/qt-5/qtquick-visualcanvas-adaptations.html and especially http://doc.qt.io/qt-5/qtquick-visualcanvas-adaptations-openvg.html
Come on, guys.
The Bugs
https://bugreports.qt.io/browse/QTBUG-59704
https://bugreports.qt.io/browse/QTBUG-59256
are still not fixed although there is a patch available.
iOS Apps using https requests are also not working at all.
So why you release Qt 5.9 which is simply broken and not useable at all?
They are not P0 bugs, so there is no need to fix them, isn’t it? On the other hand, a P0 bug can be easily changed to P1(like it was done with QTBUG-61053) and will not prevent release.
Hey, where’s the MinGW binaries for Windows?
Nice to see QT 5.9 is released but I hoped Qt 5.9 has BLE support for Windows. Do you know this feature become available in future releases?