summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dist/changes-5.9.5122
-rw-r--r--dist/changes-5.9.646
-rw-r--r--examples/sql/books/bookwindow.cpp5
-rw-r--r--examples/widgets/doc/src/extension.qdoc100
-rw-r--r--examples/widgets/statemachine/factorial/main.cpp2
-rw-r--r--examples/widgets/widgets/elidedlabel/testwidget.cpp11
-rw-r--r--mkspecs/common/mac.conf7
-rw-r--r--mkspecs/common/msvc-version.conf9
-rw-r--r--mkspecs/features/qt_plugin.prf4
-rw-r--r--mkspecs/features/wayland-scanner.prf25
-rw-r--r--qmake/generators/makefile.cpp17
-rw-r--r--qmake/generators/makefile.h2
-rw-r--r--qmake/generators/makefiledeps.cpp6
-rw-r--r--qmake/generators/unix/unixmake2.cpp4
-rw-r--r--qmake/generators/win32/mingw_make.cpp4
-rw-r--r--qmake/generators/win32/msvc_nmake.cpp6
-rw-r--r--src/corelib/global/qcompilerdetection.h2
-rw-r--r--src/corelib/global/qglobal.cpp5
-rw-r--r--src/corelib/global/qoperatingsystemversion.cpp8
-rw-r--r--src/corelib/global/qoperatingsystemversion.h1
-rw-r--r--src/corelib/io/qfilesystemwatcher_inotify.cpp3
-rw-r--r--src/corelib/kernel/qdeadlinetimer.cpp5
-rw-r--r--src/corelib/tools/qbytearraymatcher.cpp5
-rw-r--r--src/corelib/tools/qstring.cpp14
-rw-r--r--src/gui/painting/qplatformbackingstore.cpp2
-rw-r--r--src/network/socket/qnativesocketengine_win.cpp2
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp2
-rw-r--r--src/platformsupport/platformsupport.pro2
-rw-r--r--src/platformsupport/themes/themes.pro2
-rw-r--r--src/plugins/platforms/qnx/qqnxeglwindow.h2
-rw-r--r--src/plugins/sqldrivers/ibase/qsql_ibase.cpp12
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp23
-rw-r--r--tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp5
33 files changed, 365 insertions, 100 deletions
diff --git a/dist/changes-5.9.5 b/dist/changes-5.9.5
new file mode 100644
index 0000000000..a71b09bf90
--- /dev/null
+++ b/dist/changes-5.9.5
@@ -0,0 +1,122 @@
+Qt 5.9.5 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.9.0 through 5.9.4.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.9 series is binary compatible with the 5.8.x series.
+Applications compiled for 5.8 will continue to run with 5.9.
+
+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.
+
+****************************************************************************
+* Qt 5.9.5 Changes *
+****************************************************************************
+
+QtCore
+------
+
+ - QDateTime and QLocale:
+ * [QTBUG-66076] Fixed a crash if the date/time parsed with Qt::ISODate and
+ Qt::ISODateWithMS had a 'T' for the time, but no actual time.
+
+ - QObject:
+ * [QTBUG-65712] Improved performance of QObject::deleteLater.
+
+ - QPluginLoader:
+ * [QTBUG-65197] Fixed a bug that would cause the Qt plugin scanning
+ system to allocate too much memory and possibly crash the process.
+
+ - QStandardPaths:
+ * [QTBUG-65687] Fixed a memory leak with displayName() on Apple platforms.
+ * [QTBUG-65820] Fixed QStandardPaths::AppDataLocation on Android.
+
+QtGui
+-----
+
+ - Text:
+ * [QTBUG-61882] Fixed a bug where mixing different writing systems with
+ emojis could lead to missing glyphs.
+ * [QTBUG-65519] Fixed ZWJ and ZWNJ control characters when fallback
+ fonts are in use.
+
+QtWidgets
+---------
+
+ - QTreeView:
+ * [QTBUG-65980] Fixed missing update of QTreeView on changing tree
+ position.
+
+ - QLabel:
+ * [QTBUG-66841] Fixed crash related to deleted buddy.
+
+ - QHeaderView:
+ * [QTBUG-65478] Fixed crash that could happen during layout.
+ * [QTBUG-66444][QTBUG-65478][QTBUG-65478] Fixed section resize settings
+ getting lost after layouting.
+ * [QTBUG-66413][QTBUG-65478] Fixed hidden section issues during layout.
+ * [QTBUG-65478] Fixed section restore issues after a layout change.
+
+ - QFusionStyle:
+ * [QTBUG-66343] Fixed checkbox rendering regression in low DPI settings.
+
+ - QComboBox:
+ * [QTBUG-55251] Fixed context menu opening up at the wrong location.
+
+ - QFileDialog:
+ * Fixed regression when using QFileDialog::getOpenFileUrl() using
+ remote URLs.
+
+ - QWidget:
+ * [QTBUG-65783] Fixed crash when platform window creation fails.
+
+Third-Party Code
+----------------
+
+ - Documented use of "Unicode Character Database (UCD)" in Qt Core.
+ - Clarified use of "Unicode Common Local Data Repository (CLDR)" in the
+ documentation. Also updated SPDX license name / ID.
+
+Platform-specific changes
+-------------------------
+
+ - Android:
+ * [QTBUG-65863] Fixed the detection of which thread is the main thread on
+ Android.
+
+ - Windows:
+ * Named pipes internally created by QProcess now contain the PID in their
+ name to ensure uniqueness.
+
+ - winrt:
+ * -qdevel and -qdebug are removed from the command line arguments and
+ not passed to the application.
+
+****************************************************************************
+* Tools *
+****************************************************************************
+
+configure & build system
+------------------------
+
+ - [QTBUG-65753] Fixed installation of example sources for qrc/rc files.
+ - [Windows] cl.exe is now preferred over clang-cl.exe again.
+
+qmake
+-----
+
+ - [QTBUG-50839][Windows] Paths starting with a (back-)slash but without
+ a drive letter are not considered absolute any more.
+ - [QTBUG-63637][MinGW] Fixed cross-compilation from Linux.
+ - [QTBUG-65106] Fixed complaints about missing modules in $$QT after the
+ project has already failed requires() (or REQUIRES=).
+ - [QTBUG-65477][Darwin] Bundle identifiers are now properly escaped.
+ - [Windows] Fixed 'make check' for executables in subdirectories.
diff --git a/dist/changes-5.9.6 b/dist/changes-5.9.6
new file mode 100644
index 0000000000..29f5ec2d57
--- /dev/null
+++ b/dist/changes-5.9.6
@@ -0,0 +1,46 @@
+Qt 5.9.6 is a bug-fix release. It maintains both forward and backward
+compatibility (source and binary) with Qt 5.9.0 through 5.9.5.
+
+For more details, refer to the online documentation included in this
+distribution. The documentation is also available online:
+
+http://doc.qt.io/qt-5/index.html
+
+The Qt version 5.9 series is binary compatible with the 5.8.x series.
+Applications compiled for 5.8 will continue to run with 5.9.
+
+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.
+
+****************************************************************************
+* Qt 5.9.6 Changes *
+****************************************************************************
+
+ - This release contains only minor code improvements.
+
+QtCore
+------
+
+ - [QTBUG-61159] Fixed QStandardPaths::standardLocations() returning some
+ incorrect paths on macOS.
+ - [QTBUG-57299] Fixed some issues with locking files during save using
+ QSaveFile if the target directory is monitored by Dropbox.
+
+QtWidgets
+---------
+
+ - [QTBUG-16252] Fixed geometry not restored correctly for a dock widget
+ after being docked.
+
+qmake
+-----
+
+ - [QTBUG-52474][Xcode] Fixed sources being excluded from Time Machine
+ backups.
+ - [QTBUG-66156] $$relative_path() and $$absolute_path() now resolve
+ the base directory to an absolute path.
diff --git a/examples/sql/books/bookwindow.cpp b/examples/sql/books/bookwindow.cpp
index d85b438956..3aac5b55b7 100644
--- a/examples/sql/books/bookwindow.cpp
+++ b/examples/sql/books/bookwindow.cpp
@@ -115,6 +115,11 @@ BookWindow::BookWindow()
ui.genreEdit->setModelColumn(
model->relationModel(genreIdx)->fieldIndex("name"));
+ // Lock and prohibit resizing of the width of the rating column:
+ ui.bookTable->horizontalHeader()->setSectionResizeMode(
+ model->fieldIndex("rating"),
+ QHeaderView::ResizeToContents);
+
QDataWidgetMapper *mapper = new QDataWidgetMapper(this);
mapper->setModel(model);
mapper->setItemDelegate(new BookDelegate(this));
diff --git a/examples/widgets/doc/src/extension.qdoc b/examples/widgets/doc/src/extension.qdoc
index d040fbb9ce..c895258acf 100644
--- a/examples/widgets/doc/src/extension.qdoc
+++ b/examples/widgets/doc/src/extension.qdoc
@@ -36,23 +36,21 @@
\image extension-example.png Screenshot of the Extension example
- The Extension application is a dialog that allows the user to
- perform a simple search as well as a more advanced search.
+ The Extension application lets the user add search parameters in
+ a dialog and launch a simple or advanced search.
The simple search has two options: \uicontrol {Match case} and \uicontrol
- {Search from start}. The advanced search options include the
- possibilities to search for \uicontrol {Whole words}, \uicontrol {Search
- backward} and \uicontrol {Search selection}. Only the simple search is
- visible when the application starts. The advanced search options
- are located in the application's extension part, and can be made
- visible by pressing the \uicontrol More button:
+ {Search from start}. The advanced search offers search for \uicontrol {Whole words},
+ \uicontrol {Search backward}, and \uicontrol {Search selection}. The
+ application starts with simple search as the default. Click the \uicontrol More button
+ to show the advanced search options:
\image extension_more.png Screenshot of the Extension example
\section1 FindDialog Class Definition
- The \c FindDialog class inherits QDialog. The QDialog class is the
- base class of dialog windows. A dialog window is a top-level
+ The \c FindDialog class inherits QDialog. QDialog is the
+ base class for dialog windows. A dialog window is a top-level
window mostly used for short-term tasks and brief communications
with the user.
@@ -62,45 +60,53 @@
displays the application's search options and controlling
buttons.
- In addition to a constructor, we declare the several child
- widgets: We need a QLineEdit with an associated QLabel to let the
- user type a word to search for, we need several \l
- {QCheckBox}{QCheckBox}es to facilitate the search options, and we
- need three \l {QPushButton}{QPushButton}s: the \uicontrol Find button to
- start a search and the \uicontrol More button to enable an advanced search.
- Finally, we need a QWidget representing the application's extension
- part.
+ In addition to the constructor, there are several child widgets:
+
+ \list
+ \li A QLineEdit with an associated QLabel to let the
+ user type a word to search for.
+ \li Several \l {QCheckBox}{QCheckBox}es to facilitate the search options.
+ \li Three \l {QPushButton}{QPushButton}s:
+ \list
+ \li the \uicontrol Find button to start a search
+ \li the \uicontrol More button to enable an advanced search
+ \li a QWidget representing the application's extension part
+ \endlist
+ \endlist
\section1 FindDialog Class Implementation
- In the constructor we first create the standard child widgets for
- the simple search: the QLineEdit with the associated QLabel, two
- of the \l {QCheckBox}{QCheckBox}es and all the \l
- {QPushButton}{QPushButton}s.
+ Create the standard child widgets for the simple search in the constructor:
+ the QLineEdit with the associated QLabel, two {QCheckBox}es and all the
+ \l {QPushButton}{QPushButton}s.
\snippet dialogs/extension/finddialog.cpp 0
- We give the options and buttons a shortcut key using the &
- character. In the \uicontrol {Find what} option's case, we also need to
- use the QLabel::setBuddy() function to make the shortcut key work
- as expected; then, when the user presses the shortcut key
- indicated by the label, the keyboard focus is transferred to the
- label's buddy widget, the QLineEdit.
-
- We set the \uicontrol Find button's default property to true, using the
+ This snippet illustrates how you can define a shortcut key
+ for a widget. A shortcut should be defined by putting the ampersand
+ character (\c &) in front of the letter that should
+ become the shortcut.
+ For example, for \uicontrol {Find what}, pressing \uicontrol Alt
+ and \uicontrol w transfers focus to the QLineEdit widget.
+ Shortcuts can also be used for checking on or off a checkmark.
+ For example, pressing \uicontrol Alt and \uicontrol c puts the check mark
+ on \uicontrol {Match Case} if it was unchecked and vice versa.
+ It is the QLabel::setBuddy() method that links a widget to the shortcut
+ character if it has been defined.
+
+ Set the \uicontrol Find button's default property to true, using the
QPushButton::setDefault() function. Then the push button will be
pressed if the user presses the Enter (or Return) key. Note that a
QDialog can only have one default button.
\snippet dialogs/extension/finddialog.cpp 2
- Then we create the extension widget, and the \l
- {QCheckBox}{QCheckBox}es associated with the advanced search
- options.
+ Create the extension widget, and the \l {QCheckBox}{QCheckBox}es associated
+ with the advanced search options.
\snippet dialogs/extension/finddialog.cpp 3
- Now that the extension widget is created, we can connect the \uicontrol
+ Now that the extension widget is created, connect the \uicontrol
More button's \l{QAbstractButton::toggled()}{toggled()} signal to
the extension widget's \l{QWidget::setVisible()}{setVisible()} slot.
@@ -111,26 +117,26 @@
the status is true the widget is shown, otherwise the widget is
hidden.
- Since we made the \uicontrol More button checkable when we created it,
- the connection makes sure that the extension widget is shown
- depending on the state of \uicontrol More button.
+ Since the \uicontrol More button is checkable, the connection makes
+ sure that the extension widget is shown depending on the state of
+ the \uicontrol More button.
- We also put the check boxes associated with the advanced
- search options into a layout we install on the extension widget.
+ Create checkboxes associated with the advanced search options in
+ a layout installed on the extension widget.
\snippet dialogs/extension/finddialog.cpp 4
- Before we create the main layout, we create several child layouts
- for the widgets: First we align the QLabel and its buddy, the
- QLineEdit, using a QHBoxLayout. Then we vertically align the
- QLabel and QLineEdit with the check boxes associated with the
- simple search, using a QVBoxLayout. We also create a QVBoxLayout
- for the buttons. In the end we lay out the two latter layouts and
- the extension widget using a QGridLayout.
+ Before creating the main layout, create several child layouts
+ for the widgets. First align the QLabel and its buddy, the
+ QLineEdit, using a QHBoxLayout. Then align the QLabel and the QLineEdit
+ vertically with the checkboxes associated with the simple search,
+ using a QVBoxLayout. Create also a QVBoxLayout for the buttons.
+ Finally, lay out the two latter layouts and the extension widget
+ using a QGridLayout.
\snippet dialogs/extension/finddialog.cpp 5
- Finally, we hide the extension widget using the QWidget::hide()
+ Hide the extension widget using the QWidget::hide()
function, making the application only show the simple search
options when it starts. When the user wants to access the advanced
search options, the dialog only needs to change the visibility of
diff --git a/examples/widgets/statemachine/factorial/main.cpp b/examples/widgets/statemachine/factorial/main.cpp
index 919988051f..f100aa0110 100644
--- a/examples/widgets/statemachine/factorial/main.cpp
+++ b/examples/widgets/statemachine/factorial/main.cpp
@@ -175,7 +175,7 @@ int main(int argc, char **argv)
//! [6]
machine.setInitialState(compute);
- QObject::connect(&machine, SIGNAL(finished()), &app, SLOT(quit()));
+ QObject::connect(&machine, &QStateMachine::finished, &app, QCoreApplication::quit);
machine.start();
return app.exec();
diff --git a/examples/widgets/widgets/elidedlabel/testwidget.cpp b/examples/widgets/widgets/elidedlabel/testwidget.cpp
index 50c12374fd..6392a4b4fa 100644
--- a/examples/widgets/widgets/elidedlabel/testwidget.cpp
+++ b/examples/widgets/widgets/elidedlabel/testwidget.cpp
@@ -94,25 +94,25 @@ TestWidget::TestWidget(QWidget *parent):
//! [2]
QPushButton *switchButton = new QPushButton(tr("Switch text"));
- connect(switchButton, SIGNAL(clicked(bool)), this, SLOT(switchText()));
+ connect(switchButton, &QPushButton::clicked, this, &TestWidget::switchText);
QPushButton *exitButton = new QPushButton(tr("Exit"));
- connect(exitButton, SIGNAL(clicked(bool)), this, SLOT(close()));
+ connect(exitButton, &QPushButton::clicked, this, &TestWidget::close);
QLabel *label = new QLabel(tr("Elided"));
label->setVisible(elidedText->isElided());
- connect(elidedText, SIGNAL(elisionChanged(bool)), label, SLOT(setVisible(bool)));
+ connect(elidedText, &ElidedLabel::elisionChanged, label, &QLabel::setVisible);
//! [2]
//! [3]
widthSlider = new QSlider(Qt::Horizontal);
widthSlider->setMinimum(0);
- connect(widthSlider, SIGNAL(valueChanged(int)), this, SLOT(onWidthChanged(int)));
+ connect(widthSlider, &QSlider::valueChanged, this, &TestWidget::onWidthChanged);
heightSlider = new QSlider(Qt::Vertical);
heightSlider->setInvertedAppearance(true);
heightSlider->setMinimum(0);
- connect(heightSlider, SIGNAL(valueChanged(int)), this, SLOT(onHeightChanged(int)));
+ connect(heightSlider, &QSlider::valueChanged, this, &TestWidget::onHeightChanged);
//! [3]
//! [4]
@@ -165,4 +165,3 @@ void TestWidget::onHeightChanged(int height)
}
//! [8]
-
diff --git a/mkspecs/common/mac.conf b/mkspecs/common/mac.conf
index 5208379f9a..d5e559ee12 100644
--- a/mkspecs/common/mac.conf
+++ b/mkspecs/common/mac.conf
@@ -33,6 +33,13 @@ QMAKE_LIBS_DYNLOAD =
QMAKE_LIBS_OPENGL = -framework OpenGL -framework AGL
QMAKE_LIBS_THREAD =
+QMAKE_INCDIR_WAYLAND =
+QMAKE_LIBS_WAYLAND_CLIENT = -lwayland-client
+QMAKE_LIBS_WAYLAND_SERVER = -lwayland-server
+QMAKE_LIBDIR_WAYLAND =
+QMAKE_DEFINES_WAYLAND =
+QMAKE_WAYLAND_SCANNER = wayland-scanner
+
QMAKE_ACTOOL = actool
QMAKE_DSYMUTIL = dsymutil
diff --git a/mkspecs/common/msvc-version.conf b/mkspecs/common/msvc-version.conf
index ccd809abf3..3fb55c9d81 100644
--- a/mkspecs/common/msvc-version.conf
+++ b/mkspecs/common/msvc-version.conf
@@ -100,11 +100,16 @@ greaterThan(QMAKE_MSC_VER, 1909) {
# API is used in direct2d, but also in multimedia, positioning and sensors.
# We can try again with a later version of Visual Studio.
# QMAKE_CXXFLAGS_STRICTCXX = -permissive-
+
# MSVC partially supports the following, but '__cplusplus' definition is set
# as for C++98 until MSVC fully conforms with C++14, see
# https://developercommunity.visualstudio.com/content/problem/139261/msvc-incorrectly-defines-cplusplus.html
- # QMAKE_CXXFLAGS_CXX14 = -std:c++14
- # QMAKE_CXXFLAGS_CXX1Z = -std:c++latest
+ # Support became available in MSVC 2017 15.7:
+ greaterThan(QMAKE_MSC_VER, 1913) {
+ QMAKE_CXXFLAGS += -Zc:__cplusplus
+ QMAKE_CXXFLAGS_CXX14 = -std:c++14
+ QMAKE_CXXFLAGS_CXX1Z = -std:c++17
+ }
}
greaterThan(QMAKE_MSC_VER, 1910) {
diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
index bf90adcf1e..40528a65e2 100644
--- a/mkspecs/features/qt_plugin.prf
+++ b/mkspecs/features/qt_plugin.prf
@@ -35,9 +35,9 @@ CONFIG += relative_qt_rpath # Qt's plugins should be relocatable
# Qt libraries should only use Application Extension safe APIs
darwin:!no_app_extension_api_only: CONFIG += app_extension_api_only
-CONFIG(static, static|shared)|prefix_build {
- isEmpty(MODULE): MODULE = $$basename(TARGET)
+isEmpty(MODULE): MODULE = $$basename(TARGET)
+CONFIG(static, static|shared)|prefix_build {
mod_work_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules
force_independent: \
mod_inst_pfx = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst
diff --git a/mkspecs/features/wayland-scanner.prf b/mkspecs/features/wayland-scanner.prf
index 9166ae7750..4b8e2ef76e 100644
--- a/mkspecs/features/wayland-scanner.prf
+++ b/mkspecs/features/wayland-scanner.prf
@@ -34,25 +34,32 @@ defineReplace(waylandScannerHeaderFiles) {
return($$wayland_header_files_for_side)
}
-qt_install_headers {
+# 1) if we are a module, we need to create the headers in our private inc dir in qtbase
+# 2) if also qt_install_headers is set, we need to generate INSTALLS rules in addition
+# 3) if we are not a module, we just generate the headers in the current directory
+!isEmpty(MODULE) {
header_dest = $$MODULE_BASE_OUTDIR/include/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME/private
header_files_client = $$waylandScannerHeaderFiles(client, $$header_dest)
!isEmpty(header_files_client) {
- wayland_generated_client_headers.files = $$header_files_client
- wayland_generated_client_headers.path = $$private_headers.path
- wayland_generated_client_headers.CONFIG = no_check_exist
- INSTALLS += wayland_generated_client_headers
+ qt_install_headers {
+ wayland_generated_client_headers.files = $$header_files_client
+ wayland_generated_client_headers.path = $$private_headers.path
+ wayland_generated_client_headers.CONFIG = no_check_exist
+ INSTALLS += wayland_generated_client_headers
+ }
WAYLAND_CLIENT_HEADER_DEST = $$header_dest/
WAYLAND_CLIENT_INCLUDE_DIR = $$MODULE_INCNAME/private
}
header_files_server = $$waylandScannerHeaderFiles(server, $$header_dest)
!isEmpty(header_files_server) {
- wayland_generated_server_headers.files = $$header_files_server
- wayland_generated_server_headers.path = $$private_headers.path
- wayland_generated_server_headers.CONFIG = no_check_exist
- INSTALLS += wayland_generated_server_headers
+ qt_install_headers {
+ wayland_generated_server_headers.files = $$header_files_server
+ wayland_generated_server_headers.path = $$private_headers.path
+ wayland_generated_server_headers.CONFIG = no_check_exist
+ INSTALLS += wayland_generated_server_headers
+ }
WAYLAND_SERVER_HEADER_DEST = $$header_dest/
WAYLAND_SERVER_INCLUDE_DIR = $$MODULE_INCNAME/private
}
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 99aecdd8ce..dda323535d 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -1141,7 +1141,7 @@ MakefileGenerator::writeObj(QTextStream &t, const char *src)
QString srcf = (*sit).toQString();
QString dstf = (*oit).toQString();
t << escapeDependencyPath(dstf) << ": " << escapeDependencyPath(srcf)
- << " " << escapeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t");
+ << " " << finalizeDependencyPaths(findDependencies(srcf)).join(" \\\n\t\t");
ProKey comp;
for (const ProString &compiler : project->values("QMAKE_BUILTIN_COMPILERS")) {
@@ -2013,7 +2013,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
if (config.indexOf("explicit_dependencies") != -1) {
t << " " << valList(escapeDependencyPaths(fileFixify(tmp_dep, FileFixifyFromOutdir)));
} else {
- t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(escapeDependencyPaths(deps));
+ t << " " << valList(escapeDependencyPaths(inputs)) << " " << valList(finalizeDependencyPaths(deps));
}
t << "\n\t" << cmd << endl << endl;
continue;
@@ -2133,7 +2133,7 @@ MakefileGenerator::writeExtraCompilerTargets(QTextStream &t)
else
++i;
}
- t << escapeDependencyPath(out) << ": " << valList(escapeDependencyPaths(deps)) << "\n\t"
+ t << escapeDependencyPath(out) << ": " << valList(finalizeDependencyPaths(deps)) << "\n\t"
<< cmd << endl << endl;
}
}
@@ -2852,6 +2852,17 @@ MakefileGenerator::escapeDependencyPaths(const ProStringList &paths) const
}
QStringList
+MakefileGenerator::finalizeDependencyPaths(const QStringList &paths) const
+{
+ QStringList ret;
+ const int size = paths.size();
+ ret.reserve(size);
+ for (int i = 0; i < size; ++i)
+ ret.append(escapeDependencyPath(Option::fixPathToTargetOS(paths.at(i), false)));
+ return ret;
+}
+
+QStringList
MakefileGenerator::fileFixify(const QStringList &files, FileFixifyTypes fix, bool canon) const
{
if(files.isEmpty())
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 4ced3bd121..6341a141b9 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -139,6 +139,8 @@ protected:
QStringList escapeDependencyPaths(const QStringList &paths) const;
ProStringList escapeDependencyPaths(const ProStringList &paths) const;
+ QStringList finalizeDependencyPaths(const QStringList &paths) const;
+
//initialization
void verifyCompilers();
virtual void init();
diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp
index c68eeb13d6..ffccdefbe1 100644
--- a/qmake/generators/makefiledeps.cpp
+++ b/qmake/generators/makefiledeps.cpp
@@ -1050,7 +1050,7 @@ void QMakeSourceFileInfo::saveCache(const QString &cf)
QFile file(QMakeLocalFileName(cf).local());
if(file.open(QIODevice::WriteOnly)) {
QTextStream stream(&file);
- stream << qmake_version() << endl << endl; //version
+ stream << QMAKE_VERSION_STR << endl << endl; //version
{ //cache verification
QMap<QString, QStringList> verify = getCacheVerification();
stream << verify.count() << endl;
@@ -1105,11 +1105,11 @@ void QMakeSourceFileInfo::loadCache(const QString &cf)
return;
QFile file;
- if(!file.open(QIODevice::ReadOnly, fd))
+ if (!file.open(fd, QIODevice::ReadOnly))
return;
QTextStream stream(&file);
- if(stream.readLine() == qmake_version()) { //version check
+ if (stream.readLine() == QMAKE_VERSION_STR) { //version check
stream.skipWhiteSpace();
bool verified = true;
diff --git a/qmake/generators/unix/unixmake2.cpp b/qmake/generators/unix/unixmake2.cpp
index 5468285c2e..3cb3be474a 100644
--- a/qmake/generators/unix/unixmake2.cpp
+++ b/qmake/generators/unix/unixmake2.cpp
@@ -375,7 +375,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
QStringList deps = findDependencies((*it).toQString()).filter(QRegExp(
"((^|/)" + Option::h_moc_mod + "|" + Option::cpp_moc_ext + "$)"));
if(!deps.isEmpty())
- t << d_file_d << ": " << escapeDependencyPaths(deps).join(' ') << endl;
+ t << d_file_d << ": " << finalizeDependencyPaths(deps).join(' ') << endl;
t << "-include " << d_file_d << endl;
project->values("QMAKE_DISTCLEAN") += d_file;
}
@@ -1191,7 +1191,7 @@ UnixMakefileGenerator::writeMakeParts(QTextStream &t)
<< "EXPORT_QMAKE_XARCH_LFLAGS = $(EXPORT_QMAKE_XARCH_LFLAGS_" << arch << ")" << "\n\n";
}
t << pchFilePath_d << ": " << escapeDependencyPath(pchInput) << ' '
- << escapeDependencyPaths(findDependencies(pchInput)).join(" \\\n\t\t");
+ << finalizeDependencyPaths(findDependencies(pchInput)).join(" \\\n\t\t");
if (project->isActiveConfig("icc_pch_style")) {
QString sourceFile = pchArchOutput + Option::cpp_ext.first();
QString sourceFile_f = escapeFilePath(sourceFile);
diff --git a/qmake/generators/win32/mingw_make.cpp b/qmake/generators/win32/mingw_make.cpp
index d6d6b04148..6140debf05 100644
--- a/qmake/generators/win32/mingw_make.cpp
+++ b/qmake/generators/win32/mingw_make.cpp
@@ -165,13 +165,13 @@ void MingwMakefileGenerator::writeMingwParts(QTextStream &t)
QString header = project->first("PRECOMPILED_HEADER").toQString();
QString cHeader = preCompHeaderOut + Option::dir_sep + "c";
t << escapeDependencyPath(cHeader) << ": " << escapeDependencyPath(header) << " "
- << escapeDependencyPaths(findDependencies(header)).join(" \\\n\t\t")
+ << finalizeDependencyPaths(findDependencies(header)).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(preCompHeaderOut)
<< "\n\t$(CC) -x c-header -c $(CFLAGS) $(INCPATH) -o " << escapeFilePath(cHeader)
<< ' ' << escapeFilePath(header) << endl << endl;
QString cppHeader = preCompHeaderOut + Option::dir_sep + "c++";
t << escapeDependencyPath(cppHeader) << ": " << escapeDependencyPath(header) << " "
- << escapeDependencyPaths(findDependencies(header)).join(" \\\n\t\t")
+ << finalizeDependencyPaths(findDependencies(header)).join(" \\\n\t\t")
<< "\n\t" << mkdir_p_asstring(preCompHeaderOut)
<< "\n\t$(CXX) -x c++-header -c $(CXXFLAGS) $(INCPATH) -o " << escapeFilePath(cppHeader)
<< ' ' << escapeFilePath(header) << endl << endl;
diff --git a/qmake/generators/win32/msvc_nmake.cpp b/qmake/generators/win32/msvc_nmake.cpp
index ccc2ea6d2b..92b4eb5054 100644
--- a/qmake/generators/win32/msvc_nmake.cpp
+++ b/qmake/generators/win32/msvc_nmake.cpp
@@ -321,7 +321,7 @@ void NmakeMakefileGenerator::writeNmakeParts(QTextStream &t)
QString precompRule = QString("-c -Yc -Fp%1 -Fo%2")
.arg(escapeFilePath(precompPch), escapeFilePath(precompObj));
t << escapeDependencyPath(precompObj) << ": " << escapeDependencyPath(precompH) << ' '
- << escapeDependencyPaths(findDependencies(precompH)).join(" \\\n\t\t")
+ << finalizeDependencyPaths(findDependencies(precompH)).join(" \\\n\t\t")
<< "\n\t$(CXX) " + precompRule +" $(CXXFLAGS) $(INCPATH) -TP "
<< escapeFilePath(precompH) << endl << endl;
}
@@ -329,7 +329,7 @@ void NmakeMakefileGenerator::writeNmakeParts(QTextStream &t)
QString precompRuleC = QString("-c -Yc -Fp%1 -Fo%2")
.arg(escapeFilePath(precompPchC), escapeFilePath(precompObjC));
t << escapeDependencyPath(precompObjC) << ": " << escapeDependencyPath(precompH) << ' '
- << escapeDependencyPaths(findDependencies(precompH)).join(" \\\n\t\t")
+ << finalizeDependencyPaths(findDependencies(precompH)).join(" \\\n\t\t")
<< "\n\t$(CC) " + precompRuleC +" $(CFLAGS) $(INCPATH) -TC "
<< escapeFilePath(precompH) << endl << endl;
}
@@ -619,6 +619,8 @@ void NmakeMakefileGenerator::writeBuildRulesPart(QTextStream &t)
}
} else {
manifest = fileFixify(manifest);
+ if (linkerSupportsEmbedding)
+ extraLFlags = "/MANIFEST:embed /MANIFESTINPUT:" + escapeFilePath(manifest);
}
const QString resourceId = (templateName == "app") ? "1" : "2";
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index f3f3139d1a..f46ff73527 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -629,7 +629,7 @@
# define Q_COMPILER_THREAD_LOCAL
# define Q_COMPILER_UDL
# endif
-# elif defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L s
+# elif defined(__STDC_VERSION__) && __STDC_VERSION__ > 199901L
// C11 features supported. Only tested with ICC 17 and up.
# define Q_COMPILER_STATIC_ASSERT
# if __has_include(<threads.h>)
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 605683b852..f60e47928c 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -1037,6 +1037,11 @@ Q_STATIC_ASSERT((std::is_same<qsizetype, qptrdiff>::value));
\snippet code/src_corelib_global_qglobal.cpp 53
+ \note Qt detects the necessary C++14 compiler support by way of the feature
+ test recommendations from
+ \l{https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations}
+ {C++ Committee's Standing Document 6}.
+
\sa qConstOverload(), qNonConstOverload(), {Differences between String-Based
and Functor-Based Connections}
*/
diff --git a/src/corelib/global/qoperatingsystemversion.cpp b/src/corelib/global/qoperatingsystemversion.cpp
index 4d267e328d..2f8d339ca7 100644
--- a/src/corelib/global/qoperatingsystemversion.cpp
+++ b/src/corelib/global/qoperatingsystemversion.cpp
@@ -438,6 +438,14 @@ const QOperatingSystemVersion QOperatingSystemVersion::MacOSHighSierra =
QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 13);
/*!
+ \variable QOperatingSystemVersion::MacOSMojave
+ \brief a version corresponding to macOS Mojave (version 10.14).
+ \since 5.11.2
+ */
+const QOperatingSystemVersion QOperatingSystemVersion::MacOSMojave =
+ QOperatingSystemVersion(QOperatingSystemVersion::MacOS, 10, 14);
+
+/*!
\variable QOperatingSystemVersion::AndroidJellyBean
\brief a version corresponding to Android Jelly Bean (version 4.1, API level 16).
\since 5.9
diff --git a/src/corelib/global/qoperatingsystemversion.h b/src/corelib/global/qoperatingsystemversion.h
index 5f27deab9e..df01e5438a 100644
--- a/src/corelib/global/qoperatingsystemversion.h
+++ b/src/corelib/global/qoperatingsystemversion.h
@@ -70,6 +70,7 @@ public:
static const QOperatingSystemVersion OSXElCapitan;
static const QOperatingSystemVersion MacOSSierra;
static const QOperatingSystemVersion MacOSHighSierra;
+ static const QOperatingSystemVersion MacOSMojave;
static const QOperatingSystemVersion AndroidJellyBean;
static const QOperatingSystemVersion AndroidJellyBean_MR1;
diff --git a/src/corelib/io/qfilesystemwatcher_inotify.cpp b/src/corelib/io/qfilesystemwatcher_inotify.cpp
index 048669b92f..c0c5f9d744 100644
--- a/src/corelib/io/qfilesystemwatcher_inotify.cpp
+++ b/src/corelib/io/qfilesystemwatcher_inotify.cpp
@@ -302,7 +302,8 @@ QStringList QInotifyFileSystemWatcherEngine::addPaths(const QStringList &paths,
| IN_DELETE_SELF
)));
if (wd < 0) {
- qWarning().nospace() << "inotify_add_watch(" << path << ") failed: " << QSystemError(errno, QSystemError::NativeError).toString();
+ if (errno != ENOENT)
+ qErrnoWarning("inotify_add_watch(%ls) failed:", path.constData());
continue;
}
diff --git a/src/corelib/kernel/qdeadlinetimer.cpp b/src/corelib/kernel/qdeadlinetimer.cpp
index d8a670310b..4b9a946dd8 100644
--- a/src/corelib/kernel/qdeadlinetimer.cpp
+++ b/src/corelib/kernel/qdeadlinetimer.cpp
@@ -345,6 +345,11 @@ void QDeadlineTimer::setPreciseRemainingTime(qint64 secs, qint64 nsecs, Qt::Time
deadline.setRemainingTime(250ms);
\endcode
+ \note Qt detects the necessary C++14 compiler support by way of the feature
+ test recommendations from
+ \l{https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations}
+ {C++ Committee's Standing Document 6}.
+
\sa setDeadline(), remainingTime(), hasExpired(), isForever()
*/
diff --git a/src/corelib/tools/qbytearraymatcher.cpp b/src/corelib/tools/qbytearraymatcher.cpp
index 06d01f9829..96c2394dbd 100644
--- a/src/corelib/tools/qbytearraymatcher.cpp
+++ b/src/corelib/tools/qbytearraymatcher.cpp
@@ -366,6 +366,11 @@ int qFindByteArray(
Since this class is designed to do all the up-front calculations at compile-time,
it does not offer a setPattern() method.
+ \note Qt detects the necessary C++14 compiler support by way of the feature
+ test recommendations from
+ \l{https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations}
+ {C++ Committee's Standing Document 6}.
+
\sa QByteArrayMatcher, QStringMatcher
*/
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index a4b34263df..3787c496b2 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -7414,13 +7414,12 @@ QString QString::number(qulonglong n, int base)
QString QString::number(double n, char f, int prec)
{
QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- uint flags = 0;
+ uint flags = QLocaleData::ZeroPadExponent;
if (qIsUpper(f))
- flags = QLocaleData::CapitalEorX;
- f = qToLower(f);
+ flags |= QLocaleData::CapitalEorX;
- switch (f) {
+ switch (qToLower(f)) {
case 'f':
form = QLocaleData::DFDecimal;
break;
@@ -8487,14 +8486,13 @@ QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillCha
unsigned flags = QLocaleData::NoFlags;
if (fillChar == QLatin1Char('0'))
- flags = QLocaleData::ZeroPadded;
+ flags |= QLocaleData::ZeroPadded;
if (qIsUpper(fmt))
flags |= QLocaleData::CapitalEorX;
- fmt = qToLower(fmt);
QLocaleData::DoubleForm form = QLocaleData::DFDecimal;
- switch (fmt) {
+ switch (qToLower(fmt)) {
case 'f':
form = QLocaleData::DFDecimal;
break;
@@ -8513,7 +8511,7 @@ QString QString::arg(double a, int fieldWidth, char fmt, int prec, QChar fillCha
QString arg;
if (d.occurrences > d.locale_occurrences)
- arg = QLocaleData::c()->doubleToString(a, prec, form, fieldWidth, flags);
+ arg = QLocaleData::c()->doubleToString(a, prec, form, fieldWidth, flags | QLocaleData::ZeroPadExponent);
QString locale_arg;
if (d.locale_occurrences > 0) {
diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp
index 09c23fdfa1..cc8d850689 100644
--- a/src/gui/painting/qplatformbackingstore.cpp
+++ b/src/gui/painting/qplatformbackingstore.cpp
@@ -344,7 +344,7 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &regi
QWindowPrivate::get(window)->lastComposeTime.start();
QOpenGLFunctions *funcs = d_ptr->context->functions();
- funcs->glViewport(0, 0, window->width() * window->devicePixelRatio(), window->height() * window->devicePixelRatio());
+ funcs->glViewport(0, 0, qRound(window->width() * window->devicePixelRatio()), qRound(window->height() * window->devicePixelRatio()));
funcs->glClearColor(0, 0, 0, translucentBackground ? 0 : 1);
funcs->glClear(GL_COLOR_BUFFER_BIT);
diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp
index c303f01648..1b84b26d83 100644
--- a/src/network/socket/qnativesocketengine_win.cpp
+++ b/src/network/socket/qnativesocketengine_win.cpp
@@ -1232,6 +1232,8 @@ qint64 QNativeSocketEnginePrivate::nativeReceiveDatagram(char *data, qint64 maxL
// it is ok the buffer was to small if bytesRead is larger than
// maxLength then assume bytes read is really maxLenth
ret = qint64(bytesRead) > maxLength ? maxLength : qint64(bytesRead);
+ if (options & QNativeSocketEngine::WantDatagramSender)
+ qt_socket_getPortAndAddress(socketDescriptor, &aa, &header->senderPort, &header->senderAddress);
} else {
WS_ERROR_DEBUG(err);
switch (err) {
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
index 7b7649bc5c..f3cc160b3e 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
+++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp
@@ -368,7 +368,7 @@ QEvdevTouchScreenHandler::~QEvdevTouchScreenHandler()
bool QEvdevTouchScreenHandler::isFiltered() const
{
- return d->m_filtered;
+ return d && d->m_filtered;
}
QTouchDevice *QEvdevTouchScreenHandler::touchDevice() const
diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro
index 7dbb6f6cae..6d4f1b93bd 100644
--- a/src/platformsupport/platformsupport.pro
+++ b/src/platformsupport/platformsupport.pro
@@ -16,7 +16,7 @@ qtConfig(evdev)|qtConfig(tslib)|qtConfig(libinput)|qtConfig(integrityhid) {
input.depends += devicediscovery
}
-if(unix:!darwin)|qtConfig(xcb): \
+if(unix:!uikit)|qtConfig(xcb): \
SUBDIRS += services
qtConfig(opengl): \
diff --git a/src/platformsupport/themes/themes.pro b/src/platformsupport/themes/themes.pro
index 44f94fafc8..668a843473 100644
--- a/src/platformsupport/themes/themes.pro
+++ b/src/platformsupport/themes/themes.pro
@@ -6,7 +6,7 @@ CONFIG += static internal_module
DEFINES += QT_NO_CAST_FROM_ASCII
-if(unix:!darwin)|qtConfig(xcb): \
+if(unix:!uikit)|qtConfig(xcb): \
include($$PWD/genericunix/genericunix.pri)
HEADERS += \
diff --git a/src/plugins/platforms/qnx/qqnxeglwindow.h b/src/plugins/platforms/qnx/qqnxeglwindow.h
index 3a3840f13c..d8cfd730ac 100644
--- a/src/plugins/platforms/qnx/qqnxeglwindow.h
+++ b/src/plugins/platforms/qnx/qqnxeglwindow.h
@@ -60,6 +60,8 @@ public:
void setGeometry(const QRect &rect) override;
+ QSurfaceFormat format() const override { return m_format; }
+
protected:
int pixelFormat() const override;
void resetBuffers() override;
diff --git a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
index 484dad6e1d..ead08dbce8 100644
--- a/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
+++ b/src/plugins/sqldrivers/ibase/qsql_ibase.cpp
@@ -1845,9 +1845,11 @@ bool QIBaseDriver::subscribeToNotification(const QString &name)
eBuffer->bufferLength,
eBuffer->eventBuffer,
#if defined (FB_API_VER) && FB_API_VER >= 20
- reinterpret_cast<ISC_EVENT_CALLBACK>(qEventCallback),
+ reinterpret_cast<ISC_EVENT_CALLBACK>(reinterpret_cast<void *>
+ (&qEventCallback)),
#else
- reinterpret_cast<isc_callback>(qEventCallback),
+ reinterpret_cast<isc_callback>(reinterpret_cast<void *>
+ (&qEventCallback)),
#endif
eBuffer->resultBuffer);
@@ -1925,9 +1927,11 @@ void QIBaseDriver::qHandleEventNotification(void *updatedResultBuffer)
eBuffer->bufferLength,
eBuffer->eventBuffer,
#if defined (FB_API_VER) && FB_API_VER >= 20
- reinterpret_cast<ISC_EVENT_CALLBACK>(qEventCallback),
+ reinterpret_cast<ISC_EVENT_CALLBACK>(reinterpret_cast<void *>
+ (&qEventCallback)),
#else
- reinterpret_cast<isc_callback>(qEventCallback),
+ reinterpret_cast<isc_callback>(reinterpret_cast<void *>
+ (&qEventCallback)),
#endif
eBuffer->resultBuffer);
if (Q_UNLIKELY(status[0] == 1 && status[1])) {
diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
index 28014840a3..2074c9789a 100644
--- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
@@ -516,6 +516,7 @@ private slots:
void toUcs4();
void arg();
void number();
+ void doubleOut();
void arg_fillChar_data();
void arg_fillChar();
void capacity_data();
@@ -4882,6 +4883,28 @@ void tst_QString::number()
#endif
}
+void tst_QString::doubleOut()
+{
+ // Regression test for QTBUG-63620; the first two paths lost the exponent's
+ // leading 0 at 5.7; C's printf() family guarantee a two-digit exponent (in
+ // contrast with ECMAScript, which forbids leading zeros).
+ const QString expect(QStringLiteral("1e-06"));
+ const double micro = 1e-6;
+ QCOMPARE(QString::number(micro), expect);
+ QCOMPARE(QString("%1").arg(micro), expect);
+ {
+ QString text;
+ text.sprintf("%g", micro);
+ QCOMPARE(text, expect);
+ }
+ {
+ QString text;
+ QTextStream stream(&text);
+ stream << micro;
+ QCOMPARE(text, expect);
+ }
+}
+
void tst_QString::capacity_data()
{
length_data();
diff --git a/tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp b/tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp
index 6a93391896..b52654d1b4 100644
--- a/tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp
+++ b/tests/benchmarks/corelib/plugin/quuid/tst_quuid.cpp
@@ -138,13 +138,12 @@ void tst_bench_QUuid::createUuidV5()
void tst_bench_QUuid::toDataStream()
{
- QUuid uuid1, uuid2;
- uuid1 = QUuid::createUuid();
+ QUuid uuid = QUuid::createUuid();
QByteArray ar;
{
QDataStream out(&ar,QIODevice::WriteOnly);
QBENCHMARK {
- out << uuid1;
+ out << uuid;
}
}
}