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.