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

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

 - QtCore:
   * [QTBUG-34460] qFatal() no longer uses std::abort() on Windows, as
     there are circumstances where global destructors are still run after
     that call, leading to possible deadlocks.
 - QRegularExpression:
   * [QTBUG-66781] Regular expressions are now automatically optimized
     (including JIT compiling) on their first usage. The pattern options
     OptimizeOnFirstUsageOption and DontAutomaticallyOptimizeOption no
     longer have any effect, and will get removed in a future version of
     Qt. QRegularExpression::optimize() can be still used to compile and
     optimize the regular expression in advance (before any match), if
     needed.
 - QDataStream:
   * [QTBUG-59978][QTBUG-67995] version bumped up to 18 to account for
     changes in the serialization of QGradient.
 - Dialogs:
   * QFileSystemModel now uses QRegularExpression internally for wildcard
     matching. Note that QRegularExpression might not give the exact same
     result as QRegExp as its implementation follows strictly the glob
     patterns definition for wildcard expressions.

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

 - Sources of xcb-xinput 1.13 were bundled and are available via -qt-xcb.
 - The minimal required version of libxcb is now 1.9. Bundled xcb sources
   were updated to libxcb 1.9.1 built with xcb-proto 1.8.
 - [QTBUG-67654] Updated CLDR to version 33.1
 - [QTBUG-71144] Updated CLDR to version 34
 - [QTBUG-66561][QTBUG-70008] double-conversion got updated to upstream
   version 3.1.1.
 - libjpeg-turbo was updated to version 2.0.0
 - libpng was updated to version 1.6.35
 - Sqlite was updated to version 3.25.2
 - [QTBUG-71109] updated bundled libxkbcommon 0.4.1 -> 0.8.2 (up to
   31f1f355700870c6615399fbfa7934934b3a9a57)
 - PCRE2 was updated to version 10.32.
 - Added documentation for the SLJIT part of pcre2, which is available
   under the BSD-2-Clause license.

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

 - rcc:
   * Added a --list-mapping option which shows a mapping of resource paths
     to file system paths.

 - qmake
   * New CONFIG options lrelease and embed_translations were added.
     CONFIG+=lrelease does run lrelease on translation files listed in
     TRANSLATIONS and EXTRA_TRANSLATIONS. CONFIG+=embed_translations does
     include the generated .qm files as resources under :/i18n/.

 - uic
   * [QTBUG-65251][QTBUG-51602] The -no-stringliteral option is now
     deprecated and UIC will not generate QStringLiteral anymore.

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

 - Added support for CBOR:
   * Added QCborStreamReader and QCborStreamWriter, classes for low-level
     reading and writing of CBOR streams.
   * Added QCborValue, QCborArray and QCborMap, classes that permit DOM-like
     access to CBOR data. The API is similar to QJsonValue, QJsonArray and
     QJsonObject, respectively.

 - QByteArray:
   * Added QByteArray::isUpper() and QByteArray::isLower() to check if a
     byte array contains only uppercase or only lowercase Latin1 letters.
   * Added compare(), which takes Qt::CaseSensitivity as one of the
     parameters. This function is more efficient than using toLower() or
     toUpper() and then comparing.
   * [QTBUG-66187] QByteArray::toInt(), QByteArray::toDouble() and the
     other number conversion functions now ignore leading and trailing
     whitespaces, as their QString counterparts already did. For
     consistency reasons, the same behavior was added to
     qEnvironmentVariableIntValue() also.

 - QCommandLineParser:
   * [QTBUG-70174] Fixed a bug that caused the help output to show two
     options or more in the same line if the options didn't have a
     description.

 - QCryptographicHash:
   * Add a static method, hashLength, which returns the length of the
     output of a hash function in bytes.

 - QDir:
   * QDir now uses QRegularExpression internally for wildcard matching.
     Note that QRegularExpression might not give the exact same result as
     QRegExp as its implementation follows strictly the glob patterns
     definition for wildcard expressions. Nevertheless, the tests for QDir
     return the same results as before.
   * QDir::tempPath() now reports the canonical path of the temporary
     directory, with any symlinks resolved.
   * On Windows, QDir::drives() no longer returns drives whose media were
     ejected.

 - QExplicitlySharedDataPointer:
   * [QTBUG-66635][QTBUG-66946] Added operator== for nullptr.

 - QFile:
   * [QTBUG-13470] When opening a file, if Truncate is asked for, or
     implied by other flags, it shall be attempted, regardless of what
     other options are selected. We previously did this on Windows; now we
     do so also on Unix (even when appending).

 - QFileSystemWatcher:
   * [QTBUG-69320] Fixed a bug that caused addPaths() to crash on Windows
     if adding a path to be watched on removable storage, if that
     addPaths() was called on a thread not created by QThread and no
     QEventLoop has been created yet.

 - QFlags's operator| for enum types in the Qt namespace are now declared
   in the Qt namespace itself.

 - QLocale:
   * [QTBUG-57802] Added support for World and Europe as (numeric)
     "country" codes ("territory" in CLDR terms), thereby enabling support
     for Yiddish and Esperanto, among other locales using such codes.

 - Logging:
   * [QTBUG-69548] Qt will now accept qtlogging.ini files written by
     QSettings.

 - QMetaType can now register constructor for a set of dynamic types.

 - QRegularExpression:
   * Implemented support for wildcard patterns through a static method.
   * QRegularExpression now provides anchoredPattern() which is a helper
     function to build regular expressions used for exact matching.
   * Implemented support for wildcard patterns. Warning: QRegularExpression
     might not give the exact same result as QRegExp as its implementation
     follows strictly the glob patterns definition for the wildcard
     expressions.

 - [QTBUG-62894] Introduced QScopeGuard.

 - QSharedDataPointer:
   * [QTBUG-66635][QTBUG-66946] Added operator== for nullptr.

 - QSortFilterProxyModel:
   * [QTBUG-46810] QSortFilterProxyModel now supports QRegularExpression.
   * Setters of both the filterRegExp and filterRegularExpression
     properties are now slots and can be used with the old as well as the
     new syntax.

 - QString:
   * Added the functions QString::isUpper() and QString::isLower() to check
     if a string contains only uppercase or only lowercase letters.

 - QTextCodec:
   * [QTBUG-56203] QTextCodec automatically deregisters on destruction now.

 - QTimer:
   * [QTBUG-69800] Fixed singleShot() methods that lacked proper "const"
     qualification to QObject context receivers.
   * Added QTimer::connectTo(), a shorthand way of connecting to the
     timeout() signal.

 - QTranslator:
   * [QTBUG-31031] It is now possible to load qm files without any
     translations. This is particularly useful for the language the
     untranslated strings are written in; logic to load translations can
     now handle the source language like all other languages.

 - QUndoStack:
   * [QTBUG-40040] Exposed canUndo, canRedo, undoText, redoText and clean as
     Q_PROPERTYs.

 - QUrl:
   * Fixed a bug that caused QUrl::matches to incorrectly compare two URLs
     with different hostnames or different usernames as equal, if certain
     QUrl::RemoveXxx options were passed.

 - other:
   * Added an overload of q{To,From}{Big,Little}Endian that operates on a
     memory region.
   * Added the QT_TR_N_NOOP(), QT_TRANSLATE_N_NOOP(), and
     QT_TRANSLATE_N_NOOP3() macros for numeral dependent delayed
     translation.

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

 - QBitmap:
   * Added overloaded QBitmap::fromImage that takes QImage rvalue.

 - QDocumentWriter:
   * [QTBUG-63581] QDocumentWriter now supports table borders, table
     alignment, table width, column widths, line height and image
     resolution when exporting QTextDocuments to ODF files.

 - QGradient:
   * [QTBUG-59978][QTBUG-67995] Added ObjectMode coordinate mode.

 - QGuiApplication:
   * [QTBUG-26413] Fixed queryKeyboardModifiers() on macOS to actually return
     the current modifier key state.

 - QImage:
   * [QTBUG-45858] QImage now supports 64bit image formats with 16 bits per
     color channel, compatible with 16bpc PNG or RGBA16 OpenGL formats.

 - QIntValidator:
   * [QTBUG-59650] Input value with over the highest acceptable value, but
     with no more digits than the maximum value, is now considered
     intermediate.

 - QOpenGLShader:
   * [QTBUG-66074] QOpenGLShader has been fixed to expose geometry and
     tessellation evaluation/control shaders with OpenGL ES 3.2.

 - QPagedPaintDevice:
   * The default constructor has been deprecated since that class is
     not meant to be used standalone. The two public but internal
     devicePageLayout() methods are now deprecated.

 - QPainter:
   * [QTBUG-67248] Fixed drawTiledPixmap() and texture-brush painting with
     high-DPR images.
   * QPainter::drawTiledPixmap() now tiles in the device independent
     coordinate system.

 - QPicture:
   * [QTBUG-71208] Fixed a crash reading malformed picture file.

 - QStandardItemModel:
   * itemData does not return role 255 any more.

 - QTextImageFormat:
   * Added two new functions to the class: setQuality(int=100) and
     quality(). They are currently used by QTextODFWriter to determine the
     image type and quality when exporting images to ODT files.

 - Text:
   * [QTBUG-57479] Non-breaking spaces are now displayed as a degree symbol
     when QTextOption::ShowTabsAndSpaces is used.
   * [QTBUG-69085] Fixed position of text cursor set by clicking outside
     the bounds of a text line that ends with a surrogate pair or ligature.
   * [QTBUG-70293] Fixed a crash that can happen when calling a setter on a
     QTextCursor after its QTextDocument has been deleted.

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

 - Added DTLS over UDP support.

 - QPasswordDigestor:
   * [QTBUG-30550] Added QPasswordDigestor

 - QSslKey:
   * [QTBUG-17718] The OpenSSL backend can now load encrypted PKCS#8
     DER-encoded keys.
   * [QTBUG-59068] Added support for PKCS#8-encoded keys in the generic SSL
     back-end (used for SecureTransport on macOS and for WinRT). Note that
     it does not support keys encrypted with a PKCS#12 algorithm.

 - QSslSocket:
   * Enabled ALPN (and thus HTTP/2 negotiation) in SecureTransport backend
     (macOS).
   * [QTBUG-69420] Implemented renegotiation for SecureTransport backend.

 - SSL:
   * The OpenSSL 1.1 backend also works with OpenSSL 1.1.1 (and thus can
     negotiate TLS 1.3).
   * [QTBUG-68156] OpenSSL >= 1.0 is now required to build Qt with OpenSSL
     support.

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

 - MySQL:
   * Now supports MySQL versions >= 8.0.1.
   * [QTBUG-57028] The TIME data type is now treated like a string-based
     type in order to respect the full range of the TIME data type.

****************************************************************************
*                                  QtTest                                  *
****************************************************************************

 - QCOMPARE:
   * Now outputs contents of std::tuple on failure.
   * [QTBUG-65845] QtTest now prints values of QFlags that failed to compare.

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

 - Itemviews:
   * [QTBUG-12129][QTBUG-14949][QTBUG-57891] Fixed eliding of multi-line
     items.

 - QAbstractSpinBox:
   * [QTBUG-67380] The Qt::ControlModifier now increases the number of steps a
     QAbstractSpinBox takes for the following interactions: scrolling, up/down
     keyboard keys and the spin box buttons. Previously, Qt::ControlModifier
     only affected scrolling.

 - QApplication:
   * [QTBUG-67736] QApplication no longer sends a mouse move event to the
     entered widget if it sends synthetic enter and leave events.

 - QHeaderView:
   * [QTBUG-23203] Padding/margin is now taken into account when the text gets
     elided.
   * [QTBUG-59501] The qss padding attribute is now honored in all cases.
   * [QTBUG-62091] The size of the decoration is now taken into account in
     paintSection().
   * [QTBUG-65017] The drag'n'drop indicator is now using the correct font.
   * [QTBUG-69431] setDefaultSectionSize() now checks if the given value is
     inside min/max section size.
   * [QTBUG-70084] The section indicator is now high-DPI-aware.

 - QItemDelegate:
   * [QTBUG-16134] Fixed text height calculation when the item has a
     decoration or checkbox.

 - QLineEdit:
   * [QTBUG-44046] The textEdited() signal is now emitted even if the
     QValidator has changed the user input.
   * [QTBUG-57448] Added inputRejected() signal for when a key press is not
     accepted by the QLineEdit. For instance, when an invalid key is
     pressed for a validator set.

 - QListView:
   * [QTBUG-27110] The pseudo states :first/:middle/:last are now respected.
   * [QTBUG-56606] Added itemAlignment property.
   * [QTBUG-67440] Fixed a bug that caused items on internal move to be
     deleted.

 - QMenu:
   * [QTBUG-69199] Removed icon highlight when a stylesheet was applied by
     the application.

 - QMessageBox:
   * [QTBUG-35545] On Android and iOS it's now possible to show a
     QMessageBox with custom buttons as a native dialog.

 - QSpinBox/QDoubleSpinBox:
   * Added an option for adaptive decimal step size.

 - QSplashScreen:
  * [QTBUG-43081] The alignment when the message is passed as HTML is now
    correctly honored.

 - QStyle:
   * QStyle::SH_SpinBox_StepModifier allows the developer to pick which
     keyboard modifier increases the number of steps a QAbstractSpinBox
     takes for the following interactions: scrolling, up/down keyboard keys
     and the spin box buttons. The Qt::ShiftModifier can now be used, or
     the feature can be disabled using Qt::NoModifier. Previously, only
     Qt::ControlModifier could be used as the modifier.

 - QTabBar:
   * [QTBUG-18146] Fixed mixed up CSS pseudo class for left and right.

 - QTableView:
   * [QTBUG-48244][QTBUG-49548] Fixed calculating geometries for editors.
   * [QTBUG-70215] Fixed PageUp not getting to top when first row is hidden.

 - QTableWidget:
   * Fixed handling of Qt::EditRole and Qt::DisplayRole in setItemData().

 - QTreeView:
   * [QTBUG-39486] Sped up expanding items when pressing asterisk.

 - QWidget:
   * [QTBUG-68393][QTBUG-69619][QTBUG-10907] Fixed several bugs that
     incorrectly reordered tabs for compound widgets under some special
     circumstances.
   * [QTBUG-65199] enterEvent() and leaveEvent() now occur when a hovering
     drawing tablet stylus enters or leaves a widget.
   * Added the Qt::WA_StyleSheetTarget attribute to indicate that a widget
     was affected by a style sheet.

****************************************************************************
*                                 Android                                  *
****************************************************************************

 - Added Android edit context menu.
 - Removed old debugging bridge. To be able to debug Qt on Android apps the
   user must use QtCreator 4.6.1+.
 - [QTBUG-63735] The system no longer restarts the application when the user
   replaces SIM card or changes the logical density of the screen.
 - [QTBUG-70280] ARM64 builds now default to android-21 instead of failing.
 - [QTBUG-35545] QMessageBox now supports buttons with custom labels.

****************************************************************************
*                                  Linux                                   *
****************************************************************************

 - QFileDialog will use the native dialogs provided by the platform theme
   instead of trying to use Flatpak portal to select directories.

****************************************************************************
*                                  macOS                                   *
****************************************************************************

 - QtGui:
   * [QTBUG-63800] Fixed display of condensed fonts when NoFontMerging is
     in use.

 - Text:
   * [QTBUG-69955] Fixed font weights on macOS 10.14.

****************************************************************************
*                                 Windows                                  *
****************************************************************************

 - [QTBUG-55762] The dimensions of invisible margins inside the frames of
   Windows 10 windows will now be disregarded in the positioning of Qt
   windows to avoid a misplaced look (offset by a few pixels from the
   expected position).
 - [QTBUG-44964][QTBUG-60437] The application attributes
   AA_CompressTabletEvents and AA_CompressHighFrequencyEvents are now
   supported on Windows 8 and above for touch/pen input, with the same
   defaults as on X11 (compress touch events, don't compress tablet events)

 - QTimeZone:
   * [QTBUG-42021] Changed MS-Win to use ICU for time-zone data, when
     available, in preference to MS's TZ APIs. The choice is made when
     building Qt. This will give reliable results when non-DST transitions
     arise, or when a zone's DST is not simple (e.g. interrupted by
     Ramadan).

****************************************************************************
*                                  winrt                                   *
****************************************************************************

 - Added support to Windows UI Automation to the WinRT QPA, allowing
   Qt-based UWP applications to operate with accessibility and
   programmatic UI control tools.

****************************************************************************
*                                   X11                                    *
****************************************************************************

 - [QTBUG-39624] The xcb plugin was ported to use libxcb-xinput instead of
   libXi for XInput2 support. The -xinput2 configure option was replaced by
   -xcb-xinput.
