blob: 8d938630870f9dac59b328c5a5e1ffe89e100023 [file] [log] [blame]
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_<FEATURE>
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(<feature>) qmake function to replace the
patterns contains(QT_CONFIG, <feature>) and load(qfeatures)+
contains(QT_DISABLED_FEATURES, <feature>).
Likewise, the C++ macro QT_CONFIG(<feature>) was introduced to
replace the pattern !defined(QT_NO_<FEATURE>).
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.