Qt 5.10 introduces many new features and improvements as well as bugfixes
over the 5.9.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.10 series is binary compatible with the 5.9.x series.
Applications compiled for 5.9 will continue to run with 5.10.

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-60857] The names of the roles returned by
   QSqlQueryModel::roleNames now only include a name for the
   Qt::DisplayRole. Previously all the roles names of QSqlQueryModel were
   returned.
 - QFileInfo on empty strings now behaves like the default-constructed
   QFileInfo. Notably, path() will now be the empty string too, instead of
   ".", which means absoluteFilePath() is no longer the current working
   directory.

 - QTemporaryFile:
   * rename() no longer attempts to do block copying, as that usually
     indicates a mistake in the user's code. Instead, either create the
     temporary file in the same directory as the new name to be, or use
     QSaveFile.
   * On Linux, QTemporaryFile will attempt to create unnamed temporary
     files. If that succeeds, open() will return true but exists() will be
     false. If you call fileName() or any function that calls it,
     QTemporaryFile will give the file a name, so most applications will
     not see a difference.

 - Windows:
   * [QTBUG-62662] On Windows, a drag & drop operation of local file URIs,
     like QListView items backed by a QFileSystemModel, will result in the
     attachment or opening of the files by the target application, instead
     of the creation of hyperlinks.

****************************************************************************
*                               General Notes                              *
****************************************************************************

Deprecation Notice
------------------

 - Starting with Qt 5.10, IPv6 support is mandatory for all platforms.
   Systems without proper IPv6 support, such as the getaddrinfo() function
   or the proper socket address structures, will not be able to build
   QtNetwork anymore.

 - QSignalMapper is now marked as deprecated.

Potentially Source-Incompatible Changes
---------------------------------------

 - QByteArray:
   * qbytearray.h no longer includes qstring.h. In particular, this means
     that in order to use QStringBuilder with QByteArray, you need to
     include both qbytearray.h and qstring.h now (or <QByteArray> and
     <QString>, resp.).

 - QStaticText:
   * The QStaticText(const QString &) constructor is now explicit.

Third-Party Code
----------------

 - PCRE2 has been updated to version 10.30.
 - Replaced bundled libjpeg by libjpeg-turbo 1.5.2
 - Improve documentation about Freetype 2 licenses.
 - Sqlite was updated to version 3.20.1

****************************************************************************
*                               Library                                    *
****************************************************************************

QtCore
------

 - Added qHash(QStringView).
 - [QTBUG-37253] Added QMetaObject::invokeMethod() overloads for function
   pointers.
 - [QTBUG-41006] Added qEnvironmentVariable, which returns the value of an
   environment variable in a QString, while qgetenv continues to be used to
   return it in a QByteArray. For Unix, since most environment variables
   seem to contain path names, qEnvironmentVariable will do the same as
   QFile::decodeName, which means NFC/NFD conversion on Apple OSes.
 - [QTBUG-62915] qAddPostRoutine() and qRemovePostRoutine() are now
   thread-safe.

 - Containers:
   * Added an STL-like iterator to go through QHash/QMap returning both the
     key and the value of the element pointed to. That lets QHash/QMap
     interoperate better with stl's algorithms like std::set_union.

 - JSON:
   * QJsonArray, QJsonDocument, QJsonObject and QJsonValue now have move
     operations and a swap() member function.

 - Logging:
   * If you set QT_FATAL_WARNINGS to a number n > 1, Qt will stop the
     application on that n-th warning, instead of on the first. For the
     sake of compatibility with previous versions, if the variable is set
     to any non-empty and non-numeric value, Qt will understand it as "stop
     on first warning".

 - QByteArray:
   * Added shrink_to_fit() for compatibility with the Standard Library. This
     function does the same as squeeze().

 - QChar:
   * Added constructors from char16_t and, on Windows, wchar_t.

 - QCoreApplication:
   * [QTBUG-57095] Calling QCoreApplication::translate() is now
     thread-safe.

 - QCryptographicHash:
   * [QTBUG-59770] In order to preserve compatibility with earlier versions
     of Qt, QCryptographicHash is now able to calculate Keccak message
     digests. Please see the release notes for Qt 5.9.2 for more details.

 - QDate/QTime/QDateTime:
   * Added toString() overloads taking the format as a QStringView.
   * [QTBUG-22833] Added support for parsing of time-zones.

 - QDebug:
   * Added streaming of QStringViews.

 - QFile:
   * [QTBUG-984] Added fileTime() and setFileTime().

 - QFileInfo:
   * [QTBUG-984] Added fileTime().
   * Deprecated created() because it could return one of three different
     file times depending on the OS and filesystem type, without the
     ability to determine which one is which. It is replaced by
     metadataChangeTime() and birthTime().
   * Added QFileInfo::metadataChangeTime(), which returns the time the
     file's metadata was last changed, if it is known, and falling back to
     the same value as lastModified() otherwise. On Unix systems, this
     corresponds to the file's ctime.
   * Added QFileInfo::birthTime(), which returns the file's birth time if
     it is known, an invalid QDateTime otherwise. This function is
     supported on Windows and on some Unix systems.

 - QIODevice:
   * Added skip() method to improve performance in read operations.

 - QLatin1String:
   * Added isEmpty(), isNull().
   * Added iterators, {c,}{r,}{begin,end}().
   * Added chopped(), chop(), truncate().
   * Added startsWith(), endsWith().
   * Added a constructor taking two pointers, complementing the constructor
     that takes a pointer and a length.
   * Added trimmed() function.

 - QLocale:
   * Added toString(QDate/QTime/QDateTime) overloads taking the format
     string as a QStringView.
   * Added QLocale::formattedDataSize() for formatting quantities of bytes
     as kB, MB, GB etc.

 - QLockFile:
   * Fixed a bug that would cause QLockFile to mis-identify valid lock
     files as stale if the application name was set with
     QCoreApplication::setApplicationName().

 - QMimeType:
   * Add Q_GADGET, so that QML applications can make use of QMimeType's
     properties and methods.

 - QObject:
   * [QTBUG-60339] Added connect() support for move-only function objects.

 - QProcess:
   * [QTBUG-2058][QTBUG-2284][QTBUG-37656][QTBUG-52405][QTBUG-57687] Added
     non-static QProcess::startDetached to support more features for
     detached processes.
   * [QTBUG-2284] Added the ability to set a custom process environment for
     detached processes.
   * [QTBUG-52405] Added the ability to specify native arguments for
     detached processes on Windows.
   * [QTBUG-2058][QTBUG-37656] Added support for standard channel
     redirection using setStandard{Input|Output|Error}File to
     QProcess::startDetached.

 - QSaveFile:
   * [QTBUG-47379] Saving to Alternate Data Streams on NTFS on Windows is
     now possible, but requires setDirectWriteFallback(true).

 - QSemaphore:
   * Added a new RAII class, QSemaphoreReleaser, to reliably perform
     release() calls.

 - QSettings:
   * [QTBUG-47379] Added setAtomicSyncRequired(), which allows one to use
     QSettings with config files in unwriteable directories or in Alternate
     Data Streams on NTFS on Windows. This used to work before Qt 5.4, but
     remains a non-default behavior due to the potential of data
     corruption.

 - QSortFilterProxyModel:
   * QSortFilterProxyModel now does not emit an unnecessary layoutChanged()
     following a model reset.

 - QStandardPaths:
   * On Windows, QStandardPaths now also looks into
     "<APPDIR>/data/<APPNAME>" for non-generic paths.

 - QString:
   * Added arg(QStringView), arg(QLatin1String) overloads.
   * Added shrink_to_fit(), for compatibility with the Standard
     Library. This function does the same as squeeze().

 - QString/QStringRef:
   * Added startsWith(), endsWith() overloads taking QStringView.

 - QString/QStringRef/QByteArray:
   * Added chopped(n), a const version of chop(n).

 - QString/QStringRef/QByteArray/QLatin1String:
   * Added front() and back() for STL compatibility.

 - QStringBuilder:
   * Added support for (non-const) char*.

 - QStringList:
   * Added contains(QLatin1String) overload.

 - QStringRef:
   * trimmed() now returns an empty string-ref for an empty input. Before,
     it would return a null one.

 - QStringView:
   * New class, superseding const QString and QStringRef as function
     parameters, accepting a wide variety of UTF-16 string data sources,
     e.g. u"string", std::u16string{,_view}, and, on Windows, L"string",
     std::wstring{,_view} without converting to QString first.

 - QTemporaryDir:
   * The class now supports the "XXXXXX" replacement token anywhere in the
     template, not just at the end. This behavior is similar to what
     QTemporaryFile supports.

 - QTextCodec:
   * Added fromUnicode() and canEncode() overloads taking QStringView.

 - QTextEncoder:
   * Added fromUnicode() overload taking QStringView.

 - QThread:
   * Added the QThread::create() function.
   * An exception escaping from QThread::run() will now result in immediate
     and abnormal program termination. The same applies if an exception
     leaves a slot connected directly to the QThread::started() or
     QThread::finished() signals.

 - QUuid:
   * Added fromString(QStringView/QLatin1String).

 - QVariant:
   * QVariants containing pointers will now return true on isNull() if the
     contained pointer is null.

 - QVarLengthArray:
   * Added shrink_to_fit(), for compatibility with the Standard Library.

 - QVector:
   * Added shrink_to_fit(), for compatibility with the Standard Library.

 - QVersionNumber:
   * Added QStringView and QLatin1String overloads of fromString().

 - QtGlobal:
   * Q_ASSERT() and Q_ASSERT_X() now always expand to expressions of type
     void that are usable in constexpr contexts. This makes them usable in
     both C++11 and C++14 constexpr functions and in comma expressions.

QtGui
-----

 - [QTBUG-55981] Added support for rendering to QWindow via the Vulkan
   graphics API.
 - [QTBUG-55981] Added QVulkanWindow, a convenience subclass of QWindow.
 - Added support for the OpenGL ES 3.2 API in QOpenGLExtraFunctions
 - [QTBUG-50987] Added support for requesting OpenGL windows with
   sRGB-capable default framebuffers. While this is implicit on some
   platforms, QSurfaceFormat now has the necessary flags to request such
   windows in a cross-platform manner.
 - High DPI variants of 9-patch images can now be loaded using the
   following syntax: "foo@2x.9.png"
 - It's now possible to retrieve the screen at a given point via
   QGuiApplication::screenAt().

 - Important Behvior Changes:
   * [QTBUG-56848][QTCREATORBUG-17683] Changed CSS line-height property
     with multiplier to follow CSS spec

 - Tablet support:
   * [QTBUG-44964] If the application attribute AA_CompressTabletEvents is
     set in addition to AA_CompressHighFrequencyEvents, even the
     QTabletEvents will be compressed (only on the X11 platform so far).
     AA_CompressHighFrequencyEvents does not enable compression of tablet
     events by itself, because paint applications typically need to process
     all possible tablet events in order to draw the smoothest curves.

 - QPA:
   * [QTBUG-57608] QWindowSystemInterfacePrivate::handleGeometryChange no
     longer takes the old geometry as an argument.

 - QImage:
   * QImages can now use more than 2GByte of pixel data.

 - QCursor:
   * Added equality operators.

 - QImageWriter:
   * Add QImageWriter::InvalidImageError to communicate invalid attempts to
     write a bad QImage (for instance, a null QImage).

 - QMovie:
   * Added lastError and lastErrorString accessors, as a convenience over
     connecting to the error() signal.

 - QWindow:
   * setMask() no longer requires the window to be created to have an
     effect; it can be set at any time.

 - Text:
   * [QTBUG-56728] Added QFont::PreferNoShaping style strategy to support
     improvements to performance at the expense of some cosmetic font
     features.

 - Windows:
   * [QTBUG-55967] Native menus have been implemented.
   * A native system tray icon is now available for SystemTrayIcon.

QtNetwork
---------

 - [QTBUG-56102] QSslSocket can now use a temporary keychain on macOS.
 - Fixed a proxy-authentication issue, after a wrong password has been used,
   when supplying the right password.

 - HTTP/2:
   * [QTBUG-61397] In case of clear text HTTP/2 we now initiate a required
     protocol upgrade procedure instead of 'H2Direct' connection.

 - QHostInfo:
   * Added swap() and move operator.

 - QLocalServer:
   * [QTBUG-55043] Added a function to retrieve the socket descriptor.

 - QNetworkAccessManager:
   * [QTBUG-63075] Added support for HTTP status 308.

 - QNetworkInterface:
   * [QTBUG-51922] Changed allAddresses() to not include addresses found in
     inactive interfaces, matching the user expectations of this function.
     If those addresses are needed for some purpose, the application can
     call allInterfaces() and obtain the addresses in each interface.

 - QNetworkProxy:
   * [QTBUG-45495] Setting of network proxies is now supported on UWP.
   * [QTBUG-45495] UWP now supports proxies using SOCKS5.
   * The functions related to QNetworkConfiguration are deprecated. They've
     performed no action since Qt 5.0, so code using them can safely stop
     doing so.

 - QSslSocket:
   * [QTBUG-52905] Added OpenSSL 1.1 backend.

QtSql
-----

 - QSqlError:
   * Added swap().

 - SQLite:
   * Named placeholder can now be used. If compiling Qt by hand and using
     system libraries, this feature requires at least SQLite 3.3.11.
   * [QTBUG-18084] Added QSQLITE_ENABLE_REGEXP connect option for the SQLite
     backend. If set, a Qt based regexp() implementation is provided
     allowing use of REGEXP in SQL statements.

QtTest
------

 - [QTBUG-53381] Added keySequence() function.

 - QCOMPARE:
   * Can now be used for mixed-type comparisons.
   * Now outputs contents of QPair and std::pair on failure.
   * Now supports printing QStringViews in case of test failures.

QtWidgets
---------

 - The windowsxp style is no longer available as a separate style, because
   it did not (and cannot) actually provide an XP-style appearance on
   currently supported Qt platforms.
 - Added AA_DisableWindowContextHelpButton attribute. Setting this
   attribute globally prevents the automatic "What's this" button on
   dialogs on Windows (WindowsContextHelpButtonHint).
 - [QTBUG-56860] Fixed widget losing focus after showing menu second time.
 - [QTBUG-47185][QTBUG-61280] QOpenGLWidget is now able to render and
   return its content via grabFramebuffer(), QWidget::grab() or
   QWidget::render() even when the widget has not been made visible.
 - [QTBUG-10907] When tabbing to a widget with focus proxy, focus will now
   be given to the proxy rather than just being ignored.

 - ItemViews:
   * Made it easier to drop above and below items.

 - QAbstractItemView/QTreeWidget/QTableWidget/QListWidget:
   * [QTBUG-61139] Added isPersistentEditorOpen().

 - QDockWidget:
   * When QMainWindow::GrouppedDragging and QMainWindow::AllowNestedDocks
     are both enabled, floating dock widgets now have the ability to be
     dropped together side by side.
   * [QTBUG-63526] Fixed an issue in QDockWidgets where the widget would
     not resize despite showing a resize cursor.

 - QFusionStyle:
   * The default palette used by the platform-agnostic Fusion style has
     been desaturated. Previously the window background color, and other
     colors derived from it, were brown shades. Now these colors are
     neutral gray that fit better on any desktop.

 - QInputDialog:
   * [QTBUG-17547] Added setDoubleStep to enable changing of the step
     amount for getDouble().

 - QLineEdit:
   * Added selectionEnd(), selectionLength(), complementing
     selectionStart().

 - QOpenGLWidget:
   * [QTBUG-50987] Added support for specifying custom internal texture
     formats in QOpenGLWidget in order to make it possible to have the
     widget backed by an sRGB-capable framebuffer.

 - QSplashScreen:
   * All constructors now implicitly set Qt::FramelessWindowHint, not just
     the (pixmap, flags) one.

 - QWidget:
   * [QTBUG-10907] QWidget::setTabOrder() will now preserve the local tab
     order inside a widget if it has a focus proxy set to an inner child.

 - Styles:
   * Added SH_Widget_Animation_Duration style hint which supersedes
     SH_Widget_Animate, which is now deprecated.

 - Text:
   * Introduced tabStopDistance property in QTextOption, QTextEdit and
     QPlainTextEdit as replacement for the inconsistently named tabStop and
     tabStopWidth properties. QTextOption::tabStop, QTextEdit::tabStopWidth
     and QPlainTextEdit::tabStopWidth are now deprecated.

****************************************************************************
*                         Platform-specific Changes                        *
****************************************************************************

 - [QTBUG-60268] Input context is now supported with the offscreen platform.

Android
-------

 - QtLoader: Enabled loading shared libraries from /system/lib or a custom
   path specified with the android.app.system_libs_prefix metadata variable in
   AndroidManifest.xml. This supports deploying Qt apps as Android system
   apps.
 - [QTBUG-58060] Android dialogs now have more appropriate button layouts,
   with affirmative actions on the right.
 - [QTBUG-59175] QWidget::createWindowContainer() is now supported on
   Android for embedding OpenGL-based QWindows into widget UIs.

iOS
---

 - [QTBUG-59403] Support added for using the input panel as a trackpad
   using two-finger swipe.
 - The minimum deployment target for applications is now iOS 10.0.

Linux
-----

 - Qt uses the statx(2) system call for obtaining file information on
   kernels 4.12 and later. Some older container systems install system call
   protection rules that do not include this system call. If you experience
   problems running Qt applications inside containers (such as the report of
   a file not existing when it does), ensure the statx(2) is allowed in the
   container configuration.

 - Linux/XCB:
   * Added screen product information from EDID.

 - eglfs/KMS:
   * Screen modes, including current and preferred ones, are now listed.
   * Added screen product information from EDID.

Windows
-------

 - Accessibility:
   * MinGW builds now support IAccessible2.

 - Fonts:
   * [QTBUG-62176] Some key fonts, such as Calibri, were being detected as
     bitmap fonts and not rendered correctly in Qt Quick. This has now been
     fixed.

X11
---

 - Native painting (instead of software rasterization) has been experimentally
   re-introduced. Enabled by the configure option -xcb-native-painting.
 - XInput device property changes are now detected at runtime (no
   application restart required).
 - [QTBUG-60513][QTBUG-29278][QTBUG-43768][QTBUG-18380] The _NET_WORKAREA
   atom is used for calculating QScreen::availableGeometry() only on systems
   with one monitor. In all other cases QScreen::availableGeometry() is
   equal to QScreen::geometry(). To restore the legacy behavior with
   untrustworthy values in QScreen::availableGeometry() set
   QT_RELY_ON_NET_WORKAREA_ATOM=1 in the environment.
 - The QT_XCB_NO_XI2_MOUSE environment variable is deprecated and will be
   removed in Qt 6. If your application relies on behavior set by
   QT_XCB_NO_XI2_MOUSE, it should be updated accordingly.

 - Pointer event delivery on X11 is now done starting from XInput version
   2.0 (when available) instead of 2.2. XInput support can be disabled by
   setting QT_XCB_NO_XI2=1 in the environment; note that doing so will also
   disable tablet and touch support.

****************************************************************************
*                                Tools                                     *
****************************************************************************

moc
---

 - moc now supports NOTIFY signals of parent classes in Q_PROPERTY

qmake
-----

 - [QTBUG-1581] Introduced the variable OBJECTIVE_HEADERS.
 - [QTBUG-11117][nmake] Added support for precompiled header also for
   plain C files.
 - Added versionAtLeast() and versionAtMost() test functions.
 - If you use CONFIG+=qmltestcase with no SOURCES, 'make check' will now
   run qmltestrunner for you.
 - [Darwin] Added support for Info.plist in non-bundle apps and libs.

uic
---

 - [QTBUG-51602] Added the no-stringliteral option, to be used for building
   shared objects which are meant to be unloadable.
 - Old images embedded in ui files, imported from Qt 3, are now ignored.
   uic will now behave consistently with Qt Designer - both will ignore
   them.
