Merge remote-tracking branch 'origin/stable' into dev
Conflicts: src/corelib/io/qdatastream.cpp src/corelib/io/qdatastream.h src/corelib/json/qjsonwriter.cpp src/plugins/platforms/cocoa/qcocoawindow.mm src/plugins/platforms/xcb/qxcbkeyboard.cpp Change-Id: I46fef1455f5a9f2ce1ec394a3c65881093c51b62
@ -1,44 +0,0 @@
|
|||||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
::
|
|
||||||
:: Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
:: Contact: http://www.qt-project.org/legal
|
|
||||||
::
|
|
||||||
:: This file is part of the tools applications of the Qt Toolkit.
|
|
||||||
::
|
|
||||||
:: $QT_BEGIN_LICENSE:LGPL$
|
|
||||||
:: Commercial License Usage
|
|
||||||
:: Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
:: accordance with the commercial license agreement provided with the
|
|
||||||
:: Software or, alternatively, in accordance with the terms contained in
|
|
||||||
:: a written agreement between you and Digia. For licensing terms and
|
|
||||||
:: conditions see http://qt.digia.com/licensing. For further information
|
|
||||||
:: use the contact form at http://qt.digia.com/contact-us.
|
|
||||||
::
|
|
||||||
:: GNU Lesser General Public License Usage
|
|
||||||
:: Alternatively, this file may be used under the terms of the GNU Lesser
|
|
||||||
:: General Public License version 2.1 as published by the Free Software
|
|
||||||
:: Foundation and appearing in the file LICENSE.LGPL included in the
|
|
||||||
:: packaging of this file. Please review the following information to
|
|
||||||
:: ensure the GNU Lesser General Public License version 2.1 requirements
|
|
||||||
:: will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
|
||||||
::
|
|
||||||
:: In addition, as a special exception, Digia gives you certain additional
|
|
||||||
:: rights. These rights are described in the Digia Qt LGPL Exception
|
|
||||||
:: version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
|
||||||
::
|
|
||||||
:: GNU General Public License Usage
|
|
||||||
:: Alternatively, this file may be used under the terms of the GNU
|
|
||||||
:: General Public License version 3.0 as published by the Free Software
|
|
||||||
:: Foundation and appearing in the file LICENSE.GPL included in the
|
|
||||||
:: packaging of this file. Please review the following information to
|
|
||||||
:: ensure the GNU General Public License version 3.0 requirements will be
|
|
||||||
:: met: http://www.gnu.org/copyleft/gpl.html.
|
|
||||||
::
|
|
||||||
::
|
|
||||||
:: $QT_END_LICENSE$
|
|
||||||
::
|
|
||||||
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
||||||
@echo off
|
|
||||||
rem ***** This assumes PERL is in the PATH *****
|
|
||||||
set scriptpath=%~dp0
|
|
||||||
perl.exe %scriptpath%syncqt %*
|
|
60
config.tests/qpa/xcb-xkb/xcb-xkb.cpp
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
||||||
|
** Contact: http://www.qt-project.org/legal
|
||||||
|
**
|
||||||
|
** This file is part of the config.tests of the Qt Toolkit.
|
||||||
|
**
|
||||||
|
** $QT_BEGIN_LICENSE:LGPL$
|
||||||
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and Digia. For licensing terms and
|
||||||
|
** conditions see http://qt.digia.com/licensing. For further information
|
||||||
|
** use the contact form at http://qt.digia.com/contact-us.
|
||||||
|
**
|
||||||
|
** GNU Lesser General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
|
** General Public License version 2.1 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||||
|
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||||
|
**
|
||||||
|
** In addition, as a special exception, Digia gives you certain additional
|
||||||
|
** rights. These rights are described in the Digia Qt LGPL Exception
|
||||||
|
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||||
|
**
|
||||||
|
** GNU General Public License Usage
|
||||||
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
|
** General Public License version 3.0 as published by the Free Software
|
||||||
|
** Foundation and appearing in the file LICENSE.GPL included in the
|
||||||
|
** packaging of this file. Please review the following information to
|
||||||
|
** ensure the GNU General Public License version 3.0 requirements will be
|
||||||
|
** met: http://www.gnu.org/copyleft/gpl.html.
|
||||||
|
**
|
||||||
|
**
|
||||||
|
** $QT_END_LICENSE$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include <xcb/xcb.h>
|
||||||
|
|
||||||
|
// This is needed to make Qt compile together with XKB. xkb.h is using a variable
|
||||||
|
// which is called 'explicit', this is a reserved keyword in c++ */
|
||||||
|
#define explicit dont_use_cxx_explicit
|
||||||
|
#include <xcb/xkb.h>
|
||||||
|
#undef explicit
|
||||||
|
|
||||||
|
int main(int, char **)
|
||||||
|
{
|
||||||
|
int primaryScreen = 0;
|
||||||
|
|
||||||
|
xcb_connection_t *connection = xcb_connect("", &primaryScreen);
|
||||||
|
|
||||||
|
// This won't compile unless libxcb >= 1.5 which defines XCB_ATOM_PRIMARY.
|
||||||
|
int xcbAtomPrimary = XCB_ATOM_PRIMARY;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
5
config.tests/qpa/xcb-xkb/xcb-xkb.pro
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
SOURCES = xcb-xkb.cpp
|
||||||
|
CONFIG -= qt
|
||||||
|
|
||||||
|
LIBS += -lxcb -lxcb-xkb
|
||||||
|
|
355
configure
vendored
@ -446,6 +446,8 @@ if [ "$OSTYPE" = "msys" ]; then
|
|||||||
BUILD_ON_MSYS=yes
|
BUILD_ON_MSYS=yes
|
||||||
DEV_NULL=/tmp/empty-file
|
DEV_NULL=/tmp/empty-file
|
||||||
echo "" > $DEV_NULL
|
echo "" > $DEV_NULL
|
||||||
|
relpath=`(cd "$relpath"; pwd -W)`
|
||||||
|
outpath=`pwd -W`
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
@ -901,7 +903,7 @@ CFG_USE_GNUMAKE=no
|
|||||||
CFG_XINPUT2=auto
|
CFG_XINPUT2=auto
|
||||||
CFG_XINPUT=runtime
|
CFG_XINPUT=runtime
|
||||||
CFG_XKB=auto
|
CFG_XKB=auto
|
||||||
CFG_XKBCOMMON=no
|
CFG_XKBCOMMON=auto
|
||||||
CFG_XCB=auto
|
CFG_XCB=auto
|
||||||
CFG_XCB_GLX=no
|
CFG_XCB_GLX=no
|
||||||
CFG_EGLFS=auto
|
CFG_EGLFS=auto
|
||||||
@ -1001,6 +1003,7 @@ CFG_SYSROOT=
|
|||||||
CFG_GCC_SYSROOT="yes"
|
CFG_GCC_SYSROOT="yes"
|
||||||
QT_HOST_PREFIX=
|
QT_HOST_PREFIX=
|
||||||
QT_HOST_BINS=
|
QT_HOST_BINS=
|
||||||
|
QT_HOST_LIBS=
|
||||||
QT_HOST_DATA=
|
QT_HOST_DATA=
|
||||||
|
|
||||||
#flags for SQL drivers
|
#flags for SQL drivers
|
||||||
@ -1109,7 +1112,7 @@ while [ "$#" -gt 0 ]; do
|
|||||||
VAL=no
|
VAL=no
|
||||||
;;
|
;;
|
||||||
#Qt style options that pass an argument
|
#Qt style options that pass an argument
|
||||||
-prefix|-docdir|-headerdir|-plugindir|-importdir|-qmldir|-archdatadir|-datadir|-libdir|-bindir|-libexecdir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-skip|-platform|-xplatform|-device|-device-option|-sdk|-arch|-host-arch|-mysql_config|-sysroot|-hostdatadir|-hostbindir|-qpa|-qconfig|-android-sdk|-android-ndk|-android-ndk-platform|-android-ndk-host|-android-arch|-android-toolchain-version)
|
-prefix|-docdir|-headerdir|-plugindir|-importdir|-qmldir|-archdatadir|-datadir|-libdir|-bindir|-libexecdir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-skip|-platform|-xplatform|-device|-device-option|-sdk|-arch|-host-arch|-mysql_config|-sysroot|-hostdatadir|-hostbindir|-hostlibdir|-qpa|-qconfig|-android-sdk|-android-ndk|-android-ndk-platform|-android-ndk-host|-android-arch|-android-toolchain-version)
|
||||||
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
|
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
|
||||||
shift
|
shift
|
||||||
VAL="$1"
|
VAL="$1"
|
||||||
@ -1294,6 +1297,9 @@ while [ "$#" -gt 0 ]; do
|
|||||||
hostbindir)
|
hostbindir)
|
||||||
QT_HOST_BINS="$VAL"
|
QT_HOST_BINS="$VAL"
|
||||||
;;
|
;;
|
||||||
|
hostlibdir)
|
||||||
|
QT_HOST_LIBS="$VAL"
|
||||||
|
;;
|
||||||
pkg-config)
|
pkg-config)
|
||||||
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
|
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
|
||||||
CFG_PKGCONFIG="$VAL"
|
CFG_PKGCONFIG="$VAL"
|
||||||
@ -1409,7 +1415,7 @@ while [ "$#" -gt 0 ]; do
|
|||||||
OPT_OBSOLETE_HOST_ARG=yes
|
OPT_OBSOLETE_HOST_ARG=yes
|
||||||
;;
|
;;
|
||||||
harfbuzz)
|
harfbuzz)
|
||||||
if [ "$BUILD_ON_MAC" = "yes" ] && [ "$VAL" = "yes" ]; then
|
if ([ "$BUILD_ON_MAC" = "yes" ] && [ "$VAL" = "yes" ]) || [ "$VAL" = "no" ]; then
|
||||||
CFG_MAC_HARFBUZZ="$VAL"
|
CFG_MAC_HARFBUZZ="$VAL"
|
||||||
else
|
else
|
||||||
UNKNOWN_OPT=yes
|
UNKNOWN_OPT=yes
|
||||||
@ -1839,6 +1845,13 @@ while [ "$#" -gt 0 ]; do
|
|||||||
UNKNOWN_OPT=yes
|
UNKNOWN_OPT=yes
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
xkbcommon)
|
||||||
|
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "qt" ] || [ "$VAL" = "system" ]; then
|
||||||
|
CFG_XKBCOMMON="$VAL"
|
||||||
|
else
|
||||||
|
UNKNOWN_OPT=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
xcb)
|
xcb)
|
||||||
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ] || [ "$VAL" = "qt" ]; then
|
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ] || [ "$VAL" = "system" ] || [ "$VAL" = "qt" ]; then
|
||||||
CFG_XCB="$VAL"
|
CFG_XCB="$VAL"
|
||||||
@ -2360,6 +2373,11 @@ if [ "$PLATFORM_MAC" = "no" -a "$CFG_DEBUG_RELEASE" = "yes" ]; then
|
|||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$CFG_XCB" != "no" ] && [ "$CFG_XKBCOMMON" = "no" ]; then
|
||||||
|
echo "Error: -no-xkbcommon is not supported on XCB platform plugin."
|
||||||
|
exit 101
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$CFG_SILENT" = "yes" ]; then
|
if [ "$CFG_SILENT" = "yes" ]; then
|
||||||
QMAKE_CONFIG="$QMAKE_CONFIG silent"
|
QMAKE_CONFIG="$QMAKE_CONFIG silent"
|
||||||
fi
|
fi
|
||||||
@ -2378,26 +2396,6 @@ if [ "$OPT_SHADOW" = "yes" ]; then
|
|||||||
|
|
||||||
[ -d "$outpath/bin" ] || mkdir -p "$outpath/bin"
|
[ -d "$outpath/bin" ] || mkdir -p "$outpath/bin"
|
||||||
|
|
||||||
# make a syncqt script that can be used in the shadow
|
|
||||||
rm -f "$outpath/bin/syncqt"
|
|
||||||
if [ -x "$relpath/bin/syncqt" ]; then
|
|
||||||
mkdir -p "$outpath/bin"
|
|
||||||
echo "#!/bin/sh" >"$outpath/bin/syncqt"
|
|
||||||
echo "perl \"$relpath/bin/syncqt\" \"\$@\"" >>"$outpath/bin/syncqt"
|
|
||||||
chmod 755 "$outpath/bin/syncqt"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for i in elf2e32_qtwrapper createpackage patch_capabilities qtmodule-configtests; do
|
|
||||||
rm -f "$outpath/bin/$i"
|
|
||||||
if [ -x "$relpath/bin/$i" ]; then
|
|
||||||
mkdir -p "$outpath/bin"
|
|
||||||
echo "#!/bin/sh" >"$outpath/bin/$i"
|
|
||||||
echo "QTDIR=\"$relpath\"; export QTDIR" >>"$outpath/bin/$i"
|
|
||||||
echo "\"$relpath/bin/$i\" \"\$@\"" >>"$outpath/bin/$i"
|
|
||||||
chmod 755 "$outpath/bin/$i"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# save a pre-existing mkspecs/modules dir
|
# save a pre-existing mkspecs/modules dir
|
||||||
test -d "$outpath/mkspecs/modules" && \
|
test -d "$outpath/mkspecs/modules" && \
|
||||||
mv "$outpath/mkspecs/modules" "$outpath/mkspecs-modules"
|
mv "$outpath/mkspecs/modules" "$outpath/mkspecs-modules"
|
||||||
@ -2485,7 +2483,10 @@ if [ -z "$PLATFORM" ]; then
|
|||||||
# about the OS version, since we're not using the clang version that comes
|
# about the OS version, since we're not using the clang version that comes
|
||||||
# with the system. We use 'xcrun' to check the clang version that's part of
|
# with the system. We use 'xcrun' to check the clang version that's part of
|
||||||
# the Xcode installation.
|
# the Xcode installation.
|
||||||
if [ "$(/usr/bin/xcrun -sdk macosx clang -v 2>&1 | sed -n 's/.*version \([0-9]\).*/\1/p')" -ge 3 ]; then
|
XCRUN=`/usr/bin/xcrun -sdk macosx clang -v 2>&1`
|
||||||
|
CLANGVERSION=`echo "$XCRUN" | sed -n 's/.*version \([0-9]\).*/\1/p'`
|
||||||
|
expr "$CLANGVERSION" : '[0-9]' > /dev/null || { echo "Unable to determine CLANG version from output of xcrun: $XCRUN" ; exit 2 ; }
|
||||||
|
if [ "$CLANGVERSION" -ge 3 ]; then
|
||||||
PLATFORM=macx-clang
|
PLATFORM=macx-clang
|
||||||
|
|
||||||
# Advertise g++ as an alternative on Lion and below
|
# Advertise g++ as an alternative on Lion and below
|
||||||
@ -2713,10 +2714,6 @@ if [ "$XPLATFORM_ANDROID" = "yes" ]; then
|
|||||||
QT_QPA_DEFAULT_PLATFORM="android"
|
QT_QPA_DEFAULT_PLATFORM="android"
|
||||||
CFG_LARGEFILE="no"
|
CFG_LARGEFILE="no"
|
||||||
|
|
||||||
# FIXME: Qt Creator requires this to be in the lib/ directory of Qt. This line can be removed
|
|
||||||
# once it's fixed to get the file directly from the NDK.
|
|
||||||
cp -f $CFG_DEFAULT_ANDROID_NDK_ROOT/sources/cxx-stl/gnu-libstdc++/$CFG_DEFAULT_ANDROID_NDK_TOOLCHAIN_VERSION/libs/$CFG_DEFAULT_ANDROID_TARGET_ARCH/libgnustl_shared.so $outpath/lib
|
|
||||||
|
|
||||||
DeviceVar set DEFAULT_ANDROID_SDK_ROOT "$CFG_DEFAULT_ANDROID_SDK_ROOT"
|
DeviceVar set DEFAULT_ANDROID_SDK_ROOT "$CFG_DEFAULT_ANDROID_SDK_ROOT"
|
||||||
DeviceVar set DEFAULT_ANDROID_NDK_ROOT "$CFG_DEFAULT_ANDROID_NDK_ROOT"
|
DeviceVar set DEFAULT_ANDROID_NDK_ROOT "$CFG_DEFAULT_ANDROID_NDK_ROOT"
|
||||||
DeviceVar set DEFAULT_ANDROID_PLATFORM "$CFG_DEFAULT_ANDROID_PLATFORM"
|
DeviceVar set DEFAULT_ANDROID_PLATFORM "$CFG_DEFAULT_ANDROID_PLATFORM"
|
||||||
@ -3138,6 +3135,15 @@ if [ -z "$QT_HOST_BINS" ]; then #default
|
|||||||
fi
|
fi
|
||||||
QT_HOST_BINS=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_BINS"`
|
QT_HOST_BINS=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_BINS"`
|
||||||
|
|
||||||
|
if [ -z "$QT_HOST_LIBS" ]; then #default
|
||||||
|
if $haveHpx; then
|
||||||
|
QT_HOST_LIBS="$QT_HOST_PREFIX/lib" #fallback
|
||||||
|
else
|
||||||
|
QT_HOST_LIBS="$QT_INSTALL_LIBS"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
QT_HOST_LIBS=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_LIBS"`
|
||||||
|
|
||||||
if [ -z "$QT_HOST_DATA" ]; then #default
|
if [ -z "$QT_HOST_DATA" ]; then #default
|
||||||
if $haveHpx; then
|
if $haveHpx; then
|
||||||
QT_HOST_DATA="$QT_HOST_PREFIX"
|
QT_HOST_DATA="$QT_HOST_PREFIX"
|
||||||
@ -3311,6 +3317,8 @@ Installation options:
|
|||||||
|
|
||||||
-hostbindir <dir> .. Host executables will be installed to <dir>
|
-hostbindir <dir> .. Host executables will be installed to <dir>
|
||||||
(default HOSTPREFIX/bin)
|
(default HOSTPREFIX/bin)
|
||||||
|
-hostlibdir <dir> .. Host libraries will be installed to <dir>
|
||||||
|
(default HOSTPREFIX/lib)
|
||||||
-hostdatadir <dir> . Data used by qmake will be installed to <dir>
|
-hostdatadir <dir> . Data used by qmake will be installed to <dir>
|
||||||
(default HOSTPREFIX)
|
(default HOSTPREFIX)
|
||||||
|
|
||||||
@ -3436,6 +3444,9 @@ Third Party Libraries:
|
|||||||
(libxcb.so will still be used from operating system).
|
(libxcb.so will still be used from operating system).
|
||||||
+ -system-xcb ........ Use xcb- libraries from the operating system.
|
+ -system-xcb ........ Use xcb- libraries from the operating system.
|
||||||
|
|
||||||
|
-qt-xkbcommon ...... Use the xkbcommon library bundled with Qt.
|
||||||
|
+ -system-xkbcommon .. Use the xkbcommon library from the operating system.
|
||||||
|
|
||||||
Additional options:
|
Additional options:
|
||||||
|
|
||||||
-make <part> ....... Add part to the list of parts to be built at make time.
|
-make <part> ....... Add part to the list of parts to be built at make time.
|
||||||
@ -3822,6 +3833,7 @@ static const char qt_configure_prefix_path_strs[][256 + 12] = {
|
|||||||
"qt_ssrtpath=$CFG_SYSROOT",
|
"qt_ssrtpath=$CFG_SYSROOT",
|
||||||
"qt_hpfxpath=$QT_HOST_PREFIX",
|
"qt_hpfxpath=$QT_HOST_PREFIX",
|
||||||
"qt_hbinpath=$QT_HOST_BINS",
|
"qt_hbinpath=$QT_HOST_BINS",
|
||||||
|
"qt_hlibpath=$QT_HOST_LIBS",
|
||||||
"qt_hdatpath=$QT_HOST_DATA",
|
"qt_hdatpath=$QT_HOST_DATA",
|
||||||
"qt_targspec=$shortxspec",
|
"qt_targspec=$shortxspec",
|
||||||
"qt_hostspec=$shortspec",
|
"qt_hostspec=$shortspec",
|
||||||
@ -3870,8 +3882,8 @@ fi
|
|||||||
# -----------------------------------------------------------------------------
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
# symlink includes
|
# symlink includes
|
||||||
if [ -n "$PERL" ] && [ -x "$relpath/bin/syncqt" ]; then
|
if [ -n "$PERL" ] && [ -x "$relpath/bin/syncqt.pl" ]; then
|
||||||
"$outpath/bin/syncqt" -minimal -module QtCore "$relpath" || exit 1
|
"$relpath/bin/syncqt.pl" -minimal -module QtCore "$relpath" || exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# $1: input variable name (awk regexp)
|
# $1: input variable name (awk regexp)
|
||||||
@ -5154,6 +5166,16 @@ if [ "$CFG_XCB" != "no" ]; then
|
|||||||
XCB_PACKAGES="xcb xcb-shm xcb-sync xcb-xfixes xcb-randr xcb-image xcb-keysyms xcb-icccm"
|
XCB_PACKAGES="xcb xcb-shm xcb-sync xcb-xfixes xcb-randr xcb-image xcb-keysyms xcb-icccm"
|
||||||
QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags $XCB_PACKAGES 2>/dev/null`"
|
QMAKE_CFLAGS_XCB="`$PKG_CONFIG --cflags $XCB_PACKAGES 2>/dev/null`"
|
||||||
QMAKE_LIBS_XCB="`$PKG_CONFIG --libs $XCB_PACKAGES 2>/dev/null`"
|
QMAKE_LIBS_XCB="`$PKG_CONFIG --libs $XCB_PACKAGES 2>/dev/null`"
|
||||||
|
# for xcb-xkb tests
|
||||||
|
QMAKE_CFLAGS_XKB="`$PKG_CONFIG --cflags xcb xcb-xkb 2>/dev/null`"
|
||||||
|
QMAKE_LIBS_XKB="`$PKG_CONFIG --libs xcb xcb-xkb 2>/dev/null`"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if compileTest qpa/xcb-xkb "xcb-xkb" $QMAKE_CFLAGS_XKB $QMAKE_LIBS_XKB; then
|
||||||
|
CFG_XKB=yes
|
||||||
|
else
|
||||||
|
CFG_XKB=no
|
||||||
|
QMakeVar add DEFINES QT_NO_XKB
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if compileTest qpa/xcb-syslibs "xcb-syslibs" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then
|
if compileTest qpa/xcb-syslibs "xcb-syslibs" $QMAKE_CFLAGS_XCB $QMAKE_LIBS_XCB; then
|
||||||
@ -5167,7 +5189,7 @@ if [ "$CFG_XCB" != "no" ]; then
|
|||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "The test for linking against libxcb and support libraries failed!"
|
echo "The test for linking against libxcb and support libraries failed!"
|
||||||
echo " You might need install dependency packages, or pass -qt-xcb."
|
echo " You might need to install dependency packages, or pass -qt-xcb."
|
||||||
echo " See src/plugins/platforms/xcb/README."
|
echo " See src/plugins/platforms/xcb/README."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@ -5257,18 +5279,34 @@ if [ "$CFG_KMS" != "no" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Detect libxkbcommon
|
# Detect libxkbcommon
|
||||||
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xkbcommon >= 0.2.0" 2>/dev/null; then
|
ORIG_CFG_XKBCOMMON="$CFG_XKBCOMMON"
|
||||||
QMAKE_CFLAGS_XKBCOMMON="`$PKG_CONFIG --cflags xkbcommon 2>/dev/null`"
|
if [ "$CFG_XKBCOMMON" != "qt" ]; then
|
||||||
QMAKE_LIBS_XKBCOMMON="`$PKG_CONFIG --libs xkbcommon 2>/dev/null`"
|
# currently only xcb platform plugin requires xkbcommon, for other platforms it can be set to 'no'
|
||||||
QT_CONFIG="$QT_CONFIG xkbcommon"
|
if [ "$CFG_XKBCOMMON" != "no" ]; then
|
||||||
CFG_XKBCOMMON=yes
|
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists "xkbcommon >= 0.2.0" 2>/dev/null; then
|
||||||
elif [ "$CFG_XCB" != "no" ]; then
|
QMAKE_CFLAGS_XKBCOMMON="`$PKG_CONFIG --cflags xkbcommon 2>/dev/null`"
|
||||||
QMakeVar add DEFINES QT_NO_XKBCOMMON
|
QMAKE_LIBS_XKBCOMMON="`$PKG_CONFIG --libs xkbcommon 2>/dev/null`"
|
||||||
|
QMAKE_VERSION_XKBCOMMON="`$PKG_CONFIG --modversion xkbcommon 2>/dev/null`"
|
||||||
|
|
||||||
|
QMakeVar set QMAKE_CFLAGS_XKBCOMMON "$QMAKE_CFLAGS_XKBCOMMON"
|
||||||
|
QMakeVar set QMAKE_LIBS_XKBCOMMON "$QMAKE_LIBS_XKBCOMMON"
|
||||||
|
QMakeVar set QMAKE_VERSION_XKBCOMMON "$QMAKE_VERSION_XKBCOMMON"
|
||||||
|
CFG_XKBCOMMON=yes
|
||||||
|
else
|
||||||
|
CFG_XKBCOMMON=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$CFG_XCB" != "no" ] && [ "$CFG_XKBCOMMON" = "no" ]; then
|
||||||
|
# use the bundled version instead
|
||||||
|
CFG_XKBCOMMON=qt
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CFG_XKBCOMMON" != "no" ]; then
|
if [ "$CFG_XKBCOMMON" = "qt" ]; then
|
||||||
QMakeVar set QMAKE_CFLAGS_XKBCOMMON "$QMAKE_CFLAGS_XKBCOMMON"
|
QT_CONFIG="$QT_CONFIG xkbcommon-qt"
|
||||||
QMakeVar set QMAKE_LIBS_XKBCOMMON "$QMAKE_LIBS_XKBCOMMON"
|
elif [ "$CFG_XKBCOMMON" = "no" ]; then
|
||||||
|
QMakeVar add DEFINES QT_NO_XKBCOMMON
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# EGL Support
|
# EGL Support
|
||||||
@ -6575,6 +6613,50 @@ fi
|
|||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
exec 3>&1 1>$outpath/config.summary # redirect output temporarily to config.summary
|
exec 3>&1 1>$outpath/config.summary # redirect output temporarily to config.summary
|
||||||
|
|
||||||
|
report_support()
|
||||||
|
{
|
||||||
|
case "$#,$2" in
|
||||||
|
2,auto)
|
||||||
|
# 2 arguments and the result is "auto", so just say "yes"
|
||||||
|
# this is usually an error in the configure script, but oh well..
|
||||||
|
echo "$1 yes"
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
[012],* | *,no*)
|
||||||
|
# 0, 1 or 2 arguments, or anything starting with "no"
|
||||||
|
# print just the first part of the argument (before the dash)
|
||||||
|
echo "$1 ${2%%-*}"
|
||||||
|
return
|
||||||
|
:;
|
||||||
|
esac
|
||||||
|
local heading
|
||||||
|
heading=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
local value
|
||||||
|
value=$1
|
||||||
|
shift
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
if [ "$value" = "$1" ]; then
|
||||||
|
echo "$heading yes ($2)"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
echo "$heading $value"
|
||||||
|
}
|
||||||
|
|
||||||
|
report_support_plugin()
|
||||||
|
{
|
||||||
|
report_support "$1" "$2-$3" \
|
||||||
|
yes-qt "in $4, using bundled copy" \
|
||||||
|
yes-system "in $4, using system library" \
|
||||||
|
plugin-qt "plugin, using bundled copy" \
|
||||||
|
plugin-system "plugin, using system library"
|
||||||
|
}
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo " Configure summary"
|
echo " Configure summary"
|
||||||
echo
|
echo
|
||||||
@ -6632,135 +6714,89 @@ fi
|
|||||||
# Qt modules
|
# Qt modules
|
||||||
echo
|
echo
|
||||||
echo "Qt modules and options:"
|
echo "Qt modules and options:"
|
||||||
[ "$CFG_DBUS" = "no" ] && echo " Qt D-Bus ............... no"
|
report_support " Qt D-Bus ..............." "$CFG_DBUS" yes "loading dbus-1 at runtime" linked "linked to dbus-1"
|
||||||
[ "$CFG_DBUS" = "yes" ] && echo " Qt D-Bus ............... yes (loading dbus-1 at runtime)"
|
report_support " Qt Concurrent .........." "$CFG_CONCURRENT"
|
||||||
[ "$CFG_DBUS" = "linked" ] && echo " Qt D-Bus ............... yes (linked to dbus-1)"
|
report_support " Qt GUI ................." "$CFG_GUI"
|
||||||
echo " Qt Concurrent .......... $CFG_CONCURRENT"
|
report_support " Qt Widgets ............." "$CFG_WIDGETS"
|
||||||
echo " Qt GUI ................. $CFG_GUI"
|
report_support " JavaScriptCore JIT ....." "$CFG_JAVASCRIPTCORE_JIT" auto "To be decided by JavaScriptCore"
|
||||||
echo " Qt Widgets ............. $CFG_WIDGETS"
|
report_support " QML debugging .........." "$CFG_QML_DEBUG"
|
||||||
if [ "$CFG_JAVASCRIPTCORE_JIT" = "auto" ]; then
|
report_support " Use system proxies ....." "$CFG_SYSTEM_PROXIES"
|
||||||
echo " JavaScriptCore JIT ..... To be decided by JavaScriptCore"
|
|
||||||
else
|
|
||||||
echo " JavaScriptCore JIT ..... $CFG_JAVASCRIPTCORE_JIT"
|
|
||||||
fi
|
|
||||||
echo " QML debugging .......... $CFG_QML_DEBUG"
|
|
||||||
echo " Use system proxies ..... $CFG_SYSTEM_PROXIES"
|
|
||||||
|
|
||||||
# Other things
|
# Other things
|
||||||
# Please keep sorted and properly grouped! The output is quite long, so it's
|
# Please keep sorted and properly grouped! The output is quite long, so it's
|
||||||
# hard to find something you're searching for if it's not sorted.
|
# hard to find something you're searching for if it's not sorted.
|
||||||
echo
|
echo
|
||||||
echo "Support enabled for:"
|
echo "Support enabled for:"
|
||||||
echo " Accessibility .......... $CFG_ACCESSIBILITY"
|
report_support " Accessibility .........." "$CFG_ACCESSIBILITY"
|
||||||
echo " ALSA ................... $CFG_ALSA"
|
report_support " ALSA ..................." "$CFG_ALSA"
|
||||||
echo " CUPS ................... $CFG_CUPS"
|
report_support " CUPS ..................." "$CFG_CUPS"
|
||||||
[ "$XPLATFORM_MINGW" = "yes" ] && \
|
[ "$XPLATFORM_MINGW" = "yes" ] && \
|
||||||
echo " DirectWrite ............ $CFG_DIRECTWRITE"
|
report_support " DirectWrite ............" "$CFG_DIRECTWRITE"
|
||||||
echo " FontConfig ............. $CFG_FONTCONFIG"
|
report_support " FontConfig ............." "$CFG_FONTCONFIG"
|
||||||
echo " Iconv .................. $CFG_ICONV"
|
report_support " Iconv .................." "$CFG_ICONV"
|
||||||
echo " ICU .................... $CFG_ICU"
|
report_support " ICU ...................." "$CFG_ICU"
|
||||||
echo " Image formats:"
|
report_support " Image formats:"
|
||||||
echo " GIF .................. $CFG_GIF"
|
report_support_plugin " GIF .................." "$CFG_GIF" system QtGui
|
||||||
if [ "$CFG_JPEG" = "no" ]; then
|
report_support_plugin " JPEG ................." "$CFG_JPEG" "$CFG_LIBJPEG" QtGui
|
||||||
echo " JPEG ................. $CFG_JPEG"
|
report_support_plugin " PNG .................." "$CFG_PNG" "$CFG_LIBPNG" QtGui
|
||||||
else
|
report_support " Glib ..................." "$CFG_GLIB"
|
||||||
echo " JPEG ................. $CFG_JPEG ($CFG_LIBJPEG)"
|
report_support " GStreamer .............." "$CFG_GSTREAMER"
|
||||||
fi
|
report_support " GTK theme .............." "$CFG_QGTKSTYLE"
|
||||||
if [ "$CFG_PNG" = "no" ]; then
|
report_support " Large File ............." "$CFG_LARGEFILE"
|
||||||
echo " PNG .................. $CFG_PNG"
|
report_support " libudev ................" "$CFG_LIBUDEV"
|
||||||
else
|
report_support " Networking:"
|
||||||
echo " PNG .................. $CFG_PNG ($CFG_LIBPNG)"
|
|
||||||
fi
|
|
||||||
echo " Glib ................... $CFG_GLIB"
|
|
||||||
echo " GStreamer .............. $CFG_GSTREAMER"
|
|
||||||
echo " GTK theme .............. $CFG_QGTKSTYLE"
|
|
||||||
echo " Large Files ............ $CFG_LARGEFILE"
|
|
||||||
echo " Networking:"
|
|
||||||
[ "$BUILD_ON_MAC" = "yes" ] && \
|
[ "$BUILD_ON_MAC" = "yes" ] && \
|
||||||
echo " CoreWlan ............. $CFG_COREWLAN"
|
report_support " CoreWlan ............." "$CFG_COREWLAN"
|
||||||
echo " getaddrinfo .......... $CFG_GETADDRINFO"
|
report_support " getaddrinfo .........." "$CFG_GETADDRINFO"
|
||||||
echo " getifaddrs ........... $CFG_GETIFADDRS"
|
report_support " getifaddrs ..........." "$CFG_GETIFADDRS"
|
||||||
echo " IPv6 ifname .......... $CFG_IPV6IFNAME"
|
report_support " IPv6 ifname .........." "$CFG_IPV6IFNAME"
|
||||||
OPENSSL_LINKAGE=""
|
report_support " OpenSSL .............." "$CFG_OPENSSL" yes "loading libraries at run-time" linked "linked to the libraries"
|
||||||
if [ "$CFG_OPENSSL" = "yes" ]; then
|
report_support " NIS ...................." "$CFG_NIS"
|
||||||
OPENSSL_LINKAGE="(loading libraries at run-time)"
|
report_support " OpenGL ................." "$CFG_OPENGL" yes "Desktop OpenGL" es2 "OpenGL ES 2.x"
|
||||||
elif [ "$CFG_OPENSSL" = "linked" ]; then
|
report_support " OpenVG ................." "$CFG_OPENVG-$CFG_OPENVG_SHIVA" yes-yes "ShivaVG" yes-no "native"
|
||||||
OPENSSL_LINKAGE="(linked to the libraries)"
|
report_support " PCRE ..................." "$CFG_PCRE" yes "system library" qt "bundled copy"
|
||||||
fi
|
|
||||||
echo " OpenSSL .............. $CFG_OPENSSL $OPENSSL_LINKAGE"
|
|
||||||
unset OPENSSL_LINKAGE
|
|
||||||
echo " NIS .................... $CFG_NIS"
|
|
||||||
if [ "$CFG_OPENGL" = "desktop" ]; then
|
|
||||||
echo " OpenGL ................. yes (Desktop OpenGL)"
|
|
||||||
elif [ "$CFG_OPENGL" = "es2" ]; then
|
|
||||||
echo " OpenGL ................. yes (OpenGL ES 2.x)"
|
|
||||||
else
|
|
||||||
echo " OpenGL ................. no"
|
|
||||||
fi
|
|
||||||
if [ "$CFG_OPENVG" ]; then
|
|
||||||
if [ "$CFG_OPENVG_SHIVA" = "yes" ]; then
|
|
||||||
echo " OpenVG ................. ShivaVG"
|
|
||||||
else
|
|
||||||
echo " OpenVG ................. $CFG_OPENVG"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ "$CFG_PCRE" = "no" ]; then
|
|
||||||
echo " PCRE ................... no"
|
|
||||||
else
|
|
||||||
pcre_sys=system
|
|
||||||
[ "$CFG_PCRE" = "qt" ] && pcre_sys=qt
|
|
||||||
echo " PCRE ................... yes ($pcre_sys)"
|
|
||||||
unset pcre_sys
|
|
||||||
fi
|
|
||||||
if [ -n "$PKG_CONFIG" ]; then
|
if [ -n "$PKG_CONFIG" ]; then
|
||||||
echo " pkg-config ............. yes"
|
report_support " pkg-config ............. yes"
|
||||||
else
|
else
|
||||||
echo " pkg-config ............. no"
|
report_support " pkg-config ............. no"
|
||||||
fi
|
fi
|
||||||
echo " PulseAudio ............. $CFG_PULSEAUDIO"
|
report_support " PulseAudio ............." "$CFG_PULSEAUDIO"
|
||||||
echo " QPA backends:"
|
report_support " QPA backends:"
|
||||||
echo " DirectFB ............. $CFG_DIRECTFB"
|
report_support " DirectFB ............." "$CFG_DIRECTFB"
|
||||||
echo " EGLFS ................ $CFG_EGLFS"
|
report_support " EGLFS ................" "$CFG_EGLFS"
|
||||||
echo " KMS .................. $CFG_KMS"
|
report_support " KMS .................." "$CFG_KMS"
|
||||||
echo " LinuxFB .............. $CFG_LINUXFB"
|
report_support " LinuxFB .............." "$CFG_LINUXFB"
|
||||||
echo " XCB .................. $CFG_XCB"
|
report_support " XCB .................." "$CFG_XCB" system "system library" qt "bundled copy"
|
||||||
if [ "$CFG_XCB" != "no" ]; then
|
if [ "$CFG_XCB" != "no" ]; then
|
||||||
echo " MIT-SHM ............ $CFG_MITSHM"
|
report_support " MIT-SHM ............" "$CFG_MITSHM"
|
||||||
echo " Xcursor ............ $CFG_XCURSOR"
|
report_support " Xcursor ............" "$CFG_XCURSOR" runtime "loaded at runtime"
|
||||||
echo " Xfixes ............. $CFG_XFIXES"
|
report_support " Xfixes ............." "$CFG_XFIXES" runtime "loaded at runtime"
|
||||||
echo " Xi ................. $CFG_XINPUT"
|
report_support " Xi ................." "$CFG_XINPUT" runtime "loaded at runtime"
|
||||||
echo " Xi2 ................ $CFG_XINPUT2"
|
report_support " Xi2 ................" "$CFG_XINPUT2" runtime "loaded at runtime"
|
||||||
echo " Xinerama ........... $CFG_XINERAMA"
|
report_support " Xinerama ..........." "$CFG_XINERAMA" runtime "loaded at runtime"
|
||||||
echo " Xrandr ............. $CFG_XRANDR"
|
report_support " Xrandr ............." "$CFG_XRANDR" runtime "loaded at runtime"
|
||||||
echo " Xrender ............ $CFG_XRENDER"
|
report_support " Xrender ............" "$CFG_XRENDER"
|
||||||
echo " XKB ................ $CFG_XKB"
|
report_support " XKB ................" "$CFG_XKB"
|
||||||
echo " XShape ............. $CFG_XSHAPE"
|
report_support " XShape ............." "$CFG_XSHAPE"
|
||||||
echo " XSync .............. $CFG_XSYNC"
|
report_support " XSync .............." "$CFG_XSYNC"
|
||||||
echo " XVideo ............. $CFG_XVIDEO"
|
report_support " XVideo ............." "$CFG_XVIDEO"
|
||||||
fi
|
fi
|
||||||
echo " Session management ..... $CFG_SM"
|
report_support " Session management ....." "$CFG_SM"
|
||||||
[ "$XPLATFORM_QNX" = "yes" ] && \
|
[ "$XPLATFORM_QNX" = "yes" ] && \
|
||||||
echo " SLOG2 .................. $CFG_SLOG2"
|
report_support " SLOG2 .................." "$CFG_SLOG2"
|
||||||
echo " SQL drivers:"
|
report_support " SQL drivers:"
|
||||||
echo " DB2 .................. $CFG_SQL_db2"
|
report_support " DB2 .................." "$CFG_SQL_db2" plugin "plugin" yes "built into QtSql"
|
||||||
echo " InterBase ............ $CFG_SQL_ibase"
|
report_support " InterBase ............" "$CFG_SQL_ibase" plugin "plugin" yes "built into QtSql"
|
||||||
echo " MySQL ................ $CFG_SQL_mysql"
|
report_support " MySQL ................" "$CFG_SQL_mysql" plugin "plugin" yes "built into QtSql"
|
||||||
echo " OCI .................. $CFG_SQL_oci"
|
report_support " OCI .................." "$CFG_SQL_oci" plugin "plugin" yes "built into QtSql"
|
||||||
echo " ODBC ................. $CFG_SQL_odbc"
|
report_support " ODBC ................." "$CFG_SQL_odbc" plugin "plugin" yes "built into QtSql"
|
||||||
echo " PostgreSQL ........... $CFG_SQL_psql"
|
report_support " PostgreSQL ..........." "$CFG_SQL_psql" plugin "plugin" yes "built into QtSql"
|
||||||
echo " SQLite 2 ............. $CFG_SQL_sqlite2"
|
report_support " SQLite 2 ............." "$CFG_SQL_sqlite2" plugin "plugin" yes "built into QtSql"
|
||||||
echo " SQLite ............... $CFG_SQL_sqlite ($CFG_SQLITE)"
|
report_support_plugin " SQLite ..............." "$CFG_SQL_sqlite" "$CFG_SQLITE" QtSql
|
||||||
echo " TDS .................. $CFG_SQL_tds"
|
report_support " TDS .................." "$CFG_SQL_tds" plugin "plugin" yes "built into QtSql"
|
||||||
echo " udev ................... $CFG_LIBUDEV"
|
report_support " udev ..................." "$CFG_LIBUDEV"
|
||||||
echo " xkbcommon .............. $CFG_XKBCOMMON"
|
report_support " xkbcommon .............." "$CFG_XKBCOMMON" system "system library" qt "bundled copy"
|
||||||
if [ "$CFG_ZLIB" = "no" ]; then
|
report_support " zlib ..................." "$CFG_ZLIB" system "system library" yes "bundled copy"
|
||||||
echo " zlib ................... no"
|
|
||||||
else
|
|
||||||
zlib_sys=system
|
|
||||||
[ "$CFG_ZLIB" = "yes" ] && zlib_sys=qt
|
|
||||||
echo " zlib ................... yes ($zlib_sys)"
|
|
||||||
unset zlib_sys
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
@ -6780,10 +6816,9 @@ if [ "$CFG_OPENSSL" = "linked" ] && [ "$OPENSSL_LIBS" = "" ]; then
|
|||||||
echo " OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked"
|
echo " OPENSSL_LIBS='-L/opt/ssl/lib -lssl -lcrypto' ./configure -openssl-linked"
|
||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
if [ "$CFG_XCB" != no ] && [ "$CFG_XKBCOMMON" = "no" ]; then
|
if [ "$ORIG_CFG_XKBCOMMON" != qt ] && [ "$CFG_XKBCOMMON" = qt ]; then
|
||||||
echo "WARNING: XCB support enabled but libxkbcommon 0.2.0 (or higher) not found."
|
echo "NOTE: libxkbcommon 0.2.0 (or higher) not found on the system, will use "
|
||||||
echo "Not satisfying this requirement will disable the compose key functionality,"
|
echo "the bundled version from 3rd party directory."
|
||||||
echo "which includes text input with dead keys."
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
exec 1>&3 3>&- # restore stdout
|
exec 1>&3 3>&- # restore stdout
|
||||||
|
@ -55,7 +55,7 @@ if not exist mkspecs (
|
|||||||
md mkspecs
|
md mkspecs
|
||||||
if errorlevel 1 goto exit
|
if errorlevel 1 goto exit
|
||||||
)
|
)
|
||||||
perl %QTSRC%bin\syncqt -minimal -module QtCore -outdir %QTDIR% %QTSRC%
|
perl %QTSRC%bin\syncqt.pl -minimal -module QtCore -outdir %QTDIR% %QTSRC%
|
||||||
if errorlevel 1 goto exit
|
if errorlevel 1 goto exit
|
||||||
|
|
||||||
if not exist tools\configure (
|
if not exist tools\configure (
|
||||||
|
2
dist/changes-5.0.0
vendored
@ -945,7 +945,7 @@ Qt for Windows CE
|
|||||||
* QMAKE_SUBSTITUTES can now copy files verbatim.
|
* QMAKE_SUBSTITUTES can now copy files verbatim.
|
||||||
* MSVC desktop builds now use -Zc:wchar_t.
|
* MSVC desktop builds now use -Zc:wchar_t.
|
||||||
* The following variables were added: QMAKESPEC, _QMAKE_CONF_ & _QMAKE_SUPER_CACHE_.
|
* The following variables were added: QMAKESPEC, _QMAKE_CONF_ & _QMAKE_SUPER_CACHE_.
|
||||||
* QDBUSXML2CPP_{INTERFACES,ADAPTORS}_{HEADER,SOURCE}_FLAGS are now understood,
|
* QDBUSXML2CPP_{INTERFACE,ADAPTOR}_{HEADER,SOURCE}_FLAGS are now understood,
|
||||||
and DBUS_{INTERFACES,ADAPTORS} support file groups with individual flags now.
|
and DBUS_{INTERFACES,ADAPTORS} support file groups with individual flags now.
|
||||||
* QT_PRIVATE and PKGCONFIG_PRIVATE (analogous to LIBS_PRIVATE resp. PKGCONFIG) are now understood.
|
* QT_PRIVATE and PKGCONFIG_PRIVATE (analogous to LIBS_PRIVATE resp. PKGCONFIG) are now understood.
|
||||||
* INSTALLS entries now support copying with subdirectory (e.g., entry.base = $$dirname(PWD)).
|
* INSTALLS entries now support copying with subdirectory (e.g., entry.base = $$dirname(PWD)).
|
||||||
|
8
dist/changes-5.1.0
vendored
@ -41,6 +41,14 @@ Third party components
|
|||||||
* [QTBUG-8836] QAbstractItemView now allows manual deselect in
|
* [QTBUG-8836] QAbstractItemView now allows manual deselect in
|
||||||
SingleSelection mode (with control modifier)
|
SingleSelection mode (with control modifier)
|
||||||
|
|
||||||
|
- QtCore
|
||||||
|
|
||||||
|
* The serialization behavior for QDateTime has reverted to pre-Qt 5,
|
||||||
|
due to the issue mentioned in section 4 here:
|
||||||
|
http://lists.qt-project.org/pipermail/development/2013-March/010559.html
|
||||||
|
|
||||||
|
This means that the QDataStream version will be 14 with Qt 5.1.
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Library *
|
* Library *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
@ -62,28 +62,28 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.cmake.org/cmake/help/v2.8.9/cmake.html#command:find_package
|
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:find_package
|
||||||
\title CMake find_package Documentation
|
\title CMake find_package Documentation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.cmake.org/cmake/help/v2.8.9/cmake.html#prop_tgt:AUTOMOC
|
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:AUTOMOC
|
||||||
\title CMake AUTOMOC Documentation
|
\title CMake AUTOMOC Documentation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.cmake.org/cmake/help/v2.8.9/cmake.html#prop_tgt:LOCATION
|
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:LOCATION
|
||||||
\title CMake LOCATION Documentation
|
\title CMake LOCATION Documentation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.cmake.org/cmake/help/v2.8.9/cmake.html#prop_tgt:POSITION_INDEPENDENT_CODE
|
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#prop_tgt:POSITION_INDEPENDENT_CODE
|
||||||
\title CMake POSITION_INDEPENDENT_CODE Documentation
|
\title CMake POSITION_INDEPENDENT_CODE Documentation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.cmake.org/cmake/help/v2.8.9/cmake.html#command:target_link_libraries
|
\externalpage http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:target_link_libraries
|
||||||
\title CMake target_link_libraries Documentation
|
\title CMake target_link_libraries Documentation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -259,22 +259,22 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.amazon.com/exec/obidos/ASIN/0134436989/trolltech/t
|
\externalpage http://www.amazon.com/Threads-Primer-Guide-Multithreaded-Programming/dp/0134436989/ref=sr_1_1?ie=UTF8&qid=1354884049&sr=8-1&keywords=a+guide+to+multithreaded+programming
|
||||||
\title Threads Primer: A Guide to Multithreaded Programming
|
\title Threads Primer: A Guide to Multithreaded Programming
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.amazon.com/exec/obidos/ASIN/0131900676/trolltech/t
|
\externalpage http://www.amazon.com/Thread-Time-MultiThreaded-Programming-Guide/dp/0131900676/ref=sr_1_sc_3?ie=UTF8&qid=1354884427&sr=8-3-spell&keywords=The+Mulltithread+Programming+Guide
|
||||||
\title Thread Time: The Multithreaded Programming Guide
|
\title Thread Time: The Multithreaded Programming Guide
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.amazon.com/exec/obidos/ASIN/1565921151/trolltech/t
|
\externalpage http://www.amazon.com/Pthreads-Programming-Standard-Multiprocessing-Nutshell/dp/1565921151/ref=sr_1_1?s=books&ie=UTF8&qid=1354884565&sr=1-1&keywords=threads+Programming%3A+A+POSIX+Standard+for+Better+Multiprocessing
|
||||||
\title Pthreads Programming: A POSIX Standard for Better Multiprocessing
|
\title Pthreads Programming: A POSIX Standard for Better Multiprocessing
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://www.amazon.com/exec/obidos/ASIN/1565922964/trolltech/t
|
\externalpage http://www.amazon.com/Win32-Multithreaded-Programming-Aaron-Cohen/dp/B00007GW3Z/ref=sr_1_1?s=books&ie=UTF8&qid=1354884647&sr=1-1&keywords=Win32+Multithreaded+Programming
|
||||||
\title Win32 Multithreaded Programming
|
\title Win32 Multithreaded Programming
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
\title external: Publishing Applications to Ovi Store
|
\title external: Publishing Applications to Ovi Store
|
||||||
*/
|
*/
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://doc.qt.digia.com/qtcreator/index.html
|
\externalpage http://qt-project.org/doc/qtcreator
|
||||||
\title external: Qt Creator Manual
|
\title external: Qt Creator Manual
|
||||||
*/
|
*/
|
||||||
/*!
|
/*!
|
||||||
@ -90,6 +90,6 @@
|
|||||||
\title external: Qt Mobility Examples
|
\title external: Qt Mobility Examples
|
||||||
*/
|
*/
|
||||||
/*!
|
/*!
|
||||||
\externalpage http://doc-snapshot.qt-project.org/qtcreator-2.6/creator-overview.html
|
\externalpage http://qt-project.org/doc/qtcreator/creator-overview.html
|
||||||
\title external: Qt Creator Overview
|
\title external: Qt Creator Overview
|
||||||
*/
|
*/
|
||||||
|
@ -90,3 +90,18 @@
|
|||||||
\externalpage http://qt-project.org/wiki/jom
|
\externalpage http://qt-project.org/wiki/jom
|
||||||
\title jom
|
\title jom
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\externalpage http://qt-project.org/doc/qt-4.8
|
||||||
|
\title Qt 4.8 Reference Documentation
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\externalpage http://qt-project.org/doc/qt-4.8/qtquick.html
|
||||||
|
\title Qt Quick 1 Reference Documentation
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\externalpage http://qt-project.org/wiki/Qt-Localization
|
||||||
|
\title external: Translating Qt Into Other Languages
|
||||||
|
*/
|
||||||
|
@ -31,3 +31,42 @@
|
|||||||
#
|
#
|
||||||
# manifestmeta.global.names = *
|
# manifestmeta.global.names = *
|
||||||
# manifestmeta.global.tags = qt5
|
# manifestmeta.global.tags = qt5
|
||||||
|
|
||||||
|
manifestmeta.filters = highlighted webkit1 webkit2
|
||||||
|
|
||||||
|
manifestmeta.highlighted.names = "QtQuick/Qt Quick Demo - Same Game" \
|
||||||
|
"QtQuick/Qt Quick Demo - Photo Surface" \
|
||||||
|
"QtQuick/Qt Quick Demo - Tweet Search" \
|
||||||
|
"QtQuick/Qt Quick Demo - Maroon*" \
|
||||||
|
"QtQuick/Qt Quick Demo - Calqlatr" \
|
||||||
|
"QtQuick/Qt Quick Particles Examples - Emitters" \
|
||||||
|
"QtQuick/Qt Quick Examples - Shader Effects" \
|
||||||
|
"QtWebKitExamples/Fancy Browser" \
|
||||||
|
"QtWebKitExamples/Flickr View Example" \
|
||||||
|
"QtWebKitExamples/YouTube View Example" \
|
||||||
|
"QtQuickControls/Qt Quick Controls - Gallery" \
|
||||||
|
"QtQuickControls/Qt Quick Controls - Text Editor Example" \
|
||||||
|
"QtQuickControls/Qt Quick Controls - Table View Example" \
|
||||||
|
"QtWidgets/Application Example"
|
||||||
|
|
||||||
|
manifestmeta.highlighted.attributes = isHighlighted:true
|
||||||
|
|
||||||
|
# Add 'webkit1' tag for QtWebKit1 examples
|
||||||
|
manifestmeta.webkit1.names = "QtWebKitExamples/Tab Browser" \
|
||||||
|
"QtWebKitExamples/DOM Traversal Example" \
|
||||||
|
"QtWebKitExamples/Fancy Browser Example" \
|
||||||
|
"QtWebKitExamples/Form Extractor Example" \
|
||||||
|
"QtWebKitExamples/WebKit Frame Capture Example" \
|
||||||
|
"QtWebKitExamples/The Webkit Bridge Tutorial*" \
|
||||||
|
"QtWebKitExamples/Previewer Example" \
|
||||||
|
"QtWebKitExamples/Wheel Scroller Example" \
|
||||||
|
"QtWebKitExamples/Simple Selector Example" \
|
||||||
|
"QtWebKitExamples/QObject XML Model Example"
|
||||||
|
|
||||||
|
manifestmeta.webkit1.tags = webkit1
|
||||||
|
|
||||||
|
# Add 'webkit2' tag for QtWebKit2 examples
|
||||||
|
manifestmeta.webkit2.names = "QtWebKitExamples/Flickr View Example" \
|
||||||
|
"QtWebKitExamples/YouTube View Example"
|
||||||
|
|
||||||
|
manifestmeta.webkit2.tags = webkit2
|
||||||
|
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 147 KiB |
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example dbus/remotecontrolledcar
|
\example remotecontrolledcar
|
||||||
\title D-Bus Remote Controlled Car Example
|
\title D-Bus Remote Controlled Car Example
|
||||||
|
|
||||||
The Remote Controlled Car example shows how to use D-Bus to control one
|
The Remote Controlled Car example shows how to use D-Bus to control one
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example network/download
|
\example download
|
||||||
\title Network Download Example
|
\title Network Download Example
|
||||||
\brief Demonstrates how to use networking APIs for multiple downloads
|
\brief Demonstrates how to use networking APIs for multiple downloads
|
||||||
\ingroup examples-network
|
\ingroup examples-network
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example network/downloadmanager
|
\example downloadmanager
|
||||||
\title Network Download Manager Example
|
\title Network Download Manager Example
|
||||||
\brief Demonstrates how to use the networking APIs for multiple downloads
|
\brief Demonstrates how to use the networking APIs for multiple downloads
|
||||||
\ingroup examples-network
|
\ingroup examples-network
|
||||||
|
@ -175,7 +175,7 @@ QSlider *MainWindow::createSlider(const char *changedSignal,
|
|||||||
void MainWindow::setPixmap(const QPixmap &pixmap)
|
void MainWindow::setPixmap(const QPixmap &pixmap)
|
||||||
{
|
{
|
||||||
pixmapLabel->setPixmap(pixmap);
|
pixmapLabel->setPixmap(pixmap);
|
||||||
QSize size = pixmap.size();
|
QSize size = pixmap.size() / pixmap.devicePixelRatio();
|
||||||
if (size - QSize(1, 0) == pixmapLabelArea->maximumViewportSize())
|
if (size - QSize(1, 0) == pixmapLabelArea->maximumViewportSize())
|
||||||
size -= QSize(1, 0);
|
size -= QSize(1, 0);
|
||||||
pixmapLabel->resize(size);
|
pixmapLabel->resize(size);
|
||||||
|
@ -161,7 +161,8 @@ void GLWidget::paintEvent(QPaintEvent *event)
|
|||||||
static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
|
static GLfloat lightPosition[4] = { 0.5, 5.0, 7.0, 1.0 };
|
||||||
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
|
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
|
||||||
|
|
||||||
setupViewport(width(), height());
|
qreal pixelRatio = devicePixelRatio();
|
||||||
|
setupViewport(width() * pixelRatio, height() * pixelRatio);
|
||||||
//! [6]
|
//! [6]
|
||||||
|
|
||||||
//! [7]
|
//! [7]
|
||||||
@ -200,7 +201,8 @@ void GLWidget::paintEvent(QPaintEvent *event)
|
|||||||
//! [11]
|
//! [11]
|
||||||
void GLWidget::resizeGL(int width, int height)
|
void GLWidget::resizeGL(int width, int height)
|
||||||
{
|
{
|
||||||
setupViewport(width, height);
|
qreal pixelRatio = devicePixelRatio();
|
||||||
|
setupViewport(width*pixelRatio, height*pixelRatio);
|
||||||
}
|
}
|
||||||
//! [11]
|
//! [11]
|
||||||
|
|
||||||
|
@ -88,14 +88,10 @@ PaintedWindow::PaintedWindow()
|
|||||||
connect(this, SIGNAL(rotationChanged(qreal)), this, SLOT(paint()));
|
connect(this, SIGNAL(rotationChanged(qreal)), this, SLOT(paint()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaintedWindow::resizeEvent(QResizeEvent *)
|
|
||||||
{
|
|
||||||
paint();
|
|
||||||
}
|
|
||||||
|
|
||||||
void PaintedWindow::exposeEvent(QExposeEvent *)
|
void PaintedWindow::exposeEvent(QExposeEvent *)
|
||||||
{
|
{
|
||||||
paint();
|
if (isExposed())
|
||||||
|
paint();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaintedWindow::mousePressEvent(QMouseEvent *)
|
void PaintedWindow::mousePressEvent(QMouseEvent *)
|
||||||
|
@ -74,7 +74,6 @@ private slots:
|
|||||||
void rotationDone();
|
void rotationDone();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void resizeEvent(QResizeEvent *);
|
|
||||||
void exposeEvent(QExposeEvent *);
|
void exposeEvent(QExposeEvent *);
|
||||||
void mousePressEvent(QMouseEvent *);
|
void mousePressEvent(QMouseEvent *);
|
||||||
|
|
||||||
|
@ -78,55 +78,38 @@ static bool createConnection()
|
|||||||
query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
|
query.exec("insert into person values(104, 'Roberto', 'Robitaille')");
|
||||||
query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
|
query.exec("insert into person values(105, 'Maria', 'Papadopoulos')");
|
||||||
|
|
||||||
query.exec("create table offices (id int primary key,"
|
query.exec("create table items (id int primary key,"
|
||||||
"imagefile int,"
|
"imagefile int,"
|
||||||
"location varchar(20),"
|
"itemtype varchar(20),"
|
||||||
"country varchar(20),"
|
|
||||||
"description varchar(100))");
|
"description varchar(100))");
|
||||||
query.exec("insert into offices "
|
query.exec("insert into items "
|
||||||
"values(0, 0, 'Oslo', 'Norway',"
|
"values(0, 0, 'Qt',"
|
||||||
"'Oslo is home to more than 500 000 citizens and has a "
|
"'Qt is a full development framework with tools designed to "
|
||||||
"lot to offer.It has been called \"The city with the big "
|
"streamline the creation of stunning applications and "
|
||||||
"heart\" and this is a nickname we are happy to live up to.')");
|
"amazing user interfaces for desktop, embedded and mobile "
|
||||||
query.exec("insert into offices "
|
"platforms.')");
|
||||||
"values(1, 1, 'Brisbane', 'Australia',"
|
query.exec("insert into items "
|
||||||
"'Brisbane is the capital of Queensland, the Sunshine State, "
|
"values(1, 1, 'Qt Quick',"
|
||||||
"where it is beautiful one day, perfect the next. "
|
"'Qt Quick is a collection of techniques designed to help "
|
||||||
"Brisbane is Australia''s 3rd largest city, being home "
|
"developers create intuitive, modern-looking, and fluid "
|
||||||
"to almost 2 million people.')");
|
"user interfaces using a CSS & JavaScript like language.')");
|
||||||
query.exec("insert into offices "
|
query.exec("insert into items "
|
||||||
"values(2, 2, 'Redwood City', 'US',"
|
"values(2, 2, 'Qt Creator',"
|
||||||
"'You find Redwood City in the heart of the Bay Area "
|
"'Qt Creator is a powerful cross-platform integrated "
|
||||||
"just north of Silicon Valley. The largest nearby city is "
|
"development environment (IDE), including UI design tools "
|
||||||
"San Jose which is the third largest city in California "
|
"and on-device debugging.')");
|
||||||
"and the 10th largest in the US.')");
|
query.exec("insert into items "
|
||||||
query.exec("insert into offices "
|
"values(3, 3, 'Qt Project',"
|
||||||
"values(3, 3, 'Berlin', 'Germany',"
|
"'The Qt Project governs the open source development of Qt, "
|
||||||
"'Berlin, the capital of Germany is dynamic, cosmopolitan "
|
"allowing anyone wanting to contribute to join the effort "
|
||||||
"and creative, allowing for every kind of lifestyle. "
|
"through a meritocratic structure of approvers and "
|
||||||
"East meets West in the metropolis at the heart of a "
|
"maintainers.')");
|
||||||
"changing Europe.')");
|
|
||||||
query.exec("insert into offices "
|
|
||||||
"values(4, 4, 'Munich', 'Germany',"
|
|
||||||
"'Several technology companies are represented in Munich, "
|
|
||||||
"and the city is often called the \"Bavarian Silicon Valley\". "
|
|
||||||
"The exciting city is also filled with culture, "
|
|
||||||
"art and music. ')");
|
|
||||||
query.exec("insert into offices "
|
|
||||||
"values(5, 5, 'Beijing', 'China',"
|
|
||||||
"'Beijing as a capital city has more than 3000 years of "
|
|
||||||
"history. Today the city counts 12 million citizens, and "
|
|
||||||
"is the political, economic and cultural centre of China.')");
|
|
||||||
|
|
||||||
query.exec("create table images (locationid int, file varchar(20))");
|
|
||||||
query.exec("insert into images values(0, 'images/oslo.png')");
|
|
||||||
query.exec("insert into images values(1, 'images/brisbane.png')");
|
|
||||||
query.exec("insert into images values(2, 'images/redwood.png')");
|
|
||||||
query.exec("insert into images values(3, 'images/berlin.png')");
|
|
||||||
query.exec("insert into images values(4, 'images/munich.png')");
|
|
||||||
query.exec("insert into images values(5, 'images/beijing.png')");
|
|
||||||
|
|
||||||
|
|
||||||
|
query.exec("create table images (itemid int, file varchar(20))");
|
||||||
|
query.exec("insert into images values(0, 'images/qt-logo.png')");
|
||||||
|
query.exec("insert into images values(1, 'images/qt-quick.png')");
|
||||||
|
query.exec("insert into images values(2, 'images/qt-creator.png')");
|
||||||
|
query.exec("insert into images values(3, 'images/qt-project.png')");
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Before Width: | Height: | Size: 125 KiB After Width: | Height: | Size: 52 KiB |
@ -37,20 +37,19 @@
|
|||||||
\image drilldown-example.png Screenshot of the Drill Down Example
|
\image drilldown-example.png Screenshot of the Drill Down Example
|
||||||
|
|
||||||
When running the example application, a user can retrieve
|
When running the example application, a user can retrieve
|
||||||
information about each of Nokia's Qt offices by clicking the
|
information about each item by clicking the corresponding image.
|
||||||
corresponding image. The application pops up an information window
|
The application pops up an information window displaying the data,
|
||||||
displaying the data, and allows the users to alter the location
|
and allows the users to alter the description as well as the image.
|
||||||
description as well as the image. The main view will be updated
|
The main view will be updated when the users submit their changes.
|
||||||
when the users submit their changes.
|
|
||||||
|
|
||||||
The example consists of three classes:
|
The example consists of three classes:
|
||||||
|
|
||||||
\list
|
\list
|
||||||
\li \c ImageItem is a custom graphics item class used to
|
\li \c ImageItem is a custom graphics item class used to
|
||||||
display the office images.
|
display the images.
|
||||||
|
|
||||||
\li \c View is the main application widget allowing the user to
|
\li \c View is the main application widget allowing the user to
|
||||||
browse through the various locations.
|
browse through the various items.
|
||||||
|
|
||||||
\li \c InformationWindow displays the requested information,
|
\li \c InformationWindow displays the requested information,
|
||||||
allowing the users to alter it and submit their changes to the
|
allowing the users to alter it and submit their changes to the
|
||||||
@ -70,7 +69,7 @@
|
|||||||
\snippet drilldown/informationwindow.h 0
|
\snippet drilldown/informationwindow.h 0
|
||||||
|
|
||||||
When we create an information window, we pass the associated
|
When we create an information window, we pass the associated
|
||||||
location ID, a parent, and a pointer to the database, to the
|
item ID, a parent, and a pointer to the database, to the
|
||||||
constructor. We will use the database pointer to populate our
|
constructor. We will use the database pointer to populate our
|
||||||
window with data, while passing the parent parameter on to the
|
window with data, while passing the parent parameter on to the
|
||||||
base class. The ID is stored for future reference.
|
base class. The ID is stored for future reference.
|
||||||
@ -84,7 +83,7 @@
|
|||||||
|
|
||||||
\snippet drilldown/informationwindow.h 1
|
\snippet drilldown/informationwindow.h 1
|
||||||
|
|
||||||
Since we allow the users to alter some of the location data, we
|
Since we allow the users to alter some of the data, we
|
||||||
must provide functionality for reverting and submitting their
|
must provide functionality for reverting and submitting their
|
||||||
changes. The \c enableButtons() slot is provided for convenience
|
changes. The \c enableButtons() slot is provided for convenience
|
||||||
to enable and disable the various buttons when required.
|
to enable and disable the various buttons when required.
|
||||||
@ -93,15 +92,15 @@
|
|||||||
|
|
||||||
The \c createButtons() function is also a convenience function,
|
The \c createButtons() function is also a convenience function,
|
||||||
provided to simplify the constructor. As mentioned above we store
|
provided to simplify the constructor. As mentioned above we store
|
||||||
the location ID for future reference. We also store the name of
|
the item ID for future reference. We also store the name of
|
||||||
the currently displayed image file to be able to determine when to
|
the currently displayed image file to be able to determine when to
|
||||||
emit the \c imageChanged() signal.
|
emit the \c imageChanged() signal.
|
||||||
|
|
||||||
The information window uses the QLabel class to display the office
|
The information window uses the QLabel class to display the name of
|
||||||
location and the country. The associated image file is displayed
|
an item. The associated image file is displayed using a QComboBox
|
||||||
using a QComboBox instance while the description is displayed using
|
instance while the description is displayed using QTextEdit. In
|
||||||
QTextEdit. In addition, the window has three buttons to control
|
addition, the window has three buttons to control the data flow and
|
||||||
the data flow and whether the window is shown or not.
|
whether the window is shown or not.
|
||||||
|
|
||||||
Finally, we declare a \e mapper. The QDataWidgetMapper class
|
Finally, we declare a \e mapper. The QDataWidgetMapper class
|
||||||
provides mapping between a section of a data model to widgets. We
|
provides mapping between a section of a data model to widgets. We
|
||||||
@ -110,7 +109,7 @@
|
|||||||
|
|
||||||
\section1 InformationWindow Class Implementation
|
\section1 InformationWindow Class Implementation
|
||||||
|
|
||||||
The constructor takes three arguments: a location ID, a database
|
The constructor takes three arguments: an item ID, a database
|
||||||
pointer and a parent widget. The database pointer is actually a
|
pointer and a parent widget. The database pointer is actually a
|
||||||
pointer to a QSqlRelationalTableModel object providing an editable
|
pointer to a QSqlRelationalTableModel object providing an editable
|
||||||
data model (with foreign key support) for our database table.
|
data model (with foreign key support) for our database table.
|
||||||
@ -125,8 +124,8 @@
|
|||||||
|
|
||||||
\snippet drilldown/informationwindow.cpp 2
|
\snippet drilldown/informationwindow.cpp 2
|
||||||
|
|
||||||
In this example, the information about the offices are stored in a
|
In this example, information about the items are stored in a
|
||||||
database table called "offices". When creating the model,
|
database table called "items". When creating the model,
|
||||||
we will use a foreign key to establish a relation between this
|
we will use a foreign key to establish a relation between this
|
||||||
table and a second data base table, "images", containing the names
|
table and a second data base table, "images", containing the names
|
||||||
of the available image files. We will get back to how this is done
|
of the available image files. We will get back to how this is done
|
||||||
@ -140,7 +139,7 @@
|
|||||||
the foreign key (in this case the "imagefile" column number) as
|
the foreign key (in this case the "imagefile" column number) as
|
||||||
argument. We use QComboBox's \l {QComboBox::}{setModel()} function
|
argument. We use QComboBox's \l {QComboBox::}{setModel()} function
|
||||||
to make the combobox use the "images" model. And, since this model
|
to make the combobox use the "images" model. And, since this model
|
||||||
has two columns ("locationid" and "file"), we also specify which
|
has two columns ("itemid" and "file"), we also specify which
|
||||||
column we want to be visible using the QComboBox::setModelColumn()
|
column we want to be visible using the QComboBox::setModelColumn()
|
||||||
function.
|
function.
|
||||||
|
|
||||||
@ -156,7 +155,7 @@
|
|||||||
section is a column in the model, otherwise it is a row. We call
|
section is a column in the model, otherwise it is a row. We call
|
||||||
the \l {QDataWidgetMapper::}{setCurrentIndex()} function to
|
the \l {QDataWidgetMapper::}{setCurrentIndex()} function to
|
||||||
initialize the widgets with the data associated with the given
|
initialize the widgets with the data associated with the given
|
||||||
location ID. Every time the current index changes, all the widgets
|
item ID. Every time the current index changes, all the widgets
|
||||||
are updated with the contents from the model.
|
are updated with the contents from the model.
|
||||||
|
|
||||||
We also set the mapper's submit policy to
|
We also set the mapper's submit policy to
|
||||||
@ -168,14 +167,14 @@
|
|||||||
view should use for its items. The QSqlRelationalDelegate class
|
view should use for its items. The QSqlRelationalDelegate class
|
||||||
represents a delegate that unlike the default delegate, enables
|
represents a delegate that unlike the default delegate, enables
|
||||||
combobox functionality for fields that are foreign keys into other
|
combobox functionality for fields that are foreign keys into other
|
||||||
tables (like "imagefile" in our "trolltechoffices" table).
|
tables (like "imagefile" in our "items" table).
|
||||||
|
|
||||||
\snippet drilldown/informationwindow.cpp 4
|
\snippet drilldown/informationwindow.cpp 4
|
||||||
|
|
||||||
Finally, we connect the "something's changed" signals in the
|
Finally, we connect the "something's changed" signals in the
|
||||||
editors to our custom \c enableButtons() slot, enabling the users
|
editors to our custom \c enableButtons() slot, enabling the users
|
||||||
to either submit or revert their changes. We add all the widgets
|
to either submit or revert their changes. We add all the widgets
|
||||||
into a layout, store the location ID and the name of the displayed
|
into a layout, store the item ID and the name of the displayed
|
||||||
image file for future reference, and set the window title and
|
image file for future reference, and set the window title and
|
||||||
initial size.
|
initial size.
|
||||||
|
|
||||||
@ -189,7 +188,7 @@
|
|||||||
application exits (i.e., if the user closes the information
|
application exits (i.e., if the user closes the information
|
||||||
window, it is only hidden). For this reason we do not want to
|
window, it is only hidden). For this reason we do not want to
|
||||||
create more than one \c InformationWindow object for each
|
create more than one \c InformationWindow object for each
|
||||||
location, and we provide the public \c id() function to be able to
|
item, and we provide the public \c id() function to be able to
|
||||||
determine whether a window already exists for a given location
|
determine whether a window already exists for a given location
|
||||||
when the user requests information about it.
|
when the user requests information about it.
|
||||||
|
|
||||||
@ -256,16 +255,15 @@
|
|||||||
{QDialogButtonBox::ButtonRole}{reject} role indicates that
|
{QDialogButtonBox::ButtonRole}{reject} role indicates that
|
||||||
clicking the button causes the dialog to be rejected. On the other
|
clicking the button causes the dialog to be rejected. On the other
|
||||||
hand, since we only hide the information window, any changes that
|
hand, since we only hide the information window, any changes that
|
||||||
the user has made wil be preserved until the user expliclity
|
the user has made will be preserved until the user explicitly
|
||||||
revert or submit them.
|
reverts or submits them.
|
||||||
|
|
||||||
\snippet drilldown/informationwindow.cpp 10
|
\snippet drilldown/informationwindow.cpp 10
|
||||||
|
|
||||||
The \c enableButtons() slot is called to enable the buttons
|
The \c enableButtons() slot is called to enable the buttons
|
||||||
whenever the user changes the presented data. Likewise, when the
|
whenever the user changes the presented data. Likewise, when the
|
||||||
data the user choose to submit the changes, the buttons are
|
user chooses to submit the changes, the buttons are disabled to
|
||||||
disabled to indicate that the current data is stored in the
|
indicate that the current data is stored in the database.
|
||||||
database.
|
|
||||||
|
|
||||||
This completes the \c InformationWindow class. Let's take a look
|
This completes the \c InformationWindow class. Let's take a look
|
||||||
at how we have used it in our example application.
|
at how we have used it in our example application.
|
||||||
@ -280,19 +278,17 @@
|
|||||||
\snippet drilldown/view.h 1
|
\snippet drilldown/view.h 1
|
||||||
|
|
||||||
The QGraphicsView class is part of the \l {Graphics View
|
The QGraphicsView class is part of the \l {Graphics View
|
||||||
Framework} which we will use to display the images of Nokia's
|
Framework} which we will use to display the images. To be able to
|
||||||
Qt offices. To be able to respond to user interaction;
|
respond to user interaction by displaying the appropriate
|
||||||
i.e., showing the
|
information window when the image is clicked, we reimplement
|
||||||
appropriate information window whenever the user clicks one of the
|
QGraphicsView's \l{QGraphicsView::}{mouseReleaseEvent()} function.
|
||||||
office images, we reimplement QGraphicsView's \l
|
|
||||||
{QGraphicsView::}{mouseReleaseEvent()} function.
|
|
||||||
|
|
||||||
Note that the constructor expects the names of two database
|
Note that the constructor expects the names of two database
|
||||||
tables: One containing the detailed information about the offices,
|
tables: One containing the detailed information about the items,
|
||||||
and another containing the names of the available image files. We
|
and another containing the names of the available image files. We
|
||||||
also provide a private \c updateImage() slot to catch \c
|
also provide a private \c updateImage() slot to catch \c
|
||||||
{InformationWindow}'s \c imageChanged() signal that is emitted
|
{InformationWindow}'s \c imageChanged() signal that is emitted
|
||||||
whenever the user changes a location's image.
|
whenever the user changes an image associated with the item.
|
||||||
|
|
||||||
\snippet drilldown/view.h 2
|
\snippet drilldown/view.h 2
|
||||||
|
|
||||||
@ -303,20 +299,20 @@
|
|||||||
The \c findWindow() function, on the other hand, is frequently
|
The \c findWindow() function, on the other hand, is frequently
|
||||||
used. It is called from the \c showInformation() function to
|
used. It is called from the \c showInformation() function to
|
||||||
detemine whether a window is already created for the given
|
detemine whether a window is already created for the given
|
||||||
location (whenever we create an \c InformationWindow object, we
|
item (whenever we create an \c InformationWindow object, we
|
||||||
store a reference to it in the \c informationWindows list). The
|
store a reference to it in the \c informationWindows list). The
|
||||||
latter function is in turn called from our custom \c
|
latter function is in turn called from our custom \c
|
||||||
mouseReleaseEvent() implementation.
|
mouseReleaseEvent() implementation.
|
||||||
|
|
||||||
\snippet drilldown/view.h 3
|
\snippet drilldown/view.h 3
|
||||||
|
|
||||||
Finally we declare a QSqlRelationalTableModel pointer. As
|
Finally, we declare a QSqlRelationalTableModel pointer. As
|
||||||
previously mentioned, the QSqlRelationalTableModel class provides
|
previously mentioned, the QSqlRelationalTableModel class provides
|
||||||
an editable data model with foreign key support. There are a
|
an editable data model with foreign key support. There are a
|
||||||
couple of things you should keep in mind when using the
|
couple of things you should keep in mind when using the
|
||||||
QSqlRelationalTableModel class: The table must have a primary key
|
QSqlRelationalTableModel class: The table must have a primary key
|
||||||
declared and this key cannot contain a relation to another table,
|
declared and this key cannot contain a relation to another table,
|
||||||
i.e., it cannot be a foreign key. Note also that if a relational
|
that is, it cannot be a foreign key. Also note that if a relational
|
||||||
table contains keys that refer to non-existent rows in the
|
table contains keys that refer to non-existent rows in the
|
||||||
referenced table, the rows containing the invalid keys will not be
|
referenced table, the rows containing the invalid keys will not be
|
||||||
exposed through the model. It is the user's or the database's
|
exposed through the model. It is the user's or the database's
|
||||||
@ -327,11 +323,11 @@
|
|||||||
Although the constructor requests the names of both the table
|
Although the constructor requests the names of both the table
|
||||||
containing office details as well as the table containing the
|
containing office details as well as the table containing the
|
||||||
names of the available image files, we only have to create a
|
names of the available image files, we only have to create a
|
||||||
QSqlRelationalTableModel object for the office table:
|
QSqlRelationalTableModel object for the "items" table:
|
||||||
|
|
||||||
\snippet drilldown/view.cpp 0
|
\snippet drilldown/view.cpp 0
|
||||||
|
|
||||||
The reason is that once we have a model with the office details,
|
The reason is that once we have a model with the item details,
|
||||||
we can create a relation to the available image files using
|
we can create a relation to the available image files using
|
||||||
QSqlRelationalTableModel's \l
|
QSqlRelationalTableModel's \l
|
||||||
{QSqlRelationalTableModel::}{setRelation()} function. This
|
{QSqlRelationalTableModel::}{setRelation()} function. This
|
||||||
@ -348,20 +344,19 @@
|
|||||||
\snippet drilldown/view.cpp 1
|
\snippet drilldown/view.cpp 1
|
||||||
|
|
||||||
Then we create the contents of our view, i.e., the scene and its
|
Then we create the contents of our view, i.e., the scene and its
|
||||||
items. The location labels are regular QGraphicsTextItem objects,
|
items. The labels are regular QGraphicsTextItem objects, whereas
|
||||||
and the "Qt" logo is represented by a QGraphicsPixmapItem
|
the images are instances of the \c ImageItem class, derived from
|
||||||
object. The images, on the other hand, are instances of the \c
|
QGraphicsPixmapItem. We will get back to this shortly when reviewing
|
||||||
ImageItem class (derived from QGraphicsPixmapItem). We will get
|
the \c addItems() function.
|
||||||
back to this shortly when reviewing the \c addItems() function.
|
|
||||||
|
|
||||||
Finally, we set the main application widget's size constraints and
|
Finally, we set the main application widget's size constraints and
|
||||||
window title.
|
window title.
|
||||||
|
|
||||||
\snippet drilldown/view.cpp 3
|
\snippet drilldown/view.cpp 3
|
||||||
|
|
||||||
The \c addItems() function is called only once, i.e., when
|
The \c addItems() function is called only once when creating the main
|
||||||
creating the main application window. For each row in the database
|
application window. For each row in the database table, we first
|
||||||
table, we first extract the corresponding record using the model's
|
extract the corresponding record using the model's
|
||||||
\l {QSqlRelationalTableModel::}{record()} function. The QSqlRecord
|
\l {QSqlRelationalTableModel::}{record()} function. The QSqlRecord
|
||||||
class encapsulates both the functionality and characteristics of a
|
class encapsulates both the functionality and characteristics of a
|
||||||
database record, and supports adding and removing fields as well
|
database record, and supports adding and removing fields as well
|
||||||
@ -394,7 +389,7 @@
|
|||||||
\snippet drilldown/view.cpp 6
|
\snippet drilldown/view.cpp 6
|
||||||
|
|
||||||
The \c showInformation() function is given an \c ImageItem object
|
The \c showInformation() function is given an \c ImageItem object
|
||||||
as argument, and starts off by extracting the item's location
|
as argument, and starts off by extracting the item's item
|
||||||
ID. Then it determines if there already is created an information
|
ID. Then it determines if there already is created an information
|
||||||
window for this location. If it is, and the window is visible, it
|
window for this location. If it is, and the window is visible, it
|
||||||
ensures that the window is raised to the top of the widget stack
|
ensures that the window is raised to the top of the widget stack
|
||||||
@ -402,7 +397,7 @@
|
|||||||
{QWidget::}{show()} slot gives the same result.
|
{QWidget::}{show()} slot gives the same result.
|
||||||
|
|
||||||
If no window for the given location exists, we create one by
|
If no window for the given location exists, we create one by
|
||||||
passing the location ID, a pointer to the model, and our view as a
|
passing the item ID, a pointer to the model, and our view as a
|
||||||
parent, to the \c InformationWindow constructor. Note that we
|
parent, to the \c InformationWindow constructor. Note that we
|
||||||
connect the information window's \c imageChanged() signal to \e
|
connect the information window's \c imageChanged() signal to \e
|
||||||
this widget's \c updateImage() slot, before we give it a suitable
|
this widget's \c updateImage() slot, before we give it a suitable
|
||||||
@ -410,16 +405,16 @@
|
|||||||
|
|
||||||
\snippet drilldown/view.cpp 7
|
\snippet drilldown/view.cpp 7
|
||||||
|
|
||||||
The \c updateImage() slot takes a location ID and the name of an
|
The \c updateImage() slot takes an item ID and the name of an
|
||||||
image files as arguments. It filters out the image items, and
|
image file as arguments. It filters out the image items, and
|
||||||
updates the one that correspond to the given location ID, with the
|
updates the one that correspond to the given item ID, with the
|
||||||
provided image file.
|
provided image file.
|
||||||
|
|
||||||
\snippet drilldown/view.cpp 8
|
\snippet drilldown/view.cpp 8
|
||||||
|
|
||||||
The \c findWindow() function simply searches through the list of
|
The \c findWindow() function simply searches through the list of
|
||||||
existing windows, returning a pointer to the window that matches
|
existing windows, returning a pointer to the window that matches
|
||||||
the given location ID, or 0 if the window doesn't exists.
|
the given item ID, or 0 if the window doesn't exists.
|
||||||
|
|
||||||
Finally, let's take a quick look at our custom \c ImageItem class:
|
Finally, let's take a quick look at our custom \c ImageItem class:
|
||||||
|
|
||||||
@ -442,7 +437,7 @@
|
|||||||
returning back to its original size when the cursor leaves its
|
returning back to its original size when the cursor leaves its
|
||||||
borders.
|
borders.
|
||||||
|
|
||||||
Finally, we store the location ID that this particular record is
|
Finally, we store the item ID that this particular record is
|
||||||
associated with as well as a z-value. In the \l {Graphics View
|
associated with as well as a z-value. In the \l {Graphics View
|
||||||
Framework}, an item's z-value determines its position in the item
|
Framework}, an item's z-value determines its position in the item
|
||||||
stack. An item of high z-value will be drawn on top of an item
|
stack. An item of high z-value will be drawn on top of an item
|
||||||
@ -460,8 +455,8 @@
|
|||||||
\snippet drilldown/imageitem.cpp 0
|
\snippet drilldown/imageitem.cpp 0
|
||||||
|
|
||||||
Then we store the ID for future reference, and ensure that our
|
Then we store the ID for future reference, and ensure that our
|
||||||
item will accept hover events. Hover events are delivered when
|
image item will accept hover events. Hover events are delivered
|
||||||
there is no current mouse grabber item. They are sent when the
|
when there is no current mouse grabber item. They are sent when the
|
||||||
mouse cursor enters an item, when it moves around inside the item,
|
mouse cursor enters an item, when it moves around inside the item,
|
||||||
and when the cursor leaves an item. As we mentioned earlier, none
|
and when the cursor leaves an item. As we mentioned earlier, none
|
||||||
of the \l {Graphics View Framework}'s items accept hover
|
of the \l {Graphics View Framework}'s items accept hover
|
||||||
@ -487,7 +482,7 @@
|
|||||||
\codeline
|
\codeline
|
||||||
\snippet drilldown/imageitem.cpp 2
|
\snippet drilldown/imageitem.cpp 2
|
||||||
|
|
||||||
Whenever the mouse cursor enters or leave the image item, the
|
Whenever the mouse cursor enters or leaves the image item, the
|
||||||
corresponding event handlers are triggered: We first set the time
|
corresponding event handlers are triggered: We first set the time
|
||||||
line's direction, making the item expand or shrink,
|
line's direction, making the item expand or shrink,
|
||||||
respectively. Then we alter the item's z-value if it is not already
|
respectively. Then we alter the item's z-value if it is not already
|
||||||
@ -532,6 +527,6 @@
|
|||||||
size regardless of the size of the source image. The \c id()
|
size regardless of the size of the source image. The \c id()
|
||||||
function is trivial, and is simply provided to be able to identify
|
function is trivial, and is simply provided to be able to identify
|
||||||
the item. In the \c updateItemPosition() slot we call the
|
the item. In the \c updateItemPosition() slot we call the
|
||||||
QGraphicsItem::setZValue() function, setting the elevation (i.e.,
|
QGraphicsItem::setZValue() function, setting the elevation of the
|
||||||
the position) of the item.
|
item.
|
||||||
*/
|
*/
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
<!DOCTYPE RCC><RCC version="1.0">
|
<RCC>
|
||||||
<qresource>
|
<qresource prefix="/">
|
||||||
<file>images/oslo.png</file>
|
<file>images/qt-logo.png</file>
|
||||||
<file>images/brisbane.png</file>
|
<file>images/qt-quick.png</file>
|
||||||
<file>images/redwood.png</file>
|
<file>images/qt-creator.png</file>
|
||||||
<file>images/berlin.png</file>
|
<file>images/qt-project.png</file>
|
||||||
<file>images/munich.png</file>
|
</qresource>
|
||||||
<file>images/beijing.png</file>
|
|
||||||
<file>logo.png</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -100,7 +100,7 @@ void ImageItem::setFrame(int frame)
|
|||||||
void ImageItem::adjust()
|
void ImageItem::adjust()
|
||||||
{
|
{
|
||||||
QMatrix matrix;
|
QMatrix matrix;
|
||||||
matrix.scale(150/ boundingRect().width(), 120/ boundingRect().height());
|
matrix.scale(120/ boundingRect().width(), 120/ boundingRect().height());
|
||||||
setMatrix(matrix);
|
setMatrix(matrix);
|
||||||
}
|
}
|
||||||
//! [4]
|
//! [4]
|
||||||
|
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 80 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 41 KiB |
BIN
examples/sql/drilldown/images/qt-creator.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
examples/sql/drilldown/images/qt-logo.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
examples/sql/drilldown/images/qt-project.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
examples/sql/drilldown/images/qt-quick.png
Normal file
After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 38 KiB |
@ -41,38 +41,35 @@
|
|||||||
#include "informationwindow.h"
|
#include "informationwindow.h"
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
InformationWindow::InformationWindow(int id, QSqlRelationalTableModel *offices,
|
InformationWindow::InformationWindow(int id, QSqlRelationalTableModel *items,
|
||||||
QWidget *parent)
|
QWidget *parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
{
|
{
|
||||||
//! [0] //! [1]
|
//! [0] //! [1]
|
||||||
QLabel *locationLabel = new QLabel(tr("Location: "));
|
QLabel *itemLabel = new QLabel(tr("Item: "));
|
||||||
QLabel *countryLabel = new QLabel(tr("Country: "));
|
|
||||||
QLabel *descriptionLabel = new QLabel(tr("Description: "));
|
QLabel *descriptionLabel = new QLabel(tr("Description: "));
|
||||||
QLabel *imageFileLabel = new QLabel(tr("Image file: "));
|
QLabel *imageFileLabel = new QLabel(tr("Image file: "));
|
||||||
|
|
||||||
createButtons();
|
createButtons();
|
||||||
|
|
||||||
locationText = new QLabel;
|
itemText = new QLabel;
|
||||||
countryText = new QLabel;
|
|
||||||
descriptionEditor = new QTextEdit;
|
descriptionEditor = new QTextEdit;
|
||||||
//! [1]
|
//! [1]
|
||||||
|
|
||||||
//! [2]
|
//! [2]
|
||||||
imageFileEditor = new QComboBox;
|
imageFileEditor = new QComboBox;
|
||||||
imageFileEditor->setModel(offices->relationModel(1));
|
imageFileEditor->setModel(items->relationModel(1));
|
||||||
imageFileEditor->setModelColumn(offices->relationModel(1)->fieldIndex("file"));
|
imageFileEditor->setModelColumn(items->relationModel(1)->fieldIndex("file"));
|
||||||
//! [2]
|
//! [2]
|
||||||
|
|
||||||
//! [3]
|
//! [3]
|
||||||
mapper = new QDataWidgetMapper(this);
|
mapper = new QDataWidgetMapper(this);
|
||||||
mapper->setModel(offices);
|
mapper->setModel(items);
|
||||||
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
|
mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit);
|
||||||
mapper->setItemDelegate(new QSqlRelationalDelegate(mapper));
|
mapper->setItemDelegate(new QSqlRelationalDelegate(mapper));
|
||||||
mapper->addMapping(imageFileEditor, 1);
|
mapper->addMapping(imageFileEditor, 1);
|
||||||
mapper->addMapping(locationText, 2, "text");
|
mapper->addMapping(itemText, 2, "text");
|
||||||
mapper->addMapping(countryText, 3, "text");
|
mapper->addMapping(descriptionEditor, 3);
|
||||||
mapper->addMapping(descriptionEditor, 4);
|
|
||||||
mapper->setCurrentIndex(id);
|
mapper->setCurrentIndex(id);
|
||||||
//! [3]
|
//! [3]
|
||||||
|
|
||||||
@ -83,8 +80,7 @@ InformationWindow::InformationWindow(int id, QSqlRelationalTableModel *offices,
|
|||||||
this, SLOT(enableButtons()));
|
this, SLOT(enableButtons()));
|
||||||
|
|
||||||
QFormLayout *formLayout = new QFormLayout;
|
QFormLayout *formLayout = new QFormLayout;
|
||||||
formLayout->addRow(locationLabel, locationText);
|
formLayout->addRow(itemLabel, itemText);
|
||||||
formLayout->addRow(countryLabel, countryText);
|
|
||||||
formLayout->addRow(imageFileLabel, imageFileEditor);
|
formLayout->addRow(imageFileLabel, imageFileEditor);
|
||||||
formLayout->addRow(descriptionLabel, descriptionEditor);
|
formLayout->addRow(descriptionLabel, descriptionEditor);
|
||||||
|
|
||||||
@ -93,23 +89,19 @@ InformationWindow::InformationWindow(int id, QSqlRelationalTableModel *offices,
|
|||||||
layout->addWidget(buttonBox);
|
layout->addWidget(buttonBox);
|
||||||
setLayout(layout);
|
setLayout(layout);
|
||||||
|
|
||||||
locationId = id;
|
itemId = id;
|
||||||
displayedImage = imageFileEditor->currentText();
|
displayedImage = imageFileEditor->currentText();
|
||||||
|
|
||||||
// Commented the following line. Now the window will look like dialog and the Qt will place the QDialogBox buttons to menu area in Symbian.
|
setWindowFlags(Qt::Window);
|
||||||
// Too bad that the revert button is missing, Should the Qt place the buttons under Option menu in the menu area?!
|
|
||||||
// If the Qt::Window flag was used, the background of window is white in symbian and the QLabels can't be regognized from the background.
|
|
||||||
|
|
||||||
//setWindowFlags(Qt::Window);
|
|
||||||
enableButtons(false);
|
enableButtons(false);
|
||||||
setWindowTitle(tr("Office: %1").arg(locationText->text()));
|
setWindowTitle(itemText->text());
|
||||||
}
|
}
|
||||||
//! [4]
|
//! [4]
|
||||||
|
|
||||||
//! [5]
|
//! [5]
|
||||||
int InformationWindow::id()
|
int InformationWindow::id()
|
||||||
{
|
{
|
||||||
return locationId;
|
return itemId;
|
||||||
}
|
}
|
||||||
//! [5]
|
//! [5]
|
||||||
|
|
||||||
@ -128,11 +120,11 @@ void InformationWindow::submit()
|
|||||||
|
|
||||||
if (displayedImage != newImage) {
|
if (displayedImage != newImage) {
|
||||||
displayedImage = newImage;
|
displayedImage = newImage;
|
||||||
emit imageChanged(locationId, newImage);
|
emit imageChanged(itemId, newImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
mapper->submit();
|
mapper->submit();
|
||||||
mapper->setCurrentIndex(locationId);
|
mapper->setCurrentIndex(itemId);
|
||||||
|
|
||||||
enableButtons(false);
|
enableButtons(false);
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ class InformationWindow : public QDialog
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InformationWindow(int id, QSqlRelationalTableModel *offices,
|
InformationWindow(int id, QSqlRelationalTableModel *items,
|
||||||
QWidget *parent = 0);
|
QWidget *parent = 0);
|
||||||
|
|
||||||
int id();
|
int id();
|
||||||
@ -70,12 +70,11 @@ private slots:
|
|||||||
private:
|
private:
|
||||||
void createButtons();
|
void createButtons();
|
||||||
|
|
||||||
int locationId;
|
int itemId;
|
||||||
QString displayedImage;
|
QString displayedImage;
|
||||||
|
|
||||||
QComboBox *imageFileEditor;
|
QComboBox *imageFileEditor;
|
||||||
QLabel *locationText;
|
QLabel *itemText;
|
||||||
QLabel *countryText;
|
|
||||||
QTextEdit *descriptionEditor;
|
QTextEdit *descriptionEditor;
|
||||||
|
|
||||||
QPushButton *closeButton;
|
QPushButton *closeButton;
|
||||||
|
Before Width: | Height: | Size: 13 KiB |
@ -52,7 +52,7 @@ int main(int argc, char *argv[])
|
|||||||
if (!createConnection())
|
if (!createConnection())
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
View view("offices", "images");
|
View view("items", "images");
|
||||||
view.show();
|
view.show();
|
||||||
#ifdef QT_KEYPAD_NAVIGATION
|
#ifdef QT_KEYPAD_NAVIGATION
|
||||||
QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
|
QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
|
||||||
|
@ -43,61 +43,62 @@
|
|||||||
#include "view.h"
|
#include "view.h"
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
View::View(const QString &offices, const QString &images, QWidget *parent)
|
View::View(const QString &items, const QString &images, QWidget *parent)
|
||||||
: QGraphicsView(parent)
|
: QGraphicsView(parent)
|
||||||
{
|
{
|
||||||
officeTable = new QSqlRelationalTableModel(this);
|
itemTable = new QSqlRelationalTableModel(this);
|
||||||
officeTable->setTable(offices);
|
itemTable->setTable(items);
|
||||||
officeTable->setRelation(1, QSqlRelation(images, "locationid", "file"));
|
itemTable->setRelation(1, QSqlRelation(images, "itemid", "file"));
|
||||||
officeTable->select();
|
itemTable->select();
|
||||||
//! [0]
|
//! [0]
|
||||||
|
|
||||||
//! [1]
|
//! [1]
|
||||||
scene = new QGraphicsScene(this);
|
scene = new QGraphicsScene(this);
|
||||||
scene->setSceneRect(0, 0, 465, 615);
|
scene->setSceneRect(0, 0, 465, 365);
|
||||||
setScene(scene);
|
setScene(scene);
|
||||||
|
|
||||||
addItems();
|
addItems();
|
||||||
|
|
||||||
QGraphicsPixmapItem *logo = scene->addPixmap(QPixmap(":/logo.png"));
|
setMinimumSize(470, 370);
|
||||||
logo->setPos(30, 515);
|
setMaximumSize(470, 370);
|
||||||
|
|
||||||
setMinimumSize(470, 620);
|
QLinearGradient gradient(QPointF(0, 0), QPointF(0, 370));
|
||||||
setMaximumSize(470, 620);
|
gradient.setColorAt(0, QColor("#868482"));
|
||||||
|
gradient.setColorAt(1, QColor("#5d5b59"));
|
||||||
setWindowTitle(tr("Offices World Wide"));
|
setBackgroundBrush(gradient);
|
||||||
}
|
}
|
||||||
//! [1]
|
//! [1]
|
||||||
|
|
||||||
//! [3]
|
//! [3]
|
||||||
void View::addItems()
|
void View::addItems()
|
||||||
{
|
{
|
||||||
int officeCount = officeTable->rowCount();
|
int itemCount = itemTable->rowCount();
|
||||||
|
|
||||||
int imageOffset = 150;
|
int imageOffset = 150;
|
||||||
int leftMargin = 70;
|
int leftMargin = 70;
|
||||||
int topMargin = 40;
|
int topMargin = 40;
|
||||||
|
|
||||||
for (int i = 0; i < officeCount; i++) {
|
for (int i = 0; i < itemCount; i++) {
|
||||||
ImageItem *image;
|
ImageItem *image;
|
||||||
QGraphicsTextItem *label;
|
QGraphicsTextItem *label;
|
||||||
QSqlRecord record = officeTable->record(i);
|
QSqlRecord record = itemTable->record(i);
|
||||||
|
|
||||||
int id = record.value("id").toInt();
|
int id = record.value("id").toInt();
|
||||||
QString file = record.value("file").toString();
|
QString file = record.value("file").toString();
|
||||||
QString location = record.value("location").toString();
|
QString item = record.value("itemtype").toString();
|
||||||
|
|
||||||
int columnOffset = ((i / 3) * 37);
|
int columnOffset = ((i % 2) * 37);
|
||||||
int x = ((i / 3) * imageOffset) + leftMargin + columnOffset;
|
int x = ((i % 2) * imageOffset) + leftMargin + columnOffset;
|
||||||
int y = ((i % 3) * imageOffset) + topMargin;
|
int y = ((i / 2) * imageOffset) + topMargin;
|
||||||
|
|
||||||
image = new ImageItem(id, QPixmap(":/" + file));
|
image = new ImageItem(id, QPixmap(":/" + file));
|
||||||
image->setData(0, i);
|
image->setData(0, i);
|
||||||
image->setPos(x, y);
|
image->setPos(x, y);
|
||||||
scene->addItem(image);
|
scene->addItem(image);
|
||||||
|
|
||||||
label = scene->addText(location);
|
label = scene->addText(item);
|
||||||
QPointF labelOffset((150 - label->boundingRect().width()) / 2, 120.0);
|
label->setDefaultTextColor(QColor("#d7d6d5"));
|
||||||
|
QPointF labelOffset((120 - label->boundingRect().width()) / 2, 120.0);
|
||||||
label->setPos(QPointF(x, y) + labelOffset);
|
label->setPos(QPointF(x, y) + labelOffset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,7 +119,7 @@ void View::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
void View::showInformation(ImageItem *image)
|
void View::showInformation(ImageItem *image)
|
||||||
{
|
{
|
||||||
int id = image->id();
|
int id = image->id();
|
||||||
if (id < 0 || id >= officeTable->rowCount())
|
if (id < 0 || id >= itemTable->rowCount())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
InformationWindow *window = findWindow(id);
|
InformationWindow *window = findWindow(id);
|
||||||
@ -129,7 +130,7 @@ void View::showInformation(ImageItem *image)
|
|||||||
window->show();
|
window->show();
|
||||||
} else {
|
} else {
|
||||||
InformationWindow *window;
|
InformationWindow *window;
|
||||||
window = new InformationWindow(id, officeTable, this);
|
window = new InformationWindow(id, itemTable, this);
|
||||||
|
|
||||||
connect(window, SIGNAL(imageChanged(int,QString)),
|
connect(window, SIGNAL(imageChanged(int,QString)),
|
||||||
this, SLOT(updateImage(int,QString)));
|
this, SLOT(updateImage(int,QString)));
|
||||||
|
@ -53,7 +53,7 @@ class View : public QGraphicsView
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
View(const QString &offices, const QString &images, QWidget *parent = 0);
|
View(const QString &items, const QString &images, QWidget *parent = 0);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mouseReleaseEvent(QMouseEvent *event);
|
void mouseReleaseEvent(QMouseEvent *event);
|
||||||
@ -73,7 +73,7 @@ private:
|
|||||||
QGraphicsScene *scene;
|
QGraphicsScene *scene;
|
||||||
QList<InformationWindow *> informationWindows;
|
QList<InformationWindow *> informationWindows;
|
||||||
//! [2] //! [3]
|
//! [2] //! [3]
|
||||||
QSqlRelationalTableModel *officeTable;
|
QSqlRelationalTableModel *itemTable;
|
||||||
};
|
};
|
||||||
//! [3]
|
//! [3]
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example tools/customtype
|
\example customtype
|
||||||
\title Custom Type Example
|
\title Custom Type Example
|
||||||
|
|
||||||
\brief The Custom Type example shows how to integrate a custom type into Qt's
|
\brief The Custom Type example shows how to integrate a custom type into Qt's
|
||||||
|
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 17 KiB |
@ -1,142 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:FDL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and Digia. For licensing terms and
|
|
||||||
** conditions see http://qt.digia.com/licensing. For further information
|
|
||||||
** use the contact form at http://qt.digia.com/contact-us.
|
|
||||||
**
|
|
||||||
** GNU Free Documentation License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU Free
|
|
||||||
** Documentation License version 1.3 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file included in the packaging of
|
|
||||||
** this file. Please review the following information to ensure
|
|
||||||
** the GNU Free Documentation License version 1.3 requirements
|
|
||||||
** will be met: http://www.gnu.org/copyleft/fdl.html.
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
/*! \example widgets/orientation
|
|
||||||
\title Orientation Example
|
|
||||||
|
|
||||||
\brief The example shows a simple way to use different UIs depending on the screen
|
|
||||||
orientation of a mobile device.
|
|
||||||
|
|
||||||
\image orientation-landscape.png The UI in landscape mode
|
|
||||||
\image orientation-portrait.png The UI in portrait mode
|
|
||||||
|
|
||||||
The screen on many mobile devices can be viewed in both portrait and
|
|
||||||
landscape orientation. The orientation can be swiched with the help of a
|
|
||||||
hardware or software trigger. Due to the often small physical screen size,
|
|
||||||
user interfaces has to be very simple and compact to stay usable, and
|
|
||||||
applications usually occupy the whole screen. Designing a user interface
|
|
||||||
that works equally well in both landscape and portrait mode is not always
|
|
||||||
possible, however, so making a different layout for each case usually pays
|
|
||||||
off.
|
|
||||||
|
|
||||||
The example application makes use of two different UI widgets created with
|
|
||||||
the Qt Designer, one for portrait and one for landscape orientation. The
|
|
||||||
application has a widget that contains an image and the user is able to
|
|
||||||
select one of three images for it to show. In addition to the two UIs, the
|
|
||||||
application consists of a \c MainWindow class.
|
|
||||||
|
|
||||||
\section1 Landscape UI
|
|
||||||
|
|
||||||
If the screen is in landscape mode, the user probably holds the device with
|
|
||||||
both hands and is ready to give full attention to the application. The
|
|
||||||
landscape UI looks like this:
|
|
||||||
|
|
||||||
\image orientation-landscape-ui.png The landscape UI
|
|
||||||
|
|
||||||
To the left is a QWidget called \c choiceWidget, which will show the
|
|
||||||
current image, and to the right are three QRadioButton instances. The
|
|
||||||
active radio button specifies the image to show.
|
|
||||||
|
|
||||||
\section1 Portrait UI
|
|
||||||
|
|
||||||
When the device is in portrait mode, it usually means that the user holds
|
|
||||||
it with one hand, and can comfortably use the thumb for small amounts of
|
|
||||||
input. The layout is simpler, and is focused on consuming content. The
|
|
||||||
portrait UI looks like this:
|
|
||||||
|
|
||||||
\image orientation-portrait-ui.png The portrait UI
|
|
||||||
|
|
||||||
Similarly, it contains a QWidget, also called \c choiceWidget, that will
|
|
||||||
show the current image. In contrast to the landscape UI, this one doesn't
|
|
||||||
provide any controls to change the image.
|
|
||||||
|
|
||||||
\section1 MainWindow Class Definition
|
|
||||||
|
|
||||||
\c MainWindow inherits from QWidget and acts as the top level widget of the
|
|
||||||
application.
|
|
||||||
|
|
||||||
\snippet widgets/orientation/mainwindow.h 0
|
|
||||||
|
|
||||||
The \c resizeEvent() method is re-implemented, and used to check which
|
|
||||||
UI to show. The \c onRadioButtonClicked() slot is connected to the
|
|
||||||
landscape UI's radio button group and selects the current image.
|
|
||||||
|
|
||||||
\c landscapeWidget and \c portraitWidget will contain the UI layouts. Only
|
|
||||||
one of them is visible at a time.
|
|
||||||
|
|
||||||
\section1 MainWindow Class Implementation
|
|
||||||
|
|
||||||
In the constructor, the widgets that will hold the UIs are created and set
|
|
||||||
up.
|
|
||||||
|
|
||||||
\snippet widgets/orientation/mainwindow.cpp 0
|
|
||||||
|
|
||||||
Since the exit buttons on the layouts are different from each other, both
|
|
||||||
of them have to have their \c clicked() signal connected to the \c close()
|
|
||||||
slot of the main widget. The first image is also made current with the call
|
|
||||||
to \c onRadioButtonClicked().
|
|
||||||
|
|
||||||
\snippet widgets/orientation/mainwindow.cpp 1
|
|
||||||
|
|
||||||
On the Maemo platform, windows are stuck in landscape mode by default. The
|
|
||||||
application has to explicitly say that rotation is supported.
|
|
||||||
|
|
||||||
\snippet widgets/orientation/mainwindow.cpp 2
|
|
||||||
|
|
||||||
The \c resizeEvent() is called when the main window is first created, and
|
|
||||||
also whenever the window has been resized. If the window is shown in
|
|
||||||
full screen, this is an indication that the orientation of the screen has
|
|
||||||
changed.
|
|
||||||
|
|
||||||
The dimensions of \c landscapeWidget is the transpose of the dimensions of
|
|
||||||
\c portraitWidget. When the orientation is known, both are set to the
|
|
||||||
(possibly transposed) size of the window. Depending on the orientation, one
|
|
||||||
widget is made visible and the other invisible.
|
|
||||||
|
|
||||||
\snippet widgets/orientation/mainwindow.cpp 3
|
|
||||||
|
|
||||||
When the user selects one of the radio buttons in the landscape UI, the
|
|
||||||
current image is changed. The image is displayed by specifying the
|
|
||||||
background style of the choice widget. Since both \c portrait and
|
|
||||||
\c landscape have a \c choiceWidget of their own, the change has to be
|
|
||||||
reflected in both instances.
|
|
||||||
|
|
||||||
\snippet widgets/orientation/mainwindow.cpp 4
|
|
||||||
|
|
||||||
Synchronizing both UIs like this might become unfeasible when there are
|
|
||||||
many things that can change. In that case it is better to make use of the
|
|
||||||
\l{Introduction to Model/View Programming}{Model-View-Controller pattern}
|
|
||||||
more extensively and share the content between both portrait and landscape
|
|
||||||
widgets. Then an interface for displaying and manipulating it can be tailor
|
|
||||||
made for both orientations.
|
|
||||||
|
|
||||||
\section1 The \c main() Function
|
|
||||||
|
|
||||||
The main function creates a \c MainWindow instance and shows it full
|
|
||||||
screen.
|
|
||||||
\snippet widgets/orientation/main.cpp 0
|
|
||||||
*/
|
|
@ -1,52 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the documentation of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:FDL$
|
|
||||||
** Commercial License Usage
|
|
||||||
** Licensees holding valid commercial Qt licenses may use this file in
|
|
||||||
** accordance with the commercial license agreement provided with the
|
|
||||||
** Software or, alternatively, in accordance with the terms contained in
|
|
||||||
** a written agreement between you and Digia. For licensing terms and
|
|
||||||
** conditions see http://qt.digia.com/licensing. For further information
|
|
||||||
** use the contact form at http://qt.digia.com/contact-us.
|
|
||||||
**
|
|
||||||
** GNU Free Documentation License Usage
|
|
||||||
** Alternatively, this file may be used under the terms of the GNU Free
|
|
||||||
** Documentation License version 1.3 as published by the Free Software
|
|
||||||
** Foundation and appearing in the file included in the packaging of
|
|
||||||
** this file. Please review the following information to ensure
|
|
||||||
** the GNU Free Documentation License version 1.3 requirements
|
|
||||||
** will be met: http://www.gnu.org/copyleft/fdl.html.
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
/*! \example widgets/applicationicon
|
|
||||||
\title Application Icon Example
|
|
||||||
|
|
||||||
\brief The example shows how to add an application icon to a mobile application.
|
|
||||||
|
|
||||||
\image appicon_screenshot.png The icon on a Nokia XPressMusic 5800
|
|
||||||
|
|
||||||
\section1 Adding the icons to the project
|
|
||||||
|
|
||||||
For Maemo, we need to add that the \c .desktop and icon file should be
|
|
||||||
installed.
|
|
||||||
|
|
||||||
\quotefile widgets/applicationicon/applicationicon.pro
|
|
||||||
|
|
||||||
Currently, Qt Creator doesn't include the icon and desktop files in the
|
|
||||||
application package for Maemo, merely the executable file is included. As a
|
|
||||||
workaround for this, the files can be added manually in the Projects tab.
|
|
||||||
In the "Create Package" build step for the Maemo target, the \c .desktop
|
|
||||||
file and icon can be added to be a part of the package contents.
|
|
||||||
Unfortunately, these additions are only stored as a part of the
|
|
||||||
\c .pro.user file. This issue will be resolved in a future release of
|
|
||||||
Qt Creator.
|
|
||||||
|
|
||||||
\image appicon_packagecontents.png Manual addition of files to the "Create Package" build step
|
|
||||||
*/
|
|
Before Width: | Height: | Size: 3.9 KiB |
@ -1,15 +0,0 @@
|
|||||||
|
|
||||||
QT += core gui widgets
|
|
||||||
|
|
||||||
TARGET = applicationicon
|
|
||||||
TEMPLATE = app
|
|
||||||
|
|
||||||
SOURCES += main.cpp
|
|
||||||
|
|
||||||
OTHER_FILES += applicationicon.svg \
|
|
||||||
applicationicon.png \
|
|
||||||
applicationicon.desktop
|
|
||||||
|
|
||||||
# install
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/applicationicon
|
|
||||||
INSTALLS += target
|
|
@ -1,22 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="44" height="44" baseProfile="tiny" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 44 44">
|
|
||||||
<defs>
|
|
||||||
<linearGradient id="linearGradient2824" y2="1051.4" gradientUnits="userSpaceOnUse" x2="30.217" y1="1009.4" x1="15.109">
|
|
||||||
<stop stop-color="#41a200" offset="0"/>
|
|
||||||
<stop stop-color="#9be948" offset="0.63897"/>
|
|
||||||
<stop stop-color="#beff61" offset="1"/>
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient id="linearGradient2848" y2="1009.4" gradientUnits="userSpaceOnUse" y1="1053.7" gradientTransform="matrix(0.85714286,0,0,0.85714286,2.1428572,146.19467)" x2="15.085" x1="31.027">
|
|
||||||
<stop stop-color="#41a200" offset="0"/>
|
|
||||||
<stop stop-color="#9be948" offset="0.88602"/>
|
|
||||||
<stop stop-color="#beff61" offset="1"/>
|
|
||||||
</linearGradient>
|
|
||||||
</defs>
|
|
||||||
<g id="layer1" transform="translate(0,-1008.3622)">
|
|
||||||
<path id="rect2816" d="m8.412,1009h27.18c4.106,0,7.412,3.306,7.412,7.412v27.18c0,4.106-3.306,7.412-7.412,7.412h-27.18c-4.106,0-7.412-3-7.412-7v-27.18c0-4.106,3.306-7.412,7.412-7.412z" stroke-linecap="round" stroke-miterlimit="4" stroke-width="0.64300001" fill="url(#linearGradient2824)"/>
|
|
||||||
<path id="rect2816-4" d="m9.353,1011h25.29c3.52,0,6.353,2.833,6.353,6.353v25.29c0,3.519-2.833,6.353-6.353,6.353h-25.29c-3.52-0.1-6.353-2.1-6.353-6.1v-25.29c0-3.519,2.833-6.353,6.353-6.353z" stroke-linecap="round" stroke-miterlimit="4" stroke-width="0.64300001" fill="url(#linearGradient2848)"/>
|
|
||||||
<g id="text2893" font-weight="normal" transform="translate(-1.100281,1010.3622)" font-style="normal" font-stretch="normal" font-size="48px" font-variant="normal" font-family="Cambria Math" fill="#e5ffd5">
|
|
||||||
<path id="path2908" fill="#e5ffd5" d="m11.92,35.44c1.359-1.719,2.672-3.828,3.938-6.328l7.522-14.742c-0.8-3.13-1.54-5.321-2.24-6.586-0.69-1.266-1.76-1.899-3.2-1.899-1.328,0.0000307-2.594,0.6563-3.797,1.969l-1.148-1.266c2.156-2.359,4.289-3.539,6.398-3.539,1.469,0.0000335,2.609,0.418,3.422,1.254,0.8125,0.836,1.492,2.168,2.039,3.996,0.5469,1.828,1.32,5.359,2.32,10.59,1.297,6.828,2.309,11.14,3.035,12.93,0.7265,1.789,1.59,2.684,2.59,2.684,0.7187,0.000002,1.383-0.25,1.992-0.75l0.8906,1.406c-1.547,1.203-2.938,1.805-4.172,1.805-1.75,0-3-0.8984-3.75-2.695-0.75-1.797-1.797-6.633-3.141-14.51h-0.1406c-2.658,5.391-5.258,11.001-7.798,16.831h-4.758z"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 2.3 KiB |
@ -1,50 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <QtWidgets/QApplication>
|
|
||||||
#include <QtWidgets/QLabel>
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
QLabel label(QObject::tr("Hello, world!"));
|
|
||||||
label.show();
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1020 B |
Before Width: | Height: | Size: 1.1 KiB |
@ -1,7 +0,0 @@
|
|||||||
<RCC>
|
|
||||||
<qresource prefix="/">
|
|
||||||
<file>image_a.png</file>
|
|
||||||
<file>image_b.png</file>
|
|
||||||
<file>image_c.png</file>
|
|
||||||
</qresource>
|
|
||||||
</RCC>
|
|
@ -1,114 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>LandscapeUI</class>
|
|
||||||
<widget class="QWidget" name="LandscapeUI">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>514</width>
|
|
||||||
<height>265</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0" colspan="2">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="styleSheet">
|
|
||||||
<string notr="true">font-weight: bold;</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Landscape mode</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="2">
|
|
||||||
<widget class="QPushButton" name="exitButton">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Exit</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="2">
|
|
||||||
<widget class="QGroupBox" name="groupBox">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="title">
|
|
||||||
<string>Choices</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="radioAButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Long description explaining choice A</string>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<attribute name="buttonGroup">
|
|
||||||
<string>buttonGroup</string>
|
|
||||||
</attribute>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="radioBButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Long description explaining choice B</string>
|
|
||||||
</property>
|
|
||||||
<attribute name="buttonGroup">
|
|
||||||
<string>buttonGroup</string>
|
|
||||||
</attribute>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QRadioButton" name="radioCButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Long description explaining choice C</string>
|
|
||||||
</property>
|
|
||||||
<attribute name="buttonGroup">
|
|
||||||
<string>buttonGroup</string>
|
|
||||||
</attribute>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="2">
|
|
||||||
<widget class="QWidget" name="choiceWidget" native="true">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
<buttongroups>
|
|
||||||
<buttongroup name="buttonGroup"/>
|
|
||||||
</buttongroups>
|
|
||||||
</ui>
|
|
@ -1,55 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <QtWidgets/QApplication>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
|
|
||||||
MainWindow w;
|
|
||||||
w.showFullScreen();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
||||||
//! [0]
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "mainwindow.h"
|
|
||||||
#include "ui_landscape.h"
|
|
||||||
#include "ui_portrait.h"
|
|
||||||
|
|
||||||
#include <QDesktopWidget>
|
|
||||||
#include <QResizeEvent>
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
MainWindow::MainWindow(QWidget *parent) :
|
|
||||||
QWidget(parent),
|
|
||||||
landscapeWidget(0),
|
|
||||||
portraitWidget(0)
|
|
||||||
{
|
|
||||||
landscapeWidget = new QWidget(this);
|
|
||||||
landscape.setupUi(landscapeWidget);
|
|
||||||
|
|
||||||
portraitWidget = new QWidget(this);
|
|
||||||
portrait.setupUi(portraitWidget);
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
//! [1]
|
|
||||||
connect(portrait.exitButton, SIGNAL(clicked()), this, SLOT(close()));
|
|
||||||
connect(landscape.exitButton, SIGNAL(clicked()), this, SLOT(close()));
|
|
||||||
connect(landscape.buttonGroup, SIGNAL(buttonClicked(QAbstractButton*)),
|
|
||||||
this, SLOT(onRadioButtonClicked(QAbstractButton*)));
|
|
||||||
|
|
||||||
landscape.radioAButton->setChecked(true);
|
|
||||||
onRadioButtonClicked(landscape.radioAButton);
|
|
||||||
//! [1]
|
|
||||||
|
|
||||||
//! [2]
|
|
||||||
}
|
|
||||||
//! [2]
|
|
||||||
|
|
||||||
//! [3]
|
|
||||||
void MainWindow::resizeEvent(QResizeEvent *event)
|
|
||||||
{
|
|
||||||
QSize size = event->size();
|
|
||||||
bool isLandscape = size.width() > size.height();
|
|
||||||
|
|
||||||
if (!isLandscape)
|
|
||||||
size.transpose();
|
|
||||||
|
|
||||||
landscapeWidget->setFixedSize(size);
|
|
||||||
size.transpose();
|
|
||||||
portraitWidget->setFixedSize(size);
|
|
||||||
|
|
||||||
landscapeWidget->setVisible(isLandscape);
|
|
||||||
portraitWidget->setVisible(!isLandscape);
|
|
||||||
}
|
|
||||||
//! [3]
|
|
||||||
|
|
||||||
//! [4]
|
|
||||||
void MainWindow::onRadioButtonClicked(QAbstractButton *button)
|
|
||||||
{
|
|
||||||
QString styleTemplate = "background-image: url(:/image_%1.png);"
|
|
||||||
"background-repeat: no-repeat;"
|
|
||||||
"background-position: center center";
|
|
||||||
|
|
||||||
QString imageStyle("");
|
|
||||||
if (button == landscape.radioAButton)
|
|
||||||
imageStyle = styleTemplate.arg("a");
|
|
||||||
else if (button == landscape.radioBButton)
|
|
||||||
imageStyle = styleTemplate.arg("b");
|
|
||||||
else if (button == landscape.radioCButton)
|
|
||||||
imageStyle = styleTemplate.arg("c");
|
|
||||||
|
|
||||||
portrait.choiceWidget->setStyleSheet(imageStyle);
|
|
||||||
landscape.choiceWidget->setStyleSheet(imageStyle);
|
|
||||||
}
|
|
||||||
//! [4]
|
|
||||||
|
|
@ -1,75 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
**
|
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
|
||||||
** Contact: http://www.qt-project.org/legal
|
|
||||||
**
|
|
||||||
** This file is part of the QtCore module of the Qt Toolkit.
|
|
||||||
**
|
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
|
||||||
**
|
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
|
||||||
** modification, are permitted provided that the following conditions are
|
|
||||||
** met:
|
|
||||||
** * Redistributions of source code must retain the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer.
|
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
|
||||||
** notice, this list of conditions and the following disclaimer in
|
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
|
||||||
**
|
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
|
|
||||||
**
|
|
||||||
** $QT_END_LICENSE$
|
|
||||||
**
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#ifndef MAINWINDOW_H
|
|
||||||
#define MAINWINDOW_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
#include "ui_landscape.h"
|
|
||||||
#include "ui_portrait.h"
|
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
class QAbstractButton;
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
//! [0]
|
|
||||||
class MainWindow : public QWidget
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
MainWindow(QWidget *parent = 0);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void resizeEvent(QResizeEvent *event);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onRadioButtonClicked(QAbstractButton *button);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Ui::LandscapeUI landscape;
|
|
||||||
Ui::PortraitUI portrait;
|
|
||||||
QWidget *landscapeWidget;
|
|
||||||
QWidget *portraitWidget;
|
|
||||||
};
|
|
||||||
//! [0]
|
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
|
@ -1,29 +0,0 @@
|
|||||||
#-------------------------------------------------
|
|
||||||
#
|
|
||||||
# Project created by QtCreator 2010-08-04T10:27:31
|
|
||||||
#
|
|
||||||
#-------------------------------------------------
|
|
||||||
|
|
||||||
QT += core gui widgets
|
|
||||||
|
|
||||||
TARGET = orientation
|
|
||||||
TEMPLATE = app
|
|
||||||
|
|
||||||
|
|
||||||
SOURCES += main.cpp\
|
|
||||||
mainwindow.cpp
|
|
||||||
|
|
||||||
HEADERS += mainwindow.h
|
|
||||||
|
|
||||||
FORMS += \
|
|
||||||
portrait.ui \
|
|
||||||
landscape.ui
|
|
||||||
|
|
||||||
RESOURCES += \
|
|
||||||
images.qrc
|
|
||||||
|
|
||||||
# install
|
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/orientation
|
|
||||||
INSTALLS += target
|
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
|
@ -1,61 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>PortraitUI</class>
|
|
||||||
<widget class="QWidget" name="PortraitUI">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>201</width>
|
|
||||||
<height>300</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Form</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="styleSheet">
|
|
||||||
<string notr="true">font-weight: bold;</string>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Portrait mode</string>
|
|
||||||
</property>
|
|
||||||
<property name="alignment">
|
|
||||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QPushButton" name="exitButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Exit</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QLabel" name="helpLabel">
|
|
||||||
<property name="text">
|
|
||||||
<string>Switch to landscape mode. In landscape mode you can change visible image.</string>
|
|
||||||
</property>
|
|
||||||
<property name="wordWrap">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QWidget" name="choiceWidget" native="true">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
@ -1,6 +1,5 @@
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = analogclock \
|
SUBDIRS = analogclock \
|
||||||
applicationicon \
|
|
||||||
calculator \
|
calculator \
|
||||||
calendarwidget \
|
calendarwidget \
|
||||||
charactermap \
|
charactermap \
|
||||||
@ -13,7 +12,6 @@ SUBDIRS = analogclock \
|
|||||||
lineedits \
|
lineedits \
|
||||||
movie \
|
movie \
|
||||||
mousebuttons \
|
mousebuttons \
|
||||||
orientation \
|
|
||||||
scribble \
|
scribble \
|
||||||
shapedclock \
|
shapedclock \
|
||||||
sliders \
|
sliders \
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example xml/streambookmarks
|
\example streambookmarks
|
||||||
\title QXmlStream Bookmarks Example
|
\title QXmlStream Bookmarks Example
|
||||||
\brief Demonstrates how to read and write to XBEL files
|
\brief Demonstrates how to read and write to XBEL files
|
||||||
\ingroup xml-examples
|
\ingroup xml-examples
|
||||||
|
@ -27,6 +27,10 @@ contains(QMAKE_HOST.os,Windows) {
|
|||||||
} else {
|
} else {
|
||||||
MINGW_IN_SHELL = 1
|
MINGW_IN_SHELL = 1
|
||||||
QMAKE_DIR_SEP = /
|
QMAKE_DIR_SEP = /
|
||||||
|
# Because install's ability to set permissions is not relevant on Windows,
|
||||||
|
# and git's msys does not provide it to start with.
|
||||||
|
QMAKE_INSTALL_FILE = cp -f
|
||||||
|
QMAKE_INSTALL_PROGRAM = cp -f
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
#
|
#
|
||||||
# compiler settings for iOS clang compilers
|
# compiler settings for iOS clang compilers
|
||||||
#
|
#
|
||||||
# Depends on:
|
|
||||||
#
|
|
||||||
# QMAKE_XCODE_VERSION - set in xcode.conf
|
|
||||||
#
|
|
||||||
|
|
||||||
# iOS build flags
|
# iOS build flags
|
||||||
QMAKE_IOS_CFLAGS += -fvisibility=hidden -fpascal-strings -fmessage-length=0
|
QMAKE_IOS_CFLAGS += -fvisibility=hidden -fpascal-strings -fmessage-length=0
|
||||||
@ -24,9 +20,6 @@ QMAKE_IOS_CFLAGS += -Wno-missing-field-initializers -Wno-missing-prototype
|
|||||||
QMAKE_IOS_CXXFLAGS += -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors
|
QMAKE_IOS_CXXFLAGS += -Wno-non-virtual-dtor -Wno-overloaded-virtual -Wno-exit-time-destructors
|
||||||
QMAKE_IOS_OBJ_CFLAGS += -Wno-deprecated-implementations -Wprotocol -Wno-selector -Wno-strict-selector-match -Wno-undeclared-selector
|
QMAKE_IOS_OBJ_CFLAGS += -Wno-deprecated-implementations -Wprotocol -Wno-selector -Wno-strict-selector-match -Wno-undeclared-selector
|
||||||
|
|
||||||
# Warn about unsupported (later than 4.5) Xcode versions
|
|
||||||
!lessThan(QMAKE_XCODE_VERSION, "4.7"): warning("The version of Xcode installed on this system is not recognised - custom compiler settings may be necessary")
|
|
||||||
|
|
||||||
# Set build flags
|
# Set build flags
|
||||||
QMAKE_CFLAGS += $$QMAKE_IOS_CFLAGS
|
QMAKE_CFLAGS += $$QMAKE_IOS_CFLAGS
|
||||||
QMAKE_CXXFLAGS += $$QMAKE_IOS_CFLAGS $$QMAKE_IOS_CXXFLAGS
|
QMAKE_CXXFLAGS += $$QMAKE_IOS_CFLAGS $$QMAKE_IOS_CXXFLAGS
|
||||||
|
@ -26,7 +26,4 @@ QMAKE_LIBS_THREAD =
|
|||||||
QMAKE_AR = ar cq
|
QMAKE_AR = ar cq
|
||||||
QMAKE_RANLIB = ranlib -s
|
QMAKE_RANLIB = ranlib -s
|
||||||
|
|
||||||
# We rely on Xcode to build
|
|
||||||
include(xcode.conf)
|
|
||||||
|
|
||||||
include(unix.conf)
|
include(unix.conf)
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
#
|
|
||||||
# qmake configuration for Xcode
|
|
||||||
#
|
|
||||||
|
|
||||||
# Get path of Xcode's Developer directory
|
|
||||||
QMAKE_XCODE_DEVELOPER_PATH = $$system("/usr/bin/xcode-select --print-path 2>/dev/null")
|
|
||||||
isEmpty(QMAKE_XCODE_DEVELOPER_PATH): \
|
|
||||||
error("Xcode path is not set. Please use xcode-select to choose Xcode installation path.")
|
|
||||||
|
|
||||||
# Make sure Xcode path is valid
|
|
||||||
!exists($$QMAKE_XCODE_DEVELOPER_PATH): \
|
|
||||||
error("Xcode is not installed in $${QMAKE_XCODE_DEVELOPER_PATH}. Please use xcode-select to choose Xcode installation path.")
|
|
||||||
|
|
||||||
# Make sure Xcode is set up properly
|
|
||||||
isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null"))): \
|
|
||||||
error("Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.")
|
|
||||||
|
|
||||||
# Extract Xcode version using xcodebuild
|
|
||||||
xcode_version = $$system("/usr/bin/xcodebuild -version")
|
|
||||||
QMAKE_XCODE_VERSION = $$member(xcode_version, 1)
|
|
||||||
unset(xcode_version)
|
|
@ -41,6 +41,8 @@ contains(CMAKE_INCLUDE_DIR, "^\\.\\./.*") {
|
|||||||
CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
|
CMAKE_INCLUDE_DIR_IS_ABSOLUTE = True
|
||||||
}
|
}
|
||||||
|
|
||||||
|
!exists($$first(QT.$${MODULE}.private_includes)): CMAKE_NO_PRIVATE_INCLUDES = true
|
||||||
|
|
||||||
CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
|
CMAKE_LIB_DIR = $$cmakeRelativePath($$[QT_INSTALL_LIBS], $$[QT_INSTALL_PREFIX])
|
||||||
contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
|
contains(CMAKE_LIB_DIR,"^\\.\\./.*") {
|
||||||
CMAKE_LIB_DIR = $$[QT_INSTALL_LIBS]/
|
CMAKE_LIB_DIR = $$[QT_INSTALL_LIBS]/
|
||||||
|
@ -57,7 +57,8 @@ isEmpty(CMAKE_VERSION) {
|
|||||||
dependentmodules -= $$CMAKE_QT_MODULES_UNDER_TEST
|
dependentmodules -= $$CMAKE_QT_MODULES_UNDER_TEST
|
||||||
dependentmodules = $$cmakeModuleList($$dependentmodules)
|
dependentmodules = $$cmakeModuleList($$dependentmodules)
|
||||||
|
|
||||||
contains(QT_CONFIG, angle): CMAKE_ANGLE_DEFINE = -DQT_WITH_ANGLE=True
|
contains(QT_CONFIG, angle): CMAKE_GL_DEFINES = -DQT_WITH_ANGLE=True
|
||||||
|
!contains(QT_CONFIG, egl): CMAKE_GL_DEFINES += -DNO_EGL=True
|
||||||
|
|
||||||
CMAKE_MODULE_VERSIONS =
|
CMAKE_MODULE_VERSIONS =
|
||||||
CMAKE_MODULES_UNDER_TEST =
|
CMAKE_MODULES_UNDER_TEST =
|
||||||
@ -76,7 +77,7 @@ isEmpty(CMAKE_VERSION) {
|
|||||||
cmake $$_PRO_FILE_PWD_ $$CMAKE_GENERATOR \
|
cmake $$_PRO_FILE_PWD_ $$CMAKE_GENERATOR \
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=1 \
|
-DCMAKE_VERBOSE_MAKEFILE=1 \
|
||||||
$$CMAKE_MODULE_DEFINES \
|
$$CMAKE_MODULE_DEFINES \
|
||||||
$$CMAKE_ANGLE_DEFINE \
|
$$CMAKE_GL_DEFINES \
|
||||||
-DCMAKE_BUILD_TYPE=$${CMAKE_BUILD_TYPE} \
|
-DCMAKE_BUILD_TYPE=$${CMAKE_BUILD_TYPE} \
|
||||||
-DCMAKE_PREFIX_PATH=$$CMAKE_PREFIX_PATH \
|
-DCMAKE_PREFIX_PATH=$$CMAKE_PREFIX_PATH \
|
||||||
-DQt5_MODULE_TEST_DEPENDS=\"$${dependentmodules}\" \
|
-DQt5_MODULE_TEST_DEPENDS=\"$${dependentmodules}\" \
|
||||||
|
@ -28,28 +28,48 @@ set(Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING "$$eval(QT.$${MODULE}.MAJOR_VERSION)
|
|||||||
|
|
||||||
set(Qt5$${CMAKE_MODULE_NAME}_LIBRARIES Qt5::$${CMAKE_MODULE_NAME})
|
set(Qt5$${CMAKE_MODULE_NAME}_LIBRARIES Qt5::$${CMAKE_MODULE_NAME})
|
||||||
|
|
||||||
|
macro(_qt5_$${CMAKE_MODULE_NAME}_check_file_exists file)
|
||||||
|
if(NOT EXISTS \"${file}\" )
|
||||||
|
message(FATAL_ERROR \"The imported target \\\"Qt5::$${CMAKE_MODULE_NAME}\\\" references the file
|
||||||
|
\\\"${file}\\\"
|
||||||
|
but this file does not exist. Possible reasons include:
|
||||||
|
* The file was deleted, renamed, or moved to another location.
|
||||||
|
* An install or uninstall procedure did not complete successfully.
|
||||||
|
* The installation package was faulty and contained
|
||||||
|
\\\"${CMAKE_CURRENT_LIST_FILE}\\\"
|
||||||
|
but not all the files it references.
|
||||||
|
\")
|
||||||
|
endif()
|
||||||
|
endmacro()
|
||||||
|
|
||||||
|
|
||||||
macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION)
|
macro(_populate_$${CMAKE_MODULE_NAME}_target_properties Configuration LIB_LOCATION IMPLIB_LOCATION)
|
||||||
set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
set_property(TARGET Qt5::$${CMAKE_MODULE_NAME} APPEND PROPERTY IMPORTED_CONFIGURATIONS ${Configuration})
|
||||||
|
|
||||||
|
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||||
|
set(imported_location \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${LIB_LOCATION}\")
|
||||||
|
!!ELSE
|
||||||
|
set(imported_location \"IMPORTED_LOCATION_${Configuration}\" \"$${CMAKE_LIB_DIR}${LIB_LOCATION}\")
|
||||||
|
!!ENDIF
|
||||||
|
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_location})
|
||||||
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
|
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
|
||||||
\"IMPORTED_LINK_INTERFACE_LIBRARIES_${Configuration}\" \"${_Qt5$${CMAKE_MODULE_NAME}_LIB_DEPENDENCIES}\"
|
\"IMPORTED_LINK_INTERFACE_LIBRARIES_${Configuration}\" \"${_Qt5$${CMAKE_MODULE_NAME}_LIB_DEPENDENCIES}\"
|
||||||
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
\"IMPORTED_LOCATION_${Configuration}\" ${imported_location}
|
||||||
\"IMPORTED_LOCATION_${Configuration}\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${LIB_LOCATION}\"
|
|
||||||
!!ELSE
|
|
||||||
\"IMPORTED_LOCATION_${Configuration}\" \"$${CMAKE_LIB_DIR}${LIB_LOCATION}\"
|
|
||||||
!!ENDIF
|
|
||||||
!!IF !isEmpty(CMAKE_LIB_SONAME)
|
!!IF !isEmpty(CMAKE_LIB_SONAME)
|
||||||
\"IMPORTED_SONAME_${Configuration}\" \"$${CMAKE_LIB_SONAME}\"
|
\"IMPORTED_SONAME_${Configuration}\" \"$${CMAKE_LIB_SONAME}\"
|
||||||
!!ENDIF
|
!!ENDIF
|
||||||
)
|
)
|
||||||
|
|
||||||
!!IF !isEmpty(CMAKE_WINDOWS_BUILD)
|
!!IF !isEmpty(CMAKE_WINDOWS_BUILD)
|
||||||
|
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
||||||
|
set(imported_implib \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||||
|
!!ELSE
|
||||||
|
set(imported_implib \"IMPORTED_IMPLIB_${Configuration}\" \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\")
|
||||||
|
!!ENDIF
|
||||||
|
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${imported_implib})
|
||||||
if(NOT \"${IMPLIB_LOCATION}\" STREQUAL \"\")
|
if(NOT \"${IMPLIB_LOCATION}\" STREQUAL \"\")
|
||||||
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
|
set_target_properties(Qt5::$${CMAKE_MODULE_NAME} PROPERTIES
|
||||||
!!IF isEmpty(CMAKE_LIB_DIR_IS_ABSOLUTE)
|
\"IMPORTED_IMPLIB_${Configuration}\" ${imported_implib}
|
||||||
\"IMPORTED_IMPLIB_${Configuration}\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\"
|
|
||||||
!!ELSE
|
|
||||||
\"IMPORTED_IMPLIB_${Configuration}\" \"$${CMAKE_LIB_DIR}${IMPLIB_LOCATION}\"
|
|
||||||
!!ENDIF
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
!!ENDIF
|
!!ENDIF
|
||||||
@ -60,21 +80,34 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
|||||||
!!IF !no_module_headers
|
!!IF !no_module_headers
|
||||||
!!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
|
!!IF isEmpty(CMAKE_INCLUDE_DIR_IS_ABSOLUTE)
|
||||||
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}\")
|
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$$CMAKE_INCLUDE_DIR\" \"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}\")
|
||||||
|
!!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES)
|
||||||
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
|
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
|
||||||
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}\"
|
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}\"
|
||||||
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}/$${MODULE_INCNAME}\"
|
\"${_qt5$${CMAKE_MODULE_NAME}_install_prefix}/$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}/$${MODULE_INCNAME}\"
|
||||||
)
|
)
|
||||||
|
!!ELSE
|
||||||
|
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS)
|
||||||
|
!!ENDIF
|
||||||
!!ELSE
|
!!ELSE
|
||||||
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\" \"$${CMAKE_INCLUDE_DIR}Qt$${CMAKE_MODULE_NAME}\")
|
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS \"$$CMAKE_INCLUDE_DIR\" \"$${CMAKE_INCLUDE_DIR}Qt$${CMAKE_MODULE_NAME}\")
|
||||||
|
!!IF isEmpty(CMAKE_NO_PRIVATE_INCLUDES)
|
||||||
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
|
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS
|
||||||
\"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}\"
|
\"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}\"
|
||||||
\"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}/$${MODULE_INCNAME}\"
|
\"$${CMAKE_INCLUDE_DIR}$${MODULE_INCNAME}/${Qt5$${CMAKE_MODULE_NAME}_VERSION_STRING}/$${MODULE_INCNAME}\"
|
||||||
)
|
)
|
||||||
|
!!ELSE
|
||||||
|
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS)
|
||||||
|
!!ENDIF
|
||||||
!!ENDIF
|
!!ENDIF
|
||||||
!!ELSE
|
!!ELSE
|
||||||
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS)
|
set(_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS)
|
||||||
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS)
|
set(Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS)
|
||||||
!!ENDIF
|
!!ENDIF
|
||||||
|
|
||||||
|
foreach(_dir ${_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS} ${Qt5$${CMAKE_MODULE_NAME}_PRIVATE_INCLUDE_DIRS})
|
||||||
|
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(${_dir})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
set(Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS ${_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS})
|
set(Qt5$${CMAKE_MODULE_NAME}_INCLUDE_DIRS ${_Qt5$${CMAKE_MODULE_NAME}_OWN_INCLUDE_DIRS})
|
||||||
|
|
||||||
set(Qt5$${CMAKE_MODULE_NAME}_DEFINITIONS -D$${MODULE_DEFINE})
|
set(Qt5$${CMAKE_MODULE_NAME}_DEFINITIONS -D$${MODULE_DEFINE})
|
||||||
@ -215,4 +248,6 @@ if (NOT TARGET Qt5::$${CMAKE_MODULE_NAME})
|
|||||||
include(\"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}Macros.cmake\")
|
include(\"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}Macros.cmake\")
|
||||||
!!ENDIF
|
!!ENDIF
|
||||||
|
|
||||||
|
_qt5_$${CMAKE_MODULE_NAME}_check_file_exists(\"${CMAKE_CURRENT_LIST_DIR}/Qt5$${CMAKE_MODULE_NAME}ConfigVersion.cmake\")
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
@ -2,3 +2,9 @@
|
|||||||
unset(MAKEFILE_GENERATOR)
|
unset(MAKEFILE_GENERATOR)
|
||||||
|
|
||||||
load(default_pre)
|
load(default_pre)
|
||||||
|
|
||||||
|
# Check for supported Xcode versions
|
||||||
|
lessThan(QMAKE_XCODE_VERSION, "4.3"): \
|
||||||
|
error("This mkspec requires Xcode 4.3 or later")
|
||||||
|
!lessThan(QMAKE_XCODE_VERSION, "4.7"): \
|
||||||
|
warning("The version of Xcode installed on this system is not recognized - custom compiler settings may be necessary")
|
||||||
|
@ -7,6 +7,11 @@ android {
|
|||||||
isEmpty(API_VERSION): API_VERSION = android-10
|
isEmpty(API_VERSION): API_VERSION = android-10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isEmpty(BUILD_TOOLS_REVISION) {
|
||||||
|
BUILD_TOOLS_REVISION = $$(ANDROID_BUILD_TOOLS_REVISION)
|
||||||
|
isEmpty(BUILD_TOOLS_REVISION): BUILD_TOOLS_REVISION = 17.0.0
|
||||||
|
}
|
||||||
|
|
||||||
!exists($$SDK_ROOT/platforms/$$API_VERSION/android.jar) {
|
!exists($$SDK_ROOT/platforms/$$API_VERSION/android.jar) {
|
||||||
error("The Path $$SDK_ROOT/platforms/$$API_VERSION/android.jar does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.")
|
error("The Path $$SDK_ROOT/platforms/$$API_VERSION/android.jar does not exist. Make sure the ANDROID_SDK_ROOT and ANDROID_API_VERSION environment variables are correctly set.")
|
||||||
}
|
}
|
||||||
@ -56,7 +61,9 @@ android:!bundled_jar_file {
|
|||||||
DEX_CMD = $$PWD/data/android/dx $$SDK_ROOT
|
DEX_CMD = $$PWD/data/android/dx $$SDK_ROOT
|
||||||
} else {
|
} else {
|
||||||
DEX_CMD = $$SDK_ROOT/platform-tools/dx
|
DEX_CMD = $$SDK_ROOT/platform-tools/dx
|
||||||
|
!exists($$DEX_CMD): DEX_CMD = $$SDK_ROOT/build-tools/$$BUILD_TOOLS_REVISION/dx
|
||||||
}
|
}
|
||||||
|
!exists($$DEX_CMD): error("The path $$DEX_CMD does not exist. Please set the environment variable ANDROID_BUILD_TOOLS_REVISION to the revision of the build tools installed in your Android SDK.")
|
||||||
QMAKE_LINK_SHLIB_CMD = $$DEX_CMD --dex --output $(TARGET) $$CLASS_DIR
|
QMAKE_LINK_SHLIB_CMD = $$DEX_CMD --dex --output $(TARGET) $$CLASS_DIR
|
||||||
} else {
|
} else {
|
||||||
QMAKE_LINK_SHLIB_CMD = jar cf $(TARGET) -C $$CLASS_DIR .
|
QMAKE_LINK_SHLIB_CMD = jar cf $(TARGET) -C $$CLASS_DIR .
|
||||||
|
@ -16,6 +16,14 @@ qt:!isEmpty(QT_CONFIG) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isEmpty(_QMAKE_CACHE_) {
|
||||||
|
warning("No .qmake.cache is present. This significantly slows down qmake with this makespec.")
|
||||||
|
warning("Call 'cache()' in the top-level project file to rectify this problem.")
|
||||||
|
} else {
|
||||||
|
cache(QMAKE_XCODE_DEVELOPER_PATH)
|
||||||
|
cache(QMAKE_XCODE_VERSION)
|
||||||
|
}
|
||||||
|
|
||||||
# Ensure that we process sdk.prf first, as it will update QMAKE_CXX
|
# Ensure that we process sdk.prf first, as it will update QMAKE_CXX
|
||||||
# and friends that other features/extra compilers may depend on.
|
# and friends that other features/extra compilers may depend on.
|
||||||
sdk: load(sdk)
|
sdk: load(sdk)
|
||||||
|
@ -1,3 +1,25 @@
|
|||||||
CONFIG = sdk rez $$CONFIG
|
CONFIG = sdk rez $$CONFIG
|
||||||
load(default_pre)
|
load(default_pre)
|
||||||
|
|
||||||
|
isEmpty(QMAKE_XCODE_DEVELOPER_PATH) {
|
||||||
|
# Get path of Xcode's Developer directory
|
||||||
|
QMAKE_XCODE_DEVELOPER_PATH = $$system("/usr/bin/xcode-select --print-path 2>/dev/null")
|
||||||
|
isEmpty(QMAKE_XCODE_DEVELOPER_PATH): \
|
||||||
|
error("Xcode path is not set. Please use xcode-select to choose Xcode installation path.")
|
||||||
|
|
||||||
|
# Make sure Xcode path is valid
|
||||||
|
!exists($$QMAKE_XCODE_DEVELOPER_PATH): \
|
||||||
|
error("Xcode is not installed in $${QMAKE_XCODE_DEVELOPER_PATH}. Please use xcode-select to choose Xcode installation path.")
|
||||||
|
|
||||||
|
# Make sure Xcode is set up properly
|
||||||
|
isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null"))): \
|
||||||
|
error("Xcode not set up properly. You may need to confirm the license agreement by running /usr/bin/xcodebuild.")
|
||||||
|
}
|
||||||
|
|
||||||
|
isEmpty(QMAKE_XCODE_VERSION) {
|
||||||
|
# Extract Xcode version using xcodebuild
|
||||||
|
xcode_version = $$system("/usr/bin/xcodebuild -version")
|
||||||
|
QMAKE_XCODE_VERSION = $$member(xcode_version, 1)
|
||||||
|
isEmpty(QMAKE_XCODE_VERSION): error("Could not resolve Xcode version.")
|
||||||
|
unset(xcode_version)
|
||||||
|
}
|
||||||
|
@ -5,8 +5,13 @@ isEmpty(QMAKE_MAC_SDK): \
|
|||||||
contains(QMAKE_MAC_SDK, .*/.*): \
|
contains(QMAKE_MAC_SDK, .*/.*): \
|
||||||
error("QMAKE_MAC_SDK can only contain short-form SDK names (eg. macosx, iphoneos)")
|
error("QMAKE_MAC_SDK can only contain short-form SDK names (eg. macosx, iphoneos)")
|
||||||
|
|
||||||
QMAKE_MAC_SDK_PATH = $$system("/usr/bin/xcodebuild -sdk $$QMAKE_MAC_SDK -version Path 2>/dev/null")
|
isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.path) {
|
||||||
isEmpty(QMAKE_MAC_SDK_PATH): error("Could not resolve SDK path for \'$$QMAKE_MAC_SDK\'")
|
QMAKE_MAC_SDK_PATH = $$system("/usr/bin/xcodebuild -sdk $$QMAKE_MAC_SDK -version Path 2>/dev/null")
|
||||||
|
isEmpty(QMAKE_MAC_SDK_PATH): error("Could not resolve SDK path for \'$$QMAKE_MAC_SDK\'")
|
||||||
|
!isEmpty(_QMAKE_CACHE_): cache(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.path, set, QMAKE_MAC_SDK_PATH)
|
||||||
|
} else {
|
||||||
|
QMAKE_MAC_SDK_PATH = $$eval(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.path)
|
||||||
|
}
|
||||||
|
|
||||||
!equals(MAKEFILE_GENERATOR, XCODE) {
|
!equals(MAKEFILE_GENERATOR, XCODE) {
|
||||||
QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH
|
QMAKE_CFLAGS += -isysroot $$QMAKE_MAC_SDK_PATH
|
||||||
@ -21,6 +26,11 @@ QMAKE_INCDIR_OPENGL = $$sysrootified
|
|||||||
|
|
||||||
# Resolve SDK version of various tools
|
# Resolve SDK version of various tools
|
||||||
for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_LINK QMAKE_LINK_SHLIB)) {
|
for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_LINK QMAKE_LINK_SHLIB)) {
|
||||||
|
!isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.$${tool}) {
|
||||||
|
$$tool = $$eval(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.$${tool})
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
|
||||||
value = $$eval($$tool)
|
value = $$eval($$tool)
|
||||||
isEmpty(value): next()
|
isEmpty(value): next()
|
||||||
|
|
||||||
@ -28,15 +38,21 @@ for(tool, $$list(QMAKE_CC QMAKE_CXX QMAKE_FIX_RPATH QMAKE_AR QMAKE_RANLIB QMAKE_
|
|||||||
isEmpty(sysrooted): next()
|
isEmpty(sysrooted): next()
|
||||||
|
|
||||||
$$tool = $$sysrooted $$member(value, 1, -1)
|
$$tool = $$sysrooted $$member(value, 1, -1)
|
||||||
|
!isEmpty(_QMAKE_CACHE_): cache(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.$${tool}, set, $$tool)
|
||||||
}
|
}
|
||||||
|
|
||||||
# We use xml as the output format instead of json since plutil on 10.6 does not have that option
|
isEmpty(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_name) {
|
||||||
QMAKE_MAC_PLATFORM_NAME = $$system("/usr/bin/plutil -convert xml1 \"$$QMAKE_MAC_SDK_PATH/SDKSettings.plist\" -o - 2>/dev/null | " \
|
# We use xml as the output format instead of json since plutil on 10.6 does not have that option
|
||||||
"sed '/^<!DOCTYPE/d' | " \ # Don't look up http://www.apple.com/DTDs/PropertyList-1.0.dtd
|
QMAKE_MAC_PLATFORM_NAME = $$system("/usr/bin/plutil -convert xml1 \"$$QMAKE_MAC_SDK_PATH/SDKSettings.plist\" -o - 2>/dev/null | " \
|
||||||
"PERL5LIB= xpath 'string(//key[.=\"PLATFORM_NAME\"]/following-sibling::*[1])' 2>/dev/null | " \
|
"sed '/^<!DOCTYPE/d' | " \ # Don't look up http://www.apple.com/DTDs/PropertyList-1.0.dtd
|
||||||
"sed 's/.*Value: \\(.*\\)/\\1/'")
|
"PERL5LIB= xpath 'string(//key[.=\"PLATFORM_NAME\"]/following-sibling::*[1])' 2>/dev/null | " \
|
||||||
|
"sed 's/.*Value: \\(.*\\)/\\1/'")
|
||||||
|
|
||||||
isEmpty(QMAKE_MAC_PLATFORM_NAME): error("Could not resolve platform name for SDK '$$QMAKE_MAC_SDK'")
|
isEmpty(QMAKE_MAC_PLATFORM_NAME): error("Could not resolve platform name for SDK '$$QMAKE_MAC_SDK'")
|
||||||
|
!isEmpty(_QMAKE_CACHE_): cache(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_name, set, QMAKE_MAC_PLATFORM_NAME)
|
||||||
|
} else {
|
||||||
|
QMAKE_MAC_PLATFORM_NAME = $$eval(QMAKE_MAC_SDK.$${QMAKE_MAC_SDK}.platform_name)
|
||||||
|
}
|
||||||
|
|
||||||
!equals(MAKEFILE_GENERATOR, XCODE) {
|
!equals(MAKEFILE_GENERATOR, XCODE) {
|
||||||
# FIXME: Get the version_min_flag out of the platform's 'Native Build System.xcspec'
|
# FIXME: Get the version_min_flag out of the platform's 'Native Build System.xcspec'
|
||||||
|
@ -43,7 +43,10 @@ DEPENDENCY_FILE = $$ANDROID_DEPENDS_DIR$$TARGET-android-dependencies.xml
|
|||||||
|
|
||||||
!isEmpty(ANDROID_LIB_DEPENDENCIES) {
|
!isEmpty(ANDROID_LIB_DEPENDENCIES) {
|
||||||
for(LIB_FILE, ANDROID_LIB_DEPENDENCIES) {
|
for(LIB_FILE, ANDROID_LIB_DEPENDENCIES) {
|
||||||
FILE_CONTENT += "<lib file=\"$$LIB_FILE\" />"
|
EXTENDS = $$section(LIB_FILE, ":", 1, 1)
|
||||||
|
!isEmpty(EXTENDS): EXTENDS = "extends=\"$$EXTENDS\""
|
||||||
|
LIB_FILE = $$section(LIB_FILE, ":", 0, 0)
|
||||||
|
FILE_CONTENT += "<lib file=\"$$LIB_FILE\" $$EXTENDS />"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ QMAKE_QT_CONFIG = $$[QT_HOST_DATA/get]/mkspecs/qconfig.pri
|
|||||||
# qt_<module>.pri forwarding file
|
# qt_<module>.pri forwarding file
|
||||||
QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS]
|
QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS]
|
||||||
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
|
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
|
||||||
|
QT_MODULE_HOST_LIB_BASE = $$[QT_HOST_LIBS]
|
||||||
QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS]
|
QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS]
|
||||||
QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS]
|
QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS]
|
||||||
QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS]
|
QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS]
|
||||||
@ -30,6 +31,7 @@ QMAKE_QT_CONFIG = $$[QT_HOST_DATA/get]/mkspecs/qconfig.pri
|
|||||||
}
|
}
|
||||||
unset(QT_MODULE_INCLUDE_BASE)
|
unset(QT_MODULE_INCLUDE_BASE)
|
||||||
unset(QT_MODULE_LIB_BASE)
|
unset(QT_MODULE_LIB_BASE)
|
||||||
|
unset(QT_MODULE_HOST_LIB_BASE)
|
||||||
unset(QT_MODULE_PLUGIN_BASE)
|
unset(QT_MODULE_PLUGIN_BASE)
|
||||||
unset(QT_MODULE_LIBEXEC_BASE)
|
unset(QT_MODULE_LIBEXEC_BASE)
|
||||||
unset(QT_MODULE_BIN_BASE)
|
unset(QT_MODULE_BIN_BASE)
|
||||||
|
@ -194,12 +194,10 @@ defineTest(qtPrepareTool) {
|
|||||||
$$1 = $$eval(QT_TOOL.$${2}.command)
|
$$1 = $$eval(QT_TOOL.$${2}.command)
|
||||||
isEmpty($$1) {
|
isEmpty($$1) {
|
||||||
$$1 = $$[QT_HOST_BINS]/$$2
|
$$1 = $$[QT_HOST_BINS]/$$2
|
||||||
contains(QMAKE_HOST.os, Windows):!contains($$1, .*\\.(exe|bat)$) {
|
exists($$eval($$1).pl) {
|
||||||
exists($$eval($$1).bat) {
|
$$1 = perl -w $$eval($$1).pl
|
||||||
$$1 = $$eval($$1).bat
|
} else: contains(QMAKE_HOST.os, Windows) {
|
||||||
} else {
|
$$1 = $$eval($$1).exe
|
||||||
$$1 = $$eval($$1).exe
|
|
||||||
}
|
|
||||||
} else:contains(QMAKE_HOST.os, Darwin) {
|
} else:contains(QMAKE_HOST.os, Darwin) {
|
||||||
BUNDLENAME = $$eval($$1).app/Contents/MacOS/$$2
|
BUNDLENAME = $$eval($$1).app/Contents/MacOS/$$2
|
||||||
exists($$BUNDLENAME) {
|
exists($$BUNDLENAME) {
|
||||||
|
@ -12,10 +12,16 @@
|
|||||||
#library
|
#library
|
||||||
!qt_no_install_library {
|
!qt_no_install_library {
|
||||||
win32 {
|
win32 {
|
||||||
dlltarget.path = $$[QT_INSTALL_BINS]
|
host_build: \
|
||||||
|
dlltarget.path = $$[QT_HOST_BINS]
|
||||||
|
else: \
|
||||||
|
dlltarget.path = $$[QT_INSTALL_BINS]
|
||||||
INSTALLS += dlltarget
|
INSTALLS += dlltarget
|
||||||
}
|
}
|
||||||
target.path = $$[QT_INSTALL_LIBS]
|
host_build: \
|
||||||
|
target.path = $$[QT_HOST_LIBS]
|
||||||
|
else: \
|
||||||
|
target.path = $$[QT_INSTALL_LIBS]
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -128,7 +128,10 @@ load(qt_installs)
|
|||||||
|
|
||||||
unix|win32-g++* {
|
unix|win32-g++* {
|
||||||
CONFIG += create_pc
|
CONFIG += create_pc
|
||||||
QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
|
host_build: \
|
||||||
|
QMAKE_PKGCONFIG_LIBDIR = $$[QT_HOST_LIBS]
|
||||||
|
else: \
|
||||||
|
QMAKE_PKGCONFIG_LIBDIR = $$[QT_INSTALL_LIBS/raw]
|
||||||
QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
|
QMAKE_PKGCONFIG_INCDIR = $$[QT_INSTALL_HEADERS/raw]
|
||||||
QMAKE_PKGCONFIG_CFLAGS = -I${includedir}/$$MODULE_INCNAME
|
QMAKE_PKGCONFIG_CFLAGS = -I${includedir}/$$MODULE_INCNAME
|
||||||
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
|
QMAKE_PKGCONFIG_DESTDIR = pkgconfig
|
||||||
@ -139,14 +142,14 @@ unix|win32-g++* {
|
|||||||
include_replace.match = $$rplbase/include
|
include_replace.match = $$rplbase/include
|
||||||
include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
|
include_replace.replace = $$[QT_INSTALL_HEADERS/raw]
|
||||||
lib_replace.match = $$rplbase/lib
|
lib_replace.match = $$rplbase/lib
|
||||||
lib_replace.replace = $$[QT_INSTALL_LIBS/raw]
|
lib_replace.replace = $$QMAKE_PKGCONFIG_LIBDIR
|
||||||
QMAKE_PKGCONFIG_INSTALL_REPLACE += include_replace lib_replace
|
QMAKE_PKGCONFIG_INSTALL_REPLACE += include_replace lib_replace
|
||||||
QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
|
QMAKE_PRL_INSTALL_REPLACE += include_replace lib_replace
|
||||||
}
|
}
|
||||||
|
|
||||||
unix {
|
unix {
|
||||||
CONFIG += create_libtool explicitlib
|
CONFIG += create_libtool explicitlib
|
||||||
QMAKE_LIBTOOL_LIBDIR = $$[QT_INSTALL_LIBS/raw]
|
QMAKE_LIBTOOL_LIBDIR = $$QMAKE_PKGCONFIG_LIBDIR
|
||||||
QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace
|
QMAKE_LIBTOOL_INSTALL_REPLACE += include_replace lib_replace
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,10 +19,18 @@ else: \
|
|||||||
!build_pass {
|
!build_pass {
|
||||||
|
|
||||||
# Create a module .pri file
|
# Create a module .pri file
|
||||||
unix:!static: \
|
host_build: \
|
||||||
module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
|
module_libs = "\$\$QT_MODULE_HOST_LIB_BASE"
|
||||||
else: \
|
else: \
|
||||||
|
module_libs = "\$\$QT_MODULE_LIB_BASE"
|
||||||
|
unix:!static {
|
||||||
|
host_build: \
|
||||||
|
module_rpath = "QT.$${MODULE}.rpath = $$[QT_HOST_LIBS]"
|
||||||
|
else: \
|
||||||
|
module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
|
||||||
|
} else {
|
||||||
module_rpath =
|
module_rpath =
|
||||||
|
}
|
||||||
!isEmpty(QT_FOR_PRIVATE) {
|
!isEmpty(QT_FOR_PRIVATE) {
|
||||||
contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
|
contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
|
||||||
module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
|
module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
|
||||||
@ -55,15 +63,17 @@ else: \
|
|||||||
"QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
|
"QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
|
||||||
"" \
|
"" \
|
||||||
"QT.$${MODULE}.name = $$TARGET" \
|
"QT.$${MODULE}.name = $$TARGET" \
|
||||||
"QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
|
"QT.$${MODULE}.libs = $$module_libs" \
|
||||||
"QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
|
|
||||||
"QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
|
|
||||||
"QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
|
|
||||||
"QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
|
|
||||||
$$module_rpath \
|
$$module_rpath \
|
||||||
|
"QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES"
|
||||||
|
!host_build: MODULE_PRI_CONT += \
|
||||||
|
"QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
|
||||||
|
"QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
|
||||||
|
"QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
|
||||||
"QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
|
"QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
|
||||||
"QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
|
"QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
|
||||||
"QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
|
"QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE"
|
||||||
|
MODULE_PRI_CONT += \
|
||||||
"QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
|
"QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
|
||||||
$$module_privdep \
|
$$module_privdep \
|
||||||
$$module_rundep \
|
$$module_rundep \
|
||||||
@ -84,6 +94,7 @@ else: \
|
|||||||
"QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
|
"QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
|
||||||
"QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
|
"QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
|
||||||
"QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
|
"QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
|
||||||
|
"QT_MODULE_HOST_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
|
||||||
"QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
|
"QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
|
||||||
"QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
|
"QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
|
||||||
"include($$MODULE_PRI)"
|
"include($$MODULE_PRI)"
|
||||||
@ -99,6 +110,7 @@ else: \
|
|||||||
QT_MODULE_IMPORT_BASE = $$[QT_INSTALL_IMPORTS]
|
QT_MODULE_IMPORT_BASE = $$[QT_INSTALL_IMPORTS]
|
||||||
QT_MODULE_QML_BASE = $$[QT_INSTALL_QML]
|
QT_MODULE_QML_BASE = $$[QT_INSTALL_QML]
|
||||||
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
|
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
|
||||||
|
QT_MODULE_HOST_LIB_BASE = $$[QT_HOST_LIBS]
|
||||||
QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS]
|
QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS]
|
||||||
QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS]
|
QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS]
|
||||||
|
|
||||||
|
@ -22,6 +22,4 @@ include(../../common/clang-mac.conf)
|
|||||||
include(../../common/ios/clang.conf)
|
include(../../common/ios/clang.conf)
|
||||||
include(../../common/ios/qmake.conf)
|
include(../../common/ios/qmake.conf)
|
||||||
|
|
||||||
lessThan(QMAKE_XCODE_VERSION, "4.3"): error("This mkspec requires Xcode 4.3 or later")
|
|
||||||
|
|
||||||
load(qt_config)
|
load(qt_config)
|
||||||
|
@ -94,6 +94,10 @@ QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
|
|||||||
MINGW_IN_SHELL = 1
|
MINGW_IN_SHELL = 1
|
||||||
QMAKE_DIR_SEP = /
|
QMAKE_DIR_SEP = /
|
||||||
include(../common/shell-unix.conf)
|
include(../common/shell-unix.conf)
|
||||||
|
# Because install's ability to set permissions is not relevant on Windows,
|
||||||
|
# and git's msys does not provide it to start with.
|
||||||
|
QMAKE_INSTALL_FILE = cp -f
|
||||||
|
QMAKE_INSTALL_PROGRAM = cp -f
|
||||||
} else {
|
} else {
|
||||||
include(../common/shell-win32.conf)
|
include(../common/shell-win32.conf)
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,11 @@ MAKEFILE_GENERATOR = MSVC.NET
|
|||||||
QMAKE_PLATFORM = win32
|
QMAKE_PLATFORM = win32
|
||||||
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
||||||
DEFINES += UNICODE WIN32
|
DEFINES += UNICODE WIN32
|
||||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1400 WIN32
|
QMAKE_COMPILER_DEFINES += _MSC_VER=1400 _WIN32
|
||||||
|
contains(QMAKE_TARGET.arch, x86_64) {
|
||||||
|
DEFINES += WIN64
|
||||||
|
QMAKE_COMPILER_DEFINES += _WIN64
|
||||||
|
}
|
||||||
|
|
||||||
QMAKE_COMPILER = msvc
|
QMAKE_COMPILER = msvc
|
||||||
|
|
||||||
|
@ -8,7 +8,11 @@ MAKEFILE_GENERATOR = MSVC.NET
|
|||||||
QMAKE_PLATFORM = win32
|
QMAKE_PLATFORM = win32
|
||||||
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
||||||
DEFINES += UNICODE WIN32
|
DEFINES += UNICODE WIN32
|
||||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1500 WIN32
|
QMAKE_COMPILER_DEFINES += _MSC_VER=1500 _WIN32
|
||||||
|
contains(QMAKE_TARGET.arch, x86_64) {
|
||||||
|
DEFINES += WIN64
|
||||||
|
QMAKE_COMPILER_DEFINES += _WIN64
|
||||||
|
}
|
||||||
|
|
||||||
QMAKE_COMPILER = msvc
|
QMAKE_COMPILER = msvc
|
||||||
|
|
||||||
|
@ -8,7 +8,11 @@ MAKEFILE_GENERATOR = MSBUILD
|
|||||||
QMAKE_PLATFORM = win32
|
QMAKE_PLATFORM = win32
|
||||||
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
||||||
DEFINES += UNICODE WIN32
|
DEFINES += UNICODE WIN32
|
||||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1600 WIN32
|
QMAKE_COMPILER_DEFINES += _MSC_VER=1600 _WIN32
|
||||||
|
contains(QMAKE_TARGET.arch, x86_64) {
|
||||||
|
DEFINES += WIN64
|
||||||
|
QMAKE_COMPILER_DEFINES += _WIN64
|
||||||
|
}
|
||||||
|
|
||||||
QMAKE_COMPILER = msvc
|
QMAKE_COMPILER = msvc
|
||||||
|
|
||||||
|
@ -5,9 +5,14 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
MAKEFILE_GENERATOR = MSBUILD
|
MAKEFILE_GENERATOR = MSBUILD
|
||||||
|
QMAKE_PLATFORM = win32
|
||||||
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
CONFIG += incremental flat precompile_header autogen_precompile_source debug_and_release debug_and_release_target embed_manifest_dll embed_manifest_exe
|
||||||
DEFINES += UNICODE WIN32
|
DEFINES += UNICODE WIN32
|
||||||
QMAKE_COMPILER_DEFINES += _MSC_VER=1700 WIN32
|
QMAKE_COMPILER_DEFINES += _MSC_VER=1700 _WIN32
|
||||||
|
contains(QMAKE_TARGET.arch, x86_64) {
|
||||||
|
DEFINES += WIN64
|
||||||
|
QMAKE_COMPILER_DEFINES += _WIN64
|
||||||
|
}
|
||||||
|
|
||||||
QMAKE_COMPILER = msvc
|
QMAKE_COMPILER = msvc
|
||||||
|
|
||||||
|
@ -1412,7 +1412,7 @@ void VCXProjectWriter::write(XmlOutput &xml, const VCCLCompilerTool &tool)
|
|||||||
<< attrTagT(_StringPooling, tool.StringPooling)
|
<< attrTagT(_StringPooling, tool.StringPooling)
|
||||||
<< attrTagS(_StructMemberAlignment, toString(tool.StructMemberAlignment))
|
<< attrTagS(_StructMemberAlignment, toString(tool.StructMemberAlignment))
|
||||||
<< attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
|
<< attrTagT(_SuppressStartupBanner, tool.SuppressStartupBanner)
|
||||||
//unused << attrTagS(_TreatSpecificWarningsAsErrors, tool.TreatSpecificWarningsAsErrors)
|
<< attrTagX(_TreatSpecificWarningsAsErrors, tool.TreatSpecificWarningsAsErrors, ";")
|
||||||
<< attrTagT(_TreatWarningAsError, tool.WarnAsError)
|
<< attrTagT(_TreatWarningAsError, tool.WarnAsError)
|
||||||
<< attrTagT(_TreatWChar_tAsBuiltInType, tool.TreatWChar_tAsBuiltInType)
|
<< attrTagT(_TreatWChar_tAsBuiltInType, tool.TreatWChar_tAsBuiltInType)
|
||||||
<< attrTagT(_UndefineAllPreprocessorDefinitions, tool.UndefineAllPreprocessorDefinitions)
|
<< attrTagT(_UndefineAllPreprocessorDefinitions, tool.UndefineAllPreprocessorDefinitions)
|
||||||
|
@ -779,16 +779,14 @@ bool VCCLCompilerTool::parseOption(const char* option)
|
|||||||
found = false; break;
|
found = false; break;
|
||||||
case 'R':
|
case 'R':
|
||||||
if(second == 'T' && third == 'C') {
|
if(second == 'T' && third == 'C') {
|
||||||
if(fourth == '1')
|
int rtc = BasicRuntimeChecks;
|
||||||
BasicRuntimeChecks = runtimeBasicCheckAll;
|
for (size_t i = 4; option[i]; ++i) {
|
||||||
else if(fourth == 'c')
|
if (!parseRuntimeCheckOption(option[i], &rtc)) {
|
||||||
SmallerTypeCheck = _True;
|
found = false;
|
||||||
else if(fourth == 's')
|
break;
|
||||||
BasicRuntimeChecks = runtimeCheckStackFrame;
|
}
|
||||||
else if(fourth == 'u')
|
}
|
||||||
BasicRuntimeChecks = runtimeCheckUninitVariables;
|
BasicRuntimeChecks = static_cast<basicRuntimeCheckOption>(rtc);
|
||||||
else
|
|
||||||
found = false; break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'T':
|
case 'T':
|
||||||
@ -1117,6 +1115,12 @@ bool VCCLCompilerTool::parseOption(const char* option)
|
|||||||
case 'd':
|
case 'd':
|
||||||
DisableSpecificWarnings += option+3;
|
DisableSpecificWarnings += option+3;
|
||||||
break;
|
break;
|
||||||
|
case 'e':
|
||||||
|
if (config->CompilerVersion <= NET2008)
|
||||||
|
AdditionalOptions += option;
|
||||||
|
else
|
||||||
|
TreatSpecificWarningsAsErrors += option + 3;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
AdditionalOptions += option;
|
AdditionalOptions += option;
|
||||||
}
|
}
|
||||||
@ -1132,6 +1136,21 @@ bool VCCLCompilerTool::parseOption(const char* option)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool VCCLCompilerTool::parseRuntimeCheckOption(char c, int *rtc)
|
||||||
|
{
|
||||||
|
if (c == '1')
|
||||||
|
*rtc = runtimeBasicCheckAll;
|
||||||
|
else if (c == 'c')
|
||||||
|
SmallerTypeCheck = _True;
|
||||||
|
else if (c == 's')
|
||||||
|
*rtc |= runtimeCheckStackFrame;
|
||||||
|
else if (c == 'u')
|
||||||
|
*rtc |= runtimeCheckUninitVariables;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// VCLinkerTool -----------------------------------------------------
|
// VCLinkerTool -----------------------------------------------------
|
||||||
VCLinkerTool::VCLinkerTool()
|
VCLinkerTool::VCLinkerTool()
|
||||||
: DataExecutionPrevention(unset),
|
: DataExecutionPrevention(unset),
|
||||||
|
@ -106,10 +106,10 @@ enum asmListingOption {
|
|||||||
asmListingAsmSrc
|
asmListingAsmSrc
|
||||||
};
|
};
|
||||||
enum basicRuntimeCheckOption {
|
enum basicRuntimeCheckOption {
|
||||||
runtimeBasicCheckNone,
|
runtimeBasicCheckNone = 0,
|
||||||
runtimeCheckStackFrame,
|
runtimeCheckStackFrame = 1,
|
||||||
runtimeCheckUninitVariables,
|
runtimeCheckUninitVariables = 2,
|
||||||
runtimeBasicCheckAll
|
runtimeBasicCheckAll = runtimeCheckStackFrame | runtimeCheckUninitVariables
|
||||||
};
|
};
|
||||||
enum browseInfoOption {
|
enum browseInfoOption {
|
||||||
brInfoNone,
|
brInfoNone,
|
||||||
@ -561,6 +561,7 @@ public:
|
|||||||
QStringList UndefinePreprocessorDefinitions;
|
QStringList UndefinePreprocessorDefinitions;
|
||||||
pchOption UsePrecompiledHeader;
|
pchOption UsePrecompiledHeader;
|
||||||
triState UseUnicodeForAssemblerListing;
|
triState UseUnicodeForAssemblerListing;
|
||||||
|
QStringList TreatSpecificWarningsAsErrors;
|
||||||
triState WarnAsError;
|
triState WarnAsError;
|
||||||
warningLevelOption WarningLevel;
|
warningLevelOption WarningLevel;
|
||||||
triState WholeProgramOptimization;
|
triState WholeProgramOptimization;
|
||||||
@ -579,6 +580,9 @@ public:
|
|||||||
QString PreprocessOutputPath;
|
QString PreprocessOutputPath;
|
||||||
|
|
||||||
VCConfiguration* config;
|
VCConfiguration* config;
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool parseRuntimeCheckOption(char c, int *rtc);
|
||||||
};
|
};
|
||||||
|
|
||||||
class VCLinkerTool : public VCToolBase
|
class VCLinkerTool : public VCToolBase
|
||||||
|
@ -622,8 +622,6 @@ void VcprojGenerator::writeSubDirs(QTextStream &t)
|
|||||||
QHash<QString, VcsolutionDepend*> solution_depends;
|
QHash<QString, VcsolutionDepend*> solution_depends;
|
||||||
QList<VcsolutionDepend*> solution_cleanup;
|
QList<VcsolutionDepend*> solution_cleanup;
|
||||||
|
|
||||||
QString oldpwd = qmake_getpwd();
|
|
||||||
|
|
||||||
// Make sure that all temp projects are configured
|
// Make sure that all temp projects are configured
|
||||||
// for release so that the depends are created
|
// for release so that the depends are created
|
||||||
// without the debug <lib>dxxx.lib name mangling
|
// without the debug <lib>dxxx.lib name mangling
|
||||||
@ -997,7 +995,6 @@ void VcprojGenerator::initCompilerTool()
|
|||||||
conf.compiler.Optimization = optimizeDisabled;
|
conf.compiler.Optimization = optimizeDisabled;
|
||||||
}
|
}
|
||||||
conf.compiler.AssemblerListingLocation = placement ;
|
conf.compiler.AssemblerListingLocation = placement ;
|
||||||
conf.compiler.ProgramDataBaseFileName = ".\\" ;
|
|
||||||
conf.compiler.ObjectFile = placement ;
|
conf.compiler.ObjectFile = placement ;
|
||||||
conf.compiler.ExceptionHandling = ehNone;
|
conf.compiler.ExceptionHandling = ehNone;
|
||||||
// PCH
|
// PCH
|
||||||
|
@ -345,7 +345,7 @@ QTextStream &operator<<(QTextStream &t, const ProString &str)
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
static QString ProStringList_join(const ProStringList &this_, const QChar *sep, const size_t sepSize)
|
static QString ProStringList_join(const ProStringList &this_, const QChar *sep, const int sepSize)
|
||||||
{
|
{
|
||||||
int totalLength = 0;
|
int totalLength = 0;
|
||||||
const int sz = this_.size();
|
const int sz = this_.size();
|
||||||
|
@ -275,6 +275,7 @@ enum ProToken {
|
|||||||
TokRemove, // variable -=
|
TokRemove, // variable -=
|
||||||
TokReplace, // variable ~=
|
TokReplace, // variable ~=
|
||||||
// previous literal/expansion is a variable manipulation
|
// previous literal/expansion is a variable manipulation
|
||||||
|
// - lower bound for expected output length (1)
|
||||||
// - value expression + TokValueTerminator
|
// - value expression + TokValueTerminator
|
||||||
TokValueTerminator, // assignment value terminator
|
TokValueTerminator, // assignment value terminator
|
||||||
TokLiteral, // literal string (fully dequoted)
|
TokLiteral, // literal string (fully dequoted)
|
||||||
|
@ -195,7 +195,7 @@ static bool isTrue(const ProString &_str, QString &tmp)
|
|||||||
return !str.compare(statics.strtrue, Qt::CaseInsensitive) || str.toInt();
|
return !str.compare(statics.strtrue, Qt::CaseInsensitive) || str.toInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
#if defined(Q_OS_WIN) && defined(PROEVALUATOR_FULL)
|
||||||
static QString windowsErrorCode()
|
static QString windowsErrorCode()
|
||||||
{
|
{
|
||||||
wchar_t *string = 0;
|
wchar_t *string = 0;
|
||||||
|
@ -1242,10 +1242,11 @@ void QMakeEvaluator::setupProject()
|
|||||||
{
|
{
|
||||||
setTemplate();
|
setTemplate();
|
||||||
ProValueMap &vars = m_valuemapStack.top();
|
ProValueMap &vars = m_valuemapStack.top();
|
||||||
vars[ProKey("TARGET")] << ProString(QFileInfo(currentFileName()).baseName());
|
ProFile *proFile = currentProFile();
|
||||||
vars[ProKey("_PRO_FILE_")] << ProString(currentFileName());
|
vars[ProKey("TARGET")] << ProString(QFileInfo(currentFileName()).baseName()).setSource(proFile);
|
||||||
vars[ProKey("_PRO_FILE_PWD_")] << ProString(currentDirectory());
|
vars[ProKey("_PRO_FILE_")] << ProString(currentFileName()).setSource(proFile);
|
||||||
vars[ProKey("OUT_PWD")] << ProString(m_outputDir);
|
vars[ProKey("_PRO_FILE_PWD_")] << ProString(currentDirectory()).setSource(proFile);
|
||||||
|
vars[ProKey("OUT_PWD")] << ProString(m_outputDir).setSource(proFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QMakeEvaluator::evaluateCommand(const QString &cmds, const QString &where)
|
void QMakeEvaluator::evaluateCommand(const QString &cmds, const QString &where)
|
||||||
@ -1356,11 +1357,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
|
|||||||
loadDefaults();
|
loadDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef QT_BUILD_QMAKE
|
|
||||||
for (ProValueMap::ConstIterator it = m_extraVars.constBegin();
|
for (ProValueMap::ConstIterator it = m_extraVars.constBegin();
|
||||||
it != m_extraVars.constEnd(); ++it)
|
it != m_extraVars.constEnd(); ++it)
|
||||||
m_valuemapStack.first().insert(it.key(), it.value());
|
m_valuemapStack.first().insert(it.key(), it.value());
|
||||||
#endif
|
|
||||||
|
|
||||||
VisitReturn vr;
|
VisitReturn vr;
|
||||||
|
|
||||||
@ -1375,11 +1374,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
|
|||||||
|
|
||||||
evaluateCommand(m_option->precmds, fL1S("(command line)"));
|
evaluateCommand(m_option->precmds, fL1S("(command line)"));
|
||||||
|
|
||||||
#ifdef QT_BUILD_QMAKE
|
|
||||||
// After user configs, to override them
|
// After user configs, to override them
|
||||||
if (!m_extraConfigs.isEmpty())
|
if (!m_extraConfigs.isEmpty())
|
||||||
evaluateCommand("CONFIG += " + m_extraConfigs.join(' '), fL1S("(extra configs)"));
|
evaluateCommand(fL1S("CONFIG += ") + m_extraConfigs.join(QLatin1Char(' ')), fL1S("(extra configs)"));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
debugMsg(1, "visiting file %s", qPrintable(pro->fileName()));
|
debugMsg(1, "visiting file %s", qPrintable(pro->fileName()));
|
||||||
@ -1390,13 +1387,11 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::visitProFile(
|
|||||||
if (flags & LoadPostFiles) {
|
if (flags & LoadPostFiles) {
|
||||||
evaluateCommand(m_option->postcmds, fL1S("(command line -after)"));
|
evaluateCommand(m_option->postcmds, fL1S("(command line -after)"));
|
||||||
|
|
||||||
#ifdef QT_BUILD_QMAKE
|
|
||||||
// Again, to ensure the project does not mess with us.
|
// Again, to ensure the project does not mess with us.
|
||||||
// Specifically, do not allow a project to override debug/release within a
|
// Specifically, do not allow a project to override debug/release within a
|
||||||
// debug_and_release build pass - it's too late for that at this point anyway.
|
// debug_and_release build pass - it's too late for that at this point anyway.
|
||||||
if (!m_extraConfigs.isEmpty())
|
if (!m_extraConfigs.isEmpty())
|
||||||
evaluateCommand("CONFIG += " + m_extraConfigs.join(' '), fL1S("(extra configs)"));
|
evaluateCommand(fL1S("CONFIG += ") + m_extraConfigs.join(QLatin1Char(' ')), fL1S("(extra configs)"));
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((vr = evaluateFeatureFile(QLatin1String("default_post.prf"))) == ReturnError)
|
if ((vr = evaluateFeatureFile(QLatin1String("default_post.prf"))) == ReturnError)
|
||||||
goto failed;
|
goto failed;
|
||||||
|
@ -112,10 +112,8 @@ public:
|
|||||||
QMakeHandler *handler);
|
QMakeHandler *handler);
|
||||||
~QMakeEvaluator();
|
~QMakeEvaluator();
|
||||||
|
|
||||||
#ifdef QT_BUILD_QMAKE
|
|
||||||
void setExtraVars(const ProValueMap &extraVars) { m_extraVars = extraVars; }
|
void setExtraVars(const ProValueMap &extraVars) { m_extraVars = extraVars; }
|
||||||
void setExtraConfigs(const ProStringList &extraConfigs) { m_extraConfigs = extraConfigs; }
|
void setExtraConfigs(const ProStringList &extraConfigs) { m_extraConfigs = extraConfigs; }
|
||||||
#endif
|
|
||||||
void setOutputDir(const QString &outputDir) { m_outputDir = outputDir; }
|
void setOutputDir(const QString &outputDir) { m_outputDir = outputDir; }
|
||||||
|
|
||||||
ProStringList values(const ProKey &variableName) const;
|
ProStringList values(const ProKey &variableName) const;
|
||||||
@ -268,10 +266,8 @@ public:
|
|||||||
QStack<Location> m_locationStack; // All execution location changes
|
QStack<Location> m_locationStack; // All execution location changes
|
||||||
QStack<ProFile *> m_profileStack; // Includes only
|
QStack<ProFile *> m_profileStack; // Includes only
|
||||||
|
|
||||||
#ifdef QT_BUILD_QMAKE
|
|
||||||
ProValueMap m_extraVars;
|
ProValueMap m_extraVars;
|
||||||
ProStringList m_extraConfigs;
|
ProStringList m_extraConfigs;
|
||||||
#endif
|
|
||||||
QString m_outputDir;
|
QString m_outputDir;
|
||||||
|
|
||||||
int m_listCount;
|
int m_listCount;
|
||||||
|
@ -298,12 +298,12 @@ bool QMakeParser::read(ProFile *pro, const QString &in, int line, SubGrammar gra
|
|||||||
// Worst-case size calculations:
|
// Worst-case size calculations:
|
||||||
// - line marker adds 1 (2-nl) to 1st token of each line
|
// - line marker adds 1 (2-nl) to 1st token of each line
|
||||||
// - empty assignment "A=":2 =>
|
// - empty assignment "A=":2 =>
|
||||||
// TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) +
|
// TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) + 0(1) +
|
||||||
// TokValueTerminator(1) == 7 (8)
|
// TokValueTerminator(1) == 8 (9)
|
||||||
// - non-empty assignment "A=B C":5 =>
|
// - non-empty assignment "A=B C":5 =>
|
||||||
// TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) +
|
// TokHashLiteral(1) + hash(2) + len(1) + "A"(1) + TokAssign(1) + 2(1) +
|
||||||
// TokLiteral(1) + len(1) + "B"(1) +
|
// TokLiteral(1) + len(1) + "B"(1) +
|
||||||
// TokLiteral(1) + len(1) + "C"(1) + TokValueTerminator(1) == 13 (14)
|
// TokLiteral(1) + len(1) + "C"(1) + TokValueTerminator(1) == 14 (15)
|
||||||
// - variable expansion: "$$f":3 =>
|
// - variable expansion: "$$f":3 =>
|
||||||
// TokVariable(1) + hash(2) + len(1) + "f"(1) = 5
|
// TokVariable(1) + hash(2) + len(1) + "f"(1) = 5
|
||||||
// - function expansion: "$$f()":5 =>
|
// - function expansion: "$$f()":5 =>
|
||||||
|
@ -74,6 +74,7 @@ static const struct {
|
|||||||
{ "QT_HOST_PREFIX", QLibraryInfo::HostPrefixPath, true },
|
{ "QT_HOST_PREFIX", QLibraryInfo::HostPrefixPath, true },
|
||||||
{ "QT_HOST_DATA", QLibraryInfo::HostDataPath, true },
|
{ "QT_HOST_DATA", QLibraryInfo::HostDataPath, true },
|
||||||
{ "QT_HOST_BINS", QLibraryInfo::HostBinariesPath, true },
|
{ "QT_HOST_BINS", QLibraryInfo::HostBinariesPath, true },
|
||||||
|
{ "QT_HOST_LIBS", QLibraryInfo::HostLibrariesPath, true },
|
||||||
{ "QMAKE_SPEC", QLibraryInfo::HostSpecPath, true },
|
{ "QMAKE_SPEC", QLibraryInfo::HostSpecPath, true },
|
||||||
{ "QMAKE_XSPEC", QLibraryInfo::TargetSpecPath, true },
|
{ "QMAKE_XSPEC", QLibraryInfo::TargetSpecPath, true },
|
||||||
};
|
};
|
||||||
|