Qt 5.8 introduces many new features and improvements as well as bugfixes over the 5.7.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.8 series is binary compatible with the 5.7.x series. Applications compiled for 5.7 will continue to run with 5.8. 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. This release contains all fixes included in the Qt 5.7.1 release. **************************************************************************** * License Changes * **************************************************************************** Static libraries that are linked into executables (winmain and qopenglextensions) are now licensed under BSD _and_ commercial licenses. **************************************************************************** * Deprecation Notice * **************************************************************************** - The following platforms or toolchains are deprecated and will be removed as of Qt 5.9: * Apple OS X Mavericks (v10.9) * Apple iOS 7.x Deprecated platforms and toolchains continue to work until removed. - The Q_OBJECT_CHECK macro is deprecated and will be removed in Qt 6. The internal, template function qt_check_for_QOBJECT_macro that it created in QObject-derived classes will be removed in Qt 5.9. **************************************************************************** * Important Behavior Changes * **************************************************************************** - Support for the following platforms was removed in this version: * Apple OS X Mountain Lion (v10.8) * Apple iOS 6.x configure & build system ------------------------ - The configuration system has been rewritten almost from scratch. This improved the consistency between builds on Unix and Windows, but some subtle unintended behavior changes are also possible. Also, some obsolete options have been entirely removed and will now cause errors. - It is not permissible any more to manually #define QT_NO_ anywhere. Instead, configure's -no-feature-* options must be used. Note that this does not apply to defines which modify behavior rather than entirely removing features. - Configure test results are now cached. Use -recheck or -recheck-all to discard them. - [QTBUG-32530][QTBUG-42962] The Unix configure won't pick up CFLAGS and related environment variables any more. Instead, it now accepts QMAKE_* variable assignments on the command line. - [QTBUG-52266] Configure won't pick up QMAKESPEC from the environment any more. Use the -platform option instead. - Device and simulator libraries are now combined on Apple device platforms (iOS). This means that there will no longer be any *_simulator.a libraries and the simulator architectures will simply reside alongside the device architectures in a single Mach-O file. - [Darwin] Project files may not override QMAKE_MAC_SDK any more. QtCore ------ - qFatal will now use std::abort to terminate the application on all operating systems. Previously, ::abort() or ::exit(1) were called, depending on the operating system. - QLibraryInfo::licensee()/licensedProducts() were deprecated and return empty strings now. - Destroying a QThread which is still running will now result in immediate and abnormal program termination. QtGui ----- - [QTBUG-54936] QFont::toString() and QFont::key() were modified to save the font's style name if one is set, invalidating any stored font identifiers. QFont::fromString() was also adjusted to accommodate the change. QtNetwork --------- - Proxies from system settings will now be used by default. Configure with -no-system-proxies to disable. - [QTBUG-53649] libproxy is now turned off by default. Configure with -libproxy in order to enable it again. **************************************************************************** * Library * **************************************************************************** QtCore ------ - Disambiguated the relational operators comparing QByteArray with QStringRef (and vice versa). - Added qHash() overloads for QHash, QMultiHash. - Added QDeadlineTimer, a counterpart to QElapsedTimer, used to mark a time point in the future (a deadline) and determine whether such a deadline has passed. - Qt now relies on type traits from the C++11 standard library. - [QTBUG-54981] Added Q_NAMESPACE, which can be used to add Q_ENUM_NS/ Q_ENUMS, Q_FLAG_NS/Q_FLAGS and Q_CLASSINFO to a namespace. - Q_IS_ENUM was deprecated. Use std::is_enum<>::value instead. - QChar: * Added missing operator{<,>,<=,>=} comparing against QLatin1String and QStringRef. * Added missing operator{==,!=} comparing against QLatin1String. - QCommandLineOption: * Added flags() and setFlags() methods. Added ShortOptionStyle and HiddenFromHelp flags. - QDateTime: * Introduced toSecsSinceEpoch, fromSecsSinceEpoch and setSecsSinceEpoch functions, which use 64-bit integers to represent the number of seconds. * The toTime_t, fromTime_t and setTime_t functions are deprecated and will be removed in Qt 6.0. For new code, use the equivalent functions with "SecsSinceEpoch" in the name, or the equivalent ones with millisecond accurancy that have existed since Qt 4.7. * Added string formatting type Qt::ISODateWithMs. - QFileInfo: * QFileInfo now reports file times with millisecond precision on Unix systems. - QFileSystemWatcher: * [QTBUG-55896] Fixed a bug that caused QFileSystemWatcher to mis-handle file paths that contained non-US-ASCII characters on Apple platforms. - QJsonDocument: * [QTBUG-39751] fromVariant can now take a QVariantHash argument. * Fixed a number of bugs that could cause crashes when loading corrupt binary JSON data. - QJsonValue: * [QTBUG-43077] QJsonValue(Null).toVariant() now returns a QVariant of type QMetaType::Nullptr instead of an invalid QVariant. - QLatin1String: * Added at(), operator[](), mid(), right(), left(). - QLibraryInfo: * Added QLibraryInfo::version(), which returns the current version of the Qt library as a QVersionNumber object. - QLine/QLineF: * Added center(). - QLockFile: * Fixed a bug that caused QLockFile to over-sleep while waiting for the lock file to become available. - QMetaType: * std::nullptr_t is now a built-in Qt metatype. - QModelIndex: * QModelIndex::child has been deprecated due to its lack of generality. Use model->index(row, column, index) instead. - QMutex: * QMutex now fully models the TimedLockable concept by providing the try_lock, try_lock_for and try_lock_until functions, therefore making it usable in Standard Library lock management classes and functions. - QObject: * The QT_NO_NARROWING_CONVERSIONS_IN_CONNECT macro has been added. When using the new connection syntax (PMF-based) this macro makes it illegal to narrow the arguments carried by the signal, and/or to perform floating point to integral implicit conversions on them. When the macro is defined, depending on your compiler a QObject::connect() statement triggering such conversions will now fail to compile. - QPersistentModelIndex: * QPersistentModelIndex::child has been deprecated due to its lack of generality. Use model->index(row, column, index) instead. - QStringList: * Added join(QLatin1String) overload. - QStringRef: * Added missing operator{<,>,<=,>=} comparing against QLatin1String and QString. - QSysInfo: * The output of QSysInfo::prettyProductName now includes the Windows OS/kernel version number. In case of future versions of Windows, a valid string is now returned. - QSettings: * [QTBUG-56124] Fixed a bug that caused QSettings to fail on Apple platforms when strings with embedded null (\0) bytes were present - QSharedPointer: * [QTBUG-52369] Fixed a bug that caused QSharedPointer to fail to compile if it was initialized with a nullptr literal. * Fixed a bug that made QSharedPointer delete the pointer it held with the wrong destructor if the type of the QSharedPointer and that of the object passed on the constructor were different. Its behavior is now the same as std::shared_ptr. - QStandardPaths: * [QTBUG-55507] Fixed the QStandardPaths::FontsLocation on XDG systems to be $XDG_DATA_DIR/fonts. * Fixed handling of potential paths that do not exist on Windows. Now, QStandardPaths may return storage locations that may not exist on all platforms. - QTimer: * Added support for std::chrono duration objects for QTimer methods, like QTimer::singleShot and QTimer::setInterval. - QWaitCondition: * Added notify_one() and notify_all() to make QWaitCondition be usable from algorithms that use the Standard Library naming convention. QtDBus ------ - QDBusConnection: * Fixed a bug that would cause QDBusConnection::connect() to return true if a slot was already connected to the same D-Bus signal. QtDBus does not support multiple connections. QtGui ----- - [QFileDialogOptions/QFontDialogOptions/QMessageDialogOptions/ QColorDialogOptions] These classes no longer have value semantics, but need to be held in QSharedPointer (as they always were). To copy an instance, use the clone() method. - QOpenGLTextureBlitter, a utility class to draw textured quads, has been made public. - [QTBUG-38825] Fixed QTextEdit to match undo functionality of QLineEdit to group two sequential inserts into one undo action. - [QTBUG-51844] Added rotation and uniqueId properties to QTouchEvent::TouchPoint. This is mainly for the benefit of the TUIO plugin so far: it now supports tracking physical objects (fiducials) on the touchscreen surface, as long as the object's ID can fit in a 64-bit integer. QPointingDeviceUniqueId is a wrapper for the ID, designed to be extensible to support other types of IDs in the future. - [QTBUG-52510] A stationary touchpoint event is delivered if its velocity changes. This is to ensure that the application will be notified when a TUIO fiducial object comes to rest. - [QTBUG-53076] Add QGuiApplication::applicationDisplayNameChanged() signal. - QAbstractTextDocumentLayout: * Added imageAt() and formatAt() methods, which respectively can be used to retrieve the source link of the image under the cursor, or the QTextFormat of the text under the cursor. - QFont: * [QTBUG-48043] The default value of QFont::stretch() is now 0 to indicate any default stretch is acceptable. - QRegion: * Is now iterable as a container of QRects: added {c,}{r,}{begin,end}(). - Text handling: * [QTBUG-51411] Fixed performance hit from showing large QTextDocuments in a QTextEdit or QTextBrowser. (Regression introduced in Qt 5.3.0) * [QTBUG-50090] Fixed line spacing with some scalable fonts containing bitmaps with the Freetype font engine. * [QTBUG-56346] Fixed QStaticText when manually breaking lines and no text width was set. * [QTBUG-56659] Fixed a regression where raster fonts on Windows were detected as smoothly scalable and thus rendering with said fonts in Qt Quick would break. * [QTBUG-51223] Fixed synthesized oblique for non-latin text on platforms using the basic font database, such as Android. * [QTBUG-56672] Fixed list of supported sizes for bitmap fonts on Windows. * [QTBUG-56714] Fixed a bug where a no-break space would sometimes cause the first character of the containing line to not be displayed. * [QTBUG-55856] Fixed rendering of large fonts when a device pixel ratio is set and the Freetype engine is used. QtNetwork --------- - Added QNetworkDatagram class, along with new function receiveDatagram() in QUdpSocket that returns it, and an overload to writeDatagram() that can accept it. - Added QSctpServer and QSctpSocket classes. Note that these need to be explicitly enabled via a configure option. - [QTBUG-50956] Added support for HTTP/2 protocol - QSslSocket: * [QTBUG-39077] TLS PSK ciphers are possible in server sockets. * It is now possible to set custom Diffie-Hellman parameters for QSslSocket-based servers. - QTcpServer: * [QTBUG-51288] It is now possible to use QTcpServer with an externally created QTcpSocket. QtSql ----- - QSqlDatabase: * When connecting to a MySQL server whose version is 5.5.3 or higher, the default connection charset is now utf8mb4 instead of utf8 to allow 4-byte UTF-8 encodings. - SQLite: * Added notification feature to SQLite driver QTestLib -------- - [QTBUG-44030] Added QTest::createTouchDevice() for use in autotests which generate touch events. - Added ref-cycles perf counter. - QFETCH variables can now be declared const (QFETCH(const T, name)). - It is now possible to use variables of types with an explicit operator bool in the QVERIFY macro. QtWidgets --------- - QFormLayout: * [QTBUG-15990] Added removeRow(), takeRow(). - QMainWindow: * [QTBUG-56628] Fixed crash using takeCentralWidget when the central widget was not set. **************************************************************************** * Platform-specific Changes * **************************************************************************** - Added technology preview support for Apple tvOS and Apple watchOS. - Added initial support for Microsoft Visual Studio 2017, which uses the mkspec "win32-msvc2017". Full support will happen after the final release of that compiler. Android ------- - [QTBUG-48948] Show password while typing is now supported - [QTBUG-55035][QTBUG-50759] Introduced a mechanism to forward permission related callbacks on Activity objects to interested parties. Apple platforms --------------- - Added QImage::toCGImage() that returns a CGImage. - Added functions that convert Qt types QPoint/QPointF, QRect/QRectF and QSize/QSizeF to and from CGPoint, CGRect and CGSize. Note that QPoint, QRect and QSize do not provide fromCGXxx functions since that would silently lose precision. iOS --- - Precompiled headers are now supported on iOS. - Starting from iOS 10, Apple requires all apps that need access to photos to have the key 'NSPhotoLibraryUsageDescription' in the Info.plist. Therefore, to get the same support in Qt (when, e.g., using a file dialog), the Info.plist assigned to QMAKE_INFO_PLIST will need this key as well. macOS ----- - Speech to text dictation now works for Qt text input. - [QTBUG-33708] Fixed underline position in font rendering. Linux ----- - [QTBUG-39959] QWidget-based applications running on the eglfs platform plugin can now request 180 or 90 degrees rotated output by setting the QT_QPA_EGLFS_ROTATION environment variable. - KDE/Gnome themes now implement QPlatformTheme::fileIconPixmap(), showing file icons. Windows ------- - [QTBUG-31476] QFactoryLoader now filters potential plugins by the ".dll" suffix. - [QTBUG-56239] 'What's this' button is now shown by default only for QWidget dialogs. - [QTBUG-53833] QProcess::startDetached() changed behavior on Windows: it no longer creates a new console window unconditionally, instead it passes the same creation flags to CreateProcess as QProcess::start(). - Text handling: * [QTBUG-54740] Fixed embedding fonts in PDF when dpi scaling is active or when the hinting preference was none or vertical hinting. * [QTBUG-47485] Fix selecting non-regular fonts when using the Freetype engine. * [QTBUG-49346] Fixed rendering error when using the MingLiU fonts at certain combinations of pixel size and scale. **************************************************************************** * Tools * **************************************************************************** configure & build system ------------------------ - The -no-feature-* option family was integrated with the rest of the configuration system. Numerous existing features were made optional, and build problems in various reduced configurations were fixed. This is an ongoing effort known as "Qt Lite". - Numerous Qt modules outside qtbase now support configure options. In a module-by-module build, these can be passed to qmake itself, after a -- option. - Introduced the qtConfig() qmake function to replace the patterns contains(QT_CONFIG, ) and load(qfeatures)+ contains(QT_DISABLED_FEATURES, ). Likewise, the C++ macro QT_CONFIG() was introduced to replace the pattern !defined(QT_NO_). The old methods are effectively deprecated and will stop working at some point in the near future. - Use of -sysroot will now trigger a cross-build even if -platform and -xplatform are the same. - The JPEG & GIF handlers and the SQL drivers are now always built as plugins, even in static builds (static "plugins" in this case). - [GCC] Include paths from system libraries are now marked as such, resulting in fewer warnings the user cannot do anything about. - [Windows] config.status.bat is now created, like on Unix. - [QTBUG-46974] Fixed location of config.status in top-level builds. - [QTBUG-38792][Unix] The -redo option is now accepted, like on Windows. - It's now possible to add more arguments when -redo is used. Note that these arguments are not saved in turn. Likewise for config.status. - [QTBUG-32896][iOS/clang] Added missing CFBundleIdentifier to library template. - [QTBUG-47624] Fixed abort when some, but not all, XCB dependencies are met. The feature is now disabled instead, as expected. - [QTBUG-50838] The Raspberry Pi EGL detection now uses pkg-config. - [QTBUG-52112][Android] Plugins now have a SONAME, as required by Android 6+. - [QTBUG-54438] Fixed launching tests, examples, and build tools in some configurations. - [QTBUG-56289][GCC@Windows] Fixed -separate-debug-info. - [QTBUG-57086] Added support for Visual Studio 2017. qdbusxml2cpp ------------ - [QTBUG-34126] qdbusxml2cpp now supports the --verbose switch, which provides more details when parsing invalid XML sources. qmake ----- - Added the $$take_first(), $$take_last(), $$num_add(), $$str_size(), $$str_member(), and $$sorted() functions. - The error() function can now be called without arguments to exit silently. Use after write_file() and similar functions which already print an error message. - The $$system() function can return the command's exit code now. - The $$prompt() function can now print the prompt verbatim. - QMAKE_EXTRA_TARGETS will now consistently treat the target as a file name (separator adjustment and quoting). - [QTBUG-16904][VS] Fixed warning about circular dependencies when Q_OBJECT is used in .cpp files. - [QTBUG-36256] packageExists() and PKGCONFIG can now be used regardless of whether Qt itself was built with pkg-config support. - [QTBUG-43468][WinRT] Added option to use verbatim manifest files. - [QTBUG-53905] Fixed OBJECTIVE_SOURCES being moc'd twice. - [QTBUG-55591][VS2015] Added support for the /DEBUG:FASTLINK option. - [QTBUG-56507] Fixed parallel builds when a lex source refers to a file generated from a yacc source. - [QTBUG-56594][MSVC] Fixed PDB files not being installed for static libraries. moc --- - [MSVC] qmake and moc now cooperate to use the Visual Studio environment variables (set by the VCVARSALL.BAT script) to find system include files. A possible consequence is that moc parses application headers slightly differently, depending on #if conditions that depended on macros that previous versions had not seen #define'd. Implementers of other buildsystems are advised to pass the --compiler-flavor=msvc option to moc.