Qt 5.15 introduces many new features and improvements as well as bugfixes
over the 5.14.x series. For more details, refer to the online documentation
included in this distribution. The documentation is also available online:

https://doc.qt.io/qt-5/index.html

The Qt version 5.15 series is binary compatible with the 5.14.x series.
Applications compiled for 5.14 will continue to run with 5.15.

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                        *
****************************************************************************

 - Calling QList::insert() or removeAt() with an out of bounds index is
   deprecated and will no longer be supported in Qt 6.

****************************************************************************
*                 Potentially Binary-Incompatible Changes                  *
****************************************************************************

 - QHash:
     QHash's iterator category was changed from bidirectional iterator to
     forward iterator.  This may cause trouble if a library uses the
     iterator category to alter functionality through tag dispatching. This
     only applies when compiling the library or application with
     QT_DISABLE_DEPRECATED_BEFORE=0x050F00 and the other with a lower value.

****************************************************************************
*                            Deprecation Notice                            *
****************************************************************************

 - The binary JSON representation is deprecated. The CBOR format should be
   used instead.

 - [QTBUG-80308] QUrl::topLevelDomain() was deprecated in 5.15 and will be
   removed in 6.0

 - QtNetwork:
   * QNetworkConfigurationManager, QNetworkConfiguration and QNetworkSession
     are deprecated, to be removed in Qt 6.
   * QNetworkAccessManager::activeConfiguration, configuration and
     setConfiguration are deprecated, to be removed in Qt 6.
   * QNetworkAccessManager::networkAccessible, setNetworkAccessible and
     the NetworkAccessibility enum are deprecated, to be removed in Qt 6.
   * QLocalSocket::error() (the signal) is deprecated; superseded by
     errorOccurred()
   * QAbstractSocket::error() (the signal) is deprecated; superseded by
     errorOccurred()
   * QNetworkReply::error() (the signal) is deprecated; superseded by
     errorOccurred()
   * [QTBUG-80369] QSslSocket::sslErrors() (the getter) was deprecated and
     superseded by sslHandshakeErrors()

 - [QTBUG-81630][QTBUG-80312] QLinkedList is deprecated and will be moved
   to Qt5Compat in Qt 6. It is recommended to use std::list instead.

See also the various sections below, which include many more deprecations.

****************************************************************************
*                                  QtCore                                  *
****************************************************************************

 - QCalendar::monthsInYear(QCalendar::Unspecified) now returns
   maximumMonthsInYear(). QCalendar::daysInYear() now makes clear that its
   handling of unspecified year is undefined.

 - Containers:
   * Added operator-> to the key-value iterator for QHash/QMap.

 - QAbstractItemModel:
   * [QTBUG-72587] The match() method now supports the new
     Qt::RegularExpression match flag value. This will allow users to use
     either a string or a fully configured QRegularExpression when doing
     searches. In the second case, the case sensitivity flag will be
     ignored if passed.

 - QByteArray:
   * resize() will no longer shrink the capacity. That means resize(0) now
     reliably preserves capacity().
   * Added the new fromBase64Encoding function.
   * Added new flags to make fromBase64 / fromBase64Encoding strictly
     validate their input, instead of skipping over invalid characters.

 - QCborArray:
   * Fixed an infinite loop when operator[] was called with an index larger
     than the array's size plus 1.

 - QCborMap:
   * [QTBUG-83366] Fixed some issues relating to assigning elements from a
     map to itself.

 - QCborValue:
   * fromCbor() now limits decoding to at most 1024 nested maps, arrays,
     and tags to prevent stack overflows. This should be sufficient for
     most uses of CBOR. An API to limit further or to relax the limit will
     be provided in 5.15. Meanwhile, if decoding more is required,
     QCborStreamReader can be used (note that each level of map and array
     allocates memory).

 - QDate:
   * QDate::toString(Qt::DateFormat, QCalendar) no longer takes calendar
     into account for Qt::TextDate. There was no matching support in
     QDateTime and the locale-independent formats are intended to be
     standard, rather than customized to the user.

 - QDateTime:
   * Added some missing QCalendar variants of QDateTime::toString().
     Included docs for QCalendar variants in both QDate and QDateTime.

 - QFile:
   * Introduce QFile::moveToTrash to allow applications to move files to
     the trash.

 - QFileInfo:
   * [QTBUG-75869] Add QFileInfo::isJunction so that applications can
     recognize NTFS file system entries as junctions

 - QHash:
   * Reverse iteration over QHash is now deprecated.
   * insertMulti(), unite() and values(const Key &key) are now deprecated.
     Please use QMultiHash instead.

 - QJsonObject:
   * Fixed a regression from 5.13 that incorrect results when assigning
     elements from an object to itself.

 - QLatin1String:
   * Added compare().

 - QLibrary and QPluginLoader:
   * [QTBUG-39642] Fixed a deadlock that would happen if the plugin or
     library being loaded has load-time initialization code (C++ global
     variables) that recursed back into the same QLibrary or QPluginLoader
     object.

 - QLocale:
   * Deprecated toTime() variants taking a calendar. The calendar is
     ignored in time parsing.
   * Data used for currency formats in several locales and list patterns in
     some locales have changed due to now parsing the CLDR data more
     faithfully.
   * [QTBUG-79902] Currency formats are now based on CLDR's accounting
     formats, where they were previously mostly based (more or less by
     accident) on standard formats. In particular, this now means negative
     currency formats are specified, where available, where they (mostly)
     were not previously.

 - QMap:
   * [QTBUG-35544] insertMulti(), unite(), values(Key), uniqueKeys(),
     count(Key) is now deprecated. Please use QMultiMap instead.

 - QObject:
   * [QTBUG-76375] A logging category
     qt.core.qmetaobject.connectslotsbyname was added, which will report
     on the connections made by QMetaObject::connectSlotsByName().

 - QProcess:
   * Overloads of start/execute/startDatached that parse a single command
     string into program and arguments have been marked as deprecated. A
     static helper splitCommand has been added to construct a QStringList
     from a command string.

 - QRandomGenerator:
   * The system() random generator will now use the RDSEED instruction on
     x86 processors whenever available as the first source of random data.
     It will fall back to RDRAND and then to the system functions, in that
     order.

 - QRegularExpression:
   * The escape(), wildcardToRegularExpression() and anchoredPattern()
     functions now have overloads taking a QStringView parameter.

 - QResource:
   * Added uncompressedSize() and uncompressedData(), which will perform
     any required decompression on the data, prior to returning (unlike
     data() and size()).

 - QSet:
   * Reverse iteration over QSet is now deprecated.

 - QStandardPaths:
   * When used in a low-integrity process on Windows,
     QStandardPaths::writableLocation returns respective low-integrity
     paths.

 - QString:
   * Added QString::isValidUtf16.

 - QStringView:
   * Added QStringView::isValidUtf16.
   * Added compare() overloads taking QLatin1String, QChar.
   * Conversion from std::basic_string can now be constexpr (when
     std::basic_string is).

 - QTimeZone:
   * The constructor can now handle general UTC-offset zone names. The
     reported id() of such a zone shall be in canonical form, so might not
     match the ID passed to the constructor.

 - QXmlStream:
   * QXmlStreamReader does now by default limit the expansion of entities
     to 4096 characters. Documents where a single entity expands to more
     characters than the limit are not considered well formed. The limit is
     there to avoid DoS attacks through recursively expanding entities when
     loading untrusted content. The limit can be changed through the
     QXmlStreamReader::setEntityExpansionLimit() method.

 - moc:
   * Moc now correctly sets a non-null QMetaObject::superClass for
     Q_GADGETs that inherit from a template which inherits another
     Q_GADGET.
   * [QTBUG-74521][QTBUG-76598] moc can now output a ".d" dep file that can
     be consumed by other build systems.

****************************************************************************
*                                  QtGui                                   *
****************************************************************************

 - Extended QVulkanWindow to allow user to specify additional queues to be
   created.
 - Added API for starting interactive window resize and move operations
   handled by the system.

 - QClipboard:
   * Support lazily-provided copying of data to the clipboard on macOS

 - QCursor:
   * [QTBUG-48701] QCursor::bitmap() and QCursor::mask() can now return
     by-value instead of by-pointer.

 - QFont:
   * Deprecated QFont::ForceIntegerMetrics and QFont::OpenGLCompatible,
     with the intention of removing them in Qt 6.0.0.

 - QMarkdownWriter:
   * [QTBUG-80603] Code blocks are no longer word-wrapped; the beginning
     fence of a code block no longer has a space before the language string;
     and the ending fence is no longer skipped in some cases where it was.

 - QPdfWriter:
   * New API to provide external document XMP metadata and attach files to
     PDF.

 - QTabletEvent:
   * QTabletEvent::device() is deprecated, because the plan is to return
     an object pointer in Qt 6 rather than an enum. The enum is now provided
     by deviceType().
   * hiResGlobalX() and hiResGlobalY() are deprecated, because globalPosF()
     has the same resolution. But globalPosF() (and several others) will
     probably be renamed in Qt 6. The replacements are not in place yet.
   * [QTBUG-77826] Local coordinates are now correct when the event is
     delivered to a nested window on X11.

 - Text:
   * Fixed a problem where pixel sizes would be truncated before calculating
     glyph positions.
   * Fixed an issue with QFont::PreferNoShaping where boxes would appear in
     place of unprintable characters.
   * Fixed a problem where certain bold fonts would be synthetically
     emboldened by Qt when using the Freetype font engine.

 - Application palettes are now resolved against the platform's theme
   palette, the same way widget palettes are resolved against their parents,
   and the application palette. This means the application palette reflected
   through QGuiApplication::palette() may not be exactly the same palette as
   set via QGuiApplication::setPalette().

****************************************************************************
*                                QtWidgets                                 *
****************************************************************************

 - Added QStyleOptionTabV4 as a subclass of QStyleOptionTab so that the
   tab's index information can be obtained.

 - ItemViews:
   * [QTBUG-76423] The convenience views QList/Table/TreeWidgetItem now
     treat a default constructed QBrush or QSize as an empty QVariant which
     allows resetting of the values set to it's default values.

 - QApplication:
   * The globalStrut property has been deprecated and will be removed from
     Qt 6.

 - QButtonGroup:
   * Added signals idClicked/Pressed/Released/Toggled that replace the
     deprecated signal overloads.

 - QComboBox:
   * QComboBox got a new property 'placeholderText'
   * Support checkable items in styles that use a popup for the dropdown.
   * the SizeAdjustPolicy value AdjustToMinimumContentLength is deprecated,
     use AdjustToContents or AdjustToContentsOnFirstShow instead.

 - QGraphicsView:
   * Fixed a bug where hover events would not be delivered if the item was
     added while blocked by a modal panel.

 - QLabel:
   * [QTBUG-48701] QLabel::pixmap() and QLabel::picture() can now return
     by-value instead of by-pointer.

 - QLineEdit:
   * Inputmask X character now requires non-blank input.

 - QMenu:
   * a popup menu hides when a QWidgetAction added to it fires the
     triggered signal.

 - QShortcut:
   * QShortcut ctor has now pointer to member function overloads

 - QStyle:
   * You can now set the CSS property 'icon' on a QPushButton to override
     which icon to draw.

 - QSystemTrayIcon:
   * On macOS, clicking on the message will remove the notification.

 - QTabWidget/QTabBar:
   * Tabs can now be hidden with setTabVisible

 - QWidget:
   * Fonts and palette settings are inherited by children from their
     parents even if the children have application-wide platform theme
     overrides.

 - QWizard:
   * visitedPages has been deprecated, use visitedIds instead.

****************************************************************************
*                                QtNetwork                                 *
****************************************************************************

 - A new signal introduced to report when a valid session ticket is received
   (TLS 1.3)

 - SSL:
   * Removed OpenSSL 1.0.x support, now 1.1.x is required
   * The minimum required version of OpenSSL is now 1.1.1.

 - QSslCertificate:
   * [QTBUG-72587] Add overload of fromPath that does not make use of
     QRegExp and deprecate the QRegExp variant.

****************************************************************************
*                                  QtSql                                   *
****************************************************************************

 - QMYSQL:
   * Removed support for MySql < 5.0 since 5.0 was released 14 years ago.
   * The QMYSQL plugin can now be build with the MariaDB C connector libs
     on Windows.

 - QSqlDriver:
   * The one-arg version of QSqlDriver::notifcation() is now deprecated.

****************************************************************************
*                                 QTestLib                                 *
****************************************************************************

 - The formerly named 'xunitxml' test reporter has been renamed to what it
   actually is: a JUnit test reporter, and is now triggered by passing -o
   junitxml to the test binary.

****************************************************************************
*                                  QtXml                                   *
****************************************************************************

 - [QTBUG-76177] SAX classes are now deprecated. Use QXmlStreamReader,
   QXmlStreamWriter in QtCore instead.

****************************************************************************
*                                Configure                                 *
****************************************************************************

 - Add switch "-coverage source-based" to enable clang's "source-based" code
   coverage feature. This can be used for code coverage analysis.

 - X11:
   * [QTBUG-67277][QTBUG-30939] The minimal required version of libxcb now
     is 1.11.
   * [QTBUG-67277][QTBUG-30939] Removed -qt-xcb, -system-xcb, -xkb,
     -xcb-xinput switches.

****************************************************************************
*                                  cmake                                   *
****************************************************************************

 - Fixed an issue where some Qt location and declarative plugins whose name
   did not end with "Plugin" where not imported by the corresponding Qt
   component package.

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

 - libjpeg-turbo was updated to version 2.0.4

 - X11:
   * [QTBUG-67277][QTBUG-30939] Removed all bundled XCB libs, with the
     exception of xcb-xinput, which is not available on systems with libxcb
     1.11.

****************************************************************************
*                        Platform Specific Changes                         *
****************************************************************************

 - Linux:
   * Enable accessibility on Linux when Orca is started by hand
   * [QTBUG-78754] Vulkan is now supported by eglfs (eglfs_viv backend) on
     i.MX8 devices with the Vivante graphics stack. This is done via
     VK_KHR_display so no windowing system is required.

 - X11:
   * [QTBUG-67277][QTBUG-30939] XKB and XInput2 now are mandatory
     dependencies for XCB plugin. XCB-XKB is a part of libxcb 1.11
     releases. XCB-XInput is not part of libxcb 1.11 releases, but Qt
     builders can use the -bundled-xcb-xinput switch.

 - Android:
   * [REVERTED] Qt::MaximizeUsingFullscreenGeometryHint window flag is
     now supported, and will make the window fullscreen, but keep the
     system UI on-screen, with a translucent background color.
   * [QTBUG-82120] Use native file dialog by default for open and save
     operations.

 - Windows:
   * Fixed a bug where some fonts would not be accessible by
     referencing their typographic name.
   * Fixed a 2 pixel offset on glyphs when using color fonts or any
     hinting preference other than the default (full) hinting.

 - WebAssembly:
   * Updated emscripten to version 1.39.8
