Commit Graph

40574 Commits

Author SHA1 Message Date
Kai Koehne
0c9b449aa4 Doc: Clarify state of Qt Xml
The state of the module is done, not deprecated, so we shouldn't
recommend users to move away from it in all cases. There's also
no direct replacement for the DOM API.

Fixes: QTBUG-70629
Change-Id: Ifaff9757234bd68a411a3da1403c57bbbcb94693
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Reviewed-by: Leena Miettinen <riitta-leena.miettinen@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
2019-05-24 11:54:55 +02:00
Giuseppe D'Angelo
59937de098 Annotate the futex implementation for TSAN
TSAN does not understand the futex system call.

Now, in QMutex and QSemaphore usage, futex is always wrapped by
atomic operations that always do an acquire (before waiting) and
a release (before waking waiters). That alone realizes a
synchronizes-with, and since Qt uses std::atomics, TSAN knows
what's going on and does not complain.

But what if one uses futex directly, or we change the
algorithms, or introduce some other new synchronization
primitive somewhere?  Luckily TSAN offers annotations for this
that we can use.

This patch annotates the main entry point for the futex syscall
with a pair of acquire/release semantics. A futex call
guarantees total ordering on the operations on the futex
word(s), whether the call succeeds or fails.

Change-Id: Ib80ff898c09fbb6fc73989247eb757bf70971a8a
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-05-22 21:04:30 +00:00
Marc Mutz
eae4668afa Torrent example: replace a QMultiMap with a sorted vector
This came about trying to remove the Java-style iterator. It was used to
iterate in reverse order, something QMap can't do, easily, due to lack
of rbegin()/rend(). Instead of writing ugly loops, use a vector of pairs,
fill it, sort it, then iterate over that one in reverse.

Change-Id: I09c8a2732a0699fff4c497778745523e20d348a1
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
2019-05-25 09:30:51 +00:00
Marc Mutz
8fe6f14bf0 QBasicTimer: add some noexcept and constexpr
The noexcept part should be clear. The constexpr should make the
compiler not create initialization code for static instances. This is
how std::mutex works[1], and Clang and GCC understand it. MSVC
doesn't.

[1] https://en.cppreference.com/w/cpp/thread/mutex/mutex

Change-Id: If9e4c6c0279f0024a659d5602d55e126224ca950
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2019-05-24 09:34:57 +02:00
Sérgio Martins
4965b0ed77 Don't allow to copy QBasicTimer in Qt 6, it would stop the timer
Fixing this in Qt 5 would be BIC. Although it could be okayish, there
are many more classes that shouldn't be copyable. I need to go through
clazy's output and fix them, and would rather do this noise for Qt 6 and
leave Qt 5 alone and purely BIC free.

Added a move-ctor and move-assign, as well as swap(), deprecated
copy-ctor and copy-assign.

The new copy special member functions warn at runtime if they are called.
In order to not pollute client code with the warning strings, lock them
away by defining the functions out-of-line.

[ChangeLog][QtCore][QBasicTimer] QBasicTimer is now a move-only class.
Copying is now deprecated and will be removed in Qt 6.

[ChangeLog][QtCore][QBasicTimer] Added swap() member and free function.

Change-Id: Ic3e6a26f3989d4c8d125c06e8b0b825411c6e106
Done-with: Marc Mutz <marc.mutz@kdab.com>
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2019-05-25 16:37:08 +00:00
Friedemann Kleint
d2c4782432 tst_QVariant: Fix warnings about deprecated functions not under test —
Silence a warnings flood about qVariantFromValue(), QString::null
and QWeakPointer::data().

Change-Id: I73347190c0fa396b39b9efd00447cf24e48259a0
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
2019-05-24 10:35:17 +02:00
Thorbjørn Lund Martsum
48f7f65dc3 QMenu size fix - Mark items dirty on screen change
It seems like an optimization on the itemsDirty flag
caused a bug to be re-introduced. When a popup is shown
on a new screen, the itemsDirty must however be set to
ensure that new correct sizes are calculated.

Task-number: QTBUG-59794
Change-Id: Ifb5c233b1f9d4d38bd0cd7a9a71cc32ad3212f8c
Reviewed-by: Morten Kristensen <msk@nullpointer.dk>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Christian Ehrlicher <ch.ehrlicher@gmx.de>
2019-05-22 11:22:26 +02:00
Lorn Potter
800941df89 wasm: fix empty body on POST
this also optimizes network post method handling

Task-number: QTBUG-75660
Change-Id: Ibb0d01f2cc2b2bc7802598c4f6f04b04882c12ca
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2019-05-22 16:58:34 +10:00
Alexandru Croitor
4e7756a6cd Add a few more 3rd party libraries to helper.py
Handle a few more libraries that are used in qtimageformats repi.

Change-Id: Ia3b9a845bc6cb8ce98a477b9355011bbadc32c1a
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-05-21 15:28:24 +00:00
Simon Hausmann
f8e4f94a14 Avoid accidental clash with .qrc files that are checked in
Add a prefix for generated .qrc files so for in-source builds we don't
end up overwriting htem.

Change-Id: I8eef582479eb45d67585f6aab87b288393bbadb5
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-05-21 08:35:40 +00:00
Simon Hausmann
d61ca95fc0 Simplify top-level CMakeLists.txt for modules
Implement some aspects of qt_parts.prf to simplify the top-level
CMakeLists.txt for repositories that follow the common qt structure
(src, tools, tests, examples).

Change-Id: Ia35f4e9207e92c1cf0406353561b0cc52dcb0e59
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-05-21 08:05:44 +00:00
Lorn Potter
9fc17c14fa wasm: fix QSGContext warning message
When runing the scenegraph example sgengine, gets rid if this error:
 QSGContext::initialize: stencil buffer support missing, expect
 rendering errors

Change-Id: I7f3a82409bc2cf81cf8217876e527f9c45be3bf4
Fixes: QTBUG-74694
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
2019-05-21 06:21:21 +10:00
Alexandru Croitor
a859cb508c Automatically install repo specific cmake find modules
Some qt modules need to find 3rd party packages for which there
are no Config files. We need to write custom CMake Find modules to
find those packages. These find modules need to be installed so that
they are used when a user consumes the Qt packages.

Automatically include and install these find modules if they exist,
as part of qt_build_repo_end().

Change-Id: I14aad35ed2999cac8bdda65ca4aeaf74d04fdb71
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-05-20 13:48:16 +00:00
Alexandru Croitor
76f5b784ce Fix the fix to correctly handle comments in multi-line assignments
The previous fix where the Grammar comment style was changed to
remove the newlines was incorrect, because if you have

 foo=1#comment
 bar=2

after the Grammar comment ignoring, it would transform into

 foo=1bar=2

which will clearly fail to parse, so the new line has to stay.

But we would still have the following case which would fail:
 foo=a \
 # comment
 b

Apparently qmake things that's the equivalent of
foo=a b

but the grammar parses it as
 foo=a \
 \n (newline)
 b

Thus the parsing fails because there's a newline and then some
weird 'b' token which the grammar does not expect.

The best fix I found is to preprocess the source, to remove
completely commented out lines.

So:
 foo=a \
 # comment
 b

gets transformed into

 foo=a \
 b

Change-Id: I2487a0dbf94a6ad4d917d0a0ce05247341e9b7da
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 13:18:11 +00:00
Alexandru Croitor
e4b8c488bd Improve configure2cmake to find_package only in certain conditions
It doesn't make much sense to look for X11 related packages on
macOS and Windows by default. Usually they would not be there, and
as a result the configuration step would show a long list of scary
not found packages, and also eat precious configure time.

Change the conversion script to allow putting conditions around
generated find_package calls.

These conditions can be manually set in the conversion script
library mapping, using the emit_if argument,
which we do for the X11 and Wayland related packages.

They are also computed by checking which features use a given library,
and if the feature is protected by a simple emitIf condition like
config.linux, the relevant library find_package call will be protected
by the same condition.

If a developer still wishes to look for all packages, they can define
the CACHE variable QT_FIND_ALL_PACKAGES_ALWAYS to ON.

The relevant configure.cmake files are regenerated in this patch.

Change-Id: I6f918a94f50257ec41d6216305dae9774933389a
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 13:15:16 +00:00
Alexandru Croitor
42c8c38564 Regenerate corelib
And add the first version of the .prev file.

Change-Id: I5d8f2354f86bc279e185e31173df4aeeb6e46116
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 13:15:00 +00:00
Jędrzej Nowacki
f1d428b643 Fix typo in module_config.yaml
The command executed is jom not nmake.

Change-Id: Ieae487a3b50884d901ca2a431f3c3ea615a80e8b
Reviewed-by: Liang Qi <liang.qi@qt.io>
2019-05-20 11:42:27 +00:00
Alexandru Croitor
fbbfbcf360 Regenerate sql
Change-Id: I495678a5c77557ae297b7dd028f1253ebcce9ef7
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:38:07 +00:00
Alexandru Croitor
8cf45a6848 Regenerate printsupport
No .prev file cause it's a clean conversion.

Change-Id: I33e02dccb9c8da336891c36cd0e1454d29152065
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:37:51 +00:00
Alexandru Croitor
17865396bf Regenerate platformheaders
And add the first version of the .prev file.

Change-Id: I87d33dd175ddcbccd202f068f469f260944e4ada
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:37:30 +00:00
Alexandru Croitor
a937632258 Regenerate concurrent
Change-Id: Iccb993e7e38dc04be2e3960d0f49ddf241c675e7
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:36:50 +00:00
Alexandru Croitor
0711d497d9 Regenerate dbus
And add the first version of the .prev file.

Change-Id: I8375591a8cfc087291774370b8308c808dd5f0b4
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:36:37 +00:00
Alexandru Croitor
79d820f8a9 Regenerate opengl
And add the first version of the .prev file.

Change-Id: I96f27bce6d1c3107fb8c7b3758b29cfd944cf374
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:35:53 +00:00
Alexandru Croitor
b1746c1da1 Regenerate network
And add the first version of the .prev file.

Change-Id: I9d298e483032081a02a63b4f887f4d682ea7ccd4
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:35:38 +00:00
Alexandru Croitor
7f68437296 Regenerate widgets
And add the first version of the .prev file.

Change-Id: I901c413997dcc497da5e45b1675726180c84e709
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:35:19 +00:00
Alexandru Croitor
a701be5652 Regenerate gui
And add the first version of the .prev file.

Change-Id: Ie5fba879b8fdb670d4331d4df524ffb5bad3303e
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:34:54 +00:00
Alexandru Croitor
846adfe079 Handle the new cmdline config feature in pro2cmake
cmdline implies console, so use that also to determine if a binary
should get a GUI flag.

Change-Id: I084e0a45785df96a7dc2c101af5305fbb39efbc3
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:23:14 +00:00
Alexandru Croitor
826821658d Workaround fix in pro2cmake Operation __init__ method
There are still call sites that call Operation.__init__ with a string
instead of a list. Restore the handling of such a case.

Amends 5fe8a38af3

Change-Id: I2a4d5c5cb5b460bf02b6da02d42d8cc8d5eb4192
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:18:56 +00:00
Alexandru Croitor
c454e622a1 Don't exclude QtCore from dependencies when generating modules
and plugins.

src/network/network.pro for instance depends on core-private, but
because we ignore adding QtCore as a public dependency, the exported
Config file for Network doesn't depend on QtCore anymore, so if a user
only links against Network, they won't automatically link against
Core.

Change-Id: I4a60ffae7e071927360b8ccf6b1b7479ab391060
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-20 09:15:31 +00:00
Alexandru Croitor
e0a6e9f3aa Fix parsing qmake assignments that have comments in between
For some reason the python comment regex that we used does not ignore
the line break at the end of a comment line.

This caused issues when parsing multi line assignments with comments
in between.

Use our own regex for comments to circumvent the issue. It was found
while trying to port the qtimageformats repo.

Added a pytest as well.

Change-Id: Ie4bbdac2d1e1c133bc787a995224d0bbd8238204
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-17 13:31:03 +00:00
Tobias Hunger
14bf7e952e CMake: Fix test_scope_handling
Adapt to updated APIs in pro2cmake.py

Change-Id: I39898b675e27d6295ef6cfa049c82b245d71188a
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-05-17 13:26:29 +00:00
Tobias Hunger
5fe8a38af3 CMake: Fix test_operations
Fix test_operations and do some small mypy cleanups along the way

Change-Id: I6586b5d3491e5dcf44252c098516f0922fa60420
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
2019-05-17 13:26:26 +00:00
Alexandru Croitor
140b65e36f Propagate QT_CMAKE_EXPORT_NAMESPACE via QtCore package
QT_CMAKE_EXPORT_NAMESPACE is used by the Qt packages to make features
available to the consuming CMake project. The value was moved to the
BuildInternals Config file, but that's wrong because consuming
applications not including the BuildInternals component would fail
to use any other Qt package.

Move QT_CMAKE_EXPORT_NAMESPACE to be propagated with QtCore package
again.

Amends 9542e78525.

Change-Id: I9841ac8c2828b00c0111d59e8976c889554e0ce1
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-17 11:10:44 +00:00
Alexandru Croitor
85b038a0a2 Copy feature properties from GlobalConfig to Core target
Current lates CMake has a limitation that it does not allow exporting
custom properties from INTERFACE libraries. GlobalConfig is such a
library, which means that so far all the global features were not
actually exported.

Copy the feature property values from GlobalConfig to Core. Because
Core is an actual shared library, it keeps the custom properties
when exported, and thus Core feature properties will contain the sum
of Core and GlobalConfig feature values.

Change-Id: Idde305cbaf9ab85ecfbe29522dcbac1c44022b17
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-17 11:10:31 +00:00
Ville Voutilainen
3a9ffadf69 Teach configure to run either qmake or cmake
Task-number: QTBUG-74139
Change-Id: I609ec4b3ef9f30455bd72aaebad0b6c766c39cd7
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-05-16 13:54:15 +00:00
Alexandru Croitor
9fade925e3 Stop trying to create config forwarding headers for NO_MODULE targets
The GlobalConfig target is not an actual module, so there's no point
in trying to create forwarding headers for GlobalConfig's qconfig.h
within qt_feature_module_end.

qconfig.h's forwarding header will be created implicitly while
processing QtCore target's SYNCQT.INJECTIONS value, which is read
from the headers.pri file generated by syncqt.

This also fixes trying to create forwarding headers when processing
the sqldrivers project.

Amends 02a015375a.

Change-Id: Ifd70d8c3ebf881ffdcf90db8d5d3b23309bc8fed
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-16 09:04:00 +00:00
Alexandru Croitor
4dacc09921 Save and set the CMAKE_INSTALL_PREFIX in BuildInternal's Config file
Once qtbase is built and installed, save the CMAKE_INSTALL_PREFIX
that was used during the build, and set it when a consumer calls
find_package(Qt5BuildInternals).

This fixes a bug where syncqt can not be found when building qtsvg,
while the developer specifies CMAKE_PREFIX_PATH to find the Qt packages,
but does not set the CMAKE_INSTALL_PREFIX.

Task-number: QTBUG-75544
Change-Id: I03fd23ba418af5115105610f3f9ed92664562945
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-05-15 17:34:05 +00:00
Alexandru Croitor
9542e78525 Use the qt_build_repo() macros for building qtbase as well
To implement this, create a new Qt5BuildInternals package.

All child Qt modules like qtsvg should use
find_package(Qt5BuildInternals) or
find_package(Qt5 COMPONENTS BuildInternals) in the their
top level CMakeLists.txt.
This will make the qt_build_repo() macros available.

For qtbase we slightly cheat, and specify a CMAKE_PREFIX_PATH
pointing to the source folder that contains the BuildInternals
package.

For the other modules we actually use a configured and installed
package Config file.

This change moves variables that used to be written into the
QtCore Config file into the BuildInternals package. This way
things that are relevant only for building additional Qt modules
does not pollute the QtCore package.

Task-number: QTBUG-75580
Change-Id: I5479adff2f7903c9c2862d28c05c7f485ce3e4eb
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-05-15 17:33:51 +00:00
Alexandru Croitor
c097256ee4 Encapsulate commands for building other repos into two macros
Currently to build qtsvg we have some copy-pasted code to set up
the paths for QtSetup and QtPostProcess to be found.

To make it cleaner, introduce two new macros called
qt_build_repo_begin and qt_build_repo_end(). The first one
should be called in a child repo like qtsvg, right after
a find_package(Qt5) call, and the second one at the end of the
repo top-level CMakeLists.txt file.

In order for the macros to work, extract some of the variables
which were set in Qt5Config into Qt5CoreConfig instead. This
makes sure that it works also for find_package(Qt5Core) calls.

Task-number: QTBUG-75580
Change-Id: I85267c6bd86f9291ec2e170fddab1006ab684b5c
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
2019-05-15 11:40:03 +00:00
Alexandru Croitor
02a015375a Implement developer / non-prefix builds
A non-prefix build is a build where you don't have to run
make install.

To do a non-prefix build, pass -DFEATURE_developer_build=ON when
invoking CMake on qtbase. Note that this of course also enables
developer build features (private tests, etc).

When doing a non-prefix build, the CMAKE_INSTALL_PREFIX cache variable
will point to the qtbase build directory.

Tests can be run without installing Qt (QPA plugins are picked up from
the build dir).

This patch stops installation of any files by forcing the
make "install" target be a no-op.

When invoking cmake on the qtsvg module (or any other module),
the CMAKE_INSTALL_PREFIX variable should be set to the qtbase build
directory.

The developer-build feature is propagated via the QtCore Config file,
so that when building other modules, you don't have to specify it
on the command line again.

As a result of the change, all libraries, plugins, tools, include dirs,
CMake Config files, CMake Targets files, Macro files, etc,
will be placed in the qtbase build directory, mimicking the file layout
of an installed Qt file layout.

Only examples and tests are kept in the separate module build
directories, which is equivalent to how qmake does it.

The following global variables contain paths for the
appropriate prefix or non prefix builds:
QT_BUILD_DIR, QT_INSTALL_DIR, QT_CONFIG_BUILD_DIR,
QT_CONFIG_INSTALL_DIR. These should be used by developers
when deciding where files should be placed.

All usages of install() are replaced by qt_install(), which has some
additional logic on how to handle associationg of CMake targets to
export names.

When installing files, some consideration should be taken if
qt_copy_or_install() needs to be used instead of qt_install(),
which takes care of copying files from the source dir to the build dir
when doing non-prefix builds.

Tested with qtbase and qtsvg, developer builds, non-developer builds
and static developer builds on Windows, Linux and macOS.

Task-number: QTBUG-75581
Change-Id: I0ed27fb6467662dd24fb23aee6b95dd2c9c4061f
Reviewed-by: Kevin Funk <kevin.funk@kdab.com>
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
2019-05-15 11:31:31 +00:00
Marc Mutz
e4c0fca194 RelationalTableModel example: use std::unique_ptr instead of QScopedPointer
There's talk that QScopedPointer may be deprecated. Don't use it
in examples anymore.

Change-Id: I3c4647a569b72cd3a628c9b92ef34c87fd588342
Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
2019-05-15 11:03:52 +02:00
Marc Mutz
54a93af966 QtCore: use qUtf16Printable and %ls, qErrnoWarning()
... instead of qPrintable(), %s, and explicit qt_error_string().

Saves 2KiB in text size on optimized Linux AMD64 GCC 9.1 builds.

Change-Id: I98b6717da1ed1b678f01167d704a96f10da47966
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
 
 
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-05-29 18:24:30 +02:00
Marc Mutz
090085e104 corelib/tools: use qUtf16Printable() and %ls
... instead of qPrintable() and %s. Saves temporary QByteArray creation.

Change-Id: Idd46c99a5da731e29c6d237dc914e256ac7b3fbd
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
 
 
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-05-29 18:24:30 +02:00
Marc Mutz
41fa84c0d8 QDateTimeParser: use qUtf16Printable() and %ls
... instead of qPrintable() and %s. Avoids temporary QByteArrays.

Saves 1.2KiB in text size on optimized Linux AMD64 GCC 9.1
builds.

Change-Id: Ie626fc478667007ce9a6bc920b8d4ec0451f2cd0
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-29 18:24:30 +02:00
Marc Mutz
9322ee7ace corelib/io: use qUtf16Printable(), %ls, qErrnoWarning()
... instead of qPrintable(), %s, explicit qt_error_string().

Saves temporary QByteArray creation, and 540b in text size on
optimized Linux AMD64 GCC 9.1 builds.

Change-Id: Id4e861683cf05a92faf51e4a9de9eb1dec4fc84a
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
 
 
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-05-29 19:03:05 +02:00
Marc Mutz
b5e0bb9152 QWindowsFileSystemWatcher: optimize qWarning() use
The first two changes avoid creation of a temporary QString and QByteArray each,
by realisiing that QChar is more-or-less wchar_t on Windows and so we can just
use %ls to print the wchar_t array directly.

In msgFindNextFailed(), remove the inline keyword and mark the function as cold
(not sure this has any effect on Windows). When building the result, don't use
QTextStream. Everything that is streamed is text, so just use QString::op+=.
When using the result, use qUtf16Printable and %ls instead of qPrintable and %s,
to avoid the creation of a temporary QByteArray.

Change-Id: I09f576b894761fe342109b386c1de3532200e03c
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
 
 
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
2019-05-29 18:24:29 +02:00
Marc Mutz
1a872e5ff2 HTTP example: use std::unique_ptr instead of QScopedPointer
This allows the QFile factory there to actually return the payload in
a unique_ptr instead of falling back to a raw pointer.

The use of a unique_ptr member requires that the destructor be
out-of-line, since QFile is only forward-declared in the header
file. This is good hygiene, so do it for ProgressDialog, too.

Change-Id: Idb6ed327f9592526bb7d0d5b2cfbffe9f08f3eea
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-15 11:03:52 +02:00
Marc Mutz
6e121d81cb QPropertyAnimation: share some code
Collapse the two qWarnings() into one by just storing what is different between them.

Saves more than 400b in text size on optimized AMD64 Linux GCC 9.1 builds.

Change-Id: I16489d6165a550a9ad4ce6a77ca736a1d17a8c8a
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-30 06:21:40 +00:00
Marc Mutz
2f542dd996 Use QStringView overloads of <QDate/Time>::toString()
There are no QLatin1String overloads, so using QLatin1String as the
format string produced a temporary QString. Use QStringViewLiteral
instead.

Change-Id: I682eb8cfaa98fdcfb491edd290460db636a98a9f
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-29 18:24:29 +02:00
Marc Mutz
dd8131e3b2 QFile: share some code
Pack four qWarning() calls into a separate cold function.
Use qUtf16Printable().

Saves >600b in text size on optimized AMD64 Linux GCC 9.1 builds.

Change-Id: Ib25ea473d1d77faaecaf8750726c83675d87279e
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
2019-05-30 07:32:16 +02:00