1Qt 5.4 introduces many new features and improvements as well as bugfixes
2over the 5.3.x series. For more details, refer to the online documentation
3included in this distribution. The documentation is also available online:
4
5  http://qt-project.org/doc/qt-5.4
6
7The Qt version 5.4 series is binary compatible with the 5.3.x series.
8Applications compiled for 5.3 will continue to run with 5.4.
9
10Some of the changes listed in this file include issue tracking numbers
11corresponding to tasks in the Qt Bug Tracker:
12
13  http://bugreports.qt-project.org/
14
15Each of these identifiers can be entered in the bug tracker to obtain more
16information about a particular change.
17
18****************************************************************************
19*                          Deprecation Notice                              *
20****************************************************************************
21
22 - The Q_COMPILER_xxx macros for C++14 compiler features introduced in Qt
23   5.3 are deprecated and will not be updated for new compilers either.
24   User code should be changed to use the macros from Standing Document 6
25   instead:
26   http://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations.
27   This does not affect C++11 feature macros.
28
29****************************************************************************
30*                        Important Behavior Changes                        *
31****************************************************************************
32
33 - QExplicitelySharedDataPointer's copy constructor which performs a
34   static_cast from "X *" to "T *" (when constructing a
35   QExplicitlySharedDataPointer<T> from a QExplicitlySharedDataPointer<X>)
36   doesn't perform a static_cast from "X *" to "T *" any more. Instead, an
37   implicit cast is now performed. This change will break compilation of code
38   that relied on the downcast (i.e.  cast towards a more derived type) of the
39   templated type when copy constructing a QExplicitelySharedDataPointer
40   object. Please refer to the class documentation for more information about
41   this issue and a workaround to keep old code compiling.
42 - QImageReader now automatically rotates JPEG images according to Exif
43   orientation
44 - [QTBUG-18980] HarfBuzz-NG is now the default shaper on all platforms.
45   This results in a better shaping results for various languages, better
46   performance, and lower memory consumption.
47 - [QTBUG-41858] Changed QStringRef::right() to be consistent with
48   QString::right(). The function now returns the N right-most characters,
49   like the documentation already claimed.
50 - The mutable Java-style iterators like QListMutableIterator and
51   QHashMutableIterator no longer set the parent container to unsharable
52   mode. If you create a copy of the container being iterated on after the
53   iterator, any changes done with the iterator might affect the copy too.
54
55 - Logging (including qDebug and qWarning):
56   * Support for the deprecated environment variables QT_NO_JOURNALD_LOG
57     and QT_ANDROID_PLAIN_LOG has been removed. Instead, set
58     QT_LOGGING_TO_CONSOLE to 1 to force logging to the console (stderr).
59     Set that variable to 0 to force logging to the system-specific event
60     log (if any).
61   * [QTCREATORBUG-12564] Log output will now go to the system log (if
62     support for it was compiled into Qt) if the application has no
63     controlling terminal or console window. Set QT_LOGGING_TO_CONSOLE to 1
64     to force logging to go to stderr.
65
66 - QSettings:
67   * [QTBUG-41812] QSettings::value() now returns an invalid QVariant when
68     passing an empty key. The code path ran into an assert, which was only
69     noticeable in debug builds.
70   * [QTBUG-21739] The locking mechanism inside QSettings has changed
71     and is no longer compatible with the one of previous versions of
72     Qt. There might be corruption if two applications running different
73     versions of Qt are writing to the same config file at the same
74     time. You must also now have write permissions in the directory
75     containing the settings file in order to write settings.
76
77****************************************************************************
78*                               Library                                    *
79****************************************************************************
80
81QtConcurrent
82------------
83
84 - [QTBUG-17220] run() now optionally takes as its first argument the
85   QThreadPool to run the task on.
86
87QtCore
88------
89
90 - Added QEnableSharedFromThis, a class that allows obtaining a
91   QSharedPointer for an object already managed by a shared pointer.
92 - Added qHashBits() to aid implementing qHash() overloads for custom
93   types.
94 - Added new QByteArrayList class.
95 - Added QStorageInfo class to retrive information about mounted volumes
96   and drives
97
98 - Logging:
99   * QT_MESSAGE_PATTERN can include a backtrace using %{backtrace}
100   * QT_MESSAGE_PATTERN can include a timestamp using %{time}. By
101     default, this shows the time in ISO format (YYYY-MM-DDTHH:mm:ss),
102     but a different format string can be specified in the tag (e.g.,
103     %{time YYYYMMDDHHmmsszzz}). If the format is "process", Qt will
104     display the elapsed time since the process started.
105   * Added QtMsgType argument to QLoggingCategory constructor and
106     Q_LOGGING_CATEGORY macro that controls the default category
107     configuration.
108   * File, line, function information are not recorded anymore for logging
109     statements in release builds. Set QT_MESSAGELOGCONTEXT explicitly to
110     enable recording in all configurations.
111
112 - QAbstractProxyModel:
113   * [QTBUG-39549] QAbstractProxyModel now forwards the drop-related API.
114
115 - QByteArray:
116   * Added convenience methods to convert directly to and from std::string.
117   * Fixed a bug that would cause QByteArray to stop converting toUpper or
118     toLower at the first embedded null character.
119
120 - QCommandLineParser:
121   * Added addOptions() method.
122
123 - QElapsedTimer:
124   * Is no longer a POD; its default constructor now initializes the object to
125     an invalid QElapsedTimer
126
127 - QFlags:
128   * [QTBUG-39786] Added initializer_list constructor
129
130 - QFuture:
131   * [QTBUG-17220] Can now be used with any QThreadPool, not just
132     globalInstance().
133
134 - QPair:
135   * Can now be used in C++11 constexpr contexts.
136
137 - QSaveFile:
138   * Now follows symbolic links when writing to a link instead of
139     replacing the link with the contents.
140
141 - QSettings:
142   * [QTBUG-21739] Fixed data loss while writing the config to the disk
143     fails.
144
145 - QStandardPaths:
146   * [QTBUG-38483] QStandardPaths now has new enumeration values
147     AppDataLocation, AppLocalDataLocation to be able to differentiate
148     between roaming and local paths on the Windows operating system.
149     DataLocation is deprecated in favor of AppDataLocation.
150
151 - QString:
152   * QString can now split a string to a list of QStringRef.
153   * Added the QStringRef::split() function
154
155 - QTextStream:
156   * QTextStream now uses group separators when writing floating-point
157     numbers when the locale is not the C locale. The old behavior can be
158     restored by setting QLocale::OmitGroupSeparator on the locale.
159
160 - QTimer:
161   * [QTBUG-26406] Implemented new style connect syntax, including
162     functors, in QTimer::singleShot
163
164 - QUrl:
165   * QUrl::fromLocalFile now returns an empty URL if the input string is
166     empty.
167
168 - QVariant:
169   * [QTBUG-40363] Fixed ordered comparison between QVariants that do not
170     match but produce identical toString output.
171
172 - QVector:
173   * Added removeOne() and removeAll() for QList compatibility.
174
175 - QWeakPointer:
176   * Added lock() method for std::weak_ptr compatibility.
177   * Added member-swap function.
178
179 - QtJson:
180   * [QTBUG-26606] QJsonArray and QJsonObject now supports C++11
181     initializer lists.
182
183 - QtMath:
184   * Introduced qNextPowerOfTwo methods.
185
186QtDBus
187------
188
189 - Blocking calls that take a long time will now generate a warning. The
190   time taken may be tuned using the environment variables
191   Q_DBUS_BLOCKING_CALL_MAIN_THREAD_WARNING_MS and
192   Q_DBUS_BLOCKING_CALL_OTHER_THREAD_WARNING_MS. The value represents (in
193   milliseconds) how long before a blocking call is warned about. A value
194   below zero disables the warning, a value of zero will warn about all
195   blocking calls.
196
197QtGui
198-----
199
200 - Added QPixelFormat class.
201 - Added QOpenGLWidget class.
202 - Added QOpenGLWindow class.
203 - Added QRasterWindow class.
204 - QOpenGLContext is now able to adopt existing native contexts.
205 - [QTBUG-38168] QtGui's OpenGL headers are now automatically including the
206   highest available header (gl31.h, gl3.h or gl2.h) in OpenGL ES builds.
207 - [QTBUG-36483] Dynamic OpenGL implementation loading is now supported on
208   Windows. This requires Qt to be configured with -opengl dynamic.
209 - [QTBUG-39583] Keymaps are now changeable at runtime when using eglfs.
210 - [QTBUG-40841] environment variable QT_DBL_CLICK_DIST customizes the
211   amount of movement allowed when detecting a double click.
212 - [QTBUG-37552] The eglfs mouse cursor properly resets the array buffer
213   from now on to avoid rendering issues.
214 - [QTBUG-40093] QWindow::close() is changed to send a QCloseEvent which
215   must be accepted before destroy() will be called.
216
217 - Clipboard:
218   * [QTBUG-41852] Fixed a memory leak in setMimeData() when the platform
219     plugin did not support the requested mode.
220
221 - Painting:
222   *[QTBUG-41413] Fixed some very rare cases of mismatched raster modes
223    in QPainter.
224
225 - QEvent:
226   * [QTBUG-38858] The debug output for events has been significantly
227     improved.
228
229 - QFont:
230   * [QTBUG-22814][QTBUG-22946] QFont now serializes its data properly,
231     without any data loss.
232
233 - QGuiApplication:
234   * Add support for -icon command line argument on X11, add -qwindowicon
235     on all platforms.
236   * Added QGuiApplication::screenRemoved signal to inform that a screen
237     has been removed, before Qt reacts to it.
238
239 - QImage:
240   * [QTBUG-25998] Added support for 10-bit per color channel image
241     formats.
242
243 - QImageReader now automatically rotates JPEG images according to Exif orientation
244
245 - QOpenGLBuffer:
246   * [QTBUG-38168] Added QOpenGLBuffer::mapBufferRange().
247
248 - QOpenGLFramebufferObject:
249   * Introduced an argument to QOpenGLFramebufferObject::toImage() to save
250     mirroring the result.
251   * Added support 10-bit per color channels formats as the internal
252     framebuffer format, making it possible to render in that precision.
253
254 - QOpenGLTextureCache:
255   * Added support for uploading common QImage formats directly to OpenGL,
256     if supported by the OpenGL implementation.
257
258 - QPicture:
259   * [QTBUG-20578] QPicture now serializes its data properly by also
260     accounting for QDataStream versions greater than Qt 4.5.
261
262 - Tablet support:
263   * [QTBUG-39458] Added buttons to QTabletEvent.
264   * [QTBUG-39666] Events correctly identify the tool.
265   * [QTBUG-39570][QTBUG-40469] Corrected valuator ranges across platforms.
266   * Better support for non-Wacom devices.
267   * Better manual test to verify more features.
268
269 - Text:
270   * [QTBUG-41372] Fixed regression when rendering Uchen text in WebKit
271     on Windows.
272   * Fixed use of uninitialized memory in the FreeType font engine
273
274QtNetwork
275---------
276
277 - QNetworkAccessManager:
278   * Fixed behavior of upload QIODevice that generate data on readyRead()
279     for HTTP PUT/POST
280
281 - QSsl:
282   * QSsl::SecureProtocols now also excludes SSLv3
283
284 - QSslCertificate:
285   * Can now be used as a key in QSet/QHash.
286
287 - QSslError:
288   * Can now be used in QSet/QHash.
289
290 - QSslSocket:
291   * [QTBUG-28471] Added support for finding the version of SSL/TLS in
292     use by a connection.
293   * Added accessors for the version of OpenSSL used at build-time. This
294     will help when debugging problems caused by a mismatch with the
295     run-time version.
296   * [QTBUG-1565] Support for loading PKCS#12 bundles was added. These are
297     often used to conveniently transport keys and certificates,
298     particularly when making use of client certificates.
299
300QtPrintSupport
301--------------
302
303 - QPrinter:
304   * [QTBUG-11332] Added duplex support for Windows and OS X.
305
306QtSql
307-----
308
309 - ibase: Fixed memory corruption due to LONG being 4 bytes in firebird.
310
311 - QSqlDriver:
312   * Add support for determining DBMS type from SQL driver using
313     QSqlDriver::dbmsType()
314
315QtTest
316------
317
318 - Tests now output build information.
319
320QtWidgets
321---------
322
323 - All widgets with a setReadOnly method now send a ReadOnlyChange event
324   (e.g., for app-specific palette changes)
325 - [QTBUG-32888] Accessibility for widgets is now included in the widget
326   library instead of being a separate plugin. For static builds this means
327   that libqtaccessiblewidgets is no longer required.
328 - [QTBUG-39814] Accessors for Qt::MouseEventSource and Qt::MouseEventFlags
329   are now available in QGraphicsSceneMouseEvent.
330
331 - QComboBox:
332   * [QTBUG-33537] Fixed positions of items when QComboBox is set as
333     editable in Fusion style.
334   * [QTBUG-33537] Fixed updating appearance of popup menu when changing
335     the editable state of the combo box.
336
337 - QDialog / Windows:
338   * [QTBUG-2027] Dialogs can now be menuless.
339
340 - QGraphicsScene:
341   * Added the minimumRenderSize property which can be used to speed up
342     rendering by not painting items smaller than a give size.
343   * The removal of items when using the linear index is now more
344     efficient.
345
346 - QLayout:
347   * [QTBUG-37673] Widgets and dialogs containing layouts with
348     heightForWidth (such as a label with word wrap) will no longer get a
349     minimum size of 0x0.
350
351 - QLineEdit:
352   * [QTBUG-40287] The signal textEdited() is now emitted when the user
353     clicks the clear button created by setClearButtonEnabled() as well.
354
355 - QMainWindow:
356   * [QTBUG-40410] Dock widgets will now be resized properly when the
357     central widget has a fixed size.
358
359 - QPlainTextEdit:
360   * [QTBUG-36415] Fixed a crash when using full width selections and
361     issuing a complex undo command chain which removes and inserts an
362     empty block in one go.
363   * [QTBUG-40347] Fixed a possible divide by zero crash when font metrics
364     were missing for the font.
365
366 - QTabBar:
367   * Added changeCurrentOnDrag property.
368
369 - QTableView / QTableWidget:
370   * [QTBUG-29239] currentIndex() now reflects the top left cell when in a
371     span.
372
373 - QTreeView:
374   * Indentation is now style-dependent by default.
375   * Added resetIndentation().
376
377 - Styles:
378   * Allow overriding standardIcon() in a proxy style
379
380****************************************************************************
381*                      Platform Specific Changes                           *
382****************************************************************************
383
384- Several QPA logging categories are added under qt.qpa to enable logging
385  of various platform-specific details. qt.qpa.input is now used
386  consistently.
387
388Android
389-------
390
391 - [QTBUG-36019] Enable using native style also when Ministro deployment
392   mechanism is not in use.
393 - [QTBUG-29069] Release all windows when the application is suspended.
394 - Added Gradle support to build the APK.
395 - [QTBUG-39688] Back key no longer kills the application when no window is
396   visible.
397 - [QTBUG-41365] Default open-source license for Qt for Android is now
398   LGPLv3. For compatibility with the LGPLv2.1 license, add
399   "-no-android-style-assets" to your configuration.
400 - [QTBUG-32399] Input panels are now hidden when focus changes to an object
401   that does not accept input.
402 - [QTBUG-41854] Added support for QClipboard::clear()
403 - [QTBUG-41852] Fixed memory leak in QClipboard::setMimeData()
404 - [QTBUG-41817] QClipboard::mimeData() now returns an empty object instead
405   of null pointer from QClipboard when clipboard is empty for consistency
406   with other platforms.
407 - New bearer plugin. It's now possible to get more information about the
408   different network configurations on Android.
409 - Important Behavior Changes:
410   * [QTBUG-36274] The main event loop is now stopped when the app is
411     suspended
412
413iOS
414---
415
416 - [QTBUG-39097] Accessibility was added to the iOS platform port. This
417   enables Qt applications to be read by VoiceOver on iOS devices.
418 - [QTBUG-42276] Fixed path to QStandardPaths::DataLocation. Until now,
419   DataLocation was pointing to the Document directory. With this patch,
420   it will return the more accurate Library/Application Support.
421   Applications making use of DataLocation should move these data to the
422   new location. This can be done using the path provided by
423   DocumentLocation as the source path.
424 - [QTBUG-41458] screen resolution update after device rotation now works.
425 - [QTBUG-42345] fixed crash on startup on iOS 7.1
426 - iOS is now using fat builds with both 32-, and 64-bit support.
427 - New launch screen added to support iPhone6/6+.
428 - QtQuick Controls now support native text selection and popup menus.
429 - Virtual keyboard visibility is now automatically managed by the platform plugin.
430 - Default theme fonts now uses Dynamic Type, which is based on user system settings.
431
432Linux/XCB
433---------
434
435 - [QTBUG-35832] Fixed transparency of tray icons in cases where there
436   is no alpha channel or system tray visual.
437 - environment variables QT_XCB_DEBUG_XINPUT and
438   QT_XCB_DEBUG_XINPUT_DEVICES are deprecated and replaced with logging
439   categories qt.qpa.input and qt.qpa.input.devices respectively
440 - [QTBUG-39572] Wacom touch devices are now working correctly.
441 - [QTBUG-42249] A path to a font file can now contain non-Latin characters.
442
443OS X
444----
445
446 - OS X 10.6 is no longer supported.
447 - OS X 10.10 is now supported.
448 - QMacStyle has been updated with better OS 10.10 support.
449 - The Qt binary packages are now configured with C++11 enabled.
450 - [QTBUG-41208] Fixed detection of writing system support in fonts for
451   some scripts such as Mkhedruli.
452 - Fixed menu item shortcuts without keyboard modifiers.
453 - [QTBUG-31301] Drag-and-drop QMimeData requests are now delayed until
454   drop time.
455 - [QTBUG-10899] Added support for ApplicationState
456   capability. Application can now detect when an application states
457   have changed as well when the dock icon has been clicked.
458
459 - Fonts:
460   * [QTBUG-40986][QTBUG-40549] Fixed missing glyph box shown in place of
461     some uncommon Unicode code points.
462
463Windows
464-------
465
466 - [QTBUG-38259] Changed configure defaults so that Qt5Core does not link
467   against ICU libraries anymore. Pass '-icu' to enable it.
468 - [QTBUG-35432][QTBUG-23687] Command line parsing on Windows now uses
469   the WinAPI function CommandLineToArgvW() to exactly match the quoting
470   behavior used by the majority of applications.
471
472 - Fonts:
473   * [QTBUG-41783] Fix off-by-one in font descent when using the
474     DirectWrite font engine.
475   * [QTBUG-39961] Set default fallback font to MS Shell Dlg 2 instead of
476     Arial.
477
478****************************************************************************
479*                      Compiler Specific Changes                           *
480****************************************************************************
481
482 - Release builds with Microsoft Visual Studio 2013 now enable the
483   standard-conforming C and C++ strict string behavior. This option will
484   be enabled in all builds with future Visual Studio versions.
485   Non-conforming code should be fixed for maximum portability and
486   correctness. See http://msdn.microsoft.com/en-us/library/dn449508.aspx
487   for more information.
488
489****************************************************************************
490*                                Tools                                     *
491****************************************************************************
492
493 - [QTBUG-30900] The obsolete findtr script was removed.
494
495configure & build system
496------------------------
497
498 - The -process/-fully-process/-dont-process configure options have been
499   removed due to being unnecessary and counterproductive.
500 - [QTBUG-36955] The -vcproj configure option was removed. Use "qmake -r -tp vc"
501   _after_ building Qt in case you want to use Visual Studio to work on Qt.
502 - [QTBUG-37961] Qt plugins contain version info again.
503 - [QTBUG-39216] Fixed more cases where the Qt build would pick up headers
504   from a pre-existing Qt installation.
505 - [QTBUG-41267] Fixed parallelized (jom) -debug-and-release builds.
506
507moc
508---
509
510 - Fixed "zero as null pointer constant" warnings in moc's generated
511   code.
512
513qmake
514-----
515
516 - [QTBUG-21910][Unix] Added 'make dist' target for SUBDIRS projects.
517 - [QTBUG-32895][iOS] Fixed structure of bundles. They can be signed now.
518 - [QTBUG-26782][VS] Fixed handling of TARGET_EXT.
519 - [QTBUG-30712][VS] Fixed handling of QMAKE_LIBFLAGS.
520 - [QTBUG-30373][VS] Using different RESOURCES in different build variants
521   no longer produces invalid vcxproj files.
522 - [QTBUG-37520][VS] Made it possible to suppress qmake warnings about
523   unknown compiler options. CONFIG+=suppress_vcproj_warnings.
524 - [QTBUG-37363][MSVC2012+] embed_manifest_exe is now properly supported.
525 - [QTBUG-41504][MSVC2012+] Building DLLs targeting Windows XP is now
526   supported. As a side effect, Windows CE makespecs must not add /ENTRY: to
527   QMAKE_LFLAGS_CONSOLE any more. The flag is hard-coded in console.prf now.
528 - [QTBUG-35318][Xcode] Fixed QMAKE_BUNDLE_DATA's path resolution.
529 - [QTBUG-39527] Fixed qtCompile() when used with jom -jN.
530 - QMAKE_EXTRA_COMPILERS' commands and depend_command are no longer mangled.
531   Use $$shell_path() and $$shell_quote() to prepare the commands correctly.
532 - Added link-time optimization support for Clang, GCC and ICC. CONFIG+=ltgc.
533
534rcc
535---
536
537 - rcc now supports an optional, two-pass compilation that improves build
538   times for large resource bundles. This feature can be enabled by adding
539   "CONFIG += resources_big" to your .pro file. Note that this feature may
540   interfere with builds that enable link-time code generation or other
541   optimization techniques.
542
543****************************************************************************
544*                          Third-party libraries                           *
545****************************************************************************
546
547 - ANGLE has been upgraded to version 2.1, bringing partial support for
548   OpenGL ES3 over Direct3D 11, numerous bug fixes, and several new vendor
549   extensions.
550 - [QTBUG-40649][QTBUG-40658][QTBUG-41031][QTBUG-41081][QTBUG-41308][QTBUG-
551   41563] ANGLE updated to 2.1~f8602ad91e4f
552 - [QTBUG-41031] The ANGLE D3D11 renderer is now enabled by default. Systems
553   which cannot use the new renderer will automatically fall back to the D3D9
554   renderer at runtime.
555