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