1Qt 5.15 introduces many new features and improvements as well as bugfixes
2over the 5.14.x series. For more details, refer to the online documentation
3included in this distribution. The documentation is also available online:
4
5https://doc.qt.io/qt-5/index.html
6
7The Qt version 5.15 series is binary compatible with the 5.14.x series.
8Applications compiled for 5.14 will continue to run with 5.15.
9
10Some of the changes listed in this file include issue tracking numbers
11corresponding to tasks in the Qt Bug Tracker:
12
13https://bugreports.qt.io/
14
15Each of these identifiers can be entered in the bug tracker to obtain more
16information about a particular change.
17
18****************************************************************************
19*                        Important Behavior Changes                        *
20****************************************************************************
21
22 - Calling QList::insert() or removeAt() with an out of bounds index is
23   deprecated and will no longer be supported in Qt 6.
24
25****************************************************************************
26*                 Potentially Binary-Incompatible Changes                  *
27****************************************************************************
28
29 - QHash:
30     QHash's iterator category was changed from bidirectional iterator to
31     forward iterator.  This may cause trouble if a library uses the
32     iterator category to alter functionality through tag dispatching. This
33     only applies when compiling the library or application with
34     QT_DISABLE_DEPRECATED_BEFORE=0x050F00 and the other with a lower value.
35
36****************************************************************************
37*                            Deprecation Notice                            *
38****************************************************************************
39
40 - The binary JSON representation is deprecated. The CBOR format should be
41   used instead.
42
43 - [QTBUG-80308] QUrl::topLevelDomain() was deprecated in 5.15 and will be
44   removed in 6.0
45
46 - QtNetwork:
47   * QNetworkConfigurationManager, QNetworkConfiguration and QNetworkSession
48     are deprecated, to be removed in Qt 6.
49   * QNetworkAccessManager::activeConfiguration, configuration and
50     setConfiguration are deprecated, to be removed in Qt 6.
51   * QNetworkAccessManager::networkAccessible, setNetworkAccessible and
52     the NetworkAccessibility enum are deprecated, to be removed in Qt 6.
53   * QLocalSocket::error() (the signal) is deprecated; superseded by
54     errorOccurred()
55   * QAbstractSocket::error() (the signal) is deprecated; superseded by
56     errorOccurred()
57   * QNetworkReply::error() (the signal) is deprecated; superseded by
58     errorOccurred()
59   * [QTBUG-80369] QSslSocket::sslErrors() (the getter) was deprecated and
60     superseded by sslHandshakeErrors()
61
62 - [QTBUG-81630][QTBUG-80312] QLinkedList is deprecated and will be moved
63   to Qt5Compat in Qt 6. It is recommended to use std::list instead.
64
65See also the various sections below, which include many more deprecations.
66
67****************************************************************************
68*                                  QtCore                                  *
69****************************************************************************
70
71 - QCalendar::monthsInYear(QCalendar::Unspecified) now returns
72   maximumMonthsInYear(). QCalendar::daysInYear() now makes clear that its
73   handling of unspecified year is undefined.
74
75 - Containers:
76   * Added operator-> to the key-value iterator for QHash/QMap.
77
78 - QAbstractItemModel:
79   * [QTBUG-72587] The match() method now supports the new
80     Qt::RegularExpression match flag value. This will allow users to use
81     either a string or a fully configured QRegularExpression when doing
82     searches. In the second case, the case sensitivity flag will be
83     ignored if passed.
84
85 - QByteArray:
86   * resize() will no longer shrink the capacity. That means resize(0) now
87     reliably preserves capacity().
88   * Added the new fromBase64Encoding function.
89   * Added new flags to make fromBase64 / fromBase64Encoding strictly
90     validate their input, instead of skipping over invalid characters.
91
92 - QCborArray:
93   * Fixed an infinite loop when operator[] was called with an index larger
94     than the array's size plus 1.
95
96 - QCborMap:
97   * [QTBUG-83366] Fixed some issues relating to assigning elements from a
98     map to itself.
99
100 - QCborValue:
101   * fromCbor() now limits decoding to at most 1024 nested maps, arrays,
102     and tags to prevent stack overflows. This should be sufficient for
103     most uses of CBOR. An API to limit further or to relax the limit will
104     be provided in 5.15. Meanwhile, if decoding more is required,
105     QCborStreamReader can be used (note that each level of map and array
106     allocates memory).
107
108 - QDate:
109   * QDate::toString(Qt::DateFormat, QCalendar) no longer takes calendar
110     into account for Qt::TextDate. There was no matching support in
111     QDateTime and the locale-independent formats are intended to be
112     standard, rather than customized to the user.
113
114 - QDateTime:
115   * Added some missing QCalendar variants of QDateTime::toString().
116     Included docs for QCalendar variants in both QDate and QDateTime.
117
118 - QFile:
119   * Introduce QFile::moveToTrash to allow applications to move files to
120     the trash.
121
122 - QFileInfo:
123   * [QTBUG-75869] Add QFileInfo::isJunction so that applications can
124     recognize NTFS file system entries as junctions
125
126 - QHash:
127   * Reverse iteration over QHash is now deprecated.
128   * insertMulti(), unite() and values(const Key &key) are now deprecated.
129     Please use QMultiHash instead.
130
131 - QJsonObject:
132   * Fixed a regression from 5.13 that incorrect results when assigning
133     elements from an object to itself.
134
135 - QLatin1String:
136   * Added compare().
137
138 - QLibrary and QPluginLoader:
139   * [QTBUG-39642] Fixed a deadlock that would happen if the plugin or
140     library being loaded has load-time initialization code (C++ global
141     variables) that recursed back into the same QLibrary or QPluginLoader
142     object.
143
144 - QLocale:
145   * Deprecated toTime() variants taking a calendar. The calendar is
146     ignored in time parsing.
147   * Data used for currency formats in several locales and list patterns in
148     some locales have changed due to now parsing the CLDR data more
149     faithfully.
150   * [QTBUG-79902] Currency formats are now based on CLDR's accounting
151     formats, where they were previously mostly based (more or less by
152     accident) on standard formats. In particular, this now means negative
153     currency formats are specified, where available, where they (mostly)
154     were not previously.
155
156 - QMap:
157   * [QTBUG-35544] insertMulti(), unite(), values(Key), uniqueKeys(),
158     count(Key) is now deprecated. Please use QMultiMap instead.
159
160 - QObject:
161   * [QTBUG-76375] A logging category
162     qt.core.qmetaobject.connectslotsbyname was added, which will report
163     on the connections made by QMetaObject::connectSlotsByName().
164
165 - QProcess:
166   * Overloads of start/execute/startDatached that parse a single command
167     string into program and arguments have been marked as deprecated. A
168     static helper splitCommand has been added to construct a QStringList
169     from a command string.
170
171 - QRandomGenerator:
172   * The system() random generator will now use the RDSEED instruction on
173     x86 processors whenever available as the first source of random data.
174     It will fall back to RDRAND and then to the system functions, in that
175     order.
176
177 - QRegularExpression:
178   * The escape(), wildcardToRegularExpression() and anchoredPattern()
179     functions now have overloads taking a QStringView parameter.
180
181 - QResource:
182   * Added uncompressedSize() and uncompressedData(), which will perform
183     any required decompression on the data, prior to returning (unlike
184     data() and size()).
185
186 - QSet:
187   * Reverse iteration over QSet is now deprecated.
188
189 - QStandardPaths:
190   * When used in a low-integrity process on Windows,
191     QStandardPaths::writableLocation returns respective low-integrity
192     paths.
193
194 - QString:
195   * Added QString::isValidUtf16.
196
197 - QStringView:
198   * Added QStringView::isValidUtf16.
199   * Added compare() overloads taking QLatin1String, QChar.
200   * Conversion from std::basic_string can now be constexpr (when
201     std::basic_string is).
202
203 - QTimeZone:
204   * The constructor can now handle general UTC-offset zone names. The
205     reported id() of such a zone shall be in canonical form, so might not
206     match the ID passed to the constructor.
207
208 - QXmlStream:
209   * QXmlStreamReader does now by default limit the expansion of entities
210     to 4096 characters. Documents where a single entity expands to more
211     characters than the limit are not considered well formed. The limit is
212     there to avoid DoS attacks through recursively expanding entities when
213     loading untrusted content. The limit can be changed through the
214     QXmlStreamReader::setEntityExpansionLimit() method.
215
216 - moc:
217   * Moc now correctly sets a non-null QMetaObject::superClass for
218     Q_GADGETs that inherit from a template which inherits another
219     Q_GADGET.
220   * [QTBUG-74521][QTBUG-76598] moc can now output a ".d" dep file that can
221     be consumed by other build systems.
222
223****************************************************************************
224*                                  QtGui                                   *
225****************************************************************************
226
227 - Extended QVulkanWindow to allow user to specify additional queues to be
228   created.
229 - Added API for starting interactive window resize and move operations
230   handled by the system.
231
232 - QClipboard:
233   * Support lazily-provided copying of data to the clipboard on macOS
234
235 - QCursor:
236   * [QTBUG-48701] QCursor::bitmap() and QCursor::mask() can now return
237     by-value instead of by-pointer.
238
239 - QFont:
240   * Deprecated QFont::ForceIntegerMetrics and QFont::OpenGLCompatible,
241     with the intention of removing them in Qt 6.0.0.
242
243 - QMarkdownWriter:
244   * [QTBUG-80603] Code blocks are no longer word-wrapped; the beginning
245     fence of a code block no longer has a space before the language string;
246     and the ending fence is no longer skipped in some cases where it was.
247
248 - QPdfWriter:
249   * New API to provide external document XMP metadata and attach files to
250     PDF.
251
252 - QTabletEvent:
253   * QTabletEvent::device() is deprecated, because the plan is to return
254     an object pointer in Qt 6 rather than an enum. The enum is now provided
255     by deviceType().
256   * hiResGlobalX() and hiResGlobalY() are deprecated, because globalPosF()
257     has the same resolution. But globalPosF() (and several others) will
258     probably be renamed in Qt 6. The replacements are not in place yet.
259   * [QTBUG-77826] Local coordinates are now correct when the event is
260     delivered to a nested window on X11.
261
262 - Text:
263   * Fixed a problem where pixel sizes would be truncated before calculating
264     glyph positions.
265   * Fixed an issue with QFont::PreferNoShaping where boxes would appear in
266     place of unprintable characters.
267   * Fixed a problem where certain bold fonts would be synthetically
268     emboldened by Qt when using the Freetype font engine.
269
270 - Application palettes are now resolved against the platform's theme
271   palette, the same way widget palettes are resolved against their parents,
272   and the application palette. This means the application palette reflected
273   through QGuiApplication::palette() may not be exactly the same palette as
274   set via QGuiApplication::setPalette().
275
276****************************************************************************
277*                                QtWidgets                                 *
278****************************************************************************
279
280 - Added QStyleOptionTabV4 as a subclass of QStyleOptionTab so that the
281   tab's index information can be obtained.
282
283 - ItemViews:
284   * [QTBUG-76423] The convenience views QList/Table/TreeWidgetItem now
285     treat a default constructed QBrush or QSize as an empty QVariant which
286     allows resetting of the values set to it's default values.
287
288 - QApplication:
289   * The globalStrut property has been deprecated and will be removed from
290     Qt 6.
291
292 - QButtonGroup:
293   * Added signals idClicked/Pressed/Released/Toggled that replace the
294     deprecated signal overloads.
295
296 - QComboBox:
297   * QComboBox got a new property 'placeholderText'
298   * Support checkable items in styles that use a popup for the dropdown.
299   * the SizeAdjustPolicy value AdjustToMinimumContentLength is deprecated,
300     use AdjustToContents or AdjustToContentsOnFirstShow instead.
301
302 - QGraphicsView:
303   * Fixed a bug where hover events would not be delivered if the item was
304     added while blocked by a modal panel.
305
306 - QLabel:
307   * [QTBUG-48701] QLabel::pixmap() and QLabel::picture() can now return
308     by-value instead of by-pointer.
309
310 - QLineEdit:
311   * Inputmask X character now requires non-blank input.
312
313 - QMenu:
314   * a popup menu hides when a QWidgetAction added to it fires the
315     triggered signal.
316
317 - QShortcut:
318   * QShortcut ctor has now pointer to member function overloads
319
320 - QStyle:
321   * You can now set the CSS property 'icon' on a QPushButton to override
322     which icon to draw.
323
324 - QSystemTrayIcon:
325   * On macOS, clicking on the message will remove the notification.
326
327 - QTabWidget/QTabBar:
328   * Tabs can now be hidden with setTabVisible
329
330 - QWidget:
331   * Fonts and palette settings are inherited by children from their
332     parents even if the children have application-wide platform theme
333     overrides.
334
335 - QWizard:
336   * visitedPages has been deprecated, use visitedIds instead.
337
338****************************************************************************
339*                                QtNetwork                                 *
340****************************************************************************
341
342 - A new signal introduced to report when a valid session ticket is received
343   (TLS 1.3)
344
345 - SSL:
346   * Removed OpenSSL 1.0.x support, now 1.1.x is required
347   * The minimum required version of OpenSSL is now 1.1.1.
348
349 - QSslCertificate:
350   * [QTBUG-72587] Add overload of fromPath that does not make use of
351     QRegExp and deprecate the QRegExp variant.
352
353****************************************************************************
354*                                  QtSql                                   *
355****************************************************************************
356
357 - QMYSQL:
358   * Removed support for MySql < 5.0 since 5.0 was released 14 years ago.
359   * The QMYSQL plugin can now be build with the MariaDB C connector libs
360     on Windows.
361
362 - QSqlDriver:
363   * The one-arg version of QSqlDriver::notifcation() is now deprecated.
364
365****************************************************************************
366*                                 QTestLib                                 *
367****************************************************************************
368
369 - The formerly named 'xunitxml' test reporter has been renamed to what it
370   actually is: a JUnit test reporter, and is now triggered by passing -o
371   junitxml to the test binary.
372
373****************************************************************************
374*                                  QtXml                                   *
375****************************************************************************
376
377 - [QTBUG-76177] SAX classes are now deprecated. Use QXmlStreamReader,
378   QXmlStreamWriter in QtCore instead.
379
380****************************************************************************
381*                                Configure                                 *
382****************************************************************************
383
384 - Add switch "-coverage source-based" to enable clang's "source-based" code
385   coverage feature. This can be used for code coverage analysis.
386
387 - X11:
388   * [QTBUG-67277][QTBUG-30939] The minimal required version of libxcb now
389     is 1.11.
390   * [QTBUG-67277][QTBUG-30939] Removed -qt-xcb, -system-xcb, -xkb,
391     -xcb-xinput switches.
392
393****************************************************************************
394*                                  cmake                                   *
395****************************************************************************
396
397 - Fixed an issue where some Qt location and declarative plugins whose name
398   did not end with "Plugin" where not imported by the corresponding Qt
399   component package.
400
401****************************************************************************
402*                             Third-Party Code                             *
403****************************************************************************
404
405 - libjpeg-turbo was updated to version 2.0.4
406
407 - X11:
408   * [QTBUG-67277][QTBUG-30939] Removed all bundled XCB libs, with the
409     exception of xcb-xinput, which is not available on systems with libxcb
410     1.11.
411
412****************************************************************************
413*                        Platform Specific Changes                         *
414****************************************************************************
415
416 - Linux:
417   * Enable accessibility on Linux when Orca is started by hand
418   * [QTBUG-78754] Vulkan is now supported by eglfs (eglfs_viv backend) on
419     i.MX8 devices with the Vivante graphics stack. This is done via
420     VK_KHR_display so no windowing system is required.
421
422 - X11:
423   * [QTBUG-67277][QTBUG-30939] XKB and XInput2 now are mandatory
424     dependencies for XCB plugin. XCB-XKB is a part of libxcb 1.11
425     releases. XCB-XInput is not part of libxcb 1.11 releases, but Qt
426     builders can use the -bundled-xcb-xinput switch.
427
428 - Android:
429   * [REVERTED] Qt::MaximizeUsingFullscreenGeometryHint window flag is
430     now supported, and will make the window fullscreen, but keep the
431     system UI on-screen, with a translucent background color.
432   * [QTBUG-82120] Use native file dialog by default for open and save
433     operations.
434
435 - Windows:
436   * Fixed a bug where some fonts would not be accessible by
437     referencing their typographic name.
438   * Fixed a 2 pixel offset on glyphs when using color fonts or any
439     hinting preference other than the default (full) hinting.
440
441 - WebAssembly:
442   * Updated emscripten to version 1.39.8
443