summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-04-11 16:57:34 +0200
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2013-04-11 17:04:02 +0200
commitc51d26b6ec7869641441d01597c3e7acc643f93f (patch)
tree69ee279e12be73ae385e087c9d89ce7bc8480446
parent0646d1131b4bc65cdd9af29f4ce00fdd2398a3df (diff)
parent967c18d29694fdeab858691a80cb8400fd02ec33 (diff)
Merge branch 'release' into old/5.0old/5.0
Conflicts: tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp Change-Id: Id635e0c27df5d8e3852d12bd6433c6463bf4eadc
-rwxr-xr-xbin/syncqt39
-rwxr-xr-xconfigure44
-rw-r--r--dist/changes-5.0.287
-rw-r--r--examples/widgets/graphicsview/boxes/boxes.pro6
-rw-r--r--mkspecs/common/shell-unix.conf8
-rw-r--r--mkspecs/common/shell-win32.conf8
-rw-r--r--mkspecs/features/qml_module.prf2
-rw-r--r--mkspecs/features/qt_build_config.prf5
-rw-r--r--mkspecs/features/qt_example_installs.prf2
-rw-r--r--mkspecs/features/qt_functions.prf7
-rw-r--r--mkspecs/features/qt_module.prf2
-rw-r--r--mkspecs/features/qt_module_headers.prf2
-rw-r--r--mkspecs/features/qt_module_pris.prf8
-rw-r--r--mkspecs/features/qt_parts.prf3
-rw-r--r--mkspecs/features/qt_plugin.prf2
-rw-r--r--mkspecs/features/qt_tool.prf2
-rw-r--r--qmake/generators/mac/pbuilder_pbx.cpp7
-rw-r--r--qmake/generators/makefile.cpp36
-rw-r--r--qmake/generators/makefile.h2
-rw-r--r--qmake/generators/metamakefile.cpp10
-rw-r--r--qmake/generators/win32/msvc_vcproj.cpp7
-rw-r--r--qmake/library/qmakeevaluator.cpp6
-rw-r--r--qmake/main.cpp11
-rw-r--r--src/angle/angle.pro2
-rw-r--r--src/corelib/doc/src/objectmodel/properties.qdoc2
-rw-r--r--src/corelib/global/qlibraryinfo.cpp4
-rw-r--r--src/corelib/kernel/qtcore_eval.cpp1
-rw-r--r--src/corelib/kernel/qvariant.cpp280
-rw-r--r--src/corelib/tools/qdatetime.cpp15
-rw-r--r--src/corelib/tools/qstring.cpp10
-rw-r--r--src/corelib/tools/tools.pri15
-rw-r--r--src/gui/painting/qcosmeticstroker.cpp12
-rw-r--r--src/gui/painting/qdrawhelper.cpp15
-rw-r--r--src/plugins/platforms/cocoa/qcocoahelpers.mm7
-rw-r--r--src/plugins/platforms/cocoa/qpaintengine_mac.mm2
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.cpp12
-rw-r--r--src/plugins/platforms/windows/qwindowscontext.h4
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp4
-rw-r--r--src/plugins/platforms/xcb/qxcbcursor.cpp2
-rw-r--r--src/printsupport/doc/src/qtprintsupport-module.qdoc3
-rw-r--r--src/tools/bootstrap/bootstrap.pro2
-rw-r--r--src/tools/qdoc/doc/config/qdoc.qdocconf2
-rw-r--r--src/tools/uic/qclass_lib_map.h2
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp9
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp11
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm54
-rw-r--r--tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp6
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp18
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp58
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp2
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp9
-rw-r--r--tools/configure/configureapp.cpp11
52 files changed, 513 insertions, 367 deletions
diff --git a/bin/syncqt b/bin/syncqt
index 3e7aea96a5..acfc6c4d57 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -83,9 +83,6 @@ our $quoted_basedir;
# Make sure we use Windows line endings for chomp and friends on Windows.
$INPUT_RECORD_SEPARATOR = "\r\n" if ($^O eq "msys");
-my $mkspecsdir = dirname(dirname($0));
-normalizePath(\$mkspecsdir) if (defined $mkspecsdir);
-
# will be defined based on the modules sync.profile
our (%modules, %moduleheaders, @allmoduleheadersprivate, %classnames, %explicitheaders, %deprecatedheaders);
our @qpa_headers = ();
@@ -103,6 +100,7 @@ my $copy_headers = 0;
my $create_uic_class_map = 0;
my $create_private_headers = 1;
my $minimal = 0;
+my $module_version = 0;
my @modules_to_sync ;
$force_relative = 1 if ( -d "/System/Library/Frameworks" );
@@ -128,7 +126,7 @@ sub showUsage
print " -showonly Show action but not perform (default: " . ($showonly ? "yes" : "no") . ")\n";
print " -minimal Do not create CamelCase headers (default: " . ($minimal ? "yes" : "no") . ")\n";
print " -outdir <PATH> Specify output directory for sync (default: $out_basedir)\n";
- print " -mkspecsdir <PATH> Set the path to the mkspecs (detected: " . (defined $mkspecsdir ? $mkspecsdir : "-none-") . ")\n";
+ print " -version <VERSION> Specify the module's version (default: detect from qglobal.h)\n";
print " -quiet Only report problems, not activity (same as -verbose 0)\n";
print " -v, -verbose <level> Sets the verbosity level (max. 4) (default: $verbose_level)\n";
print " The short form increases the level by +1\n";
@@ -662,8 +660,8 @@ while ( @ARGV ) {
} elsif($arg eq "-private") {
$var = "create_private_headers";
$val = "yes";
- } elsif($arg eq "-mkspecsdir") {
- $var = "mkspecsdir";
+ } elsif($arg eq "-version") {
+ $var = "version";
$val = shift @ARGV;
} elsif($arg =~/^-/) {
print "Unknown option: $arg\n\n" if(!$var);
@@ -739,12 +737,11 @@ while ( @ARGV ) {
push @modules_to_sync, $module;
$moduleheaders{$module} = $headerdir;
$create_uic_class_map = 0;
- } elsif ($var eq "mkspecsdir") {
+ } elsif ($var eq "version") {
if($val) {
- $mkspecsdir = $val;
- normalizePath(\$mkspecsdir);
+ $module_version = $val;
} else {
- die "The -mkspecsdir option requires an argument";
+ die "The -version option requires an argument";
}
} elsif ($var eq "output") {
my $outdir = $val;
@@ -759,11 +756,6 @@ while ( @ARGV ) {
}
}
-die "Cannot automatically detect/use provided path to QtBase's build directory!\n" .
- "QTDIR detected/provided: " . (defined $mkspecsdir ? $mkspecsdir : "-none-") . "\n" .
- "Please use the -mkspecsdir option to provide the correct path.\nsyncqt failed"
- if (!$mkspecsdir || !-d $mkspecsdir);
-
# if we have no $basedir we cannot be sure which sources you want, so die
die "Could not find any sync.profile for your module!\nPass <module directory> to syncqt to sync your header files.\nsyncqt failed" if (!$basedir);
@@ -785,12 +777,12 @@ my %allmoduleheadersprivate = map { $_ => 1 } @allmoduleheadersprivate;
$isunix = checkUnix; #cache checkUnix
-my $qt_version = fileContents($mkspecsdir."/qconfig.pri");
-if (length($qt_version)) {
- $qt_version =~ s,.*^QT_VERSION[ \t]*=[ \t]*(\S+).*,$1,sm;
-} else {
- $qt_version = fileContents($basedir."/src/corelib/global/qglobal.h");
- $qt_version =~ s,.*^#[ \t]*define[ \t]+QT_VERSION_STR[ \t]+"([^"]+)".*,$1,sm;
+if (!$module_version) {
+ my $filco = fileContents($basedir."/src/corelib/global/qglobal.h");
+ if ($filco !~ m,.*^#[ \t]*define[ \t]+QT_VERSION_STR[ \t]+"([^"]+)".*,sm) {
+ die "Cannot determine Qt/Module version. Use -version.\n";
+ }
+ $module_version = $1;
}
foreach my $lib (@modules_to_sync) {
die "No such module: $lib" unless(defined $modules{$lib});
@@ -799,11 +791,6 @@ foreach my $lib (@modules_to_sync) {
my @dirs = split(/;/, $modules{$lib});
my $dir = $dirs[0];
- my $project = $dir;
- $project =~ s,/([^/]+)$,/$1/$1.pro,;
- my $module_version = fileContents($project);
- $module_version = $qt_version unless ($module_version =~ s,.*^VERSION[ \t]*=[ \t]*(\S+).*,$1,sm);
-
my $pathtoheaders = "";
$pathtoheaders = $moduleheaders{$lib} if ($moduleheaders{$lib});
diff --git a/configure b/configure
index dee86c2704..acce06dfc4 100755
--- a/configure
+++ b/configure
@@ -1110,18 +1110,10 @@ while [ "$#" -gt 0 ]; do
VAL=`echo $1 | sed 's,-R,,'`
fi
;;
- -largefile)
- VAR="largefile"
- VAL="yes"
- ;;
- -l?*|-l)
+ -l) # -lfoo is handled differently
VAR="add_link"
- if [ "$1" = "-l" ]; then
- shift
- VAL="$1"
- else
- VAL=`echo $1 | sed 's,-l,,'`
- fi
+ shift
+ VAL="$1"
;;
-F?*|-F)
VAR="add_fpath"
@@ -1132,14 +1124,10 @@ while [ "$#" -gt 0 ]; do
VAL=`echo $1 | sed 's,-F,,'`
fi
;;
- -fw?*|-fw)
+ -fw) # -fwfoo is handled differently
VAR="add_framework"
- if [ "$1" = "-fw" ]; then
- shift
- VAL="$1"
- else
- VAL=`echo $1 | sed 's,-fw,,'`
- fi
+ shift
+ VAL="$1"
;;
-W*)
VAR="add_warn"
@@ -1419,7 +1407,7 @@ while [ "$#" -gt 0 ]; do
device-option)
DEV_VAR=`echo $VAL | sed "s,^\(.*\)=.*,\1,"`
DEV_VAL=`echo $VAL | sed "s,^.*=\(.*\),\1,"`
- DeviceVar set $DEV_VAR $DEV_VAL
+ DeviceVar set $DEV_VAR "$DEV_VAL"
;;
qpa)
QT_QPA_DEFAULT_PLATFORM="$VAL"
@@ -2130,6 +2118,16 @@ while [ "$#" -gt 0 ]; do
UNKNOWN_OPT=yes
fi
;;
+ l*) # -lfoo
+ L_FLAGS="$L_FLAGS -l\"${VAR#l}\""
+ ;;
+ fw*) # -fwfoo
+ if [ "$BUILD_ON_MAC" = "yes" ]; then
+ L_FLAGS="$L_FLAGS -framework \"${VAR#fw}\""
+ else
+ UNKNOWN_OPT=yes
+ fi
+ ;;
*)
UNKNOWN_OPT=yes
;;
@@ -2241,7 +2239,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then
if [ -x "$relpath/bin/syncqt" ]; then
mkdir -p "$outpath/bin"
echo "#!/bin/sh" >"$outpath/bin/syncqt"
- echo "perl \"$relpath/bin/syncqt\" -mkspecsdir \"$outpath/mkspecs\" \"\$@\"" >>"$outpath/bin/syncqt"
+ echo "perl \"$relpath/bin/syncqt\" \"\$@\"" >>"$outpath/bin/syncqt"
chmod 755 "$outpath/bin/syncqt"
fi
@@ -2826,7 +2824,7 @@ fi
QT_INSTALL_BINS=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_BINS"`
if [ "$XPLATFORM_MINGW" = "yes" ]; then
- QT_INSTALL_LIBEXECS_DIRNAME="lib"
+ QT_INSTALL_LIBEXECS_DIRNAME="bin"
else
QT_INSTALL_LIBEXECS_DIRNAME="libexec"
fi
@@ -3620,7 +3618,7 @@ setBootstrapVariable()
# build qmake
if true; then ###[ '!' -f "$outpath/bin/qmake" ];
- echo "Creating qmake. Please wait..."
+ echo "Creating qmake..."
mkdir -p "$outpath/qmake" || exit
# fix makefiles
@@ -3731,6 +3729,8 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ];
(cd "$outpath/qmake"; "$MAKE") || exit 2
fi # Build qmake
+echo "Running configuration tests..."
+
#-------------------------------------------------------------------------------
# create a qt.conf for the Qt build tree itself
#-------------------------------------------------------------------------------
diff --git a/dist/changes-5.0.2 b/dist/changes-5.0.2
index 108512a98a..209f963c65 100644
--- a/dist/changes-5.0.2
+++ b/dist/changes-5.0.2
@@ -22,21 +22,12 @@ information about a particular change.
General Improvements
--------------------
- - [QTBUG-26697] The -skip option was added to configure, which enables not
- building particular modules. Typical use case: -skip webkit.
-
-Third party components
-----------------------
-
-Legal
------
-
+ - Lots of fixes to enable static builds on Windows, Linux and Mac.
****************************************************************************
* Library *
****************************************************************************
-
QtCore
-----
@@ -47,27 +38,35 @@ QtCore
QtGui
-----
+ - [QTBUG-14766] Fixed potential access violation in QPixmap::copy() for <32 bit pixmaps.
+ - [QTBUG-24762] Fixed dashes being rendered differently depending on system clip.
+ - [QTBUG-25036] Fixed artifacts when drawing same line with different clips.
+ - [QTBUG-29643] Fixed crashes when using QImage in combination with QCoreApplication.
+
QtWidgets
---------
+ - [QTBUG-28817] Fixed QColorDialog::setOption(), QFontDialog::setOption().
+ - [QTBUG-29680] Fix mouse double click events not bubbling up to parent widgets.
+
QtNetwork
---------
-QtDBus
-------
+ - [QTBUG-29103] Toggle on demand loading of root certs properly.
QtConcurrent
------------
-QtOpenGL
---------
-
-QtTest
-------
+ - [QTBUG-28984] Fix compilation of Qt Concurrent with gcc 4.3.
QtSql
-----
+ - Fix QSqlTableModel:revert() for OnFieldChange.
+ - [QTBUG-29102] Support refreshing inserted rows with auto columns.
+ - [QTBUG-29108] Fix QSqlTableModel::headerData() for empty query with inserted row.
+ - [QTBUG-29217] Fix QSqlTableModel::setData() for non-change detection.
+
****************************************************************************
* Database Drivers *
****************************************************************************
@@ -85,12 +84,23 @@ postgres
Qt for Linux/X11
----------------
+ - Fix focus handling of native child widgets in xcb.
+ - Fixed crash when VNCing and trying to use non-present XFixes extension.
+
Qt for Windows
--------------
+ - [QTBUG-28439] Implement QPlatformWindow::isExposed() on Windows.
+ - [QTBUG-29010, QTBUG-28531] Fixed handling of layered windows required for
+ translucent or non-opaque windows.
+ - [QTBUG-30185] Fixed adding of suffixes in Window native file save dialog.
+
Qt for Mac OS X
---------------
+ - [QTBUG-29389] Fix transient scroll bar appearance before the proper one.
+ - [QTBUG-25297, QTBUG-29434] Add QMdiSubWindow size grip back.
+
Qt for BlackBerry
-----------------
@@ -100,22 +110,65 @@ Qt for Embedded Linux
Qt for Windows CE
-----------------
+ - Removed User32.dll usage.
+ - Fix compilation with QT_NO_CURSOR.
****************************************************************************
* Compiler Specific Changes *
****************************************************************************
+ - [QTBUG-29099] Fix gcc OOM error when compiling in release mode.
****************************************************************************
* Tools *
****************************************************************************
+Build System & configure
+------------------------
+
+ - [QTBUG-26697] The -skip option was added to configure, which enables not
+ building particular modules. Typical use case: -skip webkit.
+ - [QTBUG-28769, ...] Assorted build fixes
+ - [QTBUG-28902] Fixed contents of installed .prl files
+ - [QTBUG-29110, QTBUG-29186, ...] Assorted fixes to CMake config files
+ - [QTBUG-29174] Fixed numerous configure options which start with -l
+ - [QTBUG-29400] Fixed configure -fully-process not creating .vcproj files
+ - [QTBUG-29453, ...] Fixed generation of pkg-config .pc files
+ - [QTBUG-29478] Fixed static builds with ICU
+ - [QTBUG-29661] Fixed QtWebProcess.exe not finding Qt DLLs. -libexec
+ now defaults to bin/ on Windows.
+ - [QTBUG-29838] Fixed module versioning when mixing releases
+ - [QTBUG-30102] Fixed passing of values with spaces to -device-option
+ - Production builds do not build examples any more. 'make install' will
+ copy only the example sources.
+ - pkg-config: qt_config is now contained only in Qt5Core.pc, and it reflects
+ QT_CONFIG, not the module build's CONFIG.
+
qmake
-----
+ - [QTBUG-28132] Fixed parallelized 'jom install'
+ - [QTBUG-29143] MSVC: Fixed parsing of /openmp
+ - [QTBUG-29286] MSVC: Fixed use of VERSION breaking MSVC2010 projects
+ - [QTBUG-29329] MSVC: Fixed misparsing of /Gs as /GS
+ - [QTBUG-29329] MSVC: Stopped disabling buffer security check by default
+ - [QTBUG-29371] Fixed generation of XCode projects for XCode 4.6
+ - [QTBUG-29698] MSVC: Fixed incremental linking with non-standard shells
+ - [QTBUG-29700] Fixed pkg-config file generation when cross-compiling
+ - Qt modules are now enumerated in QT_MODULES, not QT_CONFIG. For portability,
+ use qtHaveModule() (since 5.0.1) or !isEmpty(QT.<module>.name) instead.
- $$(VAR) style environment variable expansions will not split on
whitespace any more. Use $$split() if necessary.
+ - Fixed qmake -tp vc (and configure without -no-vcproj)
+ - MSVC: Fixed an empty VERSION causing a garbled version in .rc files
+ - Windows: Added support for specifying application icon (via RC_ICONS)
+ - Added spec for BlackBerry Playbook
+
+moc
+---
+ - [QTBUG-29759] Fixed infinite recursion in macro substitution which
+ prevented some headers to compile.
****************************************************************************
* Plugins *
diff --git a/examples/widgets/graphicsview/boxes/boxes.pro b/examples/widgets/graphicsview/boxes/boxes.pro
index a4b253c580..93621878f1 100644
--- a/examples/widgets/graphicsview/boxes/boxes.pro
+++ b/examples/widgets/graphicsview/boxes/boxes.pro
@@ -1,5 +1,11 @@
QT += opengl widgets
+contains(QT_CONFIG, opengles.) {
+ contains(QT_CONFIG, angle): \
+ warning("Qt was built with ANGLE, which provides only OpenGL ES 2.0 on top of DirectX 9.0c")
+ error("This example requires Qt to be configured with -opengl desktop")
+}
+
HEADERS += 3rdparty/fbm.h \
glbuffers.h \
glextensions.h \
diff --git a/mkspecs/common/shell-unix.conf b/mkspecs/common/shell-unix.conf
index 17c3612fdc..63c435d037 100644
--- a/mkspecs/common/shell-unix.conf
+++ b/mkspecs/common/shell-unix.conf
@@ -7,8 +7,8 @@ QMAKE_COPY_DIR = $$QMAKE_COPY -R
QMAKE_MOVE = mv -f
QMAKE_DEL_FILE = rm -f
QMAKE_DEL_DIR = rmdir
-QMAKE_CHK_DIR_EXISTS = test -d
-QMAKE_CHK_FILE_EXISTS = test -f
-QMAKE_CHK_EXISTS_GLUE = "|| "
-QMAKE_MKDIR = mkdir -p
+QMAKE_CHK_EXISTS = test -e %1 ||
+QMAKE_CHK_DIR_EXISTS = test -d # legacy
+QMAKE_MKDIR = mkdir -p # legacy
+QMAKE_MKDIR_CMD = test -d %1 || mkdir -p %1
QMAKE_STREAM_EDITOR = sed
diff --git a/mkspecs/common/shell-win32.conf b/mkspecs/common/shell-win32.conf
index 826e87e34f..77c9698388 100644
--- a/mkspecs/common/shell-win32.conf
+++ b/mkspecs/common/shell-win32.conf
@@ -5,10 +5,10 @@ QMAKE_COPY_DIR = xcopy /s /q /y /i
QMAKE_MOVE = move
QMAKE_DEL_FILE = del
QMAKE_DEL_DIR = rmdir
-QMAKE_CHK_DIR_EXISTS = if not exist
-QMAKE_CHK_FILE_EXISTS = if not exist
-QMAKE_CHK_EXISTS_GLUE =
-QMAKE_MKDIR = mkdir
+QMAKE_CHK_EXISTS = if not exist %1
+QMAKE_CHK_DIR_EXISTS = if not exist # legacy
+QMAKE_MKDIR = mkdir # legacy
+QMAKE_MKDIR_CMD = if not exist %1 mkdir %1 & if not exist %1 exit 1
# xcopy copies the contained files if source is a directory. Deal with it.
CONFIG += copy_dir_files
diff --git a/mkspecs/features/qml_module.prf b/mkspecs/features/qml_module.prf
index db5f6787b3..d6ff25eed5 100644
--- a/mkspecs/features/qml_module.prf
+++ b/mkspecs/features/qml_module.prf
@@ -25,7 +25,7 @@ qml1_target: \
else: \
instbase = $$[QT_INSTALL_QML]
-!prefix_build {
+!force_independent {
# These bizarre rules copy the files to the qtbase build directory
defineReplace(qmlModStripSrcDir) {
diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf
index 4f5b62e1e5..88c1f3f3f2 100644
--- a/mkspecs/features/qt_build_config.prf
+++ b/mkspecs/features/qt_build_config.prf
@@ -20,10 +20,11 @@
debug(1, "Not loading qmodule.pri twice")
}
+# force_independent can be set externally. prefix_build not.
!exists($$[QT_HOST_DATA]/.qmake.cache): \
- CONFIG += prefix_build
+ CONFIG += prefix_build force_independent
-!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):prefix_build {
+!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):force_independent {
# When doing a -prefix build of top-level qt5/qt.pro, we need to announce
# this repo's module pris' location to the other repos.
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))
diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf
index 04d7a17ab9..479a16a90b 100644
--- a/mkspecs/features/qt_example_installs.prf
+++ b/mkspecs/features/qt_example_installs.prf
@@ -26,7 +26,7 @@ defineTest(addInstallFiles) {
}
probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
-!isEmpty(probase):!contains(probase, ^\\..*) {
+!isEmpty(probase):!contains(probase, ^\\..*):!isEmpty(_QMAKE_CACHE_) {
for(ex, EXAMPLE_FILES): \
sourcefiles += $$files($$absolute_path($$ex, $$_PRO_FILE_PWD_))
for(res, RESOURCES) {
diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf
index 478c255836..8cd2473224 100644
--- a/mkspecs/features/qt_functions.prf
+++ b/mkspecs/features/qt_functions.prf
@@ -236,13 +236,10 @@ defineTest(qtAddToolEnv) {
defineTest(qtAddTargetEnv) {
deps = $$replace(QT, -private$, )
- deps = $$resolve_depends(deps, "QT.")
+ deps = $$resolve_depends(deps, "QT.", ".depends" ".private_depends" ".run_depends")
!isEmpty(deps) {
- for(dep, deps) {
+ for(dep, deps): \
deppath += $$shell_path($$eval(QT.$${dep}.libs))
- for(rpath, QT.$${dep}.rpath_link): \
- deppath += $$shell_path($$rpath)
- }
equals(QMAKE_HOST.os, Windows) {
deppath.name = PATH
} else:contains(QMAKE_HOST.os, Linux|FreeBSD) {
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
index d015b213d7..1132943d97 100644
--- a/mkspecs/features/qt_module.prf
+++ b/mkspecs/features/qt_module.prf
@@ -127,7 +127,7 @@ unix|win32-g++* {
!isEmpty(_QMAKE_SUPER_CACHE_): \
rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
else: \
- rplbase = $$MODULE_QMAKE_OUTDIR
+ rplbase = $$MODULE_BASE_OUTDIR
include_replace.match = $$rplbase/include
include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
lib_replace.match = $$rplbase/lib
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index 10d3fe3c0b..40d6bb0d40 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -15,7 +15,7 @@ load(qt_build_paths)
qtPrepareTool(QMAKE_SYNCQT, syncqt)
contains(QT_CONFIG, private_tests): \ # -developer-build
QMAKE_SYNCQT += -check-includes
- QMAKE_SYNCQT += -module $$MODULE_INCNAME -mkspecsdir $$[QT_HOST_DATA/get]/mkspecs -outdir $$MODULE_BASE_OUTDIR $$MODULE_BASE_DIR
+ QMAKE_SYNCQT += -module $$MODULE_INCNAME -version $$VERSION -outdir $$MODULE_BASE_OUTDIR $$MODULE_BASE_DIR
!silent: message($$QMAKE_SYNCQT)
system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
}
diff --git a/mkspecs/features/qt_module_pris.prf b/mkspecs/features/qt_module_pris.prf
index b74e5dd73f..03863e0648 100644
--- a/mkspecs/features/qt_module_pris.prf
+++ b/mkspecs/features/qt_module_pris.prf
@@ -11,7 +11,7 @@
load(qt_build_paths)
MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri
-prefix_build: \
+force_independent: \
MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
else: \
MODULE_PRI = $$MODULE_FWD_PRI
@@ -71,11 +71,11 @@ else: \
$$module_config \
"QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
"" \
- "QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
+ "QT_MODULES += $$MODULE"
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
MODULE_PRI_FILES = $$MODULE_PRI
- prefix_build {
+ force_independent {
# Create a forwarding module .pri file
MODULE_FWD_PRI_CONT = \
@@ -113,7 +113,7 @@ else: \
includes private_includes bins libs libexecs plugins imports qml \
rpath_link rpath_link_private \
)):defined(QT.$${MODULE}.$$var, var):cache(QT.$${MODULE}.$$var, transient)
- cache(QT_CONFIG, transient)
+ cache(QT_MODULES, transient)
} # !build_pass
diff --git a/mkspecs/features/qt_parts.prf b/mkspecs/features/qt_parts.prf
index 12ba312bcd..37dc849f83 100644
--- a/mkspecs/features/qt_parts.prf
+++ b/mkspecs/features/qt_parts.prf
@@ -9,6 +9,9 @@
# We mean it.
#
+# Ensure that each module has a .qmake.cache when properly qmake'd.
+cache()
+
load(qt_build_config)
TEMPLATE = subdirs
diff --git a/mkspecs/features/qt_plugin.prf b/mkspecs/features/qt_plugin.prf
index 54a995daae..158de39753 100644
--- a/mkspecs/features/qt_plugin.prf
+++ b/mkspecs/features/qt_plugin.prf
@@ -60,7 +60,7 @@ unix|win32-g++* {
!isEmpty(_QMAKE_SUPER_CACHE_): \
rplbase = $$dirname(_QMAKE_SUPER_CACHE_)/[^/][^/]*
else: \
- rplbase = $$MODULE_QMAKE_OUTDIR
+ rplbase = $$MODULE_BASE_OUTDIR
lib_replace.match = $$rplbase/lib
lib_replace.replace = $$[QT_INSTALL_LIBS/raw]
QMAKE_PRL_INSTALL_REPLACE += lib_replace
diff --git a/mkspecs/features/qt_tool.prf b/mkspecs/features/qt_tool.prf
index b449e4074d..9d50856900 100644
--- a/mkspecs/features/qt_tool.prf
+++ b/mkspecs/features/qt_tool.prf
@@ -31,7 +31,7 @@ load(qt_targets)
# If we are doing a prefix build, create a "module" pri which enables
# qtPrepareTool() to work with the non-installed build.
-!build_pass:prefix_build {
+!build_pass:force_independent {
isEmpty(MODULE):MODULE = $$TARGET
diff --git a/qmake/generators/mac/pbuilder_pbx.cpp b/qmake/generators/mac/pbuilder_pbx.cpp
index c5b2c56f8f..c9623e6f98 100644
--- a/qmake/generators/mac/pbuilder_pbx.cpp
+++ b/qmake/generators/mac/pbuilder_pbx.cpp
@@ -136,6 +136,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
QList<ProjectBuilderSubDirs*> pb_subdirs;
pb_subdirs.append(new ProjectBuilderSubDirs(project, QString(), false));
QString oldpwd = qmake_getpwd();
+ QString oldoutpwd = Option::output_dir;
QMap<QString, ProStringList> groups;
for(int pb_subdir = 0; pb_subdir < pb_subdirs.size(); ++pb_subdir) {
ProjectBuilderSubDirs *pb = pb_subdirs[pb_subdir];
@@ -172,6 +173,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
if(!qmake_setpwd(dir))
fprintf(stderr, "Cannot find directory: %s\n", dir.toLatin1().constData());
}
+ Option::output_dir = Option::globals->shadowedPath(QDir::cleanPath(fi.absoluteFilePath()));
if(tmp_proj.read(fn)) {
if(tmp_proj.first("TEMPLATE") == "subdirs") {
QMakeProject *pp = new QMakeProject(&tmp_proj);
@@ -189,13 +191,13 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
bool in_root = true;
QString name = qmake_getpwd();
if(project->isActiveConfig("flat")) {
- QString flat_file = fileFixify(name, oldpwd, Option::output_dir, FileFixifyRelative);
+ QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative);
if(flat_file.indexOf(Option::dir_sep) != -1) {
QStringList dirs = flat_file.split(Option::dir_sep);
name = dirs.back();
}
} else {
- QString flat_file = fileFixify(name, oldpwd, Option::output_dir, FileFixifyRelative);
+ QString flat_file = fileFixify(name, oldpwd, oldoutpwd, FileFixifyRelative);
if(QDir::isRelativePath(flat_file) && flat_file.indexOf(Option::dir_sep) != -1) {
QString last_grp("QMAKE_SUBDIR_PBX_HEIR_GROUP");
QStringList dirs = flat_file.split(Option::dir_sep);
@@ -280,6 +282,7 @@ ProjectBuilderMakefileGenerator::writeSubDirs(QTextStream &t)
}
nextfile:
qmake_setpwd(oldpwd);
+ Option::output_dir = oldoutpwd;
}
}
}
diff --git a/qmake/generators/makefile.cpp b/qmake/generators/makefile.cpp
index 55c819657a..3ea67fe6a5 100644
--- a/qmake/generators/makefile.cpp
+++ b/qmake/generators/makefile.cpp
@@ -92,18 +92,8 @@ bool MakefileGenerator::canExecute(const QStringList &cmdline, int *a) const
QString MakefileGenerator::mkdir_p_asstring(const QString &dir, bool escape) const
{
- QString ret = "@" + chkdir + " ";
- if(escape)
- ret += escapeFilePath(dir);
- else
- ret += dir;
- ret += " " + chkglue + "$(MKDIR) ";
- if(escape)
- ret += escapeFilePath(dir);
- else
- ret += dir;
- ret += " ";
- return ret;
+ QString edir = escape ? escapeFilePath(dir) : dir;
+ return "@" + makedir.arg(edir);
}
bool MakefileGenerator::mkdir(const QString &in_path) const
@@ -440,13 +430,17 @@ MakefileGenerator::init()
if (v["TARGET"].isEmpty())
warn_msg(WarnLogic, "TARGET is empty");
- chkdir = v["QMAKE_CHK_DIR_EXISTS"].join(' ');
- chkfile = v["QMAKE_CHK_FILE_EXISTS"].join(' ');
- if (chkfile.isEmpty()) // Backwards compat with Qt4 specs
- chkfile = isWindowsShell() ? "if not exist" : "test -f";
- chkglue = v["QMAKE_CHK_EXISTS_GLUE"].join(' ');
- if (chkglue.isEmpty()) // Backwards compat with Qt4 specs
- chkglue = isWindowsShell() ? "" : "|| ";
+ makedir = v["QMAKE_MKDIR_CMD"].join(' ');
+ chkexists = v["QMAKE_CHK_EXISTS"].join(' ');
+ if (makedir.isEmpty()) { // Backwards compat with Qt < 5.0.2 specs
+ if (isWindowsShell()) {
+ makedir = "if not exist %1 mkdir %1 & if not exist %1 exit 1";
+ chkexists = "if not exist %1";
+ } else {
+ makedir = "test -d %1 || mkdir -p %1";
+ chkexists = "test -e %1 ||";
+ }
+ }
ProStringList &quc = v["QMAKE_EXTRA_COMPILERS"];
@@ -2398,8 +2392,8 @@ MakefileGenerator::writeSubTargetCall(QTextStream &t,
if (!in.isEmpty()) {
if (!in_directory.isEmpty())
t << "\n\t" << mkdir_p_asstring(out_directory);
- pfx = "( " + chkfile + " " + out + " " + chkglue
- + "$(QMAKE) " + in + buildArgs() + " -o " + out
+ pfx = "( " + chkexists.arg(out) +
+ + " $(QMAKE) " + in + buildArgs() + " -o " + out
+ " ) && ";
}
writeSubMakeCall(t, out_directory_cdin + pfx, makefilein);
diff --git a/qmake/generators/makefile.h b/qmake/generators/makefile.h
index 2f3e73ff6b..a0186d3d99 100644
--- a/qmake/generators/makefile.h
+++ b/qmake/generators/makefile.h
@@ -81,7 +81,7 @@ class MakefileGenerator : protected QMakeSourceFileInfo
QString spec;
bool init_opath_already, init_already, no_io;
QHash<QString, bool> init_compiler_already;
- QString chkdir, chkfile, chkglue;
+ QString makedir, chkexists;
QString build_args(const QString &outdir=QString());
//internal caches
diff --git a/qmake/generators/metamakefile.cpp b/qmake/generators/metamakefile.cpp
index e3fa39c7e4..a037a966f6 100644
--- a/qmake/generators/metamakefile.cpp
+++ b/qmake/generators/metamakefile.cpp
@@ -385,18 +385,16 @@ SubdirsMetaMakefileGenerator::write()
const QString &output_name = Option::output.fileName();
for(int i = 0; ret && i < subs.count(); i++) {
const Subdir *sub = subs.at(i);
- qmake_setpwd(subs.at(i)->input_dir);
- Option::output_dir = QFileInfo(subs.at(i)->output_dir).absoluteFilePath();
- if(Option::output_dir.at(Option::output_dir.length()-1) != QLatin1Char('/'))
- Option::output_dir += QLatin1Char('/');
- Option::output.setFileName(subs.at(i)->output_file);
+ qmake_setpwd(sub->input_dir);
+ Option::output_dir = QFileInfo(sub->output_dir).absoluteFilePath();
+ Option::output.setFileName(sub->output_file);
if(i != subs.count()-1) {
for (int ind = 0; ind < sub->indent; ++ind)
printf(" ");
printf("Writing %s\n", QDir::cleanPath(Option::output_dir+"/"+
Option::output.fileName()).toLatin1().constData());
}
- if (!(ret = subs.at(i)->makefile->write()))
+ if (!(ret = sub->makefile->write()))
break;
//restore because I'm paranoid
qmake_setpwd(pwd);
diff --git a/qmake/generators/win32/msvc_vcproj.cpp b/qmake/generators/win32/msvc_vcproj.cpp
index b082fcb307..c7dfc13a71 100644
--- a/qmake/generators/win32/msvc_vcproj.cpp
+++ b/qmake/generators/win32/msvc_vcproj.cpp
@@ -434,18 +434,21 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
projLookup.insert(profileKey, fi.absoluteFilePath());
}
QString oldpwd = qmake_getpwd();
+ QString oldoutpwd = Option::output_dir;
QMakeProject tmp_proj;
QString dir = fi.absolutePath(), fn = fi.fileName();
if (!dir.isEmpty()) {
if (!qmake_setpwd(dir))
fprintf(stderr, "Cannot find directory: %s", dir.toLatin1().constData());
}
+ Option::output_dir = Option::globals->shadowedPath(QDir::cleanPath(fi.absoluteFilePath()));
if (tmp_proj.read(fn)) {
// Check if all requirements are fulfilled
if (!tmp_proj.isEmpty("QMAKE_FAILED_REQUIREMENTS")) {
fprintf(stderr, "Project file(%s) not added to Solution because all requirements not met:\n\t%s\n",
fn.toLatin1().constData(), tmp_proj.values("QMAKE_FAILED_REQUIREMENTS").join(" ").toLatin1().constData());
qmake_setpwd(oldpwd);
+ Option::output_dir = oldoutpwd;
continue;
}
if (tmp_proj.first("TEMPLATE") == "vcsubdirs") {
@@ -460,13 +463,10 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
// and to be able to extract all the dependencies
Option::QMAKE_MODE old_mode = Option::qmake_mode;
Option::qmake_mode = Option::QMAKE_GENERATE_NOTHING;
- QString old_output_dir = Option::output_dir;
- Option::output_dir = QFileInfo(fileFixify(dir, qmake_getpwd(), Option::output_dir)).canonicalFilePath();
VcprojGenerator tmp_vcproj;
tmp_vcproj.setNoIO(true);
tmp_vcproj.setProjectFile(&tmp_proj);
Option::qmake_mode = old_mode;
- Option::output_dir = old_output_dir;
// We assume project filename is [QMAKE_PROJECT_NAME].vcproj
QString vcproj = unescapeFilePath(tmp_vcproj.project->first("QMAKE_PROJECT_NAME") + project->first("VCPROJ_EXTENSION"));
@@ -578,6 +578,7 @@ ProStringList VcprojGenerator::collectDependencies(QMakeProject *proj, QHash<QSt
}
nextfile:
qmake_setpwd(oldpwd);
+ Option::output_dir = oldoutpwd;
}
}
}
diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp
index 8b6a0f8598..25a70d2fea 100644
--- a/qmake/library/qmakeevaluator.cpp
+++ b/qmake/library/qmakeevaluator.cpp
@@ -1052,7 +1052,7 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
forever {
QString superfile = superdir + QLatin1String("/.qmake.super");
if (IoUtils::exists(superfile)) {
- m_superfile = superfile;
+ m_superfile = QDir::cleanPath(superfile);
break;
}
QFileInfo qdfi(superdir);
@@ -1089,8 +1089,8 @@ bool QMakeEvaluator::prepareProject(const QString &inDir)
} else {
m_buildRoot = QFileInfo(cachefile).path();
}
- m_conffile = conffile;
- m_cachefile = cachefile;
+ m_conffile = QDir::cleanPath(conffile);
+ m_cachefile = QDir::cleanPath(cachefile);
}
no_cache:
diff --git a/qmake/main.cpp b/qmake/main.cpp
index e339239289..7ea076be17 100644
--- a/qmake/main.cpp
+++ b/qmake/main.cpp
@@ -97,15 +97,8 @@ int runQMake(int argc, char **argv)
}
QString oldpwd = qmake_getpwd();
-#ifdef Q_OS_WIN
- if(!(oldpwd.length() == 3 && oldpwd[0].isLetter() && oldpwd.endsWith(":/")))
-#endif
- {
- if(!oldpwd.endsWith(QLatin1Char('/')))
- oldpwd += QLatin1Char('/');
- }
- Option::output_dir = oldpwd; //for now this is the output dir
+ Option::output_dir = oldpwd; //for now this is the output dir
if(Option::output.fileName() != "-") {
QFileInfo fi(Option::output);
QString dir;
@@ -119,7 +112,7 @@ int runQMake(int argc, char **argv)
if(!dir.isNull() && dir != ".")
Option::output_dir = dir;
if(QDir::isRelativePath(Option::output_dir))
- Option::output_dir.prepend(oldpwd);
+ Option::output_dir.prepend(oldpwd + QLatin1Char('/'));
Option::output_dir = QDir::cleanPath(Option::output_dir);
}
diff --git a/src/angle/angle.pro b/src/angle/angle.pro
index 00e0501d60..b4dbf8cf21 100644
--- a/src/angle/angle.pro
+++ b/src/angle/angle.pro
@@ -13,7 +13,7 @@ SUBDIRS += src
else: \
mod_component_base = $$dirname(_QMAKE_CACHE_)
QMAKE_SYNCQT += -minimal -module KHR -module EGL -module GLES2 \
- -mkspecsdir $$[QT_HOST_DATA/get]/mkspecs -outdir $$mod_component_base $$dirname(_QMAKE_CONF_)
+ -version none -outdir $$mod_component_base $$dirname(_QMAKE_CONF_)
!silent:message($$QMAKE_SYNCQT)
system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
}
diff --git a/src/corelib/doc/src/objectmodel/properties.qdoc b/src/corelib/doc/src/objectmodel/properties.qdoc
index 66325ca6c0..39f5e80eaa 100644
--- a/src/corelib/doc/src/objectmodel/properties.qdoc
+++ b/src/corelib/doc/src/objectmodel/properties.qdoc
@@ -178,7 +178,7 @@
Suppose we have a class MyClass, which is derived from QObject and
which uses the Q_OBJECT macro in its private section. We want to
- declare a property in MyClass to keep track of a priorty
+ declare a property in MyClass to keep track of a priority
value. The name of the property will be \e priority, and its type
will be an enumeration type named \e Priority, which is defined in
MyClass.
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 747fd87207..5fb9640b19 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -273,7 +273,11 @@ static const struct {
{ "Documentation", "doc" }, // should be ${Data}/doc
{ "Headers", "include" },
{ "Libraries", "lib" },
+#ifdef Q_OS_WIN
+ { "LibraryExecutables", "bin" },
+#else
{ "LibraryExecutables", "libexec" }, // should be ${ArchData}/libexec
+#endif
{ "Binaries", "bin" },
{ "Plugins", "plugins" }, // should be ${ArchData}/plugins
{ "Imports", "imports" }, // should be ${ArchData}/imports
diff --git a/src/corelib/kernel/qtcore_eval.cpp b/src/corelib/kernel/qtcore_eval.cpp
index ab575371c8..e9ff786074 100644
--- a/src/corelib/kernel/qtcore_eval.cpp
+++ b/src/corelib/kernel/qtcore_eval.cpp
@@ -496,6 +496,7 @@ public:
setParent(parentWidget(), Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
QTimer::singleShot(7000, this, SLOT(close()));
setAttribute(Qt::WA_DeleteOnClose);
+ setAttribute(Qt::WA_QuitOnClose, false);
}
setFixedSize(sizeHint());
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index d70d8d9a68..ad7ce708ad 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -1938,9 +1938,10 @@ inline T qVariantToHelper(const QVariant::Private &d, const HandlersManager &han
/*!
\fn QStringList QVariant::toStringList() const
- Returns the variant as a QStringList if the variant has type()
- StringList, \l String, or \l List of a type that can be converted
- to QString; otherwise returns an empty list.
+ Returns the variant as a QStringList if the variant has userType()
+ \l QMetaType::QStringList, \l QMetaType::QString, or
+ \l QMetaType::QVariantList of a type that can be converted to QString;
+ otherwise returns an empty list.
\sa canConvert(), convert()
*/
@@ -1950,10 +1951,12 @@ QStringList QVariant::toStringList() const
}
/*!
- Returns the variant as a QString if the variant has type() \l
- String, \l Bool, \l ByteArray, \l Char, \l Date, \l DateTime, \l
- Double, \l Int, \l LongLong, \l StringList, \l Time, \l UInt, or
- \l ULongLong; otherwise returns an empty string.
+ Returns the variant as a QString if the variant has userType() \l
+ QMetaType::QString, \l QMetaType::Bool, \l QMetaType::QByteArray,
+ \l QMetaType::QChar, \l QMetaType::QDate, \l QMetaType::QDateTime,
+ \l QMetaType::Double, \l QMetaType::Int, \l QMetaType::LongLong,
+ \l QMetaType::QStringList, \l QMetaType::QTime, \l QMetaType::UInt, or
+ \l QMetaType::ULongLong; otherwise returns an empty string.
\sa canConvert(), convert()
*/
@@ -1964,7 +1967,7 @@ QString QVariant::toString() const
/*!
Returns the variant as a QMap<QString, QVariant> if the variant
- has type() \l Map; otherwise returns an empty map.
+ has type() \l QMetaType::QVariantMap; otherwise returns an empty map.
\sa canConvert(), convert()
*/
@@ -1975,7 +1978,7 @@ QVariantMap QVariant::toMap() const
/*!
Returns the variant as a QHash<QString, QVariant> if the variant
- has type() \l Hash; otherwise returns an empty map.
+ has type() \l QMetaType::QVariantHash; otherwise returns an empty map.
\sa canConvert(), convert()
*/
@@ -1987,11 +1990,12 @@ QVariantHash QVariant::toHash() const
/*!
\fn QDate QVariant::toDate() const
- Returns the variant as a QDate if the variant has type() \l Date,
- \l DateTime, or \l String; otherwise returns an invalid date.
+ Returns the variant as a QDate if the variant has userType()
+ \l QMetaType::QDate, \l QMetaType::QDateTime, or \l QMetaType::QString;
+ otherwise returns an invalid date.
- If the type() is \l String, an invalid date will be returned if the
- string cannot be parsed as a Qt::ISODate format date.
+ If the type() is \l QMetaType::QString, an invalid date will be returned if
+ the string cannot be parsed as a Qt::ISODate format date.
\sa canConvert(), convert()
*/
@@ -2003,10 +2007,11 @@ QDate QVariant::toDate() const
/*!
\fn QTime QVariant::toTime() const
- Returns the variant as a QTime if the variant has type() \l Time,
- \l DateTime, or \l String; otherwise returns an invalid time.
+ Returns the variant as a QTime if the variant has userType()
+ \l QMetaType::QTime, \l QMetaType::QDateTime, or \l QMetaType::QString;
+ otherwise returns an invalid time.
- If the type() is \l String, an invalid time will be returned if
+ If the type() is \l QMetaType::QString, an invalid time will be returned if
the string cannot be parsed as a Qt::ISODate format time.
\sa canConvert(), convert()
@@ -2019,12 +2024,12 @@ QTime QVariant::toTime() const
/*!
\fn QDateTime QVariant::toDateTime() const
- Returns the variant as a QDateTime if the variant has type() \l
- DateTime, \l Date, or \l String; otherwise returns an invalid
- date/time.
+ Returns the variant as a QDateTime if the variant has userType()
+ \l QMetaType::QDateTime, \l QMetaType::QDate, or \l QMetaType::QString;
+ otherwise returns an invalid date/time.
- If the type() is \l String, an invalid date/time will be returned
- if the string cannot be parsed as a Qt::ISODate format date/time.
+ If the type() is \l QMetaType::QString, an invalid date/time will be
+ returned if the string cannot be parsed as a Qt::ISODate format date/time.
\sa canConvert(), convert()
*/
@@ -2037,8 +2042,8 @@ QDateTime QVariant::toDateTime() const
\since 4.7
\fn QEasingCurve QVariant::toEasingCurve() const
- Returns the variant as a QEasingCurve if the variant has type() \l
- EasingCurve; otherwise returns a default easing curve.
+ Returns the variant as a QEasingCurve if the variant has userType()
+ \l QMetaType::QEasingCurve; otherwise returns a default easing curve.
\sa canConvert(), convert()
*/
@@ -2052,9 +2057,9 @@ QEasingCurve QVariant::toEasingCurve() const
/*!
\fn QByteArray QVariant::toByteArray() const
- Returns the variant as a QByteArray if the variant has type() \l
- ByteArray or \l String (converted using QString::fromUtf8());
- otherwise returns an empty byte array.
+ Returns the variant as a QByteArray if the variant has userType()
+ \l QMetaType::QByteArray or \l QMetaType::QString (converted using
+ QString::fromUtf8()); otherwise returns an empty byte array.
\sa canConvert(), convert()
*/
@@ -2067,8 +2072,9 @@ QByteArray QVariant::toByteArray() const
/*!
\fn QPoint QVariant::toPoint() const
- Returns the variant as a QPoint if the variant has type()
- \l Point or \l PointF; otherwise returns a null QPoint.
+ Returns the variant as a QPoint if the variant has userType()
+ \l QMetaType::QPointF or \l QMetaType::QPointF; otherwise returns a null
+ QPoint.
\sa canConvert(), convert()
*/
@@ -2080,8 +2086,8 @@ QPoint QVariant::toPoint() const
/*!
\fn QRect QVariant::toRect() const
- Returns the variant as a QRect if the variant has type() \l Rect;
- otherwise returns an invalid QRect.
+ Returns the variant as a QRect if the variant has userType()
+ \l QMetaType::QRect; otherwise returns an invalid QRect.
\sa canConvert(), convert()
*/
@@ -2093,8 +2099,8 @@ QRect QVariant::toRect() const
/*!
\fn QSize QVariant::toSize() const
- Returns the variant as a QSize if the variant has type() \l Size;
- otherwise returns an invalid QSize.
+ Returns the variant as a QSize if the variant has userType()
+ \l QMetaType::QSize; otherwise returns an invalid QSize.
\sa canConvert(), convert()
*/
@@ -2106,8 +2112,8 @@ QSize QVariant::toSize() const
/*!
\fn QSizeF QVariant::toSizeF() const
- Returns the variant as a QSizeF if the variant has type() \l
- SizeF; otherwise returns an invalid QSizeF.
+ Returns the variant as a QSizeF if the variant has userType() \l
+ QMetaType::QSizeF; otherwise returns an invalid QSizeF.
\sa canConvert(), convert()
*/
@@ -2119,8 +2125,9 @@ QSizeF QVariant::toSizeF() const
/*!
\fn QRectF QVariant::toRectF() const
- Returns the variant as a QRectF if the variant has type() \l Rect
- or \l RectF; otherwise returns an invalid QRectF.
+ Returns the variant as a QRectF if the variant has userType()
+ \l QMetaType::QRect or \l QMetaType::QRectF; otherwise returns an invalid
+ QRectF.
\sa canConvert(), convert()
*/
@@ -2132,8 +2139,8 @@ QRectF QVariant::toRectF() const
/*!
\fn QLineF QVariant::toLineF() const
- Returns the variant as a QLineF if the variant has type() \l
- LineF; otherwise returns an invalid QLineF.
+ Returns the variant as a QLineF if the variant has userType()
+ \l QMetaType::QLineF; otherwise returns an invalid QLineF.
\sa canConvert(), convert()
*/
@@ -2145,8 +2152,8 @@ QLineF QVariant::toLineF() const
/*!
\fn QLine QVariant::toLine() const
- Returns the variant as a QLine if the variant has type() \l Line;
- otherwise returns an invalid QLine.
+ Returns the variant as a QLine if the variant has userType()
+ \l QMetaType::QLine; otherwise returns an invalid QLine.
\sa canConvert(), convert()
*/
@@ -2158,8 +2165,9 @@ QLine QVariant::toLine() const
/*!
\fn QPointF QVariant::toPointF() const
- Returns the variant as a QPointF if the variant has type() \l
- Point or \l PointF; otherwise returns a null QPointF.
+ Returns the variant as a QPointF if the variant has userType() \l
+ QMetaType::QPoint or \l QMetaType::QPointF; otherwise returns a null
+ QPointF.
\sa canConvert(), convert()
*/
@@ -2174,8 +2182,8 @@ QPointF QVariant::toPointF() const
/*!
\fn QUrl QVariant::toUrl() const
- Returns the variant as a QUrl if the variant has type()
- \l Url; otherwise returns an invalid QUrl.
+ Returns the variant as a QUrl if the variant has userType()
+ \l QMetaType::QUrl; otherwise returns an invalid QUrl.
\sa canConvert(), convert()
*/
@@ -2188,8 +2196,8 @@ QUrl QVariant::toUrl() const
/*!
\fn QLocale QVariant::toLocale() const
- Returns the variant as a QLocale if the variant has type()
- \l Locale; otherwise returns an invalid QLocale.
+ Returns the variant as a QLocale if the variant has userType()
+ \l QMetaType::QLocale; otherwise returns an invalid QLocale.
\sa canConvert(), convert()
*/
@@ -2202,8 +2210,8 @@ QLocale QVariant::toLocale() const
\fn QRegExp QVariant::toRegExp() const
\since 4.1
- Returns the variant as a QRegExp if the variant has type() \l
- RegExp; otherwise returns an empty QRegExp.
+ Returns the variant as a QRegExp if the variant has userType()
+ \l QMetaType::QRegExp; otherwise returns an empty QRegExp.
\sa canConvert(), convert()
*/
@@ -2218,7 +2226,7 @@ QRegExp QVariant::toRegExp() const
\fn QRegularExpression QVariant::toRegularExpression() const
\since 5.0
- Returns the variant as a QRegularExpression if the variant has type() \l
+ Returns the variant as a QRegularExpression if the variant has userType() \l
QRegularExpression; otherwise returns an empty QRegularExpression.
\sa canConvert(), convert()
@@ -2234,7 +2242,7 @@ QRegularExpression QVariant::toRegularExpression() const
/*!
\since 5.0
- Returns the variant as a QUuid if the variant has type() \l
+ Returns the variant as a QUuid if the variant has userType() \l
QUuid; otherwise returns a default constructed QUuid.
\sa canConvert(), convert()
@@ -2247,7 +2255,7 @@ QUuid QVariant::toUuid() const
/*!
\since 5.0
- Returns the variant as a QModelIndex if the variant has type() \l
+ Returns the variant as a QModelIndex if the variant has userType() \l
QModelIndex; otherwise returns a default constructed QModelIndex.
\sa canConvert(), convert()
@@ -2260,7 +2268,7 @@ QModelIndex QVariant::toModelIndex() const
/*!
\since 5.0
- Returns the variant as a QJsonValue if the variant has type() \l
+ Returns the variant as a QJsonValue if the variant has userType() \l
QJsonValue; otherwise returns a default constructed QJsonValue.
\sa canConvert(), convert()
@@ -2273,7 +2281,7 @@ QJsonValue QVariant::toJsonValue() const
/*!
\since 5.0
- Returns the variant as a QJsonObject if the variant has type() \l
+ Returns the variant as a QJsonObject if the variant has userType() \l
QJsonObject; otherwise returns a default constructed QJsonObject.
\sa canConvert(), convert()
@@ -2286,7 +2294,7 @@ QJsonObject QVariant::toJsonObject() const
/*!
\since 5.0
- Returns the variant as a QJsonArray if the variant has type() \l
+ Returns the variant as a QJsonArray if the variant has userType() \l
QJsonArray; otherwise returns a default constructed QJsonArray.
\sa canConvert(), convert()
@@ -2299,7 +2307,7 @@ QJsonArray QVariant::toJsonArray() const
/*!
\since 5.0
- Returns the variant as a QJsonDocument if the variant has type() \l
+ Returns the variant as a QJsonDocument if the variant has userType() \l
QJsonDocument; otherwise returns a default constructed QJsonDocument.
\sa canConvert(), convert()
@@ -2313,8 +2321,9 @@ QJsonDocument QVariant::toJsonDocument() const
/*!
\fn QChar QVariant::toChar() const
- Returns the variant as a QChar if the variant has type() \l Char,
- \l Int, or \l UInt; otherwise returns an invalid QChar.
+ Returns the variant as a QChar if the variant has userType()
+ \l QMetaType::QChar, \l QMetaType::Int, or \l QMetaType::UInt; otherwise
+ returns an invalid QChar.
\sa canConvert(), convert()
*/
@@ -2324,8 +2333,8 @@ QChar QVariant::toChar() const
}
/*!
- Returns the variant as a QBitArray if the variant has type()
- \l BitArray; otherwise returns an empty bit array.
+ Returns the variant as a QBitArray if the variant has userType()
+ \l QMetaType::QBitArray; otherwise returns an empty bit array.
\sa canConvert(), convert()
*/
@@ -2351,16 +2360,19 @@ inline T qNumVariantToHelper(const QVariant::Private &d,
}
/*!
- Returns the variant as an int if the variant has type() \l Int,
- \l Bool, \l ByteArray, \l Char, \l Double, \l LongLong, \l
- String, \l UInt, or \l ULongLong; otherwise returns 0.
+ Returns the variant as an int if the variant has userType()
+ \l QMetaType::Int, \l QMetaType::Bool, \l QMetaType::QByteArray,
+ \l QMetaType::QChar, \l QMetaType::Double, \l QMetaType::LongLong,
+ \l QMetaType::QString, \l QMetaType::UInt, or \l QMetaType::ULongLong;
+ otherwise returns 0.
If \a ok is non-null: \c{*}\a{ok} is set to true if the value could be
converted to an int; otherwise \c{*}\a{ok} is set to false.
- \b{Warning:} If the value is convertible to a \l LongLong but is too
- large to be represented in an int, the resulting arithmetic overflow will
- not be reflected in \a ok. A simple workaround is to use QString::toInt().
+ \b{Warning:} If the value is convertible to a \l QMetaType::LongLong but is
+ too large to be represented in an int, the resulting arithmetic overflow
+ will not be reflected in \a ok. A simple workaround is to use
+ QString::toInt().
\sa canConvert(), convert()
*/
@@ -2370,16 +2382,19 @@ int QVariant::toInt(bool *ok) const
}
/*!
- Returns the variant as an unsigned int if the variant has type()
- \l UInt, \l Bool, \l ByteArray, \l Char, \l Double, \l Int, \l
- LongLong, \l String, or \l ULongLong; otherwise returns 0.
+ Returns the variant as an unsigned int if the variant has userType()
+ \l QMetaType::UInt, \l QMetaType::Bool, \l QMetaType::QByteArray,
+ \l QMetaType::QChar, \l QMetaType::Double, \l QMetaType::Int,
+ \l QMetaType::LongLong, \l QMetaType::QString, or \l QMetaType::ULongLong;
+ otherwise returns 0.
If \a ok is non-null: \c{*}\a{ok} is set to true if the value could be
converted to an unsigned int; otherwise \c{*}\a{ok} is set to false.
- \b{Warning:} If the value is convertible to a \l ULongLong but is too
- large to be represented in an unsigned int, the resulting arithmetic overflow will
- not be reflected in \a ok. A simple workaround is to use QString::toUInt().
+ \b{Warning:} If the value is convertible to a \l QMetaType::ULongLong but is
+ too large to be represented in an unsigned int, the resulting arithmetic
+ overflow will not be reflected in \a ok. A simple workaround is to use
+ QString::toUInt().
\sa canConvert(), convert()
*/
@@ -2389,9 +2404,11 @@ uint QVariant::toUInt(bool *ok) const
}
/*!
- Returns the variant as a long long int if the variant has type()
- \l LongLong, \l Bool, \l ByteArray, \l Char, \l Double, \l Int,
- \l String, \l UInt, or \l ULongLong; otherwise returns 0.
+ Returns the variant as a long long int if the variant has userType()
+ \l QMetaType::LongLong, \l QMetaType::Bool, \l QMetaType::QByteArray,
+ \l QMetaType::QChar, \l QMetaType::Double, \l QMetaType::Int,
+ \l QMetaType::QString, \l QMetaType::UInt, or \l QMetaType::ULongLong;
+ otherwise returns 0.
If \a ok is non-null: \c{*}\c{ok} is set to true if the value could be
converted to an int; otherwise \c{*}\c{ok} is set to false.
@@ -2405,9 +2422,10 @@ qlonglong QVariant::toLongLong(bool *ok) const
/*!
Returns the variant as as an unsigned long long int if the
- variant has type() \l ULongLong, \l Bool, \l ByteArray, \l Char,
- \l Double, \l Int, \l LongLong, \l String, or \l UInt; otherwise
- returns 0.
+ variant has type() \l QMetaType::ULongLong, \l QMetaType::Bool,
+ \l QMetaType::QByteArray, \l QMetaType::QChar, \l QMetaType::Double,
+ \l QMetaType::Int, \l QMetaType::LongLong, \l QMetaType::QString, or
+ \l QMetaType::UInt; otherwise returns 0.
If \a ok is non-null: \c{*}\a{ok} is set to true if the value could be
converted to an int; otherwise \c{*}\a{ok} is set to false.
@@ -2420,13 +2438,14 @@ qulonglong QVariant::toULongLong(bool *ok) const
}
/*!
- Returns the variant as a bool if the variant has type() Bool.
+ Returns the variant as a bool if the variant has userType() Bool.
- Returns true if the variant has type() \l Bool, \l Char, \l Double,
- \l Int, \l LongLong, \l UInt, or \l ULongLong and the value is
- non-zero, or if the variant has type \l String or \l ByteArray and
- its lower-case content is not one of the following: empty, "0"
- or "false"; otherwise returns false.
+ Returns true if the variant has userType() \l QMetaType::Bool,
+ \l QMetaType::QChar, \l QMetaType::Double, \l QMetaType::Int,
+ \l QMetaType::LongLong, \l QMetaType::UInt, or \l QMetaType::ULongLong and
+ the value is non-zero, or if the variant has type \l QMetaType::QString or
+ \l QMetaType::QByteArray and its lower-case content is not one of the
+ following: empty, "0" or "false"; otherwise returns false.
\sa canConvert(), convert()
*/
@@ -2442,9 +2461,11 @@ bool QVariant::toBool() const
}
/*!
- Returns the variant as a double if the variant has type() \l
- Double, \l QMetaType::Float, \l Bool, \l ByteArray, \l Int, \l LongLong, \l String, \l
- UInt, or \l ULongLong; otherwise returns 0.0.
+ Returns the variant as a double if the variant has userType()
+ \l QMetaType::Double, \l QMetaType::Float, \l QMetaType::Bool,
+ \l QMetaType::QByteArray, \l QMetaType::Int, \l QMetaType::LongLong,
+ \l QMetaType::QString, \l QMetaType::UInt, or \l QMetaType::ULongLong;
+ otherwise returns 0.0.
If \a ok is non-null: \c{*}\a{ok} is set to true if the value could be
converted to a double; otherwise \c{*}\a{ok} is set to false.
@@ -2457,9 +2478,11 @@ double QVariant::toDouble(bool *ok) const
}
/*!
- Returns the variant as a float if the variant has type() \l
- Double, \l QMetaType::Float, \l Bool, \l ByteArray, \l Int, \l LongLong, \l String, \l
- UInt, or \l ULongLong; otherwise returns 0.0.
+ Returns the variant as a float if the variant has userType()
+ \l QMetaType::Double, \l QMetaType::Float, \l QMetaType::Bool,
+ \l QMetaType::QByteArray, \l QMetaType::Int, \l QMetaType::LongLong,
+ \l QMetaType::QString, \l QMetaType::UInt, or \l QMetaType::ULongLong;
+ otherwise returns 0.0.
\since 4.6
@@ -2474,9 +2497,11 @@ float QVariant::toFloat(bool *ok) const
}
/*!
- Returns the variant as a qreal if the variant has type() \l
- Double, \l QMetaType::Float, \l Bool, \l ByteArray, \l Int, \l LongLong, \l String, \l
- UInt, or \l ULongLong; otherwise returns 0.0.
+ Returns the variant as a qreal if the variant has userType()
+ \l QMetaType::Double, \l QMetaType::Float, \l QMetaType::Bool,
+ \l QMetaType::QByteArray, \l QMetaType::Int, \l QMetaType::LongLong,
+ \l QMetaType::QString, \l QMetaType::UInt, or \l QMetaType::ULongLong;
+ otherwise returns 0.0.
\since 4.6
@@ -2491,8 +2516,9 @@ qreal QVariant::toReal(bool *ok) const
}
/*!
- Returns the variant as a QVariantList if the variant has type()
- \l List or \l StringList; otherwise returns an empty list.
+ Returns the variant as a QVariantList if the variant has userType()
+ \l QMetaType::QVariantList or \l QMetaType::QStringList; otherwise returns
+ an empty list.
\sa canConvert(), convert()
*/
@@ -2631,27 +2657,51 @@ static bool canConvertMetaObject(int fromId, int toId, QObject *fromObject)
\table
\header \li Type \li Automatically Cast To
- \row \li \l Bool \li \l Char, \l Double, \l Int, \l LongLong, \l String, \l UInt, \l ULongLong
- \row \li \l ByteArray \li \l Double, \l Int, \l LongLong, \l String, \l UInt, \l ULongLong
- \row \li \l Char \li \l Bool, \l Int, \l UInt, \l LongLong, \l ULongLong
- \row \li \l Color \li \l String
- \row \li \l Date \li \l DateTime, \l String
- \row \li \l DateTime \li \l Date, \l String, \l Time
- \row \li \l Double \li \l Bool, \l Int, \l LongLong, \l String, \l UInt, \l ULongLong
- \row \li \l Font \li \l String
- \row \li \l Int \li \l Bool, \l Char, \l Double, \l LongLong, \l String, \l UInt, \l ULongLong
- \row \li \l KeySequence \li \l Int, \l String
- \row \li \l List \li \l StringList (if the list's items can be converted to strings)
- \row \li \l LongLong \li \l Bool, \l ByteArray, \l Char, \l Double, \l Int, \l String, \l UInt, \l ULongLong
- \row \li \l Point \li PointF
- \row \li \l Rect \li RectF
- \row \li \l String \li \l Bool, \l ByteArray, \l Char, \l Color, \l Date, \l DateTime, \l Double,
- \l Font, \l Int, \l KeySequence, \l LongLong, \l StringList, \l Time, \l UInt,
- \l ULongLong
- \row \li \l StringList \li \l List, \l String (if the list contains exactly one item)
- \row \li \l Time \li \l String
- \row \li \l UInt \li \l Bool, \l Char, \l Double, \l Int, \l LongLong, \l String, \l ULongLong
- \row \li \l ULongLong \li \l Bool, \l Char, \l Double, \l Int, \l LongLong, \l String, \l UInt
+ \row \li \l QMetaType::Bool \li \l QMetaType::QChar, \l QMetaType::Double,
+ \l QMetaType::Int, \l QMetaType::LongLong, \l QMetaType::QString,
+ \l QMetaType::UInt, \l QMetaType::ULongLong
+ \row \li \l QMetaType::QByteArray \li \l QMetaType::Double,
+ \l QMetaType::Int, \l QMetaType::LongLong, \l QMetaType::QString,
+ \l QMetaType::UInt, \l QMetaType::ULongLong
+ \row \li \l QMetaType::QChar \li \l QMetaType::Bool, \l QMetaType::Int,
+ \l QMetaType::UInt, \l QMetaType::LongLong, \l QMetaType::ULongLong
+ \row \li \l QMetaType::QColor \li \l QMetaType::QString
+ \row \li \l QMetaType::QDate \li \l QMetaType::QDateTime,
+ \l QMetaType::QString
+ \row \li \l QMetaType::QDateTime \li \l QMetaType::QDate,
+ \l QMetaType::QString, \l QMetaType::QTime
+ \row \li \l QMetaType::Double \li \l QMetaType::Bool, \l QMetaType::Int,
+ \l QMetaType::LongLong, \l QMetaType::QString, \l QMetaType::UInt,
+ \l QMetaType::ULongLong
+ \row \li \l QMetaType::QFont \li \l QMetaType::QString
+ \row \li \l QMetaType::Int \li \l QMetaType::Bool, \l QMetaType::QChar,
+ \l QMetaType::Double, \l QMetaType::LongLong, \l QMetaType::QString,
+ \l QMetaType::UInt, \l QMetaType::ULongLong
+ \row \li \l QMetaType::QKeySequence \li \l QMetaType::Int,
+ \l QMetaType::QString
+ \row \li \l QMetaType::QVariantList \li \l QMetaType::QStringList (if the
+ list's items can be converted to QStrings)
+ \row \li \l QMetaType::LongLong \li \l QMetaType::Bool,
+ \l QMetaType::QByteArray, \l QMetaType::QChar, \l QMetaType::Double,
+ \l QMetaType::Int, \l QMetaType::QString, \l QMetaType::UInt,
+ \l QMetaType::ULongLong
+ \row \li \l QMetaType::QPoint \li QMetaType::QPointF
+ \row \li \l QMetaType::QRect \li QMetaType::QRectF
+ \row \li \l QMetaType::QString \li \l QMetaType::Bool,
+ \l QMetaType::QByteArray, \l QMetaType::QChar, \l QMetaType::QColor,
+ \l QMetaType::QDate, \l QMetaType::QDateTime, \l QMetaType::Double,
+ \l QMetaType::QFont, \l QMetaType::Int, \l QMetaType::QKeySequence,
+ \l QMetaType::LongLong, \l QMetaType::QStringList, \l QMetaType::QTime,
+ \l QMetaType::UInt, \l QMetaType::ULongLong
+ \row \li \l QMetaType::QStringList \li \l QMetaType::QVariantList,
+ \l QMetaType::QString (if the list contains exactly one item)
+ \row \li \l QMetaType::QTime \li \l QMetaType::QString
+ \row \li \l QMetaType::UInt \li \l QMetaType::Bool, \l QMetaType::QChar,
+ \l QMetaType::Double, \l QMetaType::Int, \l QMetaType::LongLong,
+ \l QMetaType::QString, \l QMetaType::ULongLong
+ \row \li \l QMetaType::ULongLong \li \l QMetaType::Bool,
+ \l QMetaType::QChar, \l QMetaType::Double, \l QMetaType::Int,
+ \l QMetaType::LongLong, \l QMetaType::QString, \l QMetaType::UInt
\endtable
A QVariant containing a pointer to a type derived from QObject will also return true for this
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index 88f22daad5..413dfb8d88 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -265,8 +265,7 @@ static QString fmtDateTime(const QString& f, const QTime* dt = 0, const QDate* d
If the specified date is invalid, the date is not set and
isValid() returns false.
- \warning Years 0 to 99 are interpreted as is, i.e., years
- 0-99.
+ \warning Years 1 to 99 are interpreted as is. Year 0 is invalid.
\sa isValid()
*/
@@ -1488,10 +1487,7 @@ int QTime::msec() const
If \a format is Qt::ISODate, the string format corresponds to the
ISO 8601 extended specification for representations of dates,
- which is also HH:MM:SS. (However, contrary to ISO 8601, dates
- before 15 October 1582 are handled as Julian dates, not Gregorian
- dates. See \l{QDate G and J} {Use of Gregorian and Julian
- Calendars}. This might change in a future version of Qt.)
+ which is also HH:MM:SS.
If the \a format is Qt::SystemLocaleShortDate or
Qt::SystemLocaleLongDate, the string format depends on the locale
@@ -1560,9 +1556,9 @@ QString QTime::toString(Qt::DateFormat format) const
\row \li z \li the milliseconds without leading zeroes (0 to 999)
\row \li zzz \li the milliseconds with leading zeroes (000 to 999)
\row \li AP or A
- \li use AM/PM display. \e AP will be replaced by either "AM" or "PM".
+ \li use AM/PM display. \e A/AP will be replaced by either "AM" or "PM".
\row \li ap or a
- \li use am/pm display. \e ap will be replaced by either "am" or "pm".
+ \li use am/pm display. \e a/ap will be replaced by either "am" or "pm".
\row \li t \li the timezone (for example "CEST")
\endtable
@@ -3759,8 +3755,7 @@ static bool hasUnquotedAP(const QString &f)
for (int i=0; i<max; ++i) {
if (f.at(i) == quote) {
inquote = !inquote;
- } else if (!inquote && f.at(i).toUpper() == QLatin1Char('A')
- && i + 1 < max && f.at(i + 1).toUpper() == QLatin1Char('P')) {
+ } else if (!inquote && f.at(i).toUpper() == QLatin1Char('A')) {
return true;
}
}
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 589a9c710a..7d39025e8c 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -2948,7 +2948,7 @@ QString& QString::replace(const QRegExp &rx, const QString &after)
QString &QString::replace(const QRegularExpression &re, const QString &after)
{
if (!re.isValid()) {
- qWarning("QString::replace: invalid QRegularExpresssion object");
+ qWarning("QString::replace: invalid QRegularExpression object");
return *this;
}
@@ -3273,7 +3273,7 @@ int QString::count(const QRegExp& rx) const
int QString::indexOf(const QRegularExpression& re, int from) const
{
if (!re.isValid()) {
- qWarning("QString::indexOf: invalid QRegularExpresssion object");
+ qWarning("QString::indexOf: invalid QRegularExpression object");
return -1;
}
@@ -3299,7 +3299,7 @@ int QString::indexOf(const QRegularExpression& re, int from) const
int QString::lastIndexOf(const QRegularExpression &re, int from) const
{
if (!re.isValid()) {
- qWarning("QString::lastIndexOf: invalid QRegularExpresssion object");
+ qWarning("QString::lastIndexOf: invalid QRegularExpression object");
return -1;
}
@@ -3328,7 +3328,7 @@ int QString::lastIndexOf(const QRegularExpression &re, int from) const
bool QString::contains(const QRegularExpression &re) const
{
if (!re.isValid()) {
- qWarning("QString::contains: invalid QRegularExpresssion object");
+ qWarning("QString::contains: invalid QRegularExpression object");
return false;
}
QRegularExpressionMatch match = re.match(*this);
@@ -3350,7 +3350,7 @@ bool QString::contains(const QRegularExpression &re) const
int QString::count(const QRegularExpression &re) const
{
if (!re.isValid()) {
- qWarning("QString::count: invalid QRegularExpresssion object");
+ qWarning("QString::count: invalid QRegularExpression object");
return 0;
}
int count = 0;
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index 564aff9ab9..72a873235a 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -122,8 +122,19 @@ contains(QT_CONFIG, zlib) {
contains(QT_CONFIG,icu) {
SOURCES += tools/qlocale_icu.cpp
DEFINES += QT_USE_ICU
- win32:LIBS_PRIVATE += -licuin -licuuc
- else:LIBS_PRIVATE += -licui18n -licuuc
+ win32 {
+ CONFIG(static, static|shared) {
+ CONFIG(debug, debug|release) {
+ LIBS_PRIVATE += -lsicuind -lsicuucd -lsicudtd
+ } else {
+ LIBS_PRIVATE += -lsicuin -lsicuuc -lsicudt
+ }
+ } else {
+ LIBS_PRIVATE += -licuin -licuuc
+ }
+ } else {
+ LIBS_PRIVATE += -licui18n -licuuc
+ }
}
pcre {
diff --git a/src/gui/painting/qcosmeticstroker.cpp b/src/gui/painting/qcosmeticstroker.cpp
index 7f53bec52f..0f3cde3efd 100644
--- a/src/gui/painting/qcosmeticstroker.cpp
+++ b/src/gui/painting/qcosmeticstroker.cpp
@@ -290,14 +290,14 @@ void QCosmeticStroker::setup()
ppl = buffer->bytesPerLine()>>2;
}
- // dashes are sensitive to clips, so we need to clip consistently when painting to the same device
- QRect clipRect = strokeSelection & Dashed ? deviceRect : clip;
+ // line drawing produces different results with different clips, so
+ // we need to clip consistently when painting to the same device
// setup FP clip bounds
- xmin = clipRect.left() - 1;
- xmax = clipRect.right() + 2;
- ymin = clipRect.top() - 1;
- ymax = clipRect.bottom() + 2;
+ xmin = deviceRect.left() - 1;
+ xmax = deviceRect.right() + 2;
+ ymin = deviceRect.top() - 1;
+ ymax = deviceRect.bottom() + 2;
lastPixel.x = -1;
}
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 0f77ae6d86..61a6f2a5f9 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -40,12 +40,17 @@
****************************************************************************/
#if defined(__OPTIMIZE__) && !defined(__INTEL_COMPILER) && defined(__GNUC__) \
- && (__GNUC__ * 100 + __GNUC_MINOR__ >= 404)
+ && (__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__ >= 440)
// GCC 4.4 supports #pragma GCC optimize and #pragma GCC target
-# pragma GCC optimize "O3"
-# if defined(__i386__) && defined(__SSE2__) && !defined(__SSE2_MATH__)
-# pragma GCC target "fpmath=sse"
-# endif
+
+# if (__GNUC__ * 100 + __GNUC_MINOR__ * 10 + __GNUC_PATCHLEVEL__ < 473)
+// From GCC 4.7.3 onwards, GCC optimize can result in gcc bailing out with OOM
+# pragma GCC optimize "O3"
+# endif
+
+# if defined(__i386__) && defined(__SSE2__) && !defined(__SSE2_MATH__)
+# pragma GCC target "fpmath=sse"
+# endif
#endif
#include <qstylehints.h>
diff --git a/src/plugins/platforms/cocoa/qcocoahelpers.mm b/src/plugins/platforms/cocoa/qcocoahelpers.mm
index 91a6f5a4c7..20702c6837 100644
--- a/src/plugins/platforms/cocoa/qcocoahelpers.mm
+++ b/src/plugins/platforms/cocoa/qcocoahelpers.mm
@@ -466,10 +466,9 @@ QString qt_mac_removeMnemonics(const QString &original)
return returnText;
}
-
-CGColorSpaceRef m_genericColorSpace = 0;
-QHash<CGDirectDisplayID, CGColorSpaceRef> m_displayColorSpaceHash;
-bool m_postRoutineRegistered = false;
+static CGColorSpaceRef m_genericColorSpace = 0;
+static QHash<CGDirectDisplayID, CGColorSpaceRef> m_displayColorSpaceHash;
+static bool m_postRoutineRegistered = false;
CGColorSpaceRef qt_mac_genericColorSpace()
{
diff --git a/src/plugins/platforms/cocoa/qpaintengine_mac.mm b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
index 0b6392fb65..101be611ad 100644
--- a/src/plugins/platforms/cocoa/qpaintengine_mac.mm
+++ b/src/plugins/platforms/cocoa/qpaintengine_mac.mm
@@ -76,7 +76,7 @@ QT_BEGIN_NAMESPACE
QCoreGraphicsPaintEngine utility functions
*****************************************************************************/
-void qt_mac_clip_cg(CGContextRef hd, const QRegion &rgn, CGAffineTransform *orig_xform)
+static void qt_mac_clip_cg(CGContextRef hd, const QRegion &rgn, CGAffineTransform *orig_xform)
{
CGAffineTransform old_xform = CGAffineTransformIdentity;
if (orig_xform) { //setup xforms
diff --git a/src/plugins/platforms/windows/qwindowscontext.cpp b/src/plugins/platforms/windows/qwindowscontext.cpp
index 1ea660d944..febf25baea 100644
--- a/src/plugins/platforms/windows/qwindowscontext.cpp
+++ b/src/plugins/platforms/windows/qwindowscontext.cpp
@@ -172,7 +172,7 @@ QWindowsUser32DLL::QWindowsUser32DLL() :
updateLayeredWindowIndirect(0),
isHungAppWindow(0),
registerTouchWindow(0), unregisterTouchWindow(0),
- getTouchInputInfo(0), closeTouchInputHandle(0)
+ getTouchInputInfo(0), closeTouchInputHandle(0), setProcessDPIAware(0)
{
}
@@ -187,6 +187,7 @@ void QWindowsUser32DLL::init()
updateLayeredWindowIndirect = (UpdateLayeredWindowIndirect)(library.resolve("UpdateLayeredWindowIndirect"));
isHungAppWindow = (IsHungAppWindow)library.resolve("IsHungAppWindow");
+ setProcessDPIAware = (SetProcessDPIAware)library.resolve("SetProcessDPIAware");
}
bool QWindowsUser32DLL::initTouch()
@@ -252,7 +253,7 @@ struct QWindowsContextPrivate {
QSet<QString> m_registeredWindowClassNames;
HandleBaseWindowHash m_windows;
HDC m_displayContext;
- const int m_defaultDPI;
+ int m_defaultDPI;
QWindowsKeyMapper m_keyMapper;
QWindowsMouseHandler m_mouseHandler;
QWindowsMimeConverter m_mimeConverter;
@@ -266,8 +267,6 @@ struct QWindowsContextPrivate {
QWindowsContextPrivate::QWindowsContextPrivate() :
m_systemInfo(0),
- m_displayContext(GetDC(0)),
- m_defaultDPI(GetDeviceCaps(m_displayContext,LOGPIXELSY)),
m_oleInitializeResult(OleInitialize(NULL)),
m_eventType(QByteArrayLiteral("windows_generic_MSG")),
m_lastActiveWindow(0), m_asyncExpose(0)
@@ -276,6 +275,11 @@ QWindowsContextPrivate::QWindowsContextPrivate() :
QWindowsContext::user32dll.init();
QWindowsContext::shell32dll.init();
#endif
+ // Ensure metrics functions report correct data, QTBUG-30063.
+ if (QWindowsContext::user32dll.setProcessDPIAware)
+ QWindowsContext::user32dll.setProcessDPIAware();
+ m_displayContext = GetDC(0);
+ m_defaultDPI = GetDeviceCaps(m_displayContext, LOGPIXELSY);
const QSysInfo::WinVersion ver = QSysInfo::windowsVersion();
#ifndef Q_OS_WINCE
diff --git a/src/plugins/platforms/windows/qwindowscontext.h b/src/plugins/platforms/windows/qwindowscontext.h
index 1fe71e3aff..d60b632beb 100644
--- a/src/plugins/platforms/windows/qwindowscontext.h
+++ b/src/plugins/platforms/windows/qwindowscontext.h
@@ -80,6 +80,7 @@ struct QWindowsUser32DLL
const BLENDFUNCTION *, DWORD);
typedef BOOL (WINAPI *UpdateLayeredWindowIndirect)(HWND, const UPDATELAYEREDWINDOWINFO *);
typedef BOOL (WINAPI *IsHungAppWindow)(HWND);
+ typedef BOOL (WINAPI *SetProcessDPIAware)();
// Functions missing in Q_CC_GNU stub libraries.
SetLayeredWindowAttributes setLayeredWindowAttributes;
@@ -94,6 +95,9 @@ struct QWindowsUser32DLL
UnregisterTouchWindow unregisterTouchWindow;
GetTouchInputInfo getTouchInputInfo;
CloseTouchInputHandle closeTouchInputHandle;
+
+ // Windows Vista onwards
+ SetProcessDPIAware setProcessDPIAware;
};
struct QWindowsShell32DLL
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
index 28438dd53d..2c738e76eb 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
@@ -1071,7 +1071,9 @@ static inline QString appendSuffix(const QString &fileName, const QString &filte
if (suffixPos < 0)
return fileName;
suffixPos += 3;
- int endPos = filter.indexOf(QLatin1Char(';'), suffixPos + 1);
+ int endPos = filter.indexOf(QLatin1Char(' '), suffixPos + 1);
+ if (endPos < 0)
+ endPos = filter.indexOf(QLatin1Char(';'), suffixPos + 1);
if (endPos < 0)
endPos = filter.indexOf(QLatin1Char(')'), suffixPos + 1);
if (endPos < 0)
diff --git a/src/plugins/platforms/xcb/qxcbcursor.cpp b/src/plugins/platforms/xcb/qxcbcursor.cpp
index e29b21c9c8..b40fdb0e92 100644
--- a/src/plugins/platforms/xcb/qxcbcursor.cpp
+++ b/src/plugins/platforms/xcb/qxcbcursor.cpp
@@ -482,7 +482,7 @@ xcb_cursor_t QXcbCursor::createFontCursor(int cshape)
0xFFFF, 0xFFFF, 0xFFFF, 0, 0, 0);
}
- if (cursor && cshape >= 0 && cshape < Qt::LastCursor) {
+ if (cursor && cshape >= 0 && cshape < Qt::LastCursor && connection()->hasXFixes()) {
const char *name = cursorNames[cshape];
xcb_xfixes_set_cursor_name(conn, cursor, strlen(name), name);
}
diff --git a/src/printsupport/doc/src/qtprintsupport-module.qdoc b/src/printsupport/doc/src/qtprintsupport-module.qdoc
index 47420368e5..477b9a7097 100644
--- a/src/printsupport/doc/src/qtprintsupport-module.qdoc
+++ b/src/printsupport/doc/src/qtprintsupport-module.qdoc
@@ -27,7 +27,7 @@
/*!
\module QtPrintSupport
- \title Qt Print Support Module
+ \title Qt Print Support C++ Classes
\brief The Qt PrintSupport module provides classes to make printing easier and portable.
\ingroup modules
@@ -43,4 +43,3 @@
\snippet code/doc_src_qtprintsupport.pro 0
*/
-
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index 0d4b62fd16..1ec54deeb5 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -139,7 +139,7 @@ INSTALLS += lib
else: \
mod_component_base = $$dirname(_QMAKE_CACHE_)
QMAKE_SYNCQT += -minimal -module QtCore -module QtDBus -module QtXml \
- -mkspecsdir $$[QT_HOST_DATA/get]/mkspecs -outdir $$mod_component_base $$dirname(_QMAKE_CONF_)
+ -version $$VERSION -outdir $$mod_component_base $$dirname(_QMAKE_CONF_)
contains(QT_CONFIG, zlib):QMAKE_SYNCQT += -module QtZlib
!silent:message($$QMAKE_SYNCQT)
system($$QMAKE_SYNCQT)|error("Failed to run: $$QMAKE_SYNCQT")
diff --git a/src/tools/qdoc/doc/config/qdoc.qdocconf b/src/tools/qdoc/doc/config/qdoc.qdocconf
index 6bbe934749..84e9689f50 100644
--- a/src/tools/qdoc/doc/config/qdoc.qdocconf
+++ b/src/tools/qdoc/doc/config/qdoc.qdocconf
@@ -20,7 +20,7 @@ tagfile = ../html/qdoc.tags
qhp.projects = QDoc
qhp.QDoc.file = qdoc.qhp
-qhp.QDoc.namespace = qdoc.$QT_VERSION_TAG
+qhp.QDoc.namespace = org.qt-project.qdoc.$QT_VERSION_TAG
qhp.QDoc.virtualFolder = qdoc
qhp.QDoc.indexTitle = QDoc Manual
qhp.QDoc.indexRoot =
diff --git a/src/tools/uic/qclass_lib_map.h b/src/tools/uic/qclass_lib_map.h
index c4d4d840a6..1b13850817 100644
--- a/src/tools/uic/qclass_lib_map.h
+++ b/src/tools/uic/qclass_lib_map.h
@@ -313,7 +313,7 @@ QT_CLASS_LIB(QDeclarativePropertyValueInterceptor, QtDeclarative, qdeclarativepr
QT_CLASS_LIB(QDeclarativePropertyValueSource, QtDeclarative, qdeclarativepropertyvaluesource.h)
QT_CLASS_LIB(QDeclarativeScriptString, QtDeclarative, qdeclarativescriptstring.h)
QT_CLASS_LIB(QDeclarativePropertyMap, QtDeclarative, qdeclarativepropertymap.h)
-QT_CLASS_LIB(QDeclarativeView, QtQuick1, qdeclarativeview.h)
+QT_CLASS_LIB(QDeclarativeView, QtDeclarative, qdeclarativeview.h)
QT_CLASS_LIB(QMacGLCompatTypes, QtOpenGL, qgl.h)
QT_CLASS_LIB(QMacGLCompatTypes, QtOpenGL, qgl.h)
QT_CLASS_LIB(QMacCompatGLint, QtOpenGL, qgl.h)
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index 5c9651f1c9..fd13ee83cd 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -745,9 +745,6 @@
#include <QtGui/qevent.h>
#include <QtGui/qinputmethod.h>
#include <QtWidgets/qgraphicseffect.h>
-#ifndef QT_NO_ACCESSIBILITY
-# include "qaccessible.h"
-#endif
#include <private/qgraphicsitem_p.h>
#include <private/qgraphicswidget_p.h>
@@ -7322,12 +7319,6 @@ void QGraphicsItem::updateMicroFocus()
if (scene()->views().at(i) == fw) {
if (qApp)
qApp->inputMethod()->update(Qt::ImQueryAll);
-
-#ifndef QT_NO_ACCESSIBILITY
- // ##### is this correct
- if (toGraphicsObject())
- QAccessible::updateAccessibility(toGraphicsObject(), 0, QAccessible::StateChanged);
-#endif
break;
}
}
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index a9c045ea80..cea376fea8 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -245,9 +245,6 @@
#include <QtGui/qtransform.h>
#include <QtGui/qinputmethod.h>
#include <QtWidgets/qgraphicseffect.h>
-#ifndef QT_NO_ACCESSIBILITY
-# include <QtGui/qaccessible.h>
-#endif
#include <private/qapplication_p.h>
#include <private/qobject_p.h>
#include <private/qgraphicseffect_p.h>
@@ -836,14 +833,6 @@ void QGraphicsScenePrivate::setFocusItemHelper(QGraphicsItem *item,
focusItem = item;
updateInputMethodSensitivityInViews();
-#ifndef QT_NO_ACCESSIBILITY
- if (focusItem) {
- if (QGraphicsObject *focusObj = focusItem->toGraphicsObject()) {
- QAccessibleEvent event(focusObj, QAccessible::Focus);
- QAccessible::updateAccessibility(&event);
- }
- }
-#endif
if (item) {
QFocusEvent event(QEvent::FocusIn, focusReason);
sendEvent(item, &event);
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index 132cc8d59e..a4573ebb01 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -458,6 +458,9 @@ static QString qt_mac_removeMnemonics(const QString &original)
return returnText;
}
+static CGContextRef qt_mac_cg_context(const QPaintDevice *pdev);
+
+namespace {
class QMacCGContext
{
CGContextRef context;
@@ -465,7 +468,6 @@ public:
QMacCGContext(QPainter *p);
inline QMacCGContext() { context = 0; }
inline QMacCGContext(const QPaintDevice *pdev) {
- extern CGContextRef qt_mac_cg_context(const QPaintDevice *);
context = qt_mac_cg_context(pdev);
}
inline QMacCGContext(CGContextRef cg, bool takeOwnership=false) {
@@ -495,6 +497,7 @@ public:
return *this;
}
};
+} // anonymous namespace
static QColor qcolorFromCGColor(CGColorRef cgcolor)
{
@@ -578,11 +581,11 @@ QRegion qt_mac_fromHIShapeRef(HIShapeRef shape)
}
CGColorSpaceRef m_genericColorSpace = 0;
-QHash<CGDirectDisplayID, CGColorSpaceRef> m_displayColorSpaceHash;
+static QHash<CGDirectDisplayID, CGColorSpaceRef> m_displayColorSpaceHash;
bool m_postRoutineRegistered = false;
-CGColorSpaceRef qt_mac_displayColorSpace(const QWidget *widget);
-CGColorSpaceRef qt_mac_genericColorSpace()
+static CGColorSpaceRef qt_mac_displayColorSpace(const QWidget *widget);
+static CGColorSpaceRef qt_mac_genericColorSpace()
{
#if 0
if (!m_genericColorSpace) {
@@ -606,11 +609,26 @@ CGColorSpaceRef qt_mac_genericColorSpace()
#endif
}
+static void qt_mac_cleanUpMacColorSpaces()
+{
+ if (m_genericColorSpace) {
+ CFRelease(m_genericColorSpace);
+ m_genericColorSpace = 0;
+ }
+ QHash<CGDirectDisplayID, CGColorSpaceRef>::const_iterator it = m_displayColorSpaceHash.constBegin();
+ while (it != m_displayColorSpaceHash.constEnd()) {
+ if (it.value())
+ CFRelease(it.value());
+ ++it;
+ }
+ m_displayColorSpaceHash.clear();
+}
+
/*
Ideally, we should pass the widget in here, and use CGGetDisplaysWithRect() etc.
to support multiple displays correctly.
*/
-CGColorSpaceRef qt_mac_displayColorSpace(const QWidget *widget)
+static CGColorSpaceRef qt_mac_displayColorSpace(const QWidget *widget)
{
CGColorSpaceRef colorSpace;
@@ -639,27 +657,11 @@ CGColorSpaceRef qt_mac_displayColorSpace(const QWidget *widget)
m_displayColorSpaceHash.insert(displayID, colorSpace);
if (!m_postRoutineRegistered) {
m_postRoutineRegistered = true;
- void qt_mac_cleanUpMacColorSpaces();
qAddPostRoutine(qt_mac_cleanUpMacColorSpaces);
}
return colorSpace;
}
-void qt_mac_cleanUpMacColorSpaces()
-{
- if (m_genericColorSpace) {
- CFRelease(m_genericColorSpace);
- m_genericColorSpace = 0;
- }
- QHash<CGDirectDisplayID, CGColorSpaceRef>::const_iterator it = m_displayColorSpaceHash.constBegin();
- while (it != m_displayColorSpaceHash.constEnd()) {
- if (it.value())
- CFRelease(it.value());
- ++it;
- }
- m_displayColorSpaceHash.clear();
-}
-
bool qt_macWindowIsTextured(const QWidget *window)
{
NSWindow *nswindow = static_cast<NSWindow*>(
@@ -6484,7 +6486,7 @@ int QMacStyle::layoutSpacing(QSizePolicy::ControlType control1,
return_SIZE(10, 8, 6); // guess
}
-void qt_mac_clip_cg(CGContextRef hd, const QRegion &rgn, CGAffineTransform *orig_xform)
+static void qt_mac_clip_cg(CGContextRef hd, const QRegion &rgn, CGAffineTransform *orig_xform)
{
CGAffineTransform old_xform = CGAffineTransformIdentity;
if (orig_xform) { //setup xforms
@@ -6525,6 +6527,9 @@ void qt_mac_scale_region(QRegion *region, qreal scaleFactor)
region->setRects(&scaledRects[0], scaledRects.count());
}
+static CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice);
+
+namespace {
QMacCGContext::QMacCGContext(QPainter *p)
{
QPaintEngine *pe = p->paintEngine();
@@ -6537,7 +6542,6 @@ QMacCGContext::QMacCGContext(QPainter *p)
devType == QInternal::Pixmap ||
devType == QInternal::Image)) {
- extern CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice);
CGColorSpaceRef colorspace = qt_mac_colorSpaceForDeviceType(pe->paintDevice());
uint flags = kCGImageAlphaPremultipliedFirst;
flags |= kCGBitmapByteOrder32Host;
@@ -6579,7 +6583,9 @@ QMacCGContext::QMacCGContext(QPainter *p)
}
}
-CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice)
+} // anonymous namespace
+
+static CGColorSpaceRef qt_mac_colorSpaceForDeviceType(const QPaintDevice *paintDevice)
{
bool isWidget = (paintDevice->devType() == QInternal::Widget);
return qt_mac_displayColorSpace(isWidget ? static_cast<const QWidget *>(paintDevice) : 0);
diff --git a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
index 05a6c6b252..b1874131d7 100644
--- a/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
+++ b/tests/auto/corelib/tools/qdatetime/tst_qdatetime.cpp
@@ -1437,16 +1437,10 @@ void tst_QDateTime::toString_strformat_data()
QTest::newRow( "datetime13" ) << QDateTime(QDate(1974, 12, 1), QTime(14, 14, 20))
<< QString("hh''mm''ss dd''MM''yyyy")
<< QString("14'14'20 01'12'1974");
- QTest::newRow( "missing p and P" ) << QDateTime(QDate(1999, 12, 31), QTime(3, 59, 59, 999))
- << QString("hhhhhaA") << QString("03033aA");
- QTest::newRow( "OK A, bad P" ) << QDateTime(QDate(1999, 12, 31), QTime(0, 59, 59, 999))
- << QString("hhAX") << QString("00AX");
QTest::newRow( "single, 0 => 12 AM" ) << QDateTime(QDate(1999, 12, 31), QTime(0, 59, 59, 999))
<< QString("hAP") << QString("12AM");
QTest::newRow( "double, 0 => 12 AM" ) << QDateTime(QDate(1999, 12, 31), QTime(0, 59, 59, 999))
<< QString("hhAP") << QString("12AM");
- QTest::newRow( "double, garbage" ) << QDateTime(QDate(1999, 12, 31), QTime(0, 59, 59, 999))
- << QString("hhAX") << QString("00AX");
QTest::newRow( "dddd" ) << QDateTime(QDate(1999, 12, 31), QTime(0, 59, 59, 999))
<< QString("dddd") << QString("Friday");
QTest::newRow( "ddd" ) << QDateTime(QDate(1999, 12, 31), QTime(0, 59, 59, 999))
diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
index 8e30a66d6f..7b7869d033 100644
--- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
@@ -156,6 +156,7 @@ private slots:
void count();
void lastIndexOf_data();
void lastIndexOf();
+ void lastIndexOfInvalidRegex();
void indexOf_data();
void indexOf();
void indexOf2_data();
@@ -633,6 +634,7 @@ void tst_QString::replace_regexp_data()
<< QString("a9a8a7a6a5nmlkjii0hh0gg0ff0ee0dd0cc0bb0a");
QTest::newRow("backref10") << QString("abc") << QString("((((((((((((((abc))))))))))))))")
<< QString("\\0\\01\\011") << QString("\\0\\01\\011");
+ QTest::newRow("invalid") << QString("") << QString("invalid regex\\") << QString("") << QString("");
}
void tst_QString::utf8_data()
@@ -1379,6 +1381,12 @@ void tst_QString::lastIndexOf()
}
}
+void tst_QString::lastIndexOfInvalidRegex()
+{
+ QTest::ignoreMessage(QtWarningMsg, "QString::lastIndexOf: invalid QRegularExpression object");
+ QCOMPARE(QString("").lastIndexOf(QRegularExpression("invalid regex\\"), 0), -1);
+}
+
void tst_QString::count()
{
QString a;
@@ -1396,7 +1404,8 @@ void tst_QString::count()
QCOMPARE(a.count(QRegExp("[G][HE]")),2);
QCOMPARE(a.count(QRegularExpression("[FG][HI]")), 1);
QCOMPARE(a.count(QRegularExpression("[G][HE]")), 2);
-
+ QTest::ignoreMessage(QtWarningMsg, "QString::count: invalid QRegularExpression object");
+ QCOMPARE(a.count(QRegularExpression("invalid regex\\")), 0);
CREATE_REF(QLatin1String("FG"));
QCOMPARE(a.count(ref),2);
@@ -1432,6 +1441,8 @@ void tst_QString::contains()
QStringRef emptyRef(&a, 0, 0);
QVERIFY(a.contains(emptyRef, Qt::CaseInsensitive));
+ QTest::ignoreMessage(QtWarningMsg, "QString::contains: invalid QRegularExpression object");
+ QVERIFY(!a.contains(QRegularExpression("invalid regex\\")));
}
@@ -2342,7 +2353,10 @@ void tst_QString::replace_regexp()
s2.replace( QRegExp(regexp), after );
QTEST( s2, "result" );
s2 = string;
- s2.replace( QRegularExpression(regexp), after );
+ QRegularExpression regularExpression(regexp);
+ if (!regularExpression.isValid())
+ QTest::ignoreMessage(QtWarningMsg, "QString::replace: invalid QRegularExpression object");
+ s2.replace( regularExpression, after );
QTEST( s2, "result" );
}
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index 774ade5fb0..57ffcaf30d 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -280,7 +280,9 @@ private slots:
void drawTextWithComplexBrush();
void QTBUG26013_squareCapStroke();
void QTBUG25153_drawLine();
- void dashing_systemClip();
+
+ void cosmeticStrokerClipping_data();
+ void cosmeticStrokerClipping();
private:
void fillData();
@@ -4462,22 +4464,54 @@ void tst_QPainter::QTBUG25153_drawLine()
}
}
-static void dashing_systemClip_paint(QPainter *p)
+enum CosmeticStrokerPaint
+{
+ Antialiasing,
+ Dashing
+};
+
+static void paint_func(QPainter *p, CosmeticStrokerPaint type)
+{
+ p->save();
+ switch (type) {
+ case Antialiasing:
+ p->setPen(Qt::black);
+ p->setRenderHint(QPainter::Antialiasing);
+ p->drawLine(4, 8, 42, 42);
+ break;
+ case Dashing:
+ p->setPen(QPen(Qt::black, 1, Qt::DashLine, Qt::RoundCap, Qt::MiterJoin));
+ p->drawLine(8, 8, 42, 8);
+ p->drawLine(42, 8, 42, 42);
+ p->drawLine(42, 42, 8, 42);
+ p->drawLine(8, 42, 8, 8);
+ break;
+ default:
+ Q_ASSERT(false);
+ break;
+ }
+ p->restore();
+}
+
+Q_DECLARE_METATYPE(CosmeticStrokerPaint)
+
+void tst_QPainter::cosmeticStrokerClipping_data()
{
- p->setPen(QPen(Qt::black, 1, Qt::DashLine, Qt::RoundCap, Qt::MiterJoin));
- p->drawLine(8, 8, 42, 8);
- p->drawLine(42, 8, 42, 42);
- p->drawLine(42, 42, 8, 42);
- p->drawLine(8, 42, 8, 8);
+ QTest::addColumn<CosmeticStrokerPaint>("paint");
+
+ QTest::newRow("antialiasing_paint") << Antialiasing;
+ QTest::newRow("dashing_paint") << Dashing;
}
-void tst_QPainter::dashing_systemClip()
+void tst_QPainter::cosmeticStrokerClipping()
{
+ QFETCH(CosmeticStrokerPaint, paint);
+
QImage image(50, 50, QImage::Format_RGB32);
image.fill(Qt::white);
QPainter p(&image);
- dashing_systemClip_paint(&p);
+ paint_func(&p, paint);
p.end();
QImage old = image.copy();
@@ -4485,7 +4519,8 @@ void tst_QPainter::dashing_systemClip()
image.paintEngine()->setSystemClip(QRect(10, 0, image.width() - 10, image.height()));
p.begin(&image);
- dashing_systemClip_paint(&p);
+ p.fillRect(image.rect(), Qt::white);
+ paint_func(&p, paint);
// doing same paint operation again with different system clip should not change the image
QCOMPARE(old, image);
@@ -4493,7 +4528,8 @@ void tst_QPainter::dashing_systemClip()
old = image;
p.setClipRect(QRect(20, 20, 30, 30));
- dashing_systemClip_paint(&p);
+ p.fillRect(image.rect(), Qt::white);
+ paint_func(&p, paint);
// ditto for regular clips
QCOMPARE(old, image);
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 1f9f1eb923..b9ab4825d4 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -706,6 +706,8 @@ void tst_QSslSocket::peerCertificateChain()
if (!QSslSocket::supportsSsl())
return;
+ QSKIP("QTBUG-29941 - Unstable auto-test due to intermittently unreachable host");
+
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index f9ee2e485a..c446513fe7 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -4245,6 +4245,7 @@ void tst_QWidget::scroll()
UpdateWidget updateWidget;
updateWidget.resize(w, h);
updateWidget.reset();
+ updateWidget.move(QGuiApplication::primaryScreen()->geometry().center() - QPoint(250, 250));
updateWidget.show();
qApp->setActiveWindow(&updateWidget);
QVERIFY(QTest::qWaitForWindowActive(&updateWidget));
@@ -4256,7 +4257,7 @@ void tst_QWidget::scroll()
qApp->processEvents();
QRegion dirty(QRect(0, 0, w, 10));
dirty += QRegion(QRect(0, 10, 10, h - 10));
- QCOMPARE(updateWidget.paintedRegion, dirty);
+ QTRY_COMPARE(updateWidget.paintedRegion, dirty);
}
{
@@ -4266,7 +4267,7 @@ void tst_QWidget::scroll()
qApp->processEvents();
QRegion dirty(QRect(0, 0, w, 10));
dirty += QRegion(QRect(0, 10, 10, 10));
- QCOMPARE(updateWidget.paintedRegion, dirty);
+ QTRY_COMPARE(updateWidget.paintedRegion, dirty);
}
if (updateWidget.width() < 200 || updateWidget.height() < 200)
@@ -4282,7 +4283,7 @@ void tst_QWidget::scroll()
dirty += QRegion(QRect(0, 60, 110, 40));
dirty += QRegion(QRect(50, 100, 60, 10));
dirty += QRegion(QRect(50, 110, 10, 40));
- QCOMPARE(updateWidget.paintedRegion, dirty);
+ QTRY_COMPARE(updateWidget.paintedRegion, dirty);
}
{
@@ -4293,7 +4294,7 @@ void tst_QWidget::scroll()
QRegion dirty(QRect(0, 0, 100, 100));
dirty += QRegion(QRect(100, 100, 100, 10));
dirty += QRegion(QRect(100, 110, 10, 90));
- QCOMPARE(updateWidget.paintedRegion, dirty);
+ QTRY_COMPARE(updateWidget.paintedRegion, dirty);
}
}
#endif
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index 5ff4a67315..c1e1b2c8dc 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -171,7 +171,7 @@ Configure::Configure(int& argc, char** argv)
QTextStream stream(&syncqt_bat);
stream << "@echo off" << endl
<< "call " << QDir::toNativeSeparators(sourcePath + "/bin/syncqt.bat")
- << " -mkspecsdir \"" << QDir::toNativeSeparators(buildPath) << "/mkspecs\" %*" << endl;
+ << " %*" << endl;
syncqt_bat.close();
}
}
@@ -1616,7 +1616,7 @@ bool Configure::displayHelp()
desc( "-libdir <dir>", "Libraries will be installed to <dir>\n(default PREFIX/lib)");
desc( "-headerdir <dir>", "Headers will be installed to <dir>\n(default PREFIX/include)");
desc( "-archdatadir <dir>", "Architecture-dependent data used by Qt will be installed to <dir>\n(default PREFIX)");
- desc( "-libexecdir <dir>", "Program executables will be installed to <dir>\n(default ARCHDATADIR/lib)");
+ desc( "-libexecdir <dir>", "Program executables will be installed to <dir>\n(default ARCHDATADIR/bin)");
desc( "-plugindir <dir>", "Plugins will be installed to <dir>\n(default ARCHDATADIR/plugins)");
desc( "-importdir <dir>", "Imports for QML1 will be installed to <dir>\n(default ARCHDATADIR/imports)");
desc( "-qmldir <dir>", "Imports for QML2 will be installed to <dir>\n(default ARCHDATADIR/qml)");
@@ -2017,7 +2017,8 @@ bool Configure::checkAvailability(const QString &part)
else if (part == "ICU")
available = findFile("unicode/utypes.h") && findFile("unicode/ucol.h") && findFile("unicode/ustring.h")
- && (findFile("icuin.lib") || findFile("libicuin.lib")); // libicun.lib if compiled with mingw
+ && (findFile("icuin.lib") || findFile("sicuin.lib")
+ || findFile("libicuin.lib") || findFile("libsicuin.lib")); // "lib" prefix for mingw, 's' prefix for static
else if (part == "ANGLE") {
available = checkAngleAvailability();
@@ -2126,6 +2127,8 @@ bool Configure::checkAvailability(const QString &part)
*/
void Configure::autoDetection()
{
+ cout << "Running configuration tests..." << endl;
+
if (dictionary["C++11"] == "auto") {
if (!dictionary["QMAKESPEC"].contains("msvc"))
dictionary["C++11"] = tryCompileProject("common/c++11") ? "yes" : "no";
@@ -3583,7 +3586,7 @@ void Configure::generateQConfigCpp()
dictionary["QT_INSTALL_ARCHDATA"] = qipempty ? "" : dictionary["QT_INSTALL_PREFIX"];
if (!dictionary["QT_INSTALL_LIBEXECS"].size()) {
if (dictionary["QT_INSTALL_ARCHDATA"] == dictionary["QT_INSTALL_PREFIX"])
- dictionary["QT_INSTALL_LIBEXECS"] = qipempty ? "" : dictionary["QT_INSTALL_ARCHDATA"] + "/lib";
+ dictionary["QT_INSTALL_LIBEXECS"] = qipempty ? "" : dictionary["QT_INSTALL_ARCHDATA"] + "/bin";
else
dictionary["QT_INSTALL_LIBEXECS"] = qipempty ? "" : dictionary["QT_INSTALL_ARCHDATA"] + "/libexec";
}