Qt 5.9 introduces many new features and improvements as well as bugfixes over the 5.8.x series. For more details, refer to the online documentation included in this distribution. The documentation is also available online: http://doc.qt.io/qt-5/index.html The Qt version 5.9 series is binary compatible with the 5.8.x series. Applications compiled for 5.8 will continue to run with 5.9. Some of the changes listed in this file include issue tracking numbers corresponding to tasks in the Qt Bug Tracker: https://bugreports.qt.io/ Each of these identifiers can be entered in the bug tracker to obtain more information about a particular change. **************************************************************************** * Important Behavior Changes * **************************************************************************** - [QTBUG-48658][QTBUG-56306] The linuxfb and bsdfb platform plugins now follow the behavior of eglfs by making the first window fullscreen. This provides consistency and avoids applications having to make their windows match the screen size manually. The new behavior can be disabled by setting the environment variable QT_QPA_FB_FORCE_FULLSCREEN=0. - [QTBUG-59391] A QVariant containing a std::nullptr_t is now streamable to/from QDataStream. - Whitespace inside identifiers in logging rule files is not ignored anymore. That is, "[my category]" and "[mycategory]" are now two different categories. - [QTBUG-59849] QSysInfo::productType() and QFileSelector behavior on macOS was restored to match what Qt used to return in version 5.7.0 and earlier. The behavior found in Qt 5.6.2, 5.7.1 and 5.8.0 is removed. - [QTBUG-60771] Reverted a change that caused Qt 5.6 through 5.8 not to connect to QSystemSemaphore and QSharedMemory created by running applications using Qt earlier than 5.6. Unfortunately, this means that Qt 5.9 will not connect to 5.6-5.8. - QTouchEvent * Touch point ids are now unique even between different devices. As a consequence of that, you cannot anymore assume that QTouchEvent::TouchPoint::id has the same value as given by the native platform nor the same value as given by synthesized touch points. **************************************************************************** * General Notes * **************************************************************************** Deprecation Notice ------------------ - QSysInfo::windowsVersion() and QSysInfo::macVersion() are deprecated and are replaced by the newly introduced class QOperatingSystemVersion. - [QTBUG-57288] Removed support for WinRT/Windows Phone 8.1. - Support for CMake < 3.1 is deprecated and will be removed in Qt 5.10. Future Compatibility Notice --------------------------- - [QTBUG-59849] The identifiers that QSysInfo::productType() and QFileSelector will use to identify macOS systems will change in Qt 6.0 to match the Apple naming guidelines which will be current then. Potentially Source-Incompatible Changes --------------------------------------- - The internal Q_COMPILER_UNICODE_STRINGS macro is now defined if the compiler supports charNN_t, even if the standard library does not. To check for availability of std::uNNstring, use the new Q_STDLIB_UNICODE_STRINGS macro. Third-Party Code ---------------- - Sqlite was updated to version 3.16.1. - libpng was updated to version 1.6.28. - Bundled HarfBuzz-NG copy updated to 1.4.1 - Gradle wrapper 3.4.1 was added as a third-party component (see src/3rdparty/gradle). The code is licensed under Apache License 2.0, and is used to create Android packages. - PCRE 8.39 (src/3rdparty/pcre) was removed as a third-party component. - PCRE 2 10.22 was added in src/3rdparty/pcre2 as a third-party component. The code is licensed under the BSD 3-clause "New" or "Revised" License, and is required by QRegularExpression (at least version 10.20). **************************************************************************** * Library * **************************************************************************** QtCore ------ - QProcessEnvironment is now available on iOS, tvOS, watchOS, and VxWorks. - [QTBUG-57715] QCoreApplication::applicationVersion now defaults to an appropriate platform-specific value. On Windows, it defaults to the PRODUCTVERSION parameter of the VERSIONINFO resource for classic desktop apps, and the version attribute of the application package manifest for Univeral Windows Platform apps. On Apple Platforms (macOS, iOS, tvOS, watchOS), it defaults to the CFBundleVersion property of the information property list (Info.plist) file. On Android, it defaults to the android:versionName attribute of the AndroidManifest.xml manifest element. On other platforms, the default remains an empty string. - Added QStaticByteArrayMatcher. - Added new qfloat16 class. - QStringLiteral is now guaranteed to be evaluated at compile-time. The last platform (QNX) to use the QString::fromUtf8() fallback has been ported to allocate the string data statically, too. - Event loop: * [QTBUG-33489][QTBUG-48717] QCoreApplication::flush() is now deprecated. Use QCoreApplication::processEvents() and QCoreApplication::sendPostedEvents() instead. - QByteArray: * Added toHex() overload to insert a separator character between the hex bytes. - QChar: * Disambiguated comparisons with nullptr constants such as '\0', which 5.8.0 broke. As a consequence, QChar<->int comparisons are no longer deprecated, as this was a failed attempt at fixing the ambiguity. - QCryptographicHash: * [QTBUG-59770] QCryptographicHash now properly calculates SHA3 message digests. Before, when asked to calculate a SHA3 digest, it calculated a Keccak digest instead. - QDataStream: * Added operator<< and operator>> overloads that take std::nullptr_t, to facilitate generic code. * Added operator<< and operator>> for streaming QFlags into and out of QDataStreams. - QDateTime: * [QTBUG-52284][QTBUG-56397][QTBUG-56460][QTBUG-56345] Fixed a number of bugs related to handling of timezone offsets close to or during daylight savings changeovers, as well as timezones changing their standard offset. * [QTBUG-57298][QTBUG-57320] Fixed the handling of time zones in the toString() overload taking Qt::TextDate. - QDir: * Fixed a bug that caused QDir::mkpath() to create the wrong directory if the requested path contained a symbolic link and "../". * Added isEmpty(), that can help determining if a directory listing would be empty. - QFileInfo: * [QTBUG-48306] Made sure that all file lifecycle times are in local time. This was probably true before, but is now explicit. - QFileSelector: * [QTBUG-51230] Removed the requirement for an unused default base file in case you want to load only a variant. - QFlags: * Added operator<< and operator>> for streaming QFlags into and out of QDataStreams. - QHash / QMultiHash: * [QTBUG-60395] Fixed a bug that caused operator== to fail in the presence of duplicated keys. - QLocale: * Additional flags in QLocale::NumberOption allow generating strings from doubles in accordance to EcmaScript's Number.toPrecision(n). * Qt functions now always use the system time zone on Apple platforms, the same that low-level C APIs like localtime() does. Previously, converting dates and times to strings would use the "default" time zone (which is almost always the same as the "system" time zone but could be changed with the Apple API). - QLockFile: * [QTBUG-49640] Fixed a bug that caused QLockFile not to recognize a stale lock file if the machine's hostname contained non-US-ASCII characters, on Unix. A Windows fix is still pending. * Fixed a deadlock occurring if a corrupted lock file's modification time is in the future. - QMetaObject: * [QTBUG-60185] Fixed crash in QMetaObject::invokeMethod() and QMetaMethod::invoke() with QueuedConnection and types whose metatype gets automatically registered. - QObject: * QObject::dumpObjectInfo and QObject::dumpObjectTree are now fully functional even in a non-debug build of Qt. * QObject::dumpObjectInfo and QObject::dumpObjectTree now have const overloads. * Added a startTimer() overload taking std::chrono values. * [QTBUG-58054] Fixed an incompatibility with using noexcept functions as connect() targets in C++17 mode. - QSettings: * [QTBUG-34919] Added proper support for system-wide configuration file lookup based on XDG spec (XDG_CONFIG_DIRS) on Unix based systems. * [QTBUG-58531] Fixed data corruption when reading byte arrays on macOS. - QSharedPointer: * [QTBUG-49824] Fixed undefined behavior when creating an object with QSharedPointer::create() and its constructor throws an exception. - QStorageInfo: * Added QStorageInfo::subvolume(), which returns the name of the subvolume of a volume that was mounted, if one was detected. This is currently implemented only for btrfs on Linux. - QString: * toLocal8Bit() now preserves nullness of the input QString (outputs null QByteArray). * QString::null is now deprecated. When used to construct a QString, use QString() instead. When used to compare to a QString, replace with QString::isNull(). - QStringRef: * toLocal8Bit() and toLatin1() now preserve nullness of the input QStringRef (output null QByteArrays). - QThreadPool: * The cancel() function suffers from several subtle issues and has been replaced with a new tryTake() function. - QUrl: * The temporary compatibility in QUrl::resolved() that treated the base URL as relative if its scheme matched the current URL's scheme has been removed. * [QTBUG-60364] Fixed a bug that caused certain domain names that look like Internationalized Domain Names to become corrupt in decoded forms of QUrl, notably toString() and toDisplayString(). - QVarLengthArray: * Fixed a bug involving appending an item already in the container to the container again. * Added rvalue overloads of append() and push_back(). - QVariant: * [QTBUG-56073] Fixed a bug that caused wrong results for comparisons of QVariants containing either NaN or infinite numbers. * Can now convert QUuid to and from QByteArray, not just QString. * [QTBUG-58296] isNull() now returns true if the QVariant contains nullptr. QtGui ----- - OpenGL: * [QTBUG-55496] QOpenGLShaderProgram now offers a built-in program binary disk cache for systems with OpenGL ES 3.x or GL_ARB_get_program_binary. This can lead to significant increases in performance when it comes to application startup times for example. Usage is opt-in for direct C++ users of the class, however Qt's own main users of shaders, including Qt Quick and QPainter's OpenGL engine, are migrated to use the new, cache-enabled APIs. Opting out on application level is always possible via Qt::AA_DisableShaderDiskCache. - QIcon: * [QTBUG-49820] Implemented support for Scale directory key according to Icon Theme Spec. Icons created via QIcon::fromTheme() now have high DPI support by specifying the Scale in the appropriate entry of the relevant index.theme file. - QImage: * A new method reinterpretAsFormat() is has been added to change the format of a QImage without converting the data. - QMatrix4x4: * operator*=() now calculates the correct result even if the RHS and LHS are the same object. - QPA: * QPlatformScreen: Added an API to list available modes for a screen, that is resolution and refresh rate. * [QTBUG-58383] The function createForeignWindow() has been added to QPlatormIntegration and is now responsible for creating foreign windows. The function isForeignWindow() in QPlatformWindow has been added, and platforms should implement this to return true for windows created by createForeignWindow(). - QPainter: * [QTBUG-28851] Fixed fills of negatively sized QRects. - QRgba64: * The default constructor on Clang and GCC builds now no longer initializes with 0s, but leaves the value uninitialized. This is consistent with MSVC behavior and pre-C++11 behavior of GCC and Clang. - QScreen: * Added manufacturer, model and serialNumber properties. - QTextLine: * Fixed a possible undefined behavior in the calculation of glyph right bearing when a QTextLine layout is performed. - QTouchEvent: * TouchPoint::rect(), sceneRect() and screenRect() are deprecated; a touchpoint is now modeled as an ellipse centered on a point, so please use pos(), scenePos(), screenPos(), and ellipseDiameters() instead. * QTouchEvent::TouchPoint::id values are now unique even between different devices. - QWindow: * [QTBUG-58383] The "_q_foreignWinId" dynamic property is no longer set nor read. - Text: * [QTBUG-56538] Added QTextDocument::toRawText() function. * [QTBUG-48005] Fixed clipping errors and too small bounding rects for some right-to-left text. * [QTBUG-57241] Fixed crash for very tall glyphs QtNetwork --------- - The connect timeout from QAbstractSocket is now configurable through QNetworkConfiguration. - Added redirects policy to QNAM. - Added HTTP Strict Transport Security to QNAM. - Bearer management: * [QTBUG-56228][QTBUG-52988] Fixed a bug that could cause a crash on application exit, depending on the order of destruction of the QCoreApplication object and the QtDBus manager thread. - QHostAddress: * QHostAddress is now implicitly shared. * Added operator!=(SpecialAddress, QHostAddress). - QSslSocket: * Fixed connection to international domains (IDN) by normalizing to ASCII equivalent before comparing the host name in the certificate. * [QTBUG-56102] Allow QSslSocket (Secure Transport back-end) to use a temporary keychain on macOS instead of a default one; this can be enabled via a special environment variable QT_SSL_USE_TEMPORARY_KEYCHAIN (this feature is disabled by default). * [QTBUG-60233] QSslSocket (Secure Transport back-end) now respects CA certificates set in QSslConfiguration (before was always implicitly using the built-in anchor certificates in addition to a user provided configuration). * [QTBUG-59480] Added a missing cipher (Secure Transport). * [QTBUG-59930] Fixed spurious socket notifications in QCFSocketNotifer. * [QTBUG-58214] Fixed spurious socket notifications on Windows. QtTest ------ - QUuids are now printed on failure. - Added QTest::addRow(), which is like newRow(), but can take printf-style formatted strings. QtWidgets --------- - [QTBUG-26116] QWidget now has a tabletTracking property, analogous to mouseTracking, which will enable TabletMove events while the stylus is hovering, even if no button is pressed. This allows applications to show feedback based on the other tablet event properties such as rotation and tilt. - Input: * [QTBUG-42074][QTBUG-57003] Characters in the Unicode Private Use Area, as well as zero-width joiners and zero-width non-joiners, are now accepted as input in QLineEdit and QTextEdit. - Qt::WA_WindowPropagation: * [QTBUG-59106] Locale is now propagated consistently, along with font and palette, within the widget hierarchy. Previously, setLocale() propagated the new locale from parents to children (recursively) but new children didn't inherit from their parents. - QColorDialog: * [QTBUG-58424] Fixed long standing bug that prevented custom colors in QColorDialog to be stored in the settings. - QDialog: * [QTBUG-6018][QTBUG-12156][QTBUG-14430] Fixed a bug where accessing the result of QDialog's result could yield an incorrect value in some situation like using it as a delegate for item views. - QErrorMessage: * Critical (QtCriticalMsg) and informational (QtInfoMsg) messages are now displayed properly. Previously, they appeared as if they were debug (QtDebugMsg) ones. - QFormLayout: * [QTBUG-58693][QTBUG-15990] The functions takeRow() and removeRow(), new in 5.8.0, now take and remove the correct row. - QMacStyle: * [QTBUG-57470] PE_IndicatorMenuCheckMark now looks for State_On instead of the State_Selected to set its highlighted state. Its color is picked from the style option palette. - QPixmapStyle: * Now handles progress bars with minimum != 0 correctly. - QSizePolicy: * Added transposed() method. - QSystemTrayIcon: * [QTBUG-49283] Support for custom icons in showMessage() was added. - QTextEdit: * [QTBUG-59196] Fixed initial char format of input method text as it is in pre-edit mode. **************************************************************************** * Platform-specific Changes * **************************************************************************** Android ------- - [QTBUG-44697] Removed old work-around which was causing OpenGL shader compilation to fail on updated Android emulators. - QTouchEvent::TouchPoints have correct ellipseDiameters() and rotation(). XCB/X11 ------- - [QTBUG-60389] Every QTouchEvent includes up-to-date keyboard modifiers. - [QTBUG-59415] Every QTabletEvent includes up-to-date keyboard modifiers. Linux ----- - Added an option to switch from mailbox to FIFO mode in eglfs' EGLStream backend. This is done by setting the environment variable QT_QPA_EGLFS_STREAM_FIFO_LENGTH to a >= 1 value, the desired length of the FIFO queue. - [QTBUG-57411] Added support for cross-compilation for the MIPS CI20. - Added support for cross-compilation targeting 64-bit Jetson TX1 systems. - Added support for cross-compilation targeting Renesas R-Car H2 (Lager) systems. - The Raspberry Pi 3 device specs have been renamed from linux-rpi3-* to linux-rasp-pi3-* in order to follow the pattern of the RPi 1 and 2 specs. - [QTBUG-57980] Added support for specifying the primary screen in the JSON config file in QT_QPA_EGLFS_KMS_CONFIG when running on DRM/KMS with eglfs. - The evdevtouch plugin now has the option to apply filtering and prediction. Enabled by passing "filtered" as an argument. Prediction can be specified by passing "prediction=X" as an argument, where X is in milliseconds. - linuxfb: * [QTBUG-56306] Added experimental support for DRM dumb buffers. Enable by setting the environment variable QT_QPA_FB_DRM to 1. macOS ----- - Extra mouse buttons are now correctly be mapped to correct Qt::MouseButton values. - Accessibility: * [QTBUG-39008][QTBUG-54776][QTBUG-56043][QTBUG-57146] A common crash in accessibility on macOS was fixed. Solaris ------- - [QTBUG-56293] Support for the Illumos distribution OpenIndiana (release "Hipster") has been added. This is a community-supported partial port. Windows ------- - Support for Visual Studio 2017 has been added. - Fixed frameMargins for WM_NCCALCSIZE when handled inside with QAbstractNativeEventFilter. - [QTBUG-55510][QTBUG-48242] Windows are now automatically resized when they are moved on a screen to adapt to the new pixel ratio. - [QTBUG-58446] Fixed a bug that caused applications to crash with "Illegal instruction" faults when compiled with Visual Studio and run on some older processors. - [QTBUG-57023] Fixed a bug that caused QFile to create files with truncated names if the file name was invalid. Now, QFile::open correctly fails to create such files. - PDF: * [QTBUG-58954] Fixed a bug in PDF output when using high-dpi scaling which was causing the display of warnings when opening the file in Adobe Reader. **************************************************************************** * Tools * **************************************************************************** moc --- - [QTBUG-59351] Fixed parsing errors in presence of C++14 digit separators. - Added Support for C++17 nested namespaces - Move-only types are now supported as return types of signals and slots. configure & build system ------------------------ - [QTBUG-30083] Generalized command line overrides of installation paths of external dependencies; see configure -help. Use configure -list-libraries to find about known libraries. - [QTBUG-42937][iOS] Added support for the configure -shared flag. - [QTBUG-56225] Re-introduced creation of config.summary. - [QTBUG-57908][QTBUG-59062] Fixed parsing of configure --xxx options. - [QTBUG-57656][macOS] Fixed installation of header-only modules like QtUiPlugin in framework builds of Qt. - [QTBUG-58321] Switching to a different qmakespec for user projects will now properly enable C++11 support if necessary. - [QTBUG-58411] Added configure -list-features option. This is useful for finding unnecessary features to disable with -no-feature-XXX. - [QTBUG-58511] Fixed QMAKE_CXXFLAGS, etc. assignments on the configure command line being ignored when building bootstrapped Qt tools while not cross-building (in cross-builds, they are intentionally ignored). - [QTBUG-60016] configure will now refuse to run if it finds variables in its environment which are known to cause trouble. - [QTBUG-60382] Fixed query of library paths from pkg-config. - Added possibility to merge ANGLE's libEGL and libGLESv2 into QtANGLE; configure option -combined-angle-lib. - [Windows] The -no-rtti configure option was removed, as Qt fails to build under that condition. To disable RTTI in user code, add CONFIG+=rtti_off to your project file. - [GCC] Debug builds of Qt are now optimized with -Og if available; use -no-optimize-debug to disable. This is also applicable to user projects; add CONFIG+=optimize_debug to your project file. - Added possibility to optimize release builds for size instea of speed; configure option -optimize-size. qmake ----- - [QTBUG-51598] Libs.private is now written to .pc files only when building static libraries. - [QTBUG-55279] Static plugins are now imported also into dynamic libraries, not only executables. Various other improvements to static linking. - [QTBUG-56965][Darwin] Fixed overriding QMAKE_*_DEPLOYMENT_TARGET from within project files. - [QTBUG-57343] Fixed execution of extra compilers' depend_commands in build directories containing shell meta characters in their names,. - [QTBUG-57276] Fixed QMAKE_PRE_LINK (always) and QMAKE_POST_LINK (in one case) being ignored when building static libraries for Unix. - [QTBUG-57435][VS] Fixed capitalization of tags in the generated vcxproj files. - [QTBUG-57694][VS] Fixed bogus ToolsVersion attributes in the generated vcxproj files. - [QTBUG-57914][VS] Fixed handling of RC_FILE when generating single- configuration vcxproj files. - [QTBUG-59630][VS] Fixed uninitialized value of GenerateDebugInformation, which was particularly bad if DebugFastLink was emitted for VS < 2015. - [QTBUG-58710][MSVC/nmake] Fixed overlong lines in response files generated for link.exe and lib.exe. - [QTBUG-57502][Darwin] Added support for launch images in asset catalogs. - [QTBUG-58126] Fixed the target compiler's default include and library paths interfering with the build of host tools when cross-building. - [QTBUG-58764] Fixed building of moc'able files with a Qt installation in a path containing spaces. - [QTBUG-58857] Added the ability to use CONFIG+=no_moc_predefs to suppress the collection of the compiler's predefined macros for moc's use. - [QTBUG-59004][Windows] '(n)make install' will now copy the timestamps of the installed files, like it was already done on Unix. - [QTBUG-59319] Fixed $$shadowed() function for the case where the source tree lives in a symlinked or substituted path. - [QTBUG-59779][Android][MinGW] Fixed CONFIG+=separate_debug_info. - [QTBUG-38782][iOS] Added support for setting the Xcode development team and provisioning profile. - [QTBUG-58754][iOS] Fixed handling of bitcode. - [Darwin] Binaries now automatically get @executable_path/Frameworks added to RPATH, and libraries additionally @loader_path/Frameworks. Suppress with CONFIG+=no_default_rpath. - [Darwin][Xcode] QMAKE_BUNDLE_DATA now supports embedding Frameworks and PlugIns. - [macOS] Support for universal binaries has been re-introduced. - Added the command line options -early and -late, plus -before (which is the default) for symmetry with -after. - The $$prompt() function will now exit qmake upon EOF on stdin. - The touch() function now uses nanosecond precision if available. - [MSVC] Qt now has a common mkspec for all Visual Studio versions, called "win32-msvc". The old names which contained the version number are now gone (but qmake scopes based on the old names continue to work). In qmake project files, the version of the compiler can be obtained from the MSC_VER and MSVC_VER variables (for example, for Visual Studio 2015, those contain the values 1900 and 14.0, respectively). Those variables are also available with the Intel compiler (win32-icc) and with Clang (win32-clang-msvc). - [Windows] The win32-clang-msvc qmakespec will now adjust the emulated MSVC version to match that of the cl.exe found in PATH. - [Windows] Fixed make 'install' targets to be idempotent. - [Windows] '(n)make install' will not fail on file names containing the plus sign any more. - Numerous obsolete qmakespecs have been pruned.