Merge remote-tracking branch 'origin/api_changes' into containters
Conflicts: src/corelib/kernel/qmetaobject.cpp src/corelib/kernel/qvariant.cpp src/tools/moc/moc.h Change-Id: I2cd3d95b41d2636738c6b98064864941e3b0b4e6
This commit is contained in:
commit
79f2480c86
@ -1,63 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
QMKSPEC=$1
|
||||
VERBOSE=$2
|
||||
SRCDIR=$3
|
||||
OUTDIR=$4
|
||||
|
||||
# debuggery
|
||||
[ "$VERBOSE" = "yes" ] && echo "Determining floating point word-order... ($*)"
|
||||
|
||||
# build and run a test program
|
||||
test -d "$OUTDIR/config.tests/unix/doubleformat" || mkdir -p "$OUTDIR/config.tests/unix/doubleformat"
|
||||
"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "QT_BUILD_TREE=$OUTDIR" "$SRCDIR/config.tests/unix/doubleformat/doubleformattest.pro" -o "$OUTDIR/config.tests/unix/doubleformat/Makefile" >/dev/null 2>&1
|
||||
cd "$OUTDIR/config.tests/unix/doubleformat"
|
||||
|
||||
DOUBLEFORMAT="UNKNOWN"
|
||||
[ "$VERBOSE" = "yes" ] && $MAKE || $MAKE >/dev/null 2>&1
|
||||
|
||||
if [ -f ./doubleformattest ]; then
|
||||
: # nop
|
||||
else
|
||||
[ "$VERBOSE" = "yes" ] && echo "Unknown floating point format!"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# LE: strings | grep 0123ABCD0123ABCD
|
||||
# BE: strings | grep DCBA3210DCBA3210
|
||||
#
|
||||
# LE arm-swapped-dword-order: strings | grep ABCD0123ABCD0123
|
||||
# BE arm-swapped-dword-order: strings | grep 3210DCBA3210DCBA (untested)
|
||||
|
||||
|
||||
if strings ./doubleformattest | grep "0123ABCD0123ABCD" >/dev/null 2>&1; then
|
||||
[ "$VERBOSE" = "yes" ] && echo " Normal little endian format"
|
||||
DOUBLEFORMAT="LITTLE"
|
||||
elif strings ./doubleformattest | grep "ABCD0123ABCD0123" >/dev/null 2>&1; then
|
||||
[ "$VERBOSE" = "yes" ] && echo " Swapped little endian format"
|
||||
DOUBLEFORMAT="LITTLESWAPPED"
|
||||
elif strings ./doubleformattest | grep "DCBA3210DCBA3210" >/dev/null 2>&1; then
|
||||
[ "$VERBOSE" = "yes" ] && echo " Normal big endian format"
|
||||
DOUBLEFORMAT="BIG"
|
||||
elif strings ./doubleformattest | grep "3210DCBA3210DCBA" >/dev/null 2>&1; then
|
||||
[ "$VERBOSE" = "yes" ] && echo " Swapped big endian format"
|
||||
DOUBLEFORMAT="BIGSWAPPED"
|
||||
fi
|
||||
|
||||
# done
|
||||
if [ "$DOUBLEFORMAT" = "LITTLE" ]; then
|
||||
[ "$VERBOSE" = "yes" ] && echo "Using little endian."
|
||||
exit 10
|
||||
elif [ "$DOUBLEFORMAT" = "BIG" ]; then
|
||||
[ "$VERBOSE" = "yes" ] && echo "Using big endian."
|
||||
exit 11
|
||||
elif [ "$DOUBLEFORMAT" = "LITTLESWAPPED" ]; then
|
||||
[ "$VERBOSE" = "yes" ] && echo "Using swapped little endian."
|
||||
exit 12
|
||||
elif [ "$DOUBLEFORMAT" = "BIGSWAPPED" ]; then
|
||||
[ "$VERBOSE" = "yes" ] && echo "Using swapped big endian."
|
||||
exit 13
|
||||
else
|
||||
[ "$VERBOSE" = "yes" ] && echo "Unknown floating point format!"
|
||||
exit 99
|
||||
fi
|
@ -1,3 +0,0 @@
|
||||
SOURCES = doubleformattest.cpp
|
||||
CONFIG -= qt dylib
|
||||
mac:CONFIG -= app_bundle
|
@ -1,60 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
QMKSPEC=$1
|
||||
VERBOSE=$2
|
||||
SRCDIR=$3
|
||||
OUTDIR=$4
|
||||
QMFLAGS=$5
|
||||
|
||||
# debuggery
|
||||
[ "$VERBOSE" = "yes" ] && echo "Determining machine byte-order... ($*)"
|
||||
|
||||
# build and run a test program
|
||||
test -d "$OUTDIR/config.tests/unix/endian" || mkdir -p "$OUTDIR/config.tests/unix/endian"
|
||||
"$OUTDIR/bin/qmake" -nocache -spec "$QMKSPEC" "QT_BUILD_TREE=$OUTDIR" $QMFLAGS "$SRCDIR/config.tests/unix/endian/endiantest.pro" -o "$OUTDIR/config.tests/unix/endian/Makefile" >/dev/null 2>&1
|
||||
cd "$OUTDIR/config.tests/unix/endian"
|
||||
|
||||
|
||||
ENDIAN="UNKNOWN"
|
||||
[ "$VERBOSE" = "yes" ] && $MAKE || $MAKE >/dev/null 2>&1
|
||||
|
||||
if [ -f ./endiantest.exe ]; then
|
||||
binary=./endiantest.exe
|
||||
else
|
||||
binary=./endiantest
|
||||
fi
|
||||
|
||||
|
||||
if [ -f $binary ]; then
|
||||
: # nop
|
||||
else
|
||||
[ "$VERBOSE" = "yes" ] && echo "Unknown byte order!"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if strings - $binary | grep LeastSignificantByteFirst >/dev/null 2>&1; then
|
||||
[ "$VERBOSE" = "yes" ] && echo " Found 'LeastSignificantByteFirst' in binary"
|
||||
ENDIAN="LITTLE"
|
||||
elif strings - $binary | grep MostSignificantByteFirst >/dev/null 2>&1; then
|
||||
[ "$VERBOSE" = "yes" ] && echo " Found 'MostSignificantByteFirst' in binary"
|
||||
ENDIAN="BIG"
|
||||
fi
|
||||
|
||||
# make clean as this tests is compiled for both the host and the target
|
||||
if [ "$VERBOSE" = "yes" ]; then
|
||||
$MAKE distclean
|
||||
else
|
||||
$MAKE distclean >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# done
|
||||
if [ "$ENDIAN" = "LITTLE" ]; then
|
||||
[ "$VERBOSE" = "yes" ] && echo "Using little endian."
|
||||
exit 0
|
||||
elif [ "$ENDIAN" = "BIG" ]; then
|
||||
[ "$VERBOSE" = "yes" ] && echo "Using big endian."
|
||||
exit 1
|
||||
else
|
||||
[ "$VERBOSE" = "yes" ] && echo "Unknown byte order!"
|
||||
exit 2
|
||||
fi
|
@ -1,3 +0,0 @@
|
||||
SOURCES = endiantest.cpp
|
||||
CONFIG -= qt dylib
|
||||
mac:CONFIG -= app_bundle
|
@ -1,3 +1,3 @@
|
||||
SOURCES = iconv.cpp
|
||||
CONFIG -= qt dylib app_bundle
|
||||
mac|win32-g++*|blackberry-*-qcc:LIBS += -liconv
|
||||
mac|win32-g++*|qnx-*-qcc:LIBS += -liconv
|
||||
|
@ -1,3 +1,4 @@
|
||||
SOURCES = libudev.cpp
|
||||
CONFIG -= qt
|
||||
LIBS += -ludev
|
||||
LIBS += $$QMAKE_LIBS_LIBUDEV
|
||||
INCLUDEPATH += $$QMAKE_INCDIR_LIBUDEV
|
||||
|
@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
LEN="$1"
|
||||
STR="$2"
|
||||
PAD='\0'
|
||||
STRLEN=`echo $STR | wc -c`
|
||||
RES="$STR"
|
||||
|
||||
EXTRALEN=`expr $LEN - $STRLEN`
|
||||
while [ "$EXTRALEN" -gt 32 ]; do
|
||||
RES="$RES$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD$PAD"
|
||||
EXTRALEN=`expr $EXTRALEN - 32`
|
||||
done
|
||||
while [ "$EXTRALEN" -gt 0 ]; do
|
||||
RES="$RES$PAD"
|
||||
EXTRALEN=`expr $EXTRALEN - 1`
|
||||
done
|
||||
cat <<EOF
|
||||
$RES
|
||||
EOF
|
||||
|
||||
|
390
configure
vendored
390
configure
vendored
@ -359,7 +359,6 @@ earlyArgParse()
|
||||
if [ "$PLATFORM_QPA" != "no" ]; then
|
||||
if [ "$PLATFORM_QPA" = "maybe" ]; then
|
||||
PLATFORM_X11=no
|
||||
PLATFORM_MAC=no
|
||||
PLATFORM_QPA=yes
|
||||
fi
|
||||
else
|
||||
@ -764,10 +763,6 @@ CFG_AVX=auto
|
||||
CFG_REDUCE_RELOCATIONS=auto
|
||||
CFG_NAS=no
|
||||
CFG_ACCESSIBILITY=auto
|
||||
CFG_ENDIAN=auto
|
||||
CFG_HOST_ENDIAN=auto
|
||||
CFG_DOUBLEFORMAT=auto
|
||||
CFG_ARMFPA=auto
|
||||
CFG_IWMMXT=no
|
||||
CFG_NEON=auto
|
||||
CFG_CLOCK_GETTIME=auto
|
||||
@ -825,7 +820,10 @@ QT_INSTALL_TRANSLATIONS=
|
||||
QT_INSTALL_SETTINGS=
|
||||
QT_INSTALL_EXAMPLES=
|
||||
QT_INSTALL_TESTS=
|
||||
CFG_SYSROOT=
|
||||
QT_HOST_PREFIX=
|
||||
QT_HOST_BINS=
|
||||
QT_HOST_DATA=
|
||||
|
||||
#flags for SQL drivers
|
||||
QT_CFLAGS_PSQL=
|
||||
@ -962,7 +960,7 @@ while [ "$#" -gt 0 ]; do
|
||||
VAL=no
|
||||
;;
|
||||
#Qt style yes options
|
||||
-incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-xcb|-wayland|-nis|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-debug-and-release|-exceptions|-harfbuzz|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-phonon-backend|-audio-backend|-declarative-debug|-javascript-jit|-rpath|-force-pkg-config|-icu|-force-asserts|-testcocoon)
|
||||
-incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-xinput2|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-xcb|-wayland|-nis|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-debug-and-release|-exceptions|-harfbuzz|-prefix-install|-silent|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-phonon-backend|-audio-backend|-declarative-debug|-javascript-jit|-rpath|-force-pkg-config|-icu|-force-asserts|-testcocoon)
|
||||
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
|
||||
VAL=yes
|
||||
;;
|
||||
@ -978,7 +976,7 @@ while [ "$#" -gt 0 ]; do
|
||||
shift
|
||||
VAL=$1
|
||||
;;
|
||||
-prefix|-docdir|-headerdir|-plugindir|-importdir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-platform|-xplatform|-sdk|-arch|-host-arch|-mysql_config|-sysroot)
|
||||
-prefix|-docdir|-headerdir|-plugindir|-importdir|-datadir|-libdir|-bindir|-translationdir|-sysconfdir|-examplesdir|-testsdir|-depths|-make|-nomake|-platform|-xplatform|-sdk|-arch|-host-arch|-mysql_config|-sysroot|-hostdatadir|-hostbindir)
|
||||
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
|
||||
shift
|
||||
VAL="$1"
|
||||
@ -1038,14 +1036,6 @@ while [ "$#" -gt 0 ]; do
|
||||
VAL=$1
|
||||
fi
|
||||
;;
|
||||
-host-*-endian)
|
||||
VAR=host_endian
|
||||
VAL=`echo $1 | sed "s,^-.*-\(.*\)-.*,\1,"`
|
||||
;;
|
||||
-*-endian)
|
||||
VAR=endian
|
||||
VAL=`echo $1 | sed "s,^-\(.*\)-.*,\1,"`
|
||||
;;
|
||||
-qtnamespace)
|
||||
VAR="qtnamespace"
|
||||
shift
|
||||
@ -1169,6 +1159,12 @@ while [ "$#" -gt 0 ]; do
|
||||
hostprefix)
|
||||
QT_HOST_PREFIX="$VAL"
|
||||
;;
|
||||
hostdatadir)
|
||||
QT_HOST_DATA="$VAL"
|
||||
;;
|
||||
hostbindir)
|
||||
QT_HOST_BINS="$VAL"
|
||||
;;
|
||||
force-pkg-config)
|
||||
QT_FORCE_PKGCONFIG=yes
|
||||
;;
|
||||
@ -1222,7 +1218,6 @@ while [ "$#" -gt 0 ]; do
|
||||
;;
|
||||
embedded-lite|qpa)
|
||||
PLATFORM_X11=no
|
||||
PLATFORM_MAC=no
|
||||
PLATFORM_QPA=yes
|
||||
;;
|
||||
sse)
|
||||
@ -1232,31 +1227,6 @@ while [ "$#" -gt 0 ]; do
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
endian)
|
||||
if [ "$VAL" = "little" ]; then
|
||||
CFG_ENDIAN="Q_LITTLE_ENDIAN"
|
||||
elif [ "$VAL" = "big" ]; then
|
||||
CFG_ENDIAN="Q_BIG_ENDIAN"
|
||||
else
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
host_endian)
|
||||
if [ "$VAL" = "little" ]; then
|
||||
CFG_HOST_ENDIAN="Q_LITTLE_ENDIAN"
|
||||
elif [ "$VAL" = "big" ]; then
|
||||
CFG_HOST_ENDIAN="Q_BIG_ENDIAN"
|
||||
else
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
armfpa)
|
||||
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
|
||||
CFG_ARMFPA="$VAL"
|
||||
else
|
||||
UNKNOWN_OPT=yes
|
||||
fi
|
||||
;;
|
||||
opengl)
|
||||
if [ "$VAL" = "auto" ] || [ "$VAL" = "desktop" ] ||
|
||||
[ "$VAL" = "yes" ] || [ "$VAL" = "no" ] ||
|
||||
@ -3116,6 +3086,40 @@ if [ -z "$QT_INSTALL_TESTS" ]; then #default
|
||||
fi
|
||||
QT_INSTALL_TESTS=`"$relpath/config.tests/unix/makeabs" "$QT_INSTALL_TESTS"`
|
||||
|
||||
#------- host paths --------
|
||||
|
||||
if [ -z "$QT_HOST_PREFIX" ]; then
|
||||
QT_HOST_PREFIX=$QT_INSTALL_PREFIX
|
||||
haveHpx=false
|
||||
else
|
||||
QT_HOST_PREFIX=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_PREFIX"`
|
||||
haveHpx=true
|
||||
fi
|
||||
|
||||
if [ -z "$QT_HOST_BINS" ]; then #default
|
||||
if $haveHpx; then
|
||||
if [ "$CFG_PREFIX_INSTALL" = "no" ]; then
|
||||
if [ "$BUILD_ON_MAC" = "yes" ]; then
|
||||
QT_HOST_BINS="/Developer/Applications/Qt"
|
||||
fi
|
||||
fi
|
||||
[ -z "$QT_HOST_BINS" ] && QT_HOST_BINS="$QT_HOST_PREFIX/bin" #fallback
|
||||
else
|
||||
QT_HOST_BINS="$QT_INSTALL_BINS"
|
||||
fi
|
||||
fi
|
||||
QT_HOST_BINS=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_BINS"`
|
||||
|
||||
if [ -z "$QT_HOST_DATA" ]; then #default
|
||||
if $haveHpx; then
|
||||
QT_HOST_DATA="$QT_HOST_PREFIX"
|
||||
else
|
||||
QT_HOST_DATA="$QT_INSTALL_DATA"
|
||||
fi
|
||||
else
|
||||
QT_HOST_DATA=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_DATA"`
|
||||
fi
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# help - interactive parts of the script _after_ this section please
|
||||
#-------------------------------------------------------------------------------
|
||||
@ -3206,7 +3210,7 @@ Usage: $relconf [-h] [-prefix <dir>] [-prefix-install] [-bindir <dir>] [-libdir
|
||||
[-iconv] [-no-pch] [-pch] [-no-dbus] [-dbus] [-dbus-linked] [-no-gui]
|
||||
[-no-separate-debug-info] [-no-mmx] [-no-3dnow] [-no-sse] [-no-sse2]
|
||||
[-no-sse3] [-no-ssse3] [-no-sse4.1] [-no-sse4.2] [-no-avx] [-no-neon]
|
||||
[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info] [-armfpa]
|
||||
[-qtnamespace <namespace>] [-qtlibinfix <infix>] [-separate-debug-info]
|
||||
[-no-phonon-backend] [-phonon-backend] [-no-media-backend] [-media-backend]
|
||||
[-no-audio-backend] [-audio-backend]
|
||||
[-no-javascript-jit] [-javascript-jit] [-no-declarative-debug] [-declarative-debug]
|
||||
@ -3233,6 +3237,7 @@ cat <<EOF
|
||||
-hostprefix [dir] .. Tools and libraries needed when developing
|
||||
applications are installed in [dir]. If [dir] is
|
||||
not given, the current build directory will be used.
|
||||
(default PREFIX)
|
||||
EOF
|
||||
fi
|
||||
cat <<EOF
|
||||
@ -3269,6 +3274,17 @@ cat <<EOF
|
||||
(default PREFIX/examples)
|
||||
-testsdir <dir> ....... Tests will be installed to <dir>
|
||||
(default PREFIX/tests)
|
||||
EOF
|
||||
if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then
|
||||
cat <<EOF
|
||||
|
||||
-hostbindir <dir> .. Host executables will be installed to <dir>
|
||||
(default HOSTPREFIX/bin)
|
||||
-hostdatadir <dir> . Data used by qmake will be installed to <dir>
|
||||
(default HOSTPREFIX)
|
||||
EOF
|
||||
fi
|
||||
cat <<EOF
|
||||
|
||||
Configure options:
|
||||
|
||||
@ -3738,22 +3754,6 @@ if [ "$PLATFORM_QPA" = "yes" ]; then
|
||||
-feature-<feature> .. Compile in <feature>. The available features
|
||||
are described in src/corelib/global/qfeatures.txt
|
||||
|
||||
-armfpa ............. Target platform uses the ARM-FPA floating point format.
|
||||
-no-armfpa .......... Target platform does not use the ARM-FPA floating point format.
|
||||
|
||||
The floating point format is usually autodetected by configure. Use this
|
||||
to override the detected value.
|
||||
|
||||
-little-endian ...... Target platform is little endian (LSB first).
|
||||
-big-endian ......... Target platform is big endian (MSB first).
|
||||
|
||||
-host-little-endian . Host platform is little endian (LSB first).
|
||||
-host-big-endian .... Host platform is big endian (MSB first).
|
||||
|
||||
You only need to specify the endianness when
|
||||
cross-compiling, otherwise the host
|
||||
endianness will be used.
|
||||
|
||||
-no-freetype ........ Do not compile in Freetype2 support.
|
||||
-qt-freetype ........ Use the libfreetype bundled with Qt.
|
||||
* -system-freetype .... Use libfreetype from the operating system.
|
||||
@ -3980,105 +3980,44 @@ esac
|
||||
#-------------------------------------------------------------------------------
|
||||
[ -d "$outpath/src/corelib/global" ] || mkdir -p "$outpath/src/corelib/global"
|
||||
|
||||
LICENSE_USER_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_lcnsuser=$Licensee"`
|
||||
LICENSE_PRODUCTS_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_lcnsprod=$Edition"`
|
||||
PREFIX_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_prfxpath=$QT_INSTALL_PREFIX"`
|
||||
DOCUMENTATION_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_docspath=$QT_INSTALL_DOCS"`
|
||||
HEADERS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_hdrspath=$QT_INSTALL_HEADERS"`
|
||||
LIBRARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_libspath=$QT_INSTALL_LIBS"`
|
||||
BINARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_binspath=$QT_INSTALL_BINS"`
|
||||
PLUGINS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_plugpath=$QT_INSTALL_PLUGINS"`
|
||||
IMPORTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_impspath=$QT_INSTALL_IMPORTS"`
|
||||
DATA_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_datapath=$QT_INSTALL_DATA"`
|
||||
TRANSLATIONS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_trnspath=$QT_INSTALL_TRANSLATIONS"`
|
||||
SETTINGS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_stngpath=$QT_INSTALL_SETTINGS"`
|
||||
EXAMPLES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_xmplpath=$QT_INSTALL_EXAMPLES"`
|
||||
TESTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_tstspath=$QT_INSTALL_TESTS"`
|
||||
|
||||
TODAY=`date +%Y-%m-%d`
|
||||
cat > "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
|
||||
/* License Info */
|
||||
static const char qt_configure_licensee_str [256 + 12] = "$LICENSE_USER_STR";
|
||||
static const char qt_configure_licensed_products_str [256 + 12] = "$LICENSE_PRODUCTS_STR";
|
||||
static const char qt_configure_licensee_str [256 + 12] = "qt_lcnsuser=$Licensee";
|
||||
static const char qt_configure_licensed_products_str [256 + 12] = "qt_lcnsprod=$Edition";
|
||||
|
||||
/* Installation date */
|
||||
static const char qt_configure_installation [12+11] = "qt_instdate=$TODAY";
|
||||
EOF
|
||||
static const char qt_configure_installation [12+11] = "qt_instdate=`date +%Y-%m-%d`";
|
||||
|
||||
|
||||
if [ ! -z "$QT_HOST_PREFIX" ]; then
|
||||
HOSTPREFIX_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_prfxpath=$QT_HOST_PREFIX"`
|
||||
HOSTDOCUMENTATION_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_docspath=$QT_HOST_PREFIX/doc"`
|
||||
HOSTHEADERS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_hdrspath=$QT_HOST_PREFIX/include"`
|
||||
HOSTLIBRARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_libspath=$QT_HOST_PREFIX/lib"`
|
||||
HOSTBINARIES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_binspath=$QT_HOST_PREFIX/bin"`
|
||||
HOSTPLUGINS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_plugpath=$QT_HOST_PREFIX/plugins"`
|
||||
HOSTIMPORTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_impspath=$QT_HOST_PREFIX/IMPORTS"`
|
||||
HOSTDATA_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_datapath=$QT_HOST_PREFIX"`
|
||||
HOSTTRANSLATIONS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_trnspath=$QT_HOST_PREFIX/translations"`
|
||||
HOSTSETTINGS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_stngpath=$QT_INSTALL_SETTINGS"`
|
||||
HOSTEXAMPLES_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_xmplpath=$QT_INSTALL_EXAMPLES"`
|
||||
HOSTTESTS_PATH_STR=`"$relpath/config.tests/unix/padstring" 268 "qt_tstspath=$QT_INSTALL_TESTS"`
|
||||
|
||||
cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
|
||||
|
||||
#if defined(QT_BOOTSTRAPPED) || defined(QT_BUILD_QMAKE)
|
||||
/* Installation Info */
|
||||
static const char qt_configure_prefix_path_str [256 + 12] = "$HOSTPREFIX_PATH_STR";
|
||||
static const char qt_configure_documentation_path_str[256 + 12] = "$HOSTDOCUMENTATION_PATH_STR";
|
||||
static const char qt_configure_headers_path_str [256 + 12] = "$HOSTHEADERS_PATH_STR";
|
||||
static const char qt_configure_libraries_path_str [256 + 12] = "$HOSTLIBRARIES_PATH_STR";
|
||||
static const char qt_configure_binaries_path_str [256 + 12] = "$HOSTBINARIES_PATH_STR";
|
||||
static const char qt_configure_plugins_path_str [256 + 12] = "$HOSTPLUGINS_PATH_STR";
|
||||
static const char qt_configure_imports_path_str [256 + 12] = "$HOSTIMPORTS_PATH_STR";
|
||||
static const char qt_configure_data_path_str [256 + 12] = "$HOSTDATA_PATH_STR";
|
||||
static const char qt_configure_translations_path_str [256 + 12] = "$HOSTTRANSLATIONS_PATH_STR";
|
||||
static const char qt_configure_settings_path_str [256 + 12] = "$HOSTSETTINGS_PATH_STR";
|
||||
static const char qt_configure_examples_path_str [256 + 12] = "$HOSTEXAMPLES_PATH_STR";
|
||||
static const char qt_configure_tests_path_str [256 + 12] = "$HOSTTESTS_PATH_STR";
|
||||
#else // QT_BOOTSTRAPPED
|
||||
static const char qt_configure_prefix_path_strs[][256 + 12] = {
|
||||
"qt_prfxpath=$QT_INSTALL_PREFIX",
|
||||
"qt_docspath=$QT_INSTALL_DOCS",
|
||||
"qt_hdrspath=$QT_INSTALL_HEADERS",
|
||||
"qt_libspath=$QT_INSTALL_LIBS",
|
||||
"qt_binspath=$QT_INSTALL_BINS",
|
||||
"qt_plugpath=$QT_INSTALL_PLUGINS",
|
||||
"qt_impspath=$QT_INSTALL_IMPORTS",
|
||||
"qt_datapath=$QT_INSTALL_DATA",
|
||||
"qt_trnspath=$QT_INSTALL_TRANSLATIONS",
|
||||
"qt_xmplpath=$QT_INSTALL_EXAMPLES",
|
||||
"qt_tstspath=$QT_INSTALL_TESTS",
|
||||
#ifdef QT_BUILD_QMAKE
|
||||
"qt_ssrtpath=$CFG_SYSROOT",
|
||||
"qt_hpfxpath=$QT_HOST_PREFIX",
|
||||
"qt_hbinpath=$QT_HOST_BINS",
|
||||
"qt_hdatpath=$QT_HOST_DATA",
|
||||
#endif
|
||||
};
|
||||
static const char qt_configure_settings_path_str[256 + 12] = "qt_stngpath=$QT_INSTALL_SETTINGS";
|
||||
EOF
|
||||
fi
|
||||
|
||||
cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
|
||||
/* Installation Info */
|
||||
static const char qt_configure_prefix_path_str [256 + 12] = "$PREFIX_PATH_STR";
|
||||
static const char qt_configure_documentation_path_str[256 + 12] = "$DOCUMENTATION_PATH_STR";
|
||||
static const char qt_configure_headers_path_str [256 + 12] = "$HEADERS_PATH_STR";
|
||||
static const char qt_configure_libraries_path_str [256 + 12] = "$LIBRARIES_PATH_STR";
|
||||
static const char qt_configure_binaries_path_str [256 + 12] = "$BINARIES_PATH_STR";
|
||||
static const char qt_configure_plugins_path_str [256 + 12] = "$PLUGINS_PATH_STR";
|
||||
static const char qt_configure_imports_path_str [256 + 12] = "$IMPORTS_PATH_STR";
|
||||
static const char qt_configure_data_path_str [256 + 12] = "$DATA_PATH_STR";
|
||||
static const char qt_configure_translations_path_str [256 + 12] = "$TRANSLATIONS_PATH_STR";
|
||||
static const char qt_configure_settings_path_str [256 + 12] = "$SETTINGS_PATH_STR";
|
||||
static const char qt_configure_examples_path_str [256 + 12] = "$EXAMPLES_PATH_STR";
|
||||
static const char qt_configure_tests_path_str [256 + 12] = "$TESTS_PATH_STR";
|
||||
EOF
|
||||
|
||||
if [ ! -z "$QT_HOST_PREFIX" ]; then
|
||||
cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
|
||||
#endif // QT_BOOTSTRAPPED
|
||||
|
||||
EOF
|
||||
fi
|
||||
|
||||
cat >> "$outpath/src/corelib/global/qconfig.cpp.new" <<EOF
|
||||
/* strlen( "qt_lcnsxxxx" ) == 12 */
|
||||
#define QT_CONFIGURE_LICENSEE qt_configure_licensee_str + 12;
|
||||
#define QT_CONFIGURE_LICENSED_PRODUCTS qt_configure_licensed_products_str + 12;
|
||||
#define QT_CONFIGURE_PREFIX_PATH qt_configure_prefix_path_str + 12;
|
||||
#define QT_CONFIGURE_DOCUMENTATION_PATH qt_configure_documentation_path_str + 12;
|
||||
#define QT_CONFIGURE_HEADERS_PATH qt_configure_headers_path_str + 12;
|
||||
#define QT_CONFIGURE_LIBRARIES_PATH qt_configure_libraries_path_str + 12;
|
||||
#define QT_CONFIGURE_BINARIES_PATH qt_configure_binaries_path_str + 12;
|
||||
#define QT_CONFIGURE_PLUGINS_PATH qt_configure_plugins_path_str + 12;
|
||||
#define QT_CONFIGURE_IMPORTS_PATH qt_configure_imports_path_str + 12;
|
||||
#define QT_CONFIGURE_DATA_PATH qt_configure_data_path_str + 12;
|
||||
#define QT_CONFIGURE_TRANSLATIONS_PATH qt_configure_translations_path_str + 12;
|
||||
|
||||
#define QT_CONFIGURE_SETTINGS_PATH qt_configure_settings_path_str + 12;
|
||||
#define QT_CONFIGURE_EXAMPLES_PATH qt_configure_examples_path_str + 12;
|
||||
#define QT_CONFIGURE_TESTS_PATH qt_configure_tests_path_str + 12;
|
||||
EOF
|
||||
|
||||
# avoid unecessary rebuilds by copying only if qconfig.cpp has changed
|
||||
@ -4092,9 +4031,9 @@ fi
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
if [ "$LicenseType" = "Evaluation" ]; then
|
||||
EVALKEY=`"$relpath/config.tests/unix/padstring" 524 "qt_qevalkey=$LicenseKeyExt"`
|
||||
EVALKEY=qt_qevalkey=$LicenseKeyExt
|
||||
elif echo "$D_FLAGS" | grep QT_EVAL >/dev/null 2>&1; then
|
||||
EVALKEY=`"$relpath/config.tests/unix/padstring" 524 "qt_qevalkey="`
|
||||
EVALKEY=qt_qevalkey=
|
||||
fi
|
||||
|
||||
if [ -n "$EVALKEY" ]; then
|
||||
@ -5355,7 +5294,13 @@ if [ "$PLATFORM_QPA" = "yes" ]; then
|
||||
fi
|
||||
|
||||
if [ "$CFG_LIBUDEV" != "no" ]; then
|
||||
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/libudev "libudev" $L_FLAGS $I_FLAGS $l_FLAGS; then
|
||||
if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists libudev 2>/dev/null; then
|
||||
QMAKE_INCDIR_LIBUDEV=`$PKG_CONFIG --cflags-only-I libudev 2>/dev/null | sed -e 's,^-I,,g' -e 's, -I, ,g'`
|
||||
QMAKE_LIBS_LIBUDEV=`$PKG_CONFIG --libs libudev 2>/dev/null`
|
||||
QMakeVar set QMAKE_INCDIR_LIBUDEV "$QMAKE_INCDIR_LIBUDEV"
|
||||
QMakeVar set QMAKE_LIBS_LIBUDEV "$QMAKE_LIBS_LIBUDEV"
|
||||
fi
|
||||
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/libudev "libudev" $L_FLAGS $I_FLAGS $l_FLAGS $QMAKE_INCDIR_LIBUDEV $QMAKE_LIBS_LIBUDEV; then
|
||||
CFG_LIBUDEV=yes
|
||||
QT_CONFIG="$QT_CONFIG libudev"
|
||||
elif [ "$CFG_LIBUDEV" = "yes" ]; then
|
||||
@ -5499,6 +5444,8 @@ if [ "$PLATFORM_QPA" = "yes" ]; then
|
||||
echo " If you really want to build without a QPA platform plugin you must pass"
|
||||
echo " -no-xcb and -no-wayland to configure. Doing this will produce a Qt that"
|
||||
echo " cannot run GUI applications."
|
||||
echo " The dependencies needed for xcb to build are listed in"
|
||||
echo " src/plugins/platforms/xcb/README"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
@ -5547,93 +5494,6 @@ if [ "$CFG_LIBFREETYPE" = "auto" ]; then
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$CFG_ENDIAN" = "auto" ]; then
|
||||
if [ "$XPLATFORM_MINGW" = "yes" ]; then
|
||||
CFG_ENDIAN="Q_LITTLE_ENDIAN"
|
||||
else
|
||||
"$unixtests/endian.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" "QMAKE_LFLAGS+=$SYSROOT_FLAG"
|
||||
F="$?"
|
||||
if [ "$F" -eq 0 ]; then
|
||||
CFG_ENDIAN="Q_LITTLE_ENDIAN"
|
||||
elif [ "$F" -eq 1 ]; then
|
||||
CFG_ENDIAN="Q_BIG_ENDIAN"
|
||||
else
|
||||
echo
|
||||
echo "The target system byte order could not be detected!"
|
||||
echo "Turn on verbose messaging (-v) to see the final report."
|
||||
echo "You can use the -little-endian or -big-endian switch to"
|
||||
echo "$0 to continue."
|
||||
exit 101
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$CFG_HOST_ENDIAN" = "auto" ]; then
|
||||
if [ "$BUILD_ON_MAC" = "yes" ]; then
|
||||
true #leave as auto
|
||||
else
|
||||
"$unixtests/endian.test" "$QMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath"
|
||||
F="$?"
|
||||
if [ "$F" -eq 0 ]; then
|
||||
CFG_HOST_ENDIAN="Q_LITTLE_ENDIAN"
|
||||
elif [ "$F" -eq 1 ]; then
|
||||
CFG_HOST_ENDIAN="Q_BIG_ENDIAN"
|
||||
else
|
||||
echo
|
||||
echo "The host system byte order could not be detected!"
|
||||
echo "Turn on verbose messaging (-v) to see the final report."
|
||||
echo "You can use the -host-little-endian or -host-big-endian switch to"
|
||||
echo "$0 to continue."
|
||||
exit 101
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$CFG_ARMFPA" != "auto" ]; then
|
||||
if [ "$CFG_ARMFPA" = "yes" ]; then
|
||||
if [ "$CFG_ENDIAN" = "Q_LITTLE_ENDIAN" ]; then
|
||||
CFG_DOUBLEFORMAT="Q_DOUBLE_LITTLE_SWAPPED"
|
||||
else
|
||||
CFG_DOUBLEFORMAT="Q_DOUBLE_BIG_SWAPPED"
|
||||
fi
|
||||
else
|
||||
CFG_DOUBLEFORMAT="normal"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then
|
||||
if [ "$PLATFORM_QPA" = "yes" ]; then
|
||||
CFG_DOUBLEFORMAT=normal
|
||||
else
|
||||
"$unixtests/doubleformat.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath"
|
||||
F="$?"
|
||||
if [ "$F" -eq 10 ] && [ "$CFG_ENDIAN" = "Q_LITTLE_ENDIAN" ]; then
|
||||
CFG_DOUBLEFORMAT=normal
|
||||
elif [ "$F" -eq 11 ] && [ "$CFG_ENDIAN" = "Q_BIG_ENDIAN" ]; then
|
||||
CFG_DOUBLEFORMAT=normal
|
||||
elif [ "$F" -eq 10 ]; then
|
||||
CFG_DOUBLEFORMAT="Q_DOUBLE_LITTLE"
|
||||
elif [ "$F" -eq 11 ]; then
|
||||
CFG_DOUBLEFORMAT="Q_DOUBLE_BIG"
|
||||
elif [ "$F" -eq 12 ]; then
|
||||
CFG_DOUBLEFORMAT="Q_DOUBLE_LITTLE_SWAPPED"
|
||||
CFG_ARMFPA="yes"
|
||||
elif [ "$F" -eq 13 ]; then
|
||||
CFG_DOUBLEFORMAT="Q_DOUBLE_BIG_SWAPPED"
|
||||
CFG_ARMFPA="yes"
|
||||
else
|
||||
echo
|
||||
echo "The system floating point format could not be detected."
|
||||
echo "This may cause data to be generated in a wrong format"
|
||||
echo "Turn on verbose messaging (-v) to see the final report."
|
||||
# we do not fail on this since this is a new test, and if it fails,
|
||||
# the old behavior should be correct in most cases
|
||||
CFG_DOUBLEFORMAT=normal
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
HAVE_STL=no
|
||||
if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/stl "STL" $L_FLAGS $I_FLAGS $l_FLAGS; then
|
||||
HAVE_STL=yes
|
||||
@ -6507,64 +6367,8 @@ cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
|
||||
#ifndef QT_EDITION
|
||||
# define QT_EDITION $QT_EDITION
|
||||
#endif
|
||||
|
||||
/* Machine byte-order */
|
||||
#define Q_BIG_ENDIAN 4321
|
||||
#define Q_LITTLE_ENDIAN 1234
|
||||
EOF
|
||||
|
||||
echo "#ifdef QT_BOOTSTRAPPED" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||
if [ "$CFG_HOST_ENDIAN" = "auto" ]; then
|
||||
cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
|
||||
#if defined(__BIG_ENDIAN__)
|
||||
# define Q_BYTE_ORDER Q_BIG_ENDIAN
|
||||
#elif defined(__LITTLE_ENDIAN__)
|
||||
# define Q_BYTE_ORDER Q_LITTLE_ENDIAN
|
||||
#else
|
||||
# error "Unable to determine byte order!"
|
||||
#endif
|
||||
EOF
|
||||
else
|
||||
echo "#define Q_BYTE_ORDER $CFG_HOST_ENDIAN" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||
fi
|
||||
echo "#else" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||
if [ "$CFG_ENDIAN" = "auto" ]; then
|
||||
cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
|
||||
#if defined(__BIG_ENDIAN__)
|
||||
# define Q_BYTE_ORDER Q_BIG_ENDIAN
|
||||
#elif defined(__LITTLE_ENDIAN__)
|
||||
# define Q_BYTE_ORDER Q_LITTLE_ENDIAN
|
||||
#else
|
||||
# error "Unable to determine byte order!"
|
||||
#endif
|
||||
EOF
|
||||
else
|
||||
echo "#define Q_BYTE_ORDER $CFG_ENDIAN" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||
fi
|
||||
echo "#endif" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||
|
||||
if [ "$CFG_DOUBLEFORMAT" != "normal" ]; then
|
||||
cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
|
||||
/* Non-IEEE double format */
|
||||
#define Q_DOUBLE_LITTLE "01234567"
|
||||
#define Q_DOUBLE_BIG "76543210"
|
||||
#define Q_DOUBLE_LITTLE_SWAPPED "45670123"
|
||||
#define Q_DOUBLE_BIG_SWAPPED "32107654"
|
||||
#define Q_DOUBLE_FORMAT $CFG_DOUBLEFORMAT
|
||||
EOF
|
||||
fi
|
||||
if [ "$CFG_ARMFPA" = "yes" ]; then
|
||||
if [ "$CFG_ARCH" != "$CFG_HOST_ARCH" ]; then
|
||||
cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
|
||||
#ifndef QT_BOOTSTRAPPED
|
||||
# define QT_ARMFPA
|
||||
#endif
|
||||
EOF
|
||||
else
|
||||
echo "#define QT_ARMFPA" >>"$outpath/src/corelib/global/qconfig.h.new"
|
||||
fi
|
||||
fi
|
||||
|
||||
CFG_ARCH_STR=`echo $CFG_ARCH | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
|
||||
CFG_HOST_ARCH_STR=`echo $CFG_HOST_ARCH | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
|
||||
cat >>"$outpath/src/corelib/global/qconfig.h.new" <<EOF
|
||||
@ -6815,10 +6619,9 @@ EOF
|
||||
if [ -n "$CFG_SYSROOT" ]; then
|
||||
echo "# sysroot" >>"$QTCONFIG.tmp"
|
||||
echo `basename "$XQMAKESPEC"` \{ >>"$QTCONFIG.tmp"
|
||||
echo " QT_SYSROOT += \$\$quote($CFG_SYSROOT)" >>"$QTCONFIG.tmp"
|
||||
echo " QMAKE_CFLAGS += --sysroot=\$\$QT_SYSROOT" >>"$QTCONFIG.tmp"
|
||||
echo " QMAKE_CXXFLAGS += --sysroot=\$\$QT_SYSROOT" >>"$QTCONFIG.tmp"
|
||||
echo " QMAKE_LFLAGS += --sysroot=\$\$QT_SYSROOT" >>"$QTCONFIG.tmp"
|
||||
echo " QMAKE_CFLAGS += --sysroot=\$\$[QT_SYSROOT]" >>"$QTCONFIG.tmp"
|
||||
echo " QMAKE_CXXFLAGS += --sysroot=\$\$[QT_SYSROOT]" >>"$QTCONFIG.tmp"
|
||||
echo " QMAKE_LFLAGS += --sysroot=\$\$[QT_SYSROOT]" >>"$QTCONFIG.tmp"
|
||||
echo "}" >> "$QTCONFIG.tmp"
|
||||
echo >> "$QTCONFIG.tmp"
|
||||
fi
|
||||
@ -7093,6 +6896,7 @@ else
|
||||
fi
|
||||
echo "zlib support ........... $CFG_ZLIB"
|
||||
echo "Session management ..... $CFG_SM"
|
||||
echo "libudev support ........ $CFG_LIBUDEV"
|
||||
|
||||
if [ "$CFG_OPENGL" = "desktop" ]; then
|
||||
echo "OpenGL support ......... yes (Desktop OpenGL)"
|
||||
|
@ -67,9 +67,7 @@ if not exist src\corelib\global\qconfig.h (
|
||||
md src\corelib\global
|
||||
if errorlevel 1 goto exit
|
||||
)
|
||||
echo #define Q_BIG_ENDIAN 4321 > src\corelib\global\qconfig.h
|
||||
echo #define Q_LITTLE_ENDIAN 1234 >> src\corelib\global\qconfig.h
|
||||
echo #define Q_BYTE_ORDER Q_LITTLE_ENDIAN >> src\corelib\global\qconfig.h
|
||||
echo /* Generated by configure.bat - DO NOT EDIT! */ > src\corelib\global\qconfig.h
|
||||
)
|
||||
|
||||
if not exist tools\configure (
|
||||
@ -117,5 +115,5 @@ if errorlevel 1 (cd ..\.. & exit /b 1)
|
||||
cd ..\..
|
||||
|
||||
:conf
|
||||
configure.exe -srcdir %QTSRC% %nosyncqt% %*
|
||||
configure.exe -srcdir %QTSRC% %* %nosyncqt%
|
||||
:exit
|
||||
|
2
dist/README
vendored
2
dist/README
vendored
@ -74,7 +74,7 @@ HOW TO REPORT A BUG
|
||||
|
||||
If you think you have found a bug in Qt, we would like to hear about
|
||||
it so that we can fix it. The Qt bug tracking system is open to the
|
||||
public at http://bugreports.qt.nokia.com/.
|
||||
public at http://bugreports.qt-project.org/.
|
||||
|
||||
Before reporting a bug, please use the bug-tracker's search functions
|
||||
and consult http://qt.nokia.com/developer/faqs/ to see if the issue is
|
||||
|
33
dist/changes-5.0.0
vendored
33
dist/changes-5.0.0
vendored
@ -1,7 +1,7 @@
|
||||
Some of the changes listed in this file include issue tracking numbers
|
||||
corresponding to tasks in the Qt Bug Tracker:
|
||||
|
||||
http://bugreports.qt.nokia.com/
|
||||
http://bugreports.qt-project.org/
|
||||
|
||||
Each of these identifiers can be entered in the bug tracker to obtain more
|
||||
information about a particular change.
|
||||
@ -52,6 +52,8 @@ information about a particular change.
|
||||
in Qt4, so these methods return a bool now. If your code used the undocumented
|
||||
QBool, simply replace it with bool.
|
||||
|
||||
- qIsDetached<> has been removed without replacement.
|
||||
|
||||
- QMetaType:
|
||||
* QMetaType::construct() has been renamed to QMetaType::create().
|
||||
* QMetaType::unregisterType() has been removed.
|
||||
@ -212,7 +214,14 @@ information about a particular change.
|
||||
|
||||
- qmake
|
||||
* Projects which explicitly set an empty TARGET are considered broken now.
|
||||
* several functions and built-in variables were modified to return normalized paths.
|
||||
* The makespec and .qmake.cache do not see build pass specific variables any more.
|
||||
* load()/include() with a target namespace and infile()/$$fromfile() now start with
|
||||
an entirely pristine context.
|
||||
* Configure's -sysroot and -hostprefix are now handled slightly differently.
|
||||
The QT_INSTALL_... properties are now automatically prefixed with the sysroot;
|
||||
the raw values are available as QT_RAW_INSTALL_... and the sysroot as QT_SYSROOT.
|
||||
The new QT_HOST_... properties can be used to refer to the Qt host tools.
|
||||
* Several functions and built-in variables were modified to return normalized paths.
|
||||
|
||||
- QTextCodecPlugin has been removed since it is no longer used. All text codecs
|
||||
are now built into QtCore.
|
||||
@ -313,9 +322,18 @@ QtCore
|
||||
libraries, creating uncertainty/bugs in using QString easily, and (to a lesser
|
||||
extent) performance issues.
|
||||
|
||||
* QTextCodec::codecForTr() and QTextCodec::setCodecForTr() have been removed,
|
||||
QCoreApplication::Encoding value CodecForTr is now obsolete, use
|
||||
DefaultCodec instead. For reasoning, see the codecForCStrings() removal above.
|
||||
|
||||
* QIntValidator and QDoubleValidator no longer fall back to using the C locale if
|
||||
the requested locale fails to validate the input.
|
||||
|
||||
* A new set of classes for doing pattern matching with Perl-compatible regular
|
||||
expressions has been added: QRegularExpression, QRegularExpressionMatch and
|
||||
QRegularExpressionMatchIterator. They aim to replace QRegExp with a more
|
||||
powerful and flexible regular expression engine.
|
||||
|
||||
QtGui
|
||||
-----
|
||||
* Accessibility has been refactored. The hierachy of accessible objects is implemented via
|
||||
@ -400,6 +418,17 @@ ignore the rest of the range.
|
||||
QSqlTableModel::indexInQuery() as example of how to implement in a
|
||||
subclass.
|
||||
|
||||
* QSqlTableModel::selectRow(): This is a new method that refreshes a single
|
||||
row in the model from the database.
|
||||
|
||||
* QSqlTableModel edit strategies OnFieldChange/OnRowChange QTBUG-2875
|
||||
Previously, after changes were submitted in these edit strategies, select()
|
||||
was called which removed and inserted all rows. This ruined navigation
|
||||
in QTableView. Now, with these edit strategies, there is no implicit select()
|
||||
done after committing. This includes deleted rows which remain in
|
||||
the model as blank rows until the application calls select(). Instead,
|
||||
selectRow() is called to refresh only the affected row.
|
||||
|
||||
****************************************************************************
|
||||
* Database Drivers *
|
||||
****************************************************************************
|
||||
|
@ -104,10 +104,10 @@
|
||||
efficient hash-lookup of objects in a limited cache storage.
|
||||
|
||||
\table
|
||||
\header \o Class \o Summary
|
||||
\header \li Class \li Summary
|
||||
|
||||
\row \o \l{QList}<T>
|
||||
\o This is by far the most commonly used container class. It
|
||||
\row \li \l{QList}<T>
|
||||
\li This is by far the most commonly used container class. It
|
||||
stores a list of values of a given type (T) that can be accessed
|
||||
by index. Internally, the QList is implemented using an array,
|
||||
ensuring that index-based access is very fast.
|
||||
@ -119,8 +119,8 @@
|
||||
possible in the executable. QStringList inherits from
|
||||
QList<QString>.
|
||||
|
||||
\row \o \l{QLinkedList}<T>
|
||||
\o This is similar to QList, except that it uses
|
||||
\row \li \l{QLinkedList}<T>
|
||||
\li This is similar to QList, except that it uses
|
||||
iterators rather than integer indexes to access items. It also
|
||||
provides better performance than QList when inserting in the
|
||||
middle of a huge list, and it has nicer iterator semantics.
|
||||
@ -128,48 +128,48 @@
|
||||
long as the item exists, whereas iterators to a QList can become
|
||||
invalid after any insertion or removal.)
|
||||
|
||||
\row \o \l{QVector}<T>
|
||||
\o This stores an array of values of a given type at adjacent
|
||||
\row \li \l{QVector}<T>
|
||||
\li This stores an array of values of a given type at adjacent
|
||||
positions in memory. Inserting at the front or in the middle of
|
||||
a vector can be quite slow, because it can lead to large numbers
|
||||
of items having to be moved by one position in memory.
|
||||
|
||||
\row \o \l{QStack}<T>
|
||||
\o This is a convenience subclass of QVector that provides
|
||||
\row \li \l{QStack}<T>
|
||||
\li This is a convenience subclass of QVector that provides
|
||||
"last in, first out" (LIFO) semantics. It adds the following
|
||||
functions to those already present in QVector:
|
||||
\l{QStack::push()}{push()}, \l{QStack::pop()}{pop()},
|
||||
and \l{QStack::top()}{top()}.
|
||||
|
||||
\row \o \l{QQueue}<T>
|
||||
\o This is a convenience subclass of QList that provides
|
||||
\row \li \l{QQueue}<T>
|
||||
\li This is a convenience subclass of QList that provides
|
||||
"first in, first out" (FIFO) semantics. It adds the following
|
||||
functions to those already present in QList:
|
||||
\l{QQueue::enqueue()}{enqueue()},
|
||||
\l{QQueue::dequeue()}{dequeue()}, and \l{QQueue::head()}{head()}.
|
||||
|
||||
\row \o \l{QSet}<T>
|
||||
\o This provides a single-valued mathematical set with fast
|
||||
\row \li \l{QSet}<T>
|
||||
\li This provides a single-valued mathematical set with fast
|
||||
lookups.
|
||||
|
||||
\row \o \l{QMap}<Key, T>
|
||||
\o This provides a dictionary (associative array) that maps keys
|
||||
\row \li \l{QMap}<Key, T>
|
||||
\li This provides a dictionary (associative array) that maps keys
|
||||
of type Key to values of type T. Normally each key is associated
|
||||
with a single value. QMap stores its data in Key order; if order
|
||||
doesn't matter QHash is a faster alternative.
|
||||
|
||||
\row \o \l{QMultiMap}<Key, T>
|
||||
\o This is a convenience subclass of QMap that provides a nice
|
||||
\row \li \l{QMultiMap}<Key, T>
|
||||
\li This is a convenience subclass of QMap that provides a nice
|
||||
interface for multi-valued maps, i.e. maps where one key can be
|
||||
associated with multiple values.
|
||||
|
||||
\row \o \l{QHash}<Key, T>
|
||||
\o This has almost the same API as QMap, but provides
|
||||
\row \li \l{QHash}<Key, T>
|
||||
\li This has almost the same API as QMap, but provides
|
||||
significantly faster lookups. QHash stores its data in an
|
||||
arbitrary order.
|
||||
|
||||
\row \o \l{QMultiHash}<Key, T>
|
||||
\o This is a convenience subclass of QHash that
|
||||
\row \li \l{QMultiHash}<Key, T>
|
||||
\li This is a convenience subclass of QHash that
|
||||
provides a nice interface for multi-valued hashes.
|
||||
|
||||
\endtable
|
||||
@ -271,20 +271,20 @@
|
||||
read-write access.
|
||||
|
||||
\table
|
||||
\header \o Containers \o Read-only iterator
|
||||
\o Read-write iterator
|
||||
\row \o QList<T>, QQueue<T> \o QListIterator<T>
|
||||
\o QMutableListIterator<T>
|
||||
\row \o QLinkedList<T> \o QLinkedListIterator<T>
|
||||
\o QMutableLinkedListIterator<T>
|
||||
\row \o QVector<T>, QStack<T> \o QVectorIterator<T>
|
||||
\o QMutableVectorIterator<T>
|
||||
\row \o QSet<T> \o QSetIterator<T>
|
||||
\o QMutableSetIterator<T>
|
||||
\row \o QMap<Key, T>, QMultiMap<Key, T> \o QMapIterator<Key, T>
|
||||
\o QMutableMapIterator<Key, T>
|
||||
\row \o QHash<Key, T>, QMultiHash<Key, T> \o QHashIterator<Key, T>
|
||||
\o QMutableHashIterator<Key, T>
|
||||
\header \li Containers \li Read-only iterator
|
||||
\li Read-write iterator
|
||||
\row \li QList<T>, QQueue<T> \li QListIterator<T>
|
||||
\li QMutableListIterator<T>
|
||||
\row \li QLinkedList<T> \li QLinkedListIterator<T>
|
||||
\li QMutableLinkedListIterator<T>
|
||||
\row \li QVector<T>, QStack<T> \li QVectorIterator<T>
|
||||
\li QMutableVectorIterator<T>
|
||||
\row \li QSet<T> \li QSetIterator<T>
|
||||
\li QMutableSetIterator<T>
|
||||
\row \li QMap<Key, T>, QMultiMap<Key, T> \li QMapIterator<Key, T>
|
||||
\li QMutableMapIterator<Key, T>
|
||||
\row \li QHash<Key, T>, QMultiHash<Key, T> \li QHashIterator<Key, T>
|
||||
\li QMutableHashIterator<Key, T>
|
||||
\endtable
|
||||
|
||||
In this discussion, we will concentrate on QList and QMap. The
|
||||
@ -334,23 +334,23 @@
|
||||
The following table summarizes the QListIterator API:
|
||||
|
||||
\table
|
||||
\header \o Function \o Behavior
|
||||
\row \o \l{QListIterator::toFront()}{toFront()}
|
||||
\o Moves the iterator to the front of the list (before the first item)
|
||||
\row \o \l{QListIterator::toBack()}{toBack()}
|
||||
\o Moves the iterator to the back of the list (after the last item)
|
||||
\row \o \l{QListIterator::hasNext()}{hasNext()}
|
||||
\o Returns true if the iterator isn't at the back of the list
|
||||
\row \o \l{QListIterator::next()}{next()}
|
||||
\o Returns the next item and advances the iterator by one position
|
||||
\row \o \l{QListIterator::peekNext()}{peekNext()}
|
||||
\o Returns the next item without moving the iterator
|
||||
\row \o \l{QListIterator::hasPrevious()}{hasPrevious()}
|
||||
\o Returns true if the iterator isn't at the front of the list
|
||||
\row \o \l{QListIterator::previous()}{previous()}
|
||||
\o Returns the previous item and moves the iterator back by one position
|
||||
\row \o \l{QListIterator::peekPrevious()}{peekPrevious()}
|
||||
\o Returns the previous item without moving the iterator
|
||||
\header \li Function \li Behavior
|
||||
\row \li \l{QListIterator::toFront()}{toFront()}
|
||||
\li Moves the iterator to the front of the list (before the first item)
|
||||
\row \li \l{QListIterator::toBack()}{toBack()}
|
||||
\li Moves the iterator to the back of the list (after the last item)
|
||||
\row \li \l{QListIterator::hasNext()}{hasNext()}
|
||||
\li Returns true if the iterator isn't at the back of the list
|
||||
\row \li \l{QListIterator::next()}{next()}
|
||||
\li Returns the next item and advances the iterator by one position
|
||||
\row \li \l{QListIterator::peekNext()}{peekNext()}
|
||||
\li Returns the next item without moving the iterator
|
||||
\row \li \l{QListIterator::hasPrevious()}{hasPrevious()}
|
||||
\li Returns true if the iterator isn't at the front of the list
|
||||
\row \li \l{QListIterator::previous()}{previous()}
|
||||
\li Returns the previous item and moves the iterator back by one position
|
||||
\row \li \l{QListIterator::peekPrevious()}{peekPrevious()}
|
||||
\li Returns the previous item without moving the iterator
|
||||
\endtable
|
||||
|
||||
QListIterator provides no functions to insert or remove items
|
||||
@ -440,20 +440,20 @@
|
||||
possible because they are faster than read-write iterators.
|
||||
|
||||
\table
|
||||
\header \o Containers \o Read-only iterator
|
||||
\o Read-write iterator
|
||||
\row \o QList<T>, QQueue<T> \o QList<T>::const_iterator
|
||||
\o QList<T>::iterator
|
||||
\row \o QLinkedList<T> \o QLinkedList<T>::const_iterator
|
||||
\o QLinkedList<T>::iterator
|
||||
\row \o QVector<T>, QStack<T> \o QVector<T>::const_iterator
|
||||
\o QVector<T>::iterator
|
||||
\row \o QSet<T> \o QSet<T>::const_iterator
|
||||
\o QSet<T>::iterator
|
||||
\row \o QMap<Key, T>, QMultiMap<Key, T> \o QMap<Key, T>::const_iterator
|
||||
\o QMap<Key, T>::iterator
|
||||
\row \o QHash<Key, T>, QMultiHash<Key, T> \o QHash<Key, T>::const_iterator
|
||||
\o QHash<Key, T>::iterator
|
||||
\header \li Containers \li Read-only iterator
|
||||
\li Read-write iterator
|
||||
\row \li QList<T>, QQueue<T> \li QList<T>::const_iterator
|
||||
\li QList<T>::iterator
|
||||
\row \li QLinkedList<T> \li QLinkedList<T>::const_iterator
|
||||
\li QLinkedList<T>::iterator
|
||||
\row \li QVector<T>, QStack<T> \li QVector<T>::const_iterator
|
||||
\li QVector<T>::iterator
|
||||
\row \li QSet<T> \li QSet<T>::const_iterator
|
||||
\li QSet<T>::iterator
|
||||
\row \li QMap<Key, T>, QMultiMap<Key, T> \li QMap<Key, T>::const_iterator
|
||||
\li QMap<Key, T>::iterator
|
||||
\row \li QHash<Key, T>, QMultiHash<Key, T> \li QHash<Key, T>::const_iterator
|
||||
\li QHash<Key, T>::iterator
|
||||
\endtable
|
||||
|
||||
The API of the STL iterators is modelled on pointers in an array.
|
||||
@ -509,13 +509,13 @@
|
||||
The following table summarizes the STL-style iterators' API:
|
||||
|
||||
\table
|
||||
\header \o Expression \o Behavior
|
||||
\row \o \c{*i} \o Returns the current item
|
||||
\row \o \c{++i} \o Advances the iterator to the next item
|
||||
\row \o \c{i += n} \o Advances the iterator by \c n items
|
||||
\row \o \c{--i} \o Moves the iterator back by one item
|
||||
\row \o \c{i -= n} \o Moves the iterator back by \c n items
|
||||
\row \o \c{i - j} \o Returns the number of items between iterators \c i and \c j
|
||||
\header \li Expression \li Behavior
|
||||
\row \li \c{*i} \li Returns the current item
|
||||
\row \li \c{++i} \li Advances the iterator to the next item
|
||||
\row \li \c{i += n} \li Advances the iterator by \c n items
|
||||
\row \li \c{--i} \li Moves the iterator back by one item
|
||||
\row \li \c{i -= n} \li Moves the iterator back by \c n items
|
||||
\row \li \c{i - j} \li Returns the number of items between iterators \c i and \c j
|
||||
\endtable
|
||||
|
||||
The \c{++} and \c{--} operators are available both as prefix
|
||||
@ -625,17 +625,17 @@
|
||||
be used with the \c foreach keyword.
|
||||
|
||||
\list
|
||||
\o QVarLengthArray<T, Prealloc> provides a low-level
|
||||
\li QVarLengthArray<T, Prealloc> provides a low-level
|
||||
variable-length array. It can be used instead of QVector in
|
||||
places where speed is particularly important.
|
||||
|
||||
\o QCache<Key, T> provides a cache to store objects of a certain
|
||||
\li QCache<Key, T> provides a cache to store objects of a certain
|
||||
type T associated with keys of type Key.
|
||||
|
||||
\o QContiguousCache<T> provides an efficient way of caching data
|
||||
\li QContiguousCache<T> provides an efficient way of caching data
|
||||
that is typically accessed in a contiguous way.
|
||||
|
||||
\o QPair<T1, T2> stores a pair of elements.
|
||||
\li QPair<T1, T2> stores a pair of elements.
|
||||
\endlist
|
||||
|
||||
Additional non-template types that compete with Qt's template
|
||||
@ -662,27 +662,27 @@
|
||||
\keyword quadratic time
|
||||
|
||||
\list
|
||||
\o \bold{Constant time:} O(1). A function is said to run in constant
|
||||
\li \b{Constant time:} O(1). A function is said to run in constant
|
||||
time if it requires the same amount of time no matter how many
|
||||
items are present in the container. One example is
|
||||
QLinkedList::insert().
|
||||
|
||||
\o \bold{Logarithmic time:} O(log \e n). A function that runs in
|
||||
\li \b{Logarithmic time:} O(log \e n). A function that runs in
|
||||
logarithmic time is a function whose running time is
|
||||
proportional to the logarithm of the number of items in the
|
||||
container. One example is qBinaryFind().
|
||||
|
||||
\o \bold{Linear time:} O(\e n). A function that runs in linear time
|
||||
\li \b{Linear time:} O(\e n). A function that runs in linear time
|
||||
will execute in a time directly proportional to the number of
|
||||
items stored in the container. One example is
|
||||
QVector::insert().
|
||||
|
||||
\o \bold{Linear-logarithmic time:} O(\e{n} log \e n). A function
|
||||
\li \b{Linear-logarithmic time:} O(\e{n} log \e n). A function
|
||||
that runs in linear-logarithmic time is asymptotically slower
|
||||
than a linear-time function, but faster than a quadratic-time
|
||||
function.
|
||||
|
||||
\o \bold{Quadratic time:} O(\e{n}\unicode{178}). A quadratic-time function
|
||||
\li \b{Quadratic time:} O(\e{n}\unicode{178}). A quadratic-time function
|
||||
executes in a time that is proportional to the square of the
|
||||
number of items stored in the container.
|
||||
\endlist
|
||||
@ -691,10 +691,10 @@
|
||||
sequential container classes:
|
||||
|
||||
\table
|
||||
\header \o \o Index lookup \o Insertion \o Prepending \o Appending
|
||||
\row \o QLinkedList<T> \o O(\e n) \o O(1) \o O(1) \o O(1)
|
||||
\row \o QList<T> \o O(1) \o O(n) \o Amort. O(1) \o Amort. O(1)
|
||||
\row \o QVector<T> \o O(1) \o O(n) \o O(n) \o Amort. O(1)
|
||||
\header \li \li Index lookup \li Insertion \li Prepending \li Appending
|
||||
\row \li QLinkedList<T> \li O(\e n) \li O(1) \li O(1) \li O(1)
|
||||
\row \li QList<T> \li O(1) \li O(n) \li Amort. O(1) \li Amort. O(1)
|
||||
\row \li QVector<T> \li O(1) \li O(n) \li O(n) \li Amort. O(1)
|
||||
\endtable
|
||||
|
||||
In the table, "Amort." stands for "amortized behavior". For
|
||||
@ -707,12 +707,12 @@
|
||||
associative containers and sets:
|
||||
|
||||
\table
|
||||
\header \o{1,2} \o{2,1} Key lookup \o{2,1} Insertion
|
||||
\header \o Average \o Worst case \o Average \o Worst case
|
||||
\row \o QMap<Key, T> \o O(log \e n) \o O(log \e n) \o O(log \e n) \o O(log \e n)
|
||||
\row \o QMultiMap<Key, T> \o O(log \e n) \o O(log \e n) \o O(log \e n) \o O(log \e n)
|
||||
\row \o QHash<Key, T> \o Amort. O(1) \o O(\e n) \o Amort. O(1) \o O(\e n)
|
||||
\row \o QSet<Key> \o Amort. O(1) \o O(\e n) \o Amort. O(1) \o O(\e n)
|
||||
\header \li{1,2} \li{2,1} Key lookup \li{2,1} Insertion
|
||||
\header \li Average \li Worst case \li Average \li Worst case
|
||||
\row \li QMap<Key, T> \li O(log \e n) \li O(log \e n) \li O(log \e n) \li O(log \e n)
|
||||
\row \li QMultiMap<Key, T> \li O(log \e n) \li O(log \e n) \li O(log \e n) \li O(log \e n)
|
||||
\row \li QHash<Key, T> \li Amort. O(1) \li O(\e n) \li Amort. O(1) \li O(\e n)
|
||||
\row \li QSet<Key> \li Amort. O(1) \li O(\e n) \li Amort. O(1) \li O(\e n)
|
||||
\endtable
|
||||
|
||||
With QVector, QHash, and QSet, the performance of appending items
|
||||
@ -749,13 +749,13 @@
|
||||
The values above may seem a bit strange, but here are the guiding
|
||||
principles:
|
||||
\list
|
||||
\o QString allocates 4 characters at a time until it reaches size 20.
|
||||
\o From 20 to 4084, it advances by doubling the size each time.
|
||||
\li QString allocates 4 characters at a time until it reaches size 20.
|
||||
\li From 20 to 4084, it advances by doubling the size each time.
|
||||
More precisely, it advances to the next power of two, minus
|
||||
12. (Some memory allocators perform worst when requested exact
|
||||
powers of two, because they use a few bytes per block for
|
||||
book-keeping.)
|
||||
\o From 4084 on, it advances by blocks of 2048 characters (4096
|
||||
\li From 4084 on, it advances by blocks of 2048 characters (4096
|
||||
bytes). This makes sense because modern operating systems
|
||||
don't copy the entire data when reallocating a buffer; the
|
||||
physical memory pages are simply reordered, and only the data
|
||||
@ -787,12 +787,12 @@
|
||||
use to store the items:
|
||||
|
||||
\list
|
||||
\o \l{QString::capacity()}{capacity()} returns the
|
||||
\li \l{QString::capacity()}{capacity()} returns the
|
||||
number of items for which memory is allocated (for QHash and
|
||||
QSet, the number of buckets in the hash table).
|
||||
\o \l{QString::reserve()}{reserve}(\e size) explicitly
|
||||
\li \l{QString::reserve()}{reserve}(\e size) explicitly
|
||||
preallocates memory for \e size items.
|
||||
\o \l{QString::squeeze()}{squeeze()} frees any memory
|
||||
\li \l{QString::squeeze()}{squeeze()} frees any memory
|
||||
not required to store the items.
|
||||
\endlist
|
||||
|
||||
|
@ -59,12 +59,12 @@
|
||||
JSON is a format to store structured data. It has 6 basic data types:
|
||||
|
||||
\list
|
||||
\o bool
|
||||
\o double
|
||||
\o string
|
||||
\o array
|
||||
\o object
|
||||
\o null
|
||||
\li bool
|
||||
\li double
|
||||
\li string
|
||||
\li array
|
||||
\li object
|
||||
\li null
|
||||
\endlist
|
||||
|
||||
Any value can be any of the above type. A boolean value is represented by the
|
||||
|
@ -41,12 +41,12 @@
|
||||
The meta-object system is based on three things:
|
||||
|
||||
\list 1
|
||||
\o The \l QObject class provides a base class for objects that can
|
||||
\li The \l QObject class provides a base class for objects that can
|
||||
take advantage of the meta-object system.
|
||||
\o The Q_OBJECT macro inside the private section of the class
|
||||
\li The Q_OBJECT macro inside the private section of the class
|
||||
declaration is used to enable meta-object features, such as
|
||||
dynamic properties, signals, and slots.
|
||||
\o The \l{moc}{Meta-Object Compiler} (\c moc) supplies each
|
||||
\li The \l{moc}{Meta-Object Compiler} (\c moc) supplies each
|
||||
QObject subclass with the necessary code to implement
|
||||
meta-object features.
|
||||
\endlist
|
||||
@ -64,19 +64,19 @@
|
||||
additional features:
|
||||
|
||||
\list
|
||||
\o QObject::metaObject() returns the associated
|
||||
\li QObject::metaObject() returns the associated
|
||||
\l{QMetaObject}{meta-object} for the class.
|
||||
\o QMetaObject::className() returns the class name as a
|
||||
\li QMetaObject::className() returns the class name as a
|
||||
string at run-time, without requiring native run-time type information
|
||||
(RTTI) support through the C++ compiler.
|
||||
\o QObject::inherits() function returns whether an object is an
|
||||
\li QObject::inherits() function returns whether an object is an
|
||||
instance of a class that inherits a specified class within the
|
||||
QObject inheritance tree.
|
||||
\o QObject::tr() and QObject::trUtf8() translate strings for
|
||||
\li QObject::tr() and QObject::trUtf8() translate strings for
|
||||
\l{Internationalization with Qt}{internationalization}.
|
||||
\o QObject::setProperty() and QObject::property()
|
||||
\li QObject::setProperty() and QObject::property()
|
||||
dynamically set and get properties by name.
|
||||
\o QMetaObject::newInstance() constructs a new instance of the class.
|
||||
\li QMetaObject::newInstance() constructs a new instance of the class.
|
||||
\endlist
|
||||
|
||||
\target qobjectcast
|
||||
|
@ -41,20 +41,20 @@
|
||||
Qt adds these features to C++:
|
||||
|
||||
\list
|
||||
\o a very powerful mechanism for seamless object
|
||||
\li a very powerful mechanism for seamless object
|
||||
communication called \l{signals and slots}
|
||||
\o queryable and designable \l{Qt's Property System}{object
|
||||
\li queryable and designable \l{Qt's Property System}{object
|
||||
properties}
|
||||
\o powerful \l{The Event System}{events and event filters}
|
||||
\o contextual \l{i18n}{string translation for internationalization}
|
||||
\o sophisticated interval driven \l timers that make it possible
|
||||
\li powerful \l{The Event System}{events and event filters}
|
||||
\li contextual \l{i18n}{string translation for internationalization}
|
||||
\li sophisticated interval driven \l timers that make it possible
|
||||
to elegantly integrate many tasks in an event-driven GUI
|
||||
\o hierarchical and queryable \l{Object Trees & Ownership}{object
|
||||
\li hierarchical and queryable \l{Object Trees & Ownership}{object
|
||||
trees} that organize object ownership in a natural way
|
||||
\o guarded pointers (QPointer) that are automatically
|
||||
\li guarded pointers (QPointer) that are automatically
|
||||
set to 0 when the referenced object is destroyed, unlike normal C++
|
||||
pointers which become dangling pointers when their objects are destroyed
|
||||
\o a \l{metaobjects.html#qobjectcast}{dynamic cast} that works across
|
||||
\li a \l{metaobjects.html#qobjectcast}{dynamic cast} that works across
|
||||
library boundaries.
|
||||
\endlist
|
||||
|
||||
@ -92,22 +92,22 @@
|
||||
or assigning a value. We can see what this means in the Qt Object
|
||||
Model.
|
||||
|
||||
\bold{A Qt Object...}
|
||||
\b{A Qt Object...}
|
||||
|
||||
\list
|
||||
|
||||
\o might have a unique \l{QObject::objectName()}. If we copy a Qt
|
||||
\li might have a unique \l{QObject::objectName()}. If we copy a Qt
|
||||
Object, what name should we give the copy?
|
||||
|
||||
\o has a location in an \l{Object Trees & Ownership}
|
||||
\li has a location in an \l{Object Trees & Ownership}
|
||||
{object hierarchy}. If we copy a Qt Object, where should the copy
|
||||
be located?
|
||||
|
||||
\o can be connected to other Qt Objects to emit signals to them or
|
||||
\li can be connected to other Qt Objects to emit signals to them or
|
||||
to receive signals emitted by them. If we copy a Qt Object, how
|
||||
should we transfer these connections to the copy?
|
||||
|
||||
\o can have \l{Qt's Property System} {new properties} added to it
|
||||
\li can have \l{Qt's Property System} {new properties} added to it
|
||||
at runtime that are not declared in the C++ class. If we copy a Qt
|
||||
Object, should the copy include the properties that were added to
|
||||
the original?
|
||||
|
@ -58,20 +58,20 @@
|
||||
|
||||
\list
|
||||
|
||||
\o A \c READ accessor function is required. It is for reading the
|
||||
\li A \c READ accessor function is required. It is for reading the
|
||||
property value. Ideally, a const function is used for this purpose,
|
||||
and it must return either the property's type or a pointer or
|
||||
reference to that type. e.g., QWidget::focus is a read-only property
|
||||
with \c READ function, QWidget::hasFocus().
|
||||
|
||||
\o A \c WRITE accessor function is optional. It is for setting the
|
||||
\li A \c WRITE accessor function is optional. It is for setting the
|
||||
property value. It must return void and must take exactly one
|
||||
argument, either of the property's type or a pointer or reference
|
||||
to that type. e.g., QWidget::enabled has the \c WRITE function
|
||||
QWidget::setEnabled(). Read-only properties do not need \c WRITE
|
||||
functions. e.g., QWidget::focus has no \c WRITE function.
|
||||
|
||||
\o A \c RESET function is optional. It is for setting the property
|
||||
\li A \c RESET function is optional. It is for setting the property
|
||||
back to its context specific default value. e.g., QWidget::cursor
|
||||
has the typical \c READ and \c WRITE functions, QWidget::cursor()
|
||||
and QWidget::setCursor(), and it also has a \c RESET function,
|
||||
@ -79,26 +79,26 @@
|
||||
mean \e {reset to the context specific cursor}. The \c RESET
|
||||
function must return void and take no parameters.
|
||||
|
||||
\o A \c NOTIFY signal is optional. If defined, it should specify one
|
||||
\li A \c NOTIFY signal is optional. If defined, it should specify one
|
||||
existing signal in that class that is emitted whenever the value
|
||||
of the property changes.
|
||||
|
||||
\o A \c REVISION number is optional. If included, it defines the
|
||||
\li A \c REVISION number is optional. If included, it defines the
|
||||
the property and its notifier signal to be used in a particular
|
||||
revision of the API that is exposed to QML.
|
||||
|
||||
\o The \c DESIGNABLE attribute indicates whether the property
|
||||
\li The \c DESIGNABLE attribute indicates whether the property
|
||||
should be visible in the property editor of GUI design tool (e.g.,
|
||||
\l {Qt Designer}). Most properties are \c DESIGNABLE (default
|
||||
true). Instead of true or false, you can specify a boolean
|
||||
member function.
|
||||
|
||||
\o The \c SCRIPTABLE attribute indicates whether this property
|
||||
\li The \c SCRIPTABLE attribute indicates whether this property
|
||||
should be accessible by a scripting engine (default true).
|
||||
Instead of true or false, you can specify a boolean member
|
||||
function.
|
||||
|
||||
\o The \c STORED attribute indicates whether the property should
|
||||
\li The \c STORED attribute indicates whether the property should
|
||||
be thought of as existing on its own or as depending on other
|
||||
values. It also indicates whether the property value must be saved
|
||||
when storing the object's state. Most properties are \c STORED
|
||||
@ -106,20 +106,20 @@
|
||||
false, because its value is just taken from the width component
|
||||
of property QWidget::minimumSize(), which is a QSize.
|
||||
|
||||
\o The \c USER attribute indicates whether the property is
|
||||
\li The \c USER attribute indicates whether the property is
|
||||
designated as the user-facing or user-editable property for the
|
||||
class. Normally, there is only one \c USER property per class
|
||||
(default false). e.g., QAbstractButton::checked is the user
|
||||
editable property for (checkable) buttons. Note that QItemDelegate
|
||||
gets and sets a widget's \c USER property.
|
||||
|
||||
\o The presence of the \c CONSTANT attibute indicates that the property
|
||||
\li The presence of the \c CONSTANT attibute indicates that the property
|
||||
value is constant. For a given object instance, the READ method of a
|
||||
constant property must return the same value every time it is called. This
|
||||
constant value may be different for different instances of the object. A
|
||||
constant property cannot have a WRITE method or a NOTIFY signal.
|
||||
|
||||
\o The presence of the \c FINAL attribute indicates that the property
|
||||
\li The presence of the \c FINAL attribute indicates that the property
|
||||
will not be overridden by a derived class. This can be used for performance
|
||||
optimizations in some cases, but is not enforced by moc. Care must be taken
|
||||
never to override a \c FINAL property.
|
||||
|
@ -123,8 +123,8 @@
|
||||
There are basically two use cases for threads:
|
||||
|
||||
\list
|
||||
\o Make processing faster by making use of multicore processors.
|
||||
\o Keep the GUI thread or other time critical threads responsive by
|
||||
\li Make processing faster by making use of multicore processors.
|
||||
\li Keep the GUI thread or other time critical threads responsive by
|
||||
offloading long lasting processing or blocking calls to other threads.
|
||||
\endlist
|
||||
|
||||
@ -138,23 +138,23 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Alternative
|
||||
\o Comment
|
||||
\li Alternative
|
||||
\li Comment
|
||||
\row
|
||||
\o QEventLoop::processEvents()
|
||||
\o Calling QEventLoop::processEvents() repeatedly during a
|
||||
\li QEventLoop::processEvents()
|
||||
\li Calling QEventLoop::processEvents() repeatedly during a
|
||||
time-consuming calculation prevents GUI blocking. However, this
|
||||
solution doesn't scale well because the call to processEvents() may
|
||||
occur too often, or not often enough, depending on hardware.
|
||||
\row
|
||||
\o QTimer
|
||||
\o Background processing can sometimes be done conveniently using a
|
||||
\li QTimer
|
||||
\li Background processing can sometimes be done conveniently using a
|
||||
timer to schedule execution of a slot at some point in the future.
|
||||
A timer with an interval of 0 will time out as soon as there are no
|
||||
more events to process.
|
||||
\row
|
||||
\o QSocketNotifier QNetworkAccessManager QIODevice::readyRead()
|
||||
\o This is an alternative to having one or multiple threads, each with
|
||||
\li QSocketNotifier QNetworkAccessManager QIODevice::readyRead()
|
||||
\li This is an alternative to having one or multiple threads, each with
|
||||
a blocking read on a slow network connection. As long as the
|
||||
calculation in response to a chunk of network data can be executed
|
||||
quickly, this reactive design is better than synchronous waiting in
|
||||
@ -183,55 +183,55 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Lifetime of thread
|
||||
\o Development task
|
||||
\o Solution
|
||||
\li Lifetime of thread
|
||||
\li Development task
|
||||
\li Solution
|
||||
\row
|
||||
\o One call
|
||||
\o Run one method within another thread and quit the thread when the
|
||||
\li One call
|
||||
\li Run one method within another thread and quit the thread when the
|
||||
method is finished.
|
||||
\o Qt provides different solutions:
|
||||
\li Qt provides different solutions:
|
||||
\list
|
||||
\o Write a function and run it with QtConcurrent::run()
|
||||
\o Derive a class from QRunnable and run it in the global thread
|
||||
\li Write a function and run it with QtConcurrent::run()
|
||||
\li Derive a class from QRunnable and run it in the global thread
|
||||
pool with QThreadPool::globalInstance()->start()
|
||||
\o Derive a class from QThread, reimplement the QThread::run()
|
||||
\li Derive a class from QThread, reimplement the QThread::run()
|
||||
method and use QThread::start() to run it.
|
||||
\endlist
|
||||
|
||||
\row
|
||||
\o One call
|
||||
\o Operations are to be performed on all items of a container.
|
||||
\li One call
|
||||
\li Operations are to be performed on all items of a container.
|
||||
Processing should be performed using all available cores. A common
|
||||
example is to produce thumbnails from a list of images.
|
||||
\o QtConcurrent provides the \l{QtConcurrent::}{map()} function for
|
||||
\li QtConcurrent provides the \l{QtConcurrent::}{map()} function for
|
||||
applying operations on every container element,
|
||||
\l{QtConcurrent::}{filter()} for selecting container elements, and
|
||||
the option of specifying a reduce function for combining the
|
||||
remaining elements.
|
||||
\row
|
||||
\o One call
|
||||
\o A long running operation has to be put in another thread. During the
|
||||
\li One call
|
||||
\li A long running operation has to be put in another thread. During the
|
||||
course of processing, status information should be sent to the GUI
|
||||
thread.
|
||||
\o Use QThread, reimplement run and emit signals as needed. Connect the
|
||||
\li Use QThread, reimplement run and emit signals as needed. Connect the
|
||||
signals to the GUI thread's slots using queued signal/slot
|
||||
connections.
|
||||
|
||||
\row
|
||||
\o Permanent
|
||||
\o Have an object living in another thread and let it perform different
|
||||
\li Permanent
|
||||
\li Have an object living in another thread and let it perform different
|
||||
tasks upon request.
|
||||
This means communication to and from the worker thread is required.
|
||||
\o Derive a class from QObject and implement the necessary slots and
|
||||
\li Derive a class from QObject and implement the necessary slots and
|
||||
signals, move the object to a thread with a running event loop and
|
||||
communicate with the object over queued signal/slot connections.
|
||||
\row
|
||||
\o Permanent
|
||||
\o Have an object living in another thread, let the object perform
|
||||
\li Permanent
|
||||
\li Have an object living in another thread, let the object perform
|
||||
repeated tasks such as polling a port and enable communication with
|
||||
the GUI thread.
|
||||
\o Same as above but also use a timer in the worker thread to implement
|
||||
\li Same as above but also use a timer in the worker thread to implement
|
||||
polling. However, the best solution for polling is to avoid it
|
||||
completely. Sometimes using QSocketNotifier is an alternative.
|
||||
\endtable
|
||||
@ -304,18 +304,18 @@
|
||||
The anatomy of QThread is quite interesting:
|
||||
|
||||
\list
|
||||
\o QThread does not live in the new thread where \l{QThread::}{run()} is
|
||||
\li QThread does not live in the new thread where \l{QThread::}{run()} is
|
||||
executed. It lives in the old thread.
|
||||
\o Most QThread methods are the thread's control interface and are meant to
|
||||
\li Most QThread methods are the thread's control interface and are meant to
|
||||
be called from the old thread. Do not move this interface to the newly
|
||||
created thread using \l{QObject::}{moveToThread()}; i.e., calling
|
||||
\l{QObject::moveToThread()}{moveToThread(this)} is regarded as bad
|
||||
practice.
|
||||
\o \l{QThread::}{exec()} and the static methods
|
||||
\li \l{QThread::}{exec()} and the static methods
|
||||
\l{QThread::}{usleep()}, \l{QThread::}{msleep()},
|
||||
\l{QThread::}{sleep()} are meant to be called from the newly created
|
||||
thread.
|
||||
\o Additional members defined in the QThread subclass are
|
||||
\li Additional members defined in the QThread subclass are
|
||||
accessible by both threads. The developer is responsible for
|
||||
coordinating access. A typical strategy is to set the members before
|
||||
\l{QThread::}{start()} is called. Once the worker thread is running,
|
||||
@ -432,11 +432,11 @@
|
||||
main thread.
|
||||
|
||||
\list
|
||||
\o Using QThread as shown \l{Qt thread basics}{above}
|
||||
\o \l{Example 1: Using the Thread Pool}{Using the global QThreadPool}
|
||||
\o \l{Example 2: Using QtConcurrent}{Using QtConcurrent}
|
||||
\o \l{Example 3: Clock}{Communication with the GUI thread}
|
||||
\o \l{Example 4: A Permanent Thread}{A permanent QObject in another thread
|
||||
\li Using QThread as shown \l{Qt thread basics}{above}
|
||||
\li \l{Example 1: Using the Thread Pool}{Using the global QThreadPool}
|
||||
\li \l{Example 2: Using QtConcurrent}{Using QtConcurrent}
|
||||
\li \l{Example 3: Clock}{Communication with the GUI thread}
|
||||
\li \l{Example 4: A Permanent Thread}{A permanent QObject in another thread
|
||||
provides service to the main thread}
|
||||
\endlist
|
||||
|
||||
@ -558,13 +558,13 @@
|
||||
can help you go into the subject in more depth:
|
||||
|
||||
\list
|
||||
\o Good video tutorials about threads with Qt can be found in the material
|
||||
\li Good video tutorials about threads with Qt can be found in the material
|
||||
from the \l{Training Day at Qt Developer Days 2009}.
|
||||
\o The \l{Thread Support in Qt} document is a good starting point into
|
||||
\li The \l{Thread Support in Qt} document is a good starting point into
|
||||
the reference documentation.
|
||||
\o Qt comes with several additional examples for
|
||||
\li Qt comes with several additional examples for
|
||||
\l{Threading and Concurrent Programming Examples}{QThread and QtConcurrent}.
|
||||
\o Several good books describe how to work with Qt threads. The most
|
||||
\li Several good books describe how to work with Qt threads. The most
|
||||
extensive coverage can be found in \e{Advanced Qt Programming} by Mark
|
||||
Summerfield, Prentice Hall - roughly 70 of 500 pages cover QThread and
|
||||
QtConcurrent.
|
||||
|
@ -54,14 +54,14 @@
|
||||
\section1 Topics:
|
||||
|
||||
\list
|
||||
\o \l{Recommended Reading}
|
||||
\o \l{The Threading Classes}
|
||||
\o \l{Starting Threads with QThread}
|
||||
\o \l{Synchronizing Threads}
|
||||
\o \l{Reentrancy and Thread-Safety}
|
||||
\o \l{Threads and QObjects}
|
||||
\o \l{Concurrent Programming}
|
||||
\o \l{Thread-Support in Qt Modules}
|
||||
\li \l{Recommended Reading}
|
||||
\li \l{The Threading Classes}
|
||||
\li \l{Starting Threads with QThread}
|
||||
\li \l{Synchronizing Threads}
|
||||
\li \l{Reentrancy and Thread-Safety}
|
||||
\li \l{Threads and QObjects}
|
||||
\li \l{Concurrent Programming}
|
||||
\li \l{Thread-Support in Qt Modules}
|
||||
\endlist
|
||||
|
||||
\section1 Recommended Reading
|
||||
@ -71,10 +71,10 @@
|
||||
to threading see our Recommended Reading list:
|
||||
|
||||
\list
|
||||
\o \l{Threads Primer: A Guide to Multithreaded Programming}
|
||||
\o \l{Thread Time: The Multithreaded Programming Guide}
|
||||
\o \l{Pthreads Programming: A POSIX Standard for Better Multiprocessing}
|
||||
\o \l{Win32 Multithreaded Programming}
|
||||
\li \l{Threads Primer: A Guide to Multithreaded Programming}
|
||||
\li \l{Thread Time: The Multithreaded Programming Guide}
|
||||
\li \l{Pthreads Programming: A POSIX Standard for Better Multiprocessing}
|
||||
\li \l{Win32 Multithreaded Programming}
|
||||
\endlist
|
||||
|
||||
\section1 The Threading Classes
|
||||
@ -85,21 +85,21 @@
|
||||
|
||||
\omit
|
||||
\list
|
||||
\o QThread provides the means to start a new thread.
|
||||
\o QThreadStorage provides per-thread data storage.
|
||||
\o QThreadPool manages a pool of threads that run QRunnable objects.
|
||||
\o QRunnable is an abstract class representing a runnable object.
|
||||
\o QMutex provides a mutual exclusion lock, or mutex.
|
||||
\o QMutexLocker is a convenience class that automatically locks
|
||||
\li QThread provides the means to start a new thread.
|
||||
\li QThreadStorage provides per-thread data storage.
|
||||
\li QThreadPool manages a pool of threads that run QRunnable objects.
|
||||
\li QRunnable is an abstract class representing a runnable object.
|
||||
\li QMutex provides a mutual exclusion lock, or mutex.
|
||||
\li QMutexLocker is a convenience class that automatically locks
|
||||
and unlocks a QMutex.
|
||||
\o QReadWriteLock provides a lock that allows simultaneous read access.
|
||||
\o QReadLocker and QWriteLocker are convenience classes that automatically
|
||||
\li QReadWriteLock provides a lock that allows simultaneous read access.
|
||||
\li QReadLocker and QWriteLocker are convenience classes that automatically
|
||||
lock and unlock a QReadWriteLock.
|
||||
\o QSemaphore provides an integer semaphore (a generalization of a mutex).
|
||||
\o QWaitCondition provides a way for threads to go to sleep until
|
||||
\li QSemaphore provides an integer semaphore (a generalization of a mutex).
|
||||
\li QWaitCondition provides a way for threads to go to sleep until
|
||||
woken up by another thread.
|
||||
\o QAtomicInt provides atomic operations on integers.
|
||||
\o QAtomicPointer provides atomic operations on pointers.
|
||||
\li QAtomicInt provides atomic operations on integers.
|
||||
\li QAtomicPointer provides atomic operations on pointers.
|
||||
\endlist
|
||||
\endomit
|
||||
|
||||
@ -226,10 +226,10 @@
|
||||
how they can be used in multithread applications:
|
||||
|
||||
\list
|
||||
\o A \e thread-safe function can be called simultaneously from
|
||||
\li A \e thread-safe function can be called simultaneously from
|
||||
multiple threads, even when the invocations use shared data,
|
||||
because all references to the shared data are serialized.
|
||||
\o A \e reentrant function can also be called simultaneously from
|
||||
\li A \e reentrant function can also be called simultaneously from
|
||||
multiple threads, but only if each invocation uses its own data.
|
||||
\endlist
|
||||
|
||||
@ -267,9 +267,9 @@
|
||||
Indeed, they usually expand to three machine instructions:
|
||||
|
||||
\list 1
|
||||
\o Load the variable's value in a register.
|
||||
\o Increment or decrement the register's value.
|
||||
\o Store the register's value back into main memory.
|
||||
\li Load the variable's value in a register.
|
||||
\li Increment or decrement the register's value.
|
||||
\li Store the register's value back into main memory.
|
||||
\endlist
|
||||
|
||||
If thread A and thread B load the variable's old value
|
||||
@ -346,19 +346,19 @@
|
||||
guaranteed to work. There are three constraints to be aware of:
|
||||
|
||||
\list
|
||||
\o \e{The child of a QObject must always be created in the thread
|
||||
\li \e{The child of a QObject must always be created in the thread
|
||||
where the parent was created.} This implies, among other
|
||||
things, that you should never pass the QThread object (\c
|
||||
this) as the parent of an object created in the thread (since
|
||||
the QThread object itself was created in another thread).
|
||||
|
||||
\o \e{Event driven objects may only be used in a single thread.}
|
||||
\li \e{Event driven objects may only be used in a single thread.}
|
||||
Specifically, this applies to the \l{timers.html}{timer
|
||||
mechanism} and the \l{QtNetwork}{network module}. For example,
|
||||
you cannot start a timer or connect a socket in a thread that
|
||||
is not the \l{QObject::thread()}{object's thread}.
|
||||
|
||||
\o \e{You must ensure that all objects created in a thread are
|
||||
\li \e{You must ensure that all objects created in a thread are
|
||||
deleted before you delete the QThread.} This can be done
|
||||
easily by creating the objects on the stack in your
|
||||
\l{QThread::run()}{run()} implementation.
|
||||
@ -469,26 +469,26 @@
|
||||
|
||||
\list
|
||||
|
||||
\o \l{Qt::AutoConnection}{Auto Connection} (default) If the signal is
|
||||
\li \l{Qt::AutoConnection}{Auto Connection} (default) If the signal is
|
||||
emitted in the thread which the receiving object has affinity then
|
||||
the behavior is the same as the Direct Connection. Otherwise,
|
||||
the behavior is the same as the Queued Connection."
|
||||
|
||||
\o \l{Qt::DirectConnection}{Direct Connection} The slot is invoked
|
||||
\li \l{Qt::DirectConnection}{Direct Connection} The slot is invoked
|
||||
immediately, when the signal is emitted. The slot is executed
|
||||
in the emitter's thread, which is not necessarily the
|
||||
receiver's thread.
|
||||
|
||||
\o \l{Qt::QueuedConnection}{Queued Connection} The slot is invoked
|
||||
\li \l{Qt::QueuedConnection}{Queued Connection} The slot is invoked
|
||||
when control returns to the event loop of the receiver's
|
||||
thread. The slot is executed in the receiver's thread.
|
||||
|
||||
\o \l{Qt::BlockingQueuedConnection}{Blocking Queued Connection}
|
||||
\li \l{Qt::BlockingQueuedConnection}{Blocking Queued Connection}
|
||||
The slot is invoked as for the Queued Connection, except the
|
||||
current thread blocks until the slot returns. \note Using this
|
||||
type to connect objects in the same thread will cause deadlock.
|
||||
|
||||
\o \l{Qt::UniqueConnection}{Unique Connection} The behavior is the
|
||||
\li \l{Qt::UniqueConnection}{Unique Connection} The behavior is the
|
||||
same as the Auto Connection, but the connection is made only if
|
||||
it does not duplicate an existing connection. i.e., if the same
|
||||
signal is already connected to the same slot for the same pair
|
||||
@ -546,33 +546,33 @@
|
||||
|
||||
\list
|
||||
|
||||
\o QtConcurrent::map() applies a function to every item in a container,
|
||||
\li QtConcurrent::map() applies a function to every item in a container,
|
||||
modifying the items in-place.
|
||||
|
||||
\o QtConcurrent::mapped() is like map(), except that it returns a new
|
||||
\li QtConcurrent::mapped() is like map(), except that it returns a new
|
||||
container with the modifications.
|
||||
|
||||
\o QtConcurrent::mappedReduced() is like mapped(), except that the
|
||||
\li QtConcurrent::mappedReduced() is like mapped(), except that the
|
||||
modified results are reduced or folded into a single result.
|
||||
|
||||
\o QtConcurrent::filter() removes all items from a container based on the
|
||||
\li QtConcurrent::filter() removes all items from a container based on the
|
||||
result of a filter function.
|
||||
|
||||
\o QtConcurrent::filtered() is like filter(), except that it returns a new
|
||||
\li QtConcurrent::filtered() is like filter(), except that it returns a new
|
||||
container with the filtered results.
|
||||
|
||||
\o QtConcurrent::filteredReduced() is like filtered(), except that the
|
||||
\li QtConcurrent::filteredReduced() is like filtered(), except that the
|
||||
filtered results are reduced or folded into a single result.
|
||||
|
||||
\o QtConcurrent::run() runs a function in another thread.
|
||||
\li QtConcurrent::run() runs a function in another thread.
|
||||
|
||||
\o QFuture represents the result of an asynchronous computation.
|
||||
\li QFuture represents the result of an asynchronous computation.
|
||||
|
||||
\o QFutureIterator allows iterating through results available via QFuture.
|
||||
\li QFutureIterator allows iterating through results available via QFuture.
|
||||
|
||||
\o QFutureWatcher allows monitoring a QFuture using signals-and-slots.
|
||||
\li QFutureWatcher allows monitoring a QFuture using signals-and-slots.
|
||||
|
||||
\o QFutureSynchronizer is a convenience class that automatically
|
||||
\li QFutureSynchronizer is a convenience class that automatically
|
||||
synchronizes several QFutures.
|
||||
|
||||
\endlist
|
||||
@ -585,29 +585,29 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Iterator Type
|
||||
\o Example classes
|
||||
\o Support status
|
||||
\li Iterator Type
|
||||
\li Example classes
|
||||
\li Support status
|
||||
\row
|
||||
\o Input Iterator
|
||||
\o
|
||||
\o Not Supported
|
||||
\li Input Iterator
|
||||
\li
|
||||
\li Not Supported
|
||||
\row
|
||||
\o Output Iterator
|
||||
\o
|
||||
\o Not Supported
|
||||
\li Output Iterator
|
||||
\li
|
||||
\li Not Supported
|
||||
\row
|
||||
\o Forward Iterator
|
||||
\o std::slist
|
||||
\o Supported
|
||||
\li Forward Iterator
|
||||
\li std::slist
|
||||
\li Supported
|
||||
\row
|
||||
\o Bidirectional Iterator
|
||||
\o QLinkedList, std::list
|
||||
\o Supported
|
||||
\li Bidirectional Iterator
|
||||
\li QLinkedList, std::list
|
||||
\li Supported
|
||||
\row
|
||||
\o Random Access Iterator
|
||||
\o QList, QVector, std::vector
|
||||
\o Supported and Recommended
|
||||
\li Random Access Iterator
|
||||
\li QList, QVector, std::vector
|
||||
\li Supported and Recommended
|
||||
\endtable
|
||||
|
||||
Random access iterators can be faster in cases where Qt Concurrent is iterating
|
||||
|
@ -107,15 +107,15 @@
|
||||
dimensions of the model. Whereas, \c rowCount()'s value will vary
|
||||
depending on the number of contacts added to the address book,
|
||||
\c columnCount()'s value is always 2 because we only need space
|
||||
for the \bold Name and \bold Address columns.
|
||||
for the \b Name and \b Address columns.
|
||||
|
||||
\note The \c Q_UNUSED() macro prevents the compiler from
|
||||
generating warnings regarding unused parameters.
|
||||
|
||||
\snippet itemviews/addressbook/tablemodel.cpp 1
|
||||
|
||||
The \c data() function returns either a \bold Name or
|
||||
\bold {Address}, based on the contents of the model index
|
||||
The \c data() function returns either a \b Name or
|
||||
\b {Address}, based on the contents of the model index
|
||||
supplied. The row number stored in the model index is used to
|
||||
reference an item in the list of pairs. Selection is handled
|
||||
by the QItemSelectionModel, which will be explained with
|
||||
@ -124,7 +124,7 @@
|
||||
\snippet itemviews/addressbook/tablemodel.cpp 2
|
||||
|
||||
The \c headerData() function displays the table's header,
|
||||
\bold Name and \bold Address. If you require numbered entries
|
||||
\b Name and \b Address. If you require numbered entries
|
||||
for your address book, you can use a vertical header which we
|
||||
have hidden in this example (see the \c AddressWidget
|
||||
implementation).
|
||||
@ -372,8 +372,8 @@
|
||||
menus and actions necessary to manipulate the address book.
|
||||
|
||||
\table
|
||||
\row \o \inlineimage addressbook-filemenu.png
|
||||
\o \inlineimage addressbook-toolsmenu.png
|
||||
\row \li \inlineimage addressbook-filemenu.png
|
||||
\li \inlineimage addressbook-toolsmenu.png
|
||||
\endtable
|
||||
|
||||
\snippet itemviews/addressbook/mainwindow.h 0
|
||||
|
@ -39,10 +39,10 @@
|
||||
in the following ways:
|
||||
|
||||
\list
|
||||
\o Dragging the red circle in the centre of each drawing moves it to a new position.
|
||||
\o Dragging the displaced red circle causes the current drawing to be rotated about the
|
||||
\li Dragging the red circle in the centre of each drawing moves it to a new position.
|
||||
\li Dragging the displaced red circle causes the current drawing to be rotated about the
|
||||
central circle. Rotation can also be controlled with the \key Rotate slider.
|
||||
\o Scaling is controlled with the \key Scale slider.
|
||||
\o Each drawing can be sheared with the \key Shear slider.
|
||||
\li Scaling is controlled with the \key Scale slider.
|
||||
\li Each drawing can be sheared with the \key Shear slider.
|
||||
\endlist
|
||||
*/
|
||||
|
@ -142,18 +142,18 @@
|
||||
Now, enter the following translations:
|
||||
|
||||
\list
|
||||
\o \c ArrowPad
|
||||
\li \c ArrowPad
|
||||
\list
|
||||
\o \&Up - \&Haut
|
||||
\o \&Left - \&Gauche
|
||||
\o \&Right - \&Droite
|
||||
\o \&Down - \&Bas
|
||||
\li \&Up - \&Haut
|
||||
\li \&Left - \&Gauche
|
||||
\li \&Right - \&Droite
|
||||
\li \&Down - \&Bas
|
||||
\endlist
|
||||
\o \c MainWindow
|
||||
\li \c MainWindow
|
||||
\list
|
||||
\o E\&xit - \&Quitter
|
||||
\o Ctrl+Q - Ctrl+Q
|
||||
\o \&File - \&Fichier
|
||||
\li E\&xit - \&Quitter
|
||||
\li Ctrl+Q - Ctrl+Q
|
||||
\li \&File - \&Fichier
|
||||
\endlist
|
||||
\endlist
|
||||
|
||||
@ -164,18 +164,18 @@
|
||||
Save the file and do the same for Dutch working with \c arrowpad_nl.ts:
|
||||
|
||||
\list
|
||||
\o \c ArrowPad
|
||||
\li \c ArrowPad
|
||||
\list
|
||||
\o \&Up - \&Omhoog
|
||||
\o \&Left - \&Links
|
||||
\o \&Right - \&Rechts
|
||||
\o \&Down - Omlaa\&g
|
||||
\li \&Up - \&Omhoog
|
||||
\li \&Left - \&Links
|
||||
\li \&Right - \&Rechts
|
||||
\li \&Down - Omlaa\&g
|
||||
\endlist
|
||||
\o \c MainWindow
|
||||
\li \c MainWindow
|
||||
\list
|
||||
\o E\&xit - \&Afsluiten
|
||||
\o Ctrl+Q - Ctrl+A
|
||||
\o File - \&Bestand
|
||||
\li E\&xit - \&Afsluiten
|
||||
\li Ctrl+Q - Ctrl+A
|
||||
\li File - \&Bestand
|
||||
\endlist
|
||||
\endlist
|
||||
|
||||
|
@ -53,9 +53,9 @@
|
||||
The Basic Drawing example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c RenderArea is a custom widget that renders multiple
|
||||
\li \c RenderArea is a custom widget that renders multiple
|
||||
copies of the currently active shape.
|
||||
\o \c Window is the application's main window displaying a
|
||||
\li \c Window is the application's main window displaying a
|
||||
\c RenderArea widget in addition to several parameter widgets.
|
||||
\endlist
|
||||
|
||||
@ -415,19 +415,19 @@
|
||||
the associated QPainter drawing function:
|
||||
|
||||
\list
|
||||
\o QPainter::drawLine(),
|
||||
\o QPainter::drawPoints(),
|
||||
\o QPainter::drawPolyline(),
|
||||
\o QPainter::drawPolygon(),
|
||||
\o QPainter::drawRect(),
|
||||
\o QPainter::drawRoundedRect(),
|
||||
\o QPainter::drawEllipse(),
|
||||
\o QPainter::drawArc(),
|
||||
\o QPainter::drawChord(),
|
||||
\o QPainter::drawPie(),
|
||||
\o QPainter::drawPath(),
|
||||
\o QPainter::drawText() or
|
||||
\o QPainter::drawPixmap()
|
||||
\li QPainter::drawLine(),
|
||||
\li QPainter::drawPoints(),
|
||||
\li QPainter::drawPolyline(),
|
||||
\li QPainter::drawPolygon(),
|
||||
\li QPainter::drawRect(),
|
||||
\li QPainter::drawRoundedRect(),
|
||||
\li QPainter::drawEllipse(),
|
||||
\li QPainter::drawArc(),
|
||||
\li QPainter::drawChord(),
|
||||
\li QPainter::drawPie(),
|
||||
\li QPainter::drawPath(),
|
||||
\li QPainter::drawText() or
|
||||
\li QPainter::drawPixmap()
|
||||
\endlist
|
||||
|
||||
Before we started rendering, we saved the current painter state
|
||||
|
@ -57,9 +57,9 @@
|
||||
We repeat the process:
|
||||
|
||||
\list
|
||||
\o create a new \c LayoutItem,
|
||||
\o add the item \c linear, and
|
||||
\o provide a stretch factor.
|
||||
\li create a new \c LayoutItem,
|
||||
\li add the item \c linear, and
|
||||
\li provide a stretch factor.
|
||||
\endlist
|
||||
|
||||
\snippet examples/graphicsview/basicgraphicslayouts/window.cpp 1
|
||||
|
@ -38,14 +38,14 @@
|
||||
|
||||
\list
|
||||
|
||||
\o \e{The asynchronous (non-blocking) approach.} Operations are scheduled
|
||||
\li \e{The asynchronous (non-blocking) approach.} Operations are scheduled
|
||||
and performed when control returns to Qt's event loop. When the operation
|
||||
is finished, QTcpSocket emits a signal. For example,
|
||||
QTcpSocket::connectToHost() returns immediately, and when the connection
|
||||
has been established, QTcpSocket emits
|
||||
\l{QTcpSocket::connected()}{connected()}.
|
||||
|
||||
\o \e{The synchronous (blocking) approach.} In non-GUI and multithreaded
|
||||
\li \e{The synchronous (blocking) approach.} In non-GUI and multithreaded
|
||||
applications, you can call the \c waitFor...() functions (e.g.,
|
||||
QTcpSocket::waitForConnected()) to suspend the calling thread until the
|
||||
operation has completed, instead of connecting to signals.
|
||||
|
@ -37,11 +37,11 @@
|
||||
Elements in the demo can be controlled using the mouse in the following
|
||||
ways:
|
||||
\list
|
||||
\o Dragging the mouse while pressing the left mouse button rotates the
|
||||
\li Dragging the mouse while pressing the left mouse button rotates the
|
||||
box in the center.
|
||||
\o Dragging the mouse while pressing the right mouse button rotates the
|
||||
\li Dragging the mouse while pressing the right mouse button rotates the
|
||||
satellite boxes.
|
||||
\o Scrolling the mouse wheel zooms in and out of the scene.
|
||||
\li Scrolling the mouse wheel zooms in and out of the scene.
|
||||
\endlist
|
||||
|
||||
The options pane can be used to fine-tune various parameters in the demo,
|
||||
|
@ -66,9 +66,9 @@
|
||||
in additon to the model and the editor's buttons.
|
||||
|
||||
\table 100%
|
||||
\header \o Connecting to a Database
|
||||
\header \li Connecting to a Database
|
||||
\row
|
||||
\o
|
||||
\li
|
||||
|
||||
Before we can use the \c TableEditor class, we must create a
|
||||
connection to the database containing the table we want to edit:
|
||||
@ -187,8 +187,8 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o
|
||||
\bold {See also:}
|
||||
\li
|
||||
\b {See also:}
|
||||
|
||||
A complete list of Qt's SQL \l {Database Classes}, and the \l
|
||||
{Model/View Programming} documentation.
|
||||
|
@ -38,9 +38,9 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c Calculator is the calculator widget, with all the
|
||||
\li \c Calculator is the calculator widget, with all the
|
||||
calculator functionality.
|
||||
\o \c Button is the widget used for each of the calculator
|
||||
\li \c Button is the widget used for each of the calculator
|
||||
button. It derives from QToolButton.
|
||||
\endlist
|
||||
|
||||
@ -85,18 +85,18 @@
|
||||
display (a QLineEdit), encode the state of the calculator:
|
||||
|
||||
\list
|
||||
\o \c sumInMemory contains the value stored in the calculator's memory
|
||||
\li \c sumInMemory contains the value stored in the calculator's memory
|
||||
(using \gui{MS}, \gui{M+}, or \gui{MC}).
|
||||
\o \c sumSoFar stores the value accumulated so far. When the user
|
||||
\li \c sumSoFar stores the value accumulated so far. When the user
|
||||
clicks \gui{=}, \c sumSoFar is recomputed and shown on the
|
||||
display. \gui{Clear All} resets \c sumSoFar to zero.
|
||||
\o \c factorSoFar stores a temporary value when doing
|
||||
\li \c factorSoFar stores a temporary value when doing
|
||||
multiplications and divisions.
|
||||
\o \c pendingAdditiveOperator stores the last additive operator
|
||||
\li \c pendingAdditiveOperator stores the last additive operator
|
||||
clicked by the user.
|
||||
\o \c pendingMultiplicativeOperator stores the last multiplicative operator
|
||||
\li \c pendingMultiplicativeOperator stores the last multiplicative operator
|
||||
clicked by the user.
|
||||
\o \c waitingForOperand is \c true when the calculator is
|
||||
\li \c waitingForOperand is \c true when the calculator is
|
||||
expecting the user to start typing an operand.
|
||||
\endlist
|
||||
|
||||
@ -109,16 +109,16 @@
|
||||
the user enters a mathematical expression.
|
||||
|
||||
\table
|
||||
\header \o User Input \o Display \o Sum so Far \o Add. Op. \o Factor so Far \o Mult. Op. \o Waiting for Operand?
|
||||
\row \o \o 0 \o 0 \o \o \o \o \c true
|
||||
\row \o \gui{1} \o 1 \o 0 \o \o \o \o \c false
|
||||
\row \o \gui{1 +} \o 1 \o 1 \o \gui{+} \o \o \o \c true
|
||||
\row \o \gui{1 + 2} \o 2 \o 1 \o \gui{+} \o \o \o \c false
|
||||
\row \o \gui{1 + 2 \unicode{247}} \o 2 \o 1 \o \gui{+} \o 2 \o \gui{\unicode{247}} \o \c true
|
||||
\row \o \gui{1 + 2 \unicode{247} 3} \o 3 \o 1 \o \gui{+} \o 2 \o \gui{\unicode{247}} \o \c false
|
||||
\row \o \gui{1 + 2 \unicode{247} 3 -} \o 1.66667 \o 1.66667 \o \gui{-} \o \o \o \c true
|
||||
\row \o \gui{1 + 2 \unicode{247} 3 - 4} \o 4 \o 1.66667 \o \gui{-} \o \o \o \c false
|
||||
\row \o \gui{1 + 2 \unicode{247} 3 - 4 =} \o -2.33333 \o 0 \o \o \o \o \c true
|
||||
\header \li User Input \li Display \li Sum so Far \li Add. Op. \li Factor so Far \li Mult. Op. \li Waiting for Operand?
|
||||
\row \li \li 0 \li 0 \li \li \li \li \c true
|
||||
\row \li \gui{1} \li 1 \li 0 \li \li \li \li \c false
|
||||
\row \li \gui{1 +} \li 1 \li 1 \li \gui{+} \li \li \li \c true
|
||||
\row \li \gui{1 + 2} \li 2 \li 1 \li \gui{+} \li \li \li \c false
|
||||
\row \li \gui{1 + 2 \unicode{247}} \li 2 \li 1 \li \gui{+} \li 2 \li \gui{\unicode{247}} \li \c true
|
||||
\row \li \gui{1 + 2 \unicode{247} 3} \li 3 \li 1 \li \gui{+} \li 2 \li \gui{\unicode{247}} \li \c false
|
||||
\row \li \gui{1 + 2 \unicode{247} 3 -} \li 1.66667 \li 1.66667 \li \gui{-} \li \li \li \c true
|
||||
\row \li \gui{1 + 2 \unicode{247} 3 - 4} \li 4 \li 1.66667 \li \gui{-} \li \li \li \c false
|
||||
\row \li \gui{1 + 2 \unicode{247} 3 - 4 =} \li -2.33333 \li 0 \li \li \li \li \c true
|
||||
\endtable
|
||||
|
||||
Unary operators, such as \gui Sqrt, require no special handling;
|
||||
@ -356,8 +356,8 @@
|
||||
base class (QToolButton) but modify it in the following ways:
|
||||
|
||||
\list
|
||||
\o We add 20 to the \l{QSize::height()}{height} component of the size hint.
|
||||
\o We make the \l{QSize::width()}{width} component of the size
|
||||
\li We add 20 to the \l{QSize::height()}{height} component of the size hint.
|
||||
\li We make the \l{QSize::width()}{width} component of the size
|
||||
hint at least as much as the \l{QSize::width()}{height}.
|
||||
\endlist
|
||||
|
||||
|
@ -37,10 +37,10 @@
|
||||
Specifically, the example demonstrates the following:
|
||||
|
||||
\list
|
||||
\o Use of a text editor with a text document
|
||||
\o Insertion of tables and frames into a document
|
||||
\o Navigation within a table
|
||||
\o Insert text in different styles
|
||||
\li Use of a text editor with a text document
|
||||
\li Insertion of tables and frames into a document
|
||||
\li Navigation within a table
|
||||
\li Insert text in different styles
|
||||
\endlist
|
||||
|
||||
The rich text editor used to display the document is used within a main window
|
||||
|
@ -51,28 +51,28 @@
|
||||
below.
|
||||
|
||||
\table
|
||||
\header \o Property
|
||||
\o Description
|
||||
\row \o \l{QCalendarWidget::}{selectedDate}
|
||||
\o The currently selected date.
|
||||
\row \o \l{QCalendarWidget::}{minimumDate}
|
||||
\o The earliest date that can be selected.
|
||||
\row \o \l{QCalendarWidget::}{maximumDate}
|
||||
\o The latest date that can be selected.
|
||||
\row \o \l{QCalendarWidget::}{firstDayOfWeek}
|
||||
\o The day that is displayed as the first day of the week
|
||||
\header \li Property
|
||||
\li Description
|
||||
\row \li \l{QCalendarWidget::}{selectedDate}
|
||||
\li The currently selected date.
|
||||
\row \li \l{QCalendarWidget::}{minimumDate}
|
||||
\li The earliest date that can be selected.
|
||||
\row \li \l{QCalendarWidget::}{maximumDate}
|
||||
\li The latest date that can be selected.
|
||||
\row \li \l{QCalendarWidget::}{firstDayOfWeek}
|
||||
\li The day that is displayed as the first day of the week
|
||||
(usually Sunday or Monday).
|
||||
\row \o \l{QCalendarWidget::}{gridVisible}
|
||||
\o Whether the grid should be shown.
|
||||
\row \o \l{QCalendarWidget::}{selectionMode}
|
||||
\o Whether the user can select a date or not.
|
||||
\row \o \l{QCalendarWidget::}{horizontalHeaderFormat}
|
||||
\o The format of the day names in the horizontal header
|
||||
\row \li \l{QCalendarWidget::}{gridVisible}
|
||||
\li Whether the grid should be shown.
|
||||
\row \li \l{QCalendarWidget::}{selectionMode}
|
||||
\li Whether the user can select a date or not.
|
||||
\row \li \l{QCalendarWidget::}{horizontalHeaderFormat}
|
||||
\li The format of the day names in the horizontal header
|
||||
(e.g., "M", "Mon", or "Monday").
|
||||
\row \o \l{QCalendarWidget::}{verticalHeaderFormat}
|
||||
\o The format of the vertical header.
|
||||
\row \o \l{QCalendarWidget::}{navigationBarVisible}
|
||||
\o Whether the navigation bar at the top of the calendar
|
||||
\row \li \l{QCalendarWidget::}{verticalHeaderFormat}
|
||||
\li The format of the vertical header.
|
||||
\row \li \l{QCalendarWidget::}{navigationBarVisible}
|
||||
\li Whether the navigation bar at the top of the calendar
|
||||
widget is shown.
|
||||
\endtable
|
||||
|
||||
|
@ -43,9 +43,9 @@ that may be unavailable or difficult to locate on their keyboards.
|
||||
The example consists of the following classes:
|
||||
|
||||
\list
|
||||
\i \c CharacterWidget displays the available characters in the current
|
||||
\li \c CharacterWidget displays the available characters in the current
|
||||
font and style.
|
||||
\i \c MainWindow provides a standard main window that contains font and
|
||||
\li \c MainWindow provides a standard main window that contains font and
|
||||
style information, a view onto the characters, a line edit, and a push
|
||||
button for submitting text to the clipboard.
|
||||
\endlist
|
||||
|
@ -37,7 +37,7 @@
|
||||
relying on the flexibility of the model/view architecture to handle custom editing
|
||||
and selection features.
|
||||
|
||||
\bold{Note that you only need to create a new view class if your data requires a
|
||||
\b{Note that you only need to create a new view class if your data requires a
|
||||
specialized representation.} You should first consider using a standard QListView,
|
||||
QTableView, or QTreeView with a custom QItemDelegate subclass if you need to
|
||||
represent data in a special way.
|
||||
@ -61,10 +61,10 @@
|
||||
We interpret the data in the following way:
|
||||
|
||||
\list
|
||||
\o Column 0 contains data in two different roles:
|
||||
\li Column 0 contains data in two different roles:
|
||||
The \l{Qt::ItemDataRole}{DisplayRole} contains a label, and the
|
||||
\l{Qt::ItemDataRole}{DecorationRole} contains the color of the pie slice.
|
||||
\o Column 1 contains a quantity which we will convert to the angular extent of
|
||||
\li Column 1 contains a quantity which we will convert to the angular extent of
|
||||
the slice.
|
||||
\endlist
|
||||
|
||||
|
@ -44,10 +44,10 @@
|
||||
The Class Wizard example consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c ClassWizard inherits QWizard and provides a
|
||||
\li \c ClassWizard inherits QWizard and provides a
|
||||
three-step wizard that generates the skeleton of a C++ class
|
||||
based on the user's input.
|
||||
\o \c IntroPage, \c ClassInfoPage, \c CodeStylePage, \c
|
||||
\li \c IntroPage, \c ClassInfoPage, \c CodeStylePage, \c
|
||||
OutputFilesPage, and \c ConclusionPage are QWizardPage
|
||||
subclasses that implement the wizard pages.
|
||||
\endlist
|
||||
@ -61,17 +61,17 @@
|
||||
five pages:
|
||||
|
||||
\list
|
||||
\o The first page is an introduction page, telling the user what
|
||||
\li The first page is an introduction page, telling the user what
|
||||
the wizard is going to do.
|
||||
\o The second page asks for a class name and a base class, and
|
||||
\li The second page asks for a class name and a base class, and
|
||||
allows the user to specify whether the class should have a \c
|
||||
Q_OBJECT macro and what constructors it should provide.
|
||||
\o The third page allows the user to set some options related to the code
|
||||
\li The third page allows the user to set some options related to the code
|
||||
style, such as the macro used to protect the header file from
|
||||
multiple inclusion (e.g., \c MYDIALOG_H).
|
||||
\o The fourth page allows the user to specify the names of the
|
||||
\li The fourth page allows the user to specify the names of the
|
||||
output files.
|
||||
\o The fifth page is a conclusion page.
|
||||
\li The fifth page is a conclusion page.
|
||||
\endlist
|
||||
|
||||
Although the program is just an example, if you press \gui Finish
|
||||
|
@ -134,16 +134,16 @@
|
||||
Possible suggestions are:
|
||||
|
||||
\list
|
||||
\o If the editor widget has no user property defined, the delegate
|
||||
\li If the editor widget has no user property defined, the delegate
|
||||
asks the factory for the property name, which it in turn
|
||||
asks the item editor creator for. In this case, you can use
|
||||
the QItemEditorCreator class, which takes the property
|
||||
name to use for editing as a constructor argument.
|
||||
\o If the editor requires other constructors or other
|
||||
\li If the editor requires other constructors or other
|
||||
initialization than provided by QItemEditorCreatorBase, you
|
||||
must reimplement
|
||||
QItemEditorCreatorBase::createWidget().
|
||||
\o You could also subclass QItemEditorFactory if you only want
|
||||
\li You could also subclass QItemEditorFactory if you only want
|
||||
to provide editors for certain kinds of data or use another
|
||||
method of creating the editors than using creator bases.
|
||||
\endlist
|
||||
|
@ -77,8 +77,8 @@
|
||||
The screenshots below illustrate this difference:
|
||||
|
||||
\table
|
||||
\row \o \inlineimage completer-example-qdirmodel.png
|
||||
\o \inlineimage completer-example-dirmodel.png
|
||||
\row \li \inlineimage completer-example-qdirmodel.png
|
||||
\li \inlineimage completer-example-dirmodel.png
|
||||
\endtable
|
||||
|
||||
The Qt::EditRole, which QCompleter uses to look for matches, is left
|
||||
|
@ -33,10 +33,10 @@
|
||||
|
||||
\image composition-demo.png
|
||||
|
||||
The two most common forms of composition are \bold{Source} and \bold{SourceOver}.
|
||||
\bold{Source} is used to draw opaque objects onto a paint device. In this mode,
|
||||
The two most common forms of composition are \b{Source} and \b{SourceOver}.
|
||||
\b{Source} is used to draw opaque objects onto a paint device. In this mode,
|
||||
each pixel in the source replaces the corresponding pixel in the destination.
|
||||
In \bold{SourceOver} composition mode, the source object is transparent and is
|
||||
In \b{SourceOver} composition mode, the source object is transparent and is
|
||||
drawn on top of the destination.
|
||||
|
||||
In addition to these standard modes, Qt defines the complete set of composition modes
|
||||
|
@ -59,9 +59,9 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c CircleWidget is a custom widget which renders several animated
|
||||
\li \c CircleWidget is a custom widget which renders several animated
|
||||
concentric circles.
|
||||
\o \c Window is the application's main window displaying four \c
|
||||
\li \c Window is the application's main window displaying four \c
|
||||
{CircleWidget}s drawn using different combinations of precision
|
||||
and aliasing.
|
||||
\endlist
|
||||
|
@ -61,9 +61,9 @@
|
||||
The example consist of two classes:
|
||||
|
||||
\list
|
||||
\o \c MainWidget extends QGLWidget and contains OpenGL ES 2.0
|
||||
\li \c MainWidget extends QGLWidget and contains OpenGL ES 2.0
|
||||
initialization and drawing and mouse and timer event handling
|
||||
\o \c GeometryEngine handles polygon geometries. Transfers polygon geometry
|
||||
\li \c GeometryEngine handles polygon geometries. Transfers polygon geometry
|
||||
to vertex buffer objects and draws geometries from vertex buffer objects.
|
||||
\endlist
|
||||
|
||||
|
@ -48,10 +48,10 @@
|
||||
|
||||
\list
|
||||
|
||||
\o The \c MySortFilterProxyModel class provides a custom proxy
|
||||
\li The \c MySortFilterProxyModel class provides a custom proxy
|
||||
model.
|
||||
|
||||
\o The \c Window class provides the main application window,
|
||||
\li The \c Window class provides the main application window,
|
||||
using the custom proxy model to sort and filter a standard
|
||||
item model.
|
||||
|
||||
|
@ -36,13 +36,13 @@
|
||||
to writing and implementing this graphics driver:
|
||||
|
||||
\list 1
|
||||
\o \l {Step 1: Creating a Custom Graphics Driver}
|
||||
\li \l {Step 1: Creating a Custom Graphics Driver}
|
||||
{Creating a Custom Graphics Driver}
|
||||
|
||||
\o \l {Step 2: Implementing the Back Buffer}
|
||||
\li \l {Step 2: Implementing the Back Buffer}
|
||||
{Implementing the Back Buffer}
|
||||
|
||||
\o \l {Step 3: Creating the Driver Plugin}
|
||||
\li \l {Step 3: Creating the Driver Plugin}
|
||||
{Creating the Driver Plugin}
|
||||
|
||||
\endlist
|
||||
@ -71,11 +71,11 @@
|
||||
functions belonging to QScreen:
|
||||
|
||||
\list
|
||||
\o \l{QScreen::initDevice()}{initDevice()},
|
||||
\o \l{QScreen::shutdownDevice()}{shutdownDevice()},
|
||||
\o \l{QScreen::blit()}{blit()},
|
||||
\o \l{QScreen::solidFill()}{solidFill()}, and
|
||||
\o \l{QScreen::exposeRegion()}{exposeRegion()}.
|
||||
\li \l{QScreen::initDevice()}{initDevice()},
|
||||
\li \l{QScreen::shutdownDevice()}{shutdownDevice()},
|
||||
\li \l{QScreen::blit()}{blit()},
|
||||
\li \l{QScreen::solidFill()}{solidFill()}, and
|
||||
\li \l{QScreen::exposeRegion()}{exposeRegion()}.
|
||||
\endlist
|
||||
|
||||
\snippet examples/qws/dbscreen/dbscreen.h 0
|
||||
@ -89,10 +89,10 @@
|
||||
The graphics driver must carry out three main functions:
|
||||
|
||||
\list 1
|
||||
\o Allocate the back buffer on startup and deallocate it on shutdown.
|
||||
\o Draw to the back buffer instead of directly to the screen
|
||||
\li Allocate the back buffer on startup and deallocate it on shutdown.
|
||||
\li Draw to the back buffer instead of directly to the screen
|
||||
(which is what QLinuxFbScreen does).
|
||||
\o Copy the back buffer to the screen whenever a screen update is
|
||||
\li Copy the back buffer to the screen whenever a screen update is
|
||||
done.
|
||||
\endlist
|
||||
|
||||
@ -165,9 +165,9 @@
|
||||
There are only two functions to reimplement:
|
||||
|
||||
\list
|
||||
\o \l{QScreenDriverPlugin::create()}{create()} - creates a driver
|
||||
\li \l{QScreenDriverPlugin::create()}{create()} - creates a driver
|
||||
matching the given key
|
||||
\o \l{QScreenDriverPlugin::create()}{keys()} - returns a list of
|
||||
\li \l{QScreenDriverPlugin::create()}{keys()} - returns a list of
|
||||
valid keys representing the drivers supported by the plugin
|
||||
\endlist
|
||||
|
||||
|
@ -55,28 +55,28 @@
|
||||
In particular we show how to:
|
||||
|
||||
\list
|
||||
\o Create custom graphics items.
|
||||
\o Handle mouse events and movement of items.
|
||||
\o Implement a graphics scene that can manage our custom items.
|
||||
\o Custom painting of items.
|
||||
\o Create a movable and editable text item.
|
||||
\li Create custom graphics items.
|
||||
\li Handle mouse events and movement of items.
|
||||
\li Implement a graphics scene that can manage our custom items.
|
||||
\li Custom painting of items.
|
||||
\li Create a movable and editable text item.
|
||||
\endlist
|
||||
|
||||
The example consists of the following classes:
|
||||
\list
|
||||
\o \c MainWindow creates the widgets and display
|
||||
\li \c MainWindow creates the widgets and display
|
||||
them in a QMainWindow. It also manages the interaction
|
||||
between the widgets and the graphics scene, view and
|
||||
items.
|
||||
\o \c DiagramItem inherits QGraphicsPolygonItem and
|
||||
\li \c DiagramItem inherits QGraphicsPolygonItem and
|
||||
represents a flowchart shape.
|
||||
\o \c TextDiagramItem inherits QGraphicsTextItem and
|
||||
\li \c TextDiagramItem inherits QGraphicsTextItem and
|
||||
represents text items in the diagram. The class adds
|
||||
support for moving the item with the mouse, which is not
|
||||
supported by QGraphicsTextItem.
|
||||
\o \c Arrow inherits QGraphicsLineItem and is an arrow
|
||||
\li \c Arrow inherits QGraphicsLineItem and is an arrow
|
||||
that connect two DiagramItems.
|
||||
\o \c DiagramScene inherits QGraphicsDiagramScene and
|
||||
\li \c DiagramScene inherits QGraphicsDiagramScene and
|
||||
provides support for \c DiagramItem, \c Arrow and
|
||||
\c DiagramTextItem (In addition to the support already
|
||||
handled by QGraphicsScene).
|
||||
|
@ -45,13 +45,13 @@
|
||||
The example consists of three classes:
|
||||
|
||||
\list
|
||||
\o \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.
|
||||
|
||||
\o \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.
|
||||
|
||||
\o \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
|
||||
database.
|
||||
\endlist
|
||||
|
@ -53,10 +53,10 @@
|
||||
reimplementations of four \l{QWidget} event handlers:
|
||||
|
||||
\list 1
|
||||
\o \l{QWidget::dragEnterEvent()}{dragEnterEvent()}
|
||||
\o \l{QWidget::dragMoveEvent()}{dragMoveEvent()}
|
||||
\o \l{QWidget::dragLeaveEvent()}{dragLeaveEvent()}
|
||||
\o \l{QWidget::dropEvent()}{dropEvent()}
|
||||
\li \l{QWidget::dragEnterEvent()}{dragEnterEvent()}
|
||||
\li \l{QWidget::dragMoveEvent()}{dragMoveEvent()}
|
||||
\li \l{QWidget::dragLeaveEvent()}{dragLeaveEvent()}
|
||||
\li \l{QWidget::dropEvent()}{dropEvent()}
|
||||
\endlist
|
||||
|
||||
These event handlers are further explained in the implementation of the
|
||||
@ -108,17 +108,17 @@
|
||||
\snippet draganddrop/dropsite/droparea.cpp dropEvent() function part2
|
||||
|
||||
\list
|
||||
\o If \c mimeData contains an image, we display it in \c DropArea with
|
||||
\li If \c mimeData contains an image, we display it in \c DropArea with
|
||||
\l{QLabel::setPixmap()}{setPixmap()}.
|
||||
\o If \c mimeData contains HTML, we display it with
|
||||
\li If \c mimeData contains HTML, we display it with
|
||||
\l{QLabel::setText()}{setText()} and set \c{DropArea}'s text format
|
||||
as Qt::RichText.
|
||||
\o If \c mimeData contains plain text, we display it with
|
||||
\li If \c mimeData contains plain text, we display it with
|
||||
\l{QLabel::setText()}{setText()} and set \c{DropArea}'s text format
|
||||
as Qt::PlainText. In the event that \c mimeData contains URLs, we
|
||||
iterate through the list of URLs to display them on individual
|
||||
lines.
|
||||
\o If \c mimeData contains other types of objects, we set
|
||||
\li If \c mimeData contains other types of objects, we set
|
||||
\c{DropArea}'s text, with \l{QLabel::setText()}{setText()} to
|
||||
"Cannot display data" to inform the user.
|
||||
\endlist
|
||||
|
@ -82,8 +82,8 @@
|
||||
|
||||
\target Relations-between-internal-items
|
||||
\table
|
||||
\row \o \inlineimage itemviews-editabletreemodel-items.png
|
||||
\o \bold{Relations between internal items}
|
||||
\row \li \inlineimage itemviews-editabletreemodel-items.png
|
||||
\li \b{Relations between internal items}
|
||||
|
||||
When designing a data structure for use with a custom model, it is useful
|
||||
to expose each item's parent via a function like
|
||||
@ -99,10 +99,10 @@
|
||||
\l{TreeItem::parent}{parent()} and \l{TreeItem::child}{child()}
|
||||
functions.
|
||||
|
||||
In the example shown, two top-level items, \bold{A} and
|
||||
\bold{B}, can be obtained from the root item by calling its child()
|
||||
In the example shown, two top-level items, \b{A} and
|
||||
\b{B}, can be obtained from the root item by calling its child()
|
||||
function, and each of these items return the root node from their
|
||||
parent() functions, though this is only shown for item \bold{A}.
|
||||
parent() functions, though this is only shown for item \b{A}.
|
||||
\endtable
|
||||
|
||||
Each \c TreeItem stores data for each column in the row it represents
|
||||
@ -126,23 +126,23 @@
|
||||
horizontal header titles.
|
||||
|
||||
\table
|
||||
\row \o \inlineimage itemviews-editabletreemodel-model.png
|
||||
\o \bold{Accessing data via the model}
|
||||
\row \li \inlineimage itemviews-editabletreemodel-model.png
|
||||
\li \b{Accessing data via the model}
|
||||
|
||||
In the case shown in the diagram, the piece of information represented
|
||||
by \bold{a} can be obtained using the standard model/view API:
|
||||
by \b{a} can be obtained using the standard model/view API:
|
||||
|
||||
\snippet doc/src/snippets/code/doc_src_examples_editabletreemodel.cpp 0
|
||||
|
||||
Since each items holds pieces of data for each column in a given row,
|
||||
there can be many model indexes that map to the same \c TreeItem object.
|
||||
For example, the information represented by \bold{b} can be obtained
|
||||
For example, the information represented by \b{b} can be obtained
|
||||
using the following code:
|
||||
|
||||
\snippet doc/src/snippets/code/doc_src_examples_editabletreemodel.cpp 1
|
||||
|
||||
The same underlying \c TreeItem would be accessed to obtain information
|
||||
for the other model indexes in the same row as \bold{b}.
|
||||
for the other model indexes in the same row as \b{b}.
|
||||
\endtable
|
||||
|
||||
In the model class, \c TreeModel, we relate \c TreeItem objects to
|
||||
@ -166,20 +166,20 @@
|
||||
that the model does not attempt to access items that have been deleted.
|
||||
|
||||
\table
|
||||
\row \o \bold{Storing information in the underlying data structure}
|
||||
\row \li \b{Storing information in the underlying data structure}
|
||||
|
||||
Several pieces of data are stored as QVariant objects in the \c itemData
|
||||
member of each \c TreeItem instance
|
||||
|
||||
The diagram shows how pieces of information,
|
||||
represented by the labels \bold{a}, \bold{b} and \bold{c} in the
|
||||
previous two diagrams, are stored in items \bold{A}, \bold{B} and
|
||||
\bold{C} in the underlying data structure. Note that pieces of
|
||||
represented by the labels \b{a}, \b{b} and \b{c} in the
|
||||
previous two diagrams, are stored in items \b{A}, \b{B} and
|
||||
\b{C} in the underlying data structure. Note that pieces of
|
||||
information from the same row in the model are all obtained from the
|
||||
same item. Each element in a list corresponds to a piece of information
|
||||
exposed by each column in a given row in the model.
|
||||
|
||||
\o \inlineimage itemviews-editabletreemodel-values.png
|
||||
\li \inlineimage itemviews-editabletreemodel-values.png
|
||||
\endtable
|
||||
|
||||
Since the \c TreeModel implementation has been designed for use with
|
||||
@ -202,8 +202,8 @@
|
||||
\target Relating-items-using-model-indexes
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage itemviews-editabletreemodel-indexes.png
|
||||
\o \bold{Relating items using model indexes}
|
||||
\li \inlineimage itemviews-editabletreemodel-indexes.png
|
||||
\li \b{Relating items using model indexes}
|
||||
|
||||
As with the \l{itemviews/simpletreemodel}{Simple Tree Model} example,
|
||||
the \c TreeModel needs to be able to take a model index, find the
|
||||
@ -215,13 +215,13 @@
|
||||
an item supplied by the caller, using the items shown in a
|
||||
\l{Relations-between-internal-items}{previous diagram}.
|
||||
|
||||
A pointer to item \bold{C} is obtained from the corresponding model index
|
||||
A pointer to item \b{C} is obtained from the corresponding model index
|
||||
using the \l{QModelIndex::internalPointer()} function. The pointer was
|
||||
stored internally in the index when it was created. Since the child
|
||||
contains a pointer to its parent, we use its \l{TreeItem::parent}{parent()}
|
||||
function to obtain a pointer to item \bold{B}. The parent model index is
|
||||
function to obtain a pointer to item \b{B}. The parent model index is
|
||||
created using the QAbstractItemModel::createIndex() function, passing
|
||||
the pointer to item \bold{B} as the internal pointer.
|
||||
the pointer to item \b{B} as the internal pointer.
|
||||
\endtable
|
||||
|
||||
\section1 TreeItem Class Definition
|
||||
|
@ -54,9 +54,9 @@
|
||||
The \c Node class serves three purposes:
|
||||
|
||||
\list
|
||||
\o Painting a yellow gradient "ball" in two states: sunken and raised.
|
||||
\o Managing connections to other nodes.
|
||||
\o Calculating forces pulling and pushing the nodes in the grid.
|
||||
\li Painting a yellow gradient "ball" in two states: sunken and raised.
|
||||
\li Managing connections to other nodes.
|
||||
\li Calculating forces pulling and pushing the nodes in the grid.
|
||||
\endlist
|
||||
|
||||
Let's start by looking at the \c Node class declaration.
|
||||
|
@ -47,14 +47,14 @@
|
||||
|
||||
\list
|
||||
|
||||
\o \e{The asynchronous (non-blocking) approach.} Operations are scheduled
|
||||
\li \e{The asynchronous (non-blocking) approach.} Operations are scheduled
|
||||
and performed when control returns to Qt's event loop. When the operation
|
||||
is finished, QTcpSocket emits a signal. For example,
|
||||
QTcpSocket::connectToHost() returns immediately, and when the connection
|
||||
has been established, QTcpSocket emits
|
||||
\l{QTcpSocket::connected()}{connected()}.
|
||||
|
||||
\o \e{The synchronous (blocking) approach.} In non-GUI and multithreaded
|
||||
\li \e{The synchronous (blocking) approach.} In non-GUI and multithreaded
|
||||
applications, you can call the \c waitFor...() functions (e.g.,
|
||||
QTcpSocket::waitForConnected()) to suspend the calling thread until the
|
||||
operation has completed, instead of connecting to signals.
|
||||
@ -107,11 +107,11 @@
|
||||
one of two things can happen:
|
||||
|
||||
\list
|
||||
\o \e{The connection is established.} In this case, the server will send us a
|
||||
\li \e{The connection is established.} In this case, the server will send us a
|
||||
fortune. QTcpSocket will emit \l{QTcpSocket::readyRead()}{readyRead()}
|
||||
every time it receives a block of data.
|
||||
|
||||
\o \e{An error occurs.} We need to inform the user if the connection
|
||||
\li \e{An error occurs.} We need to inform the user if the connection
|
||||
failed or was broken. In this case, QTcpSocket will emit
|
||||
\l{QTcpSocket::error()}{error()}, and \c Client::displayError() will be
|
||||
called.
|
||||
|
@ -39,9 +39,9 @@
|
||||
the words on the magnets. The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c DragLabel is a custom widget representing one
|
||||
\li \c DragLabel is a custom widget representing one
|
||||
single fridge magnet.
|
||||
\o \c DragWidget provides the main application window.
|
||||
\li \c DragWidget provides the main application window.
|
||||
\endlist
|
||||
|
||||
We will first take a look at the \c DragLabel class, then we will
|
||||
|
@ -37,10 +37,10 @@
|
||||
There are three types of gradients:
|
||||
|
||||
\list
|
||||
\o \bold{Linear} gradients interpolate colors between start and end points.
|
||||
\o \bold{Radial} gradients interpolate colors between a focal point and the
|
||||
\li \b{Linear} gradients interpolate colors between start and end points.
|
||||
\li \b{Radial} gradients interpolate colors between a focal point and the
|
||||
points on a circle surrounding it.
|
||||
\o \bold{Conical} gradients interpolate colors around a center point.
|
||||
\li \b{Conical} gradients interpolate colors around a center point.
|
||||
\endlist
|
||||
|
||||
The panel on the right contains a color table editor that defines
|
||||
|
@ -285,12 +285,12 @@
|
||||
by reimplementing the following functions:
|
||||
|
||||
\list
|
||||
\o QGLWidget::initializeGL() sets up resources needed by the OpenGL implementation
|
||||
\li QGLWidget::initializeGL() sets up resources needed by the OpenGL implementation
|
||||
to render the scene.
|
||||
\o QGLWidget::resizeGL() resizes the viewport so that the rendered scene fits onto
|
||||
\li QGLWidget::resizeGL() resizes the viewport so that the rendered scene fits onto
|
||||
the widget, and sets up a projection matrix to map 3D coordinates to 2D viewport
|
||||
coordinates.
|
||||
\o QGLWidget::paintGL() performs painting operations using OpenGL calls.
|
||||
\li QGLWidget::paintGL() performs painting operations using OpenGL calls.
|
||||
\endlist
|
||||
|
||||
Since QGLWidget is a subclass of QWidget, it can also be used
|
||||
|
@ -47,24 +47,24 @@
|
||||
of the icon. Qt currently defines four modes:
|
||||
|
||||
\table
|
||||
\header \o Mode \o Description
|
||||
\header \li Mode \li Description
|
||||
\row
|
||||
\o QIcon::Normal
|
||||
\o Display the pixmap when the user is not interacting with the
|
||||
\li QIcon::Normal
|
||||
\li Display the pixmap when the user is not interacting with the
|
||||
icon, but the functionality represented by the icon is
|
||||
available.
|
||||
\row
|
||||
\o QIcon::Active
|
||||
\o Display the pixmap when the functionality represented by the
|
||||
\li QIcon::Active
|
||||
\li Display the pixmap when the functionality represented by the
|
||||
icon is available and the user is interacting with the icon,
|
||||
for example, moving the mouse over it or clicking it.
|
||||
\row
|
||||
\o QIcon::Disabled
|
||||
\o Display the pixmap when the functionality represented by
|
||||
\li QIcon::Disabled
|
||||
\li Display the pixmap when the functionality represented by
|
||||
the icon is not available.
|
||||
\row
|
||||
\o QIcon::Selected
|
||||
\o Display the pixmap when the icon is selected.
|
||||
\li QIcon::Selected
|
||||
\li Display the pixmap when the icon is selected.
|
||||
\endtable
|
||||
|
||||
QIcon's states are QIcon::On and QIcon::Off, which will display
|
||||
@ -148,16 +148,16 @@
|
||||
search algorithm described in the table below:
|
||||
|
||||
\table 100%
|
||||
\header \o{2,1} Requested Pixmap \o {8,1} Preferred Alternatives (mode/state)
|
||||
\header \o Mode \o State \o 1 \o 2 \o 3 \o 4 \o 5 \o 6 \o 7 \o 8
|
||||
\row \o{1,2} Normal \o Off \o \bold N0 \o A0 \o N1 \o A1 \o D0 \o S0 \o D1 \o S1
|
||||
\row \o On \o N1 \o \bold A1 \o N0 \o A0 \o D1 \o S1 \o D0 \o S0
|
||||
\row \o{1,2} Active \o Off \o A0 \o \bold N0 \o A1 \o N1 \o D0 \o S0 \o D1 \o S1
|
||||
\row \o On \o \bold A1 \o N1 \o A0 \o N0 \o D1 \o S1 \o D0 \o S0
|
||||
\row \o{1,2} Disabled \o Off \o D0 \o \bold {N0'} \o A0' \o D1 \o N1' \o A1' \o S0' \o S1'
|
||||
\row \o On \o D1 \o N1' \o \bold {A1'} \o D0 \o N0' \o A0' \o S1' \o S0'
|
||||
\row \o{1,2} Selected \o Off \o S0 \o \bold {N0''} \o A0'' \o S1 \o N1'' \o A1'' \o D0'' \o D1''
|
||||
\row \o On \o S1 \o N1'' \o \bold {A1''} \o S0 \o N0'' \o A0'' \o D1'' \o D0''
|
||||
\header \li{2,1} Requested Pixmap \li {8,1} Preferred Alternatives (mode/state)
|
||||
\header \li Mode \li State \li 1 \li 2 \li 3 \li 4 \li 5 \li 6 \li 7 \li 8
|
||||
\row \li{1,2} Normal \li Off \li \b N0 \li A0 \li N1 \li A1 \li D0 \li S0 \li D1 \li S1
|
||||
\row \li On \li N1 \li \b A1 \li N0 \li A0 \li D1 \li S1 \li D0 \li S0
|
||||
\row \li{1,2} Active \li Off \li A0 \li \b N0 \li A1 \li N1 \li D0 \li S0 \li D1 \li S1
|
||||
\row \li On \li \b A1 \li N1 \li A0 \li N0 \li D1 \li S1 \li D0 \li S0
|
||||
\row \li{1,2} Disabled \li Off \li D0 \li \b {N0'} \li A0' \li D1 \li N1' \li A1' \li S0' \li S1'
|
||||
\row \li On \li D1 \li N1' \li \b {A1'} \li D0 \li N0' \li A0' \li S1' \li S0'
|
||||
\row \li{1,2} Selected \li Off \li S0 \li \b {N0''} \li A0'' \li S1 \li N1'' \li A1'' \li D0'' \li D1''
|
||||
\row \li On \li S1 \li N1'' \li \b {A1''} \li S0 \li N0'' \li A0'' \li D1'' \li D0''
|
||||
\endtable
|
||||
|
||||
In the table, "0" and "1" stand for Off" and "On", respectively.
|
||||
@ -176,8 +176,8 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage icons_monkey.png Screenshot of the Monkey Files
|
||||
\o \inlineimage icons_monkey_mess.png Screenshot of the Monkey Files
|
||||
\li \inlineimage icons_monkey.png Screenshot of the Monkey Files
|
||||
\li \inlineimage icons_monkey_mess.png Screenshot of the Monkey Files
|
||||
\endtable
|
||||
|
||||
For any given mode/state combination, it is possible to specify
|
||||
@ -193,25 +193,25 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o
|
||||
\o \inlineimage icons_qt_extended_8x8.png Qt Extended icon at 8 x 8
|
||||
\o \inlineimage icons_qt_extended_16x16.png Qt Extended icon at 16 x 16
|
||||
\o \inlineimage icons_qt_extended_17x17.png Qt Extended icon at 17 x 17
|
||||
\li
|
||||
\li \inlineimage icons_qt_extended_8x8.png Qt Extended icon at 8 x 8
|
||||
\li \inlineimage icons_qt_extended_16x16.png Qt Extended icon at 16 x 16
|
||||
\li \inlineimage icons_qt_extended_17x17.png Qt Extended icon at 17 x 17
|
||||
\row
|
||||
\o
|
||||
\o 8 x 8
|
||||
\o \bold {16 x 16}
|
||||
\o 17 x 17
|
||||
\li
|
||||
\li 8 x 8
|
||||
\li \b {16 x 16}
|
||||
\li 17 x 17
|
||||
\row
|
||||
\o \inlineimage icons_qt_extended_32x32.png Qt Extended icon at 32 x 32
|
||||
\o \inlineimage icons_qt_extended_33x33.png Qt Extended icon at 33 x 33
|
||||
\o \inlineimage icons_qt_extended_48x48.png Qt Extended icon at 48 x 48
|
||||
\o \inlineimage icons_qt_extended_64x64.png Qt Extended icon at 64 x 64
|
||||
\li \inlineimage icons_qt_extended_32x32.png Qt Extended icon at 32 x 32
|
||||
\li \inlineimage icons_qt_extended_33x33.png Qt Extended icon at 33 x 33
|
||||
\li \inlineimage icons_qt_extended_48x48.png Qt Extended icon at 48 x 48
|
||||
\li \inlineimage icons_qt_extended_64x64.png Qt Extended icon at 64 x 64
|
||||
\row
|
||||
\o \bold {32 x 32}
|
||||
\o 33 x 33
|
||||
\o \bold {48 x 48}
|
||||
\o 64 x 64
|
||||
\li \b {32 x 32}
|
||||
\li 33 x 33
|
||||
\li \b {48 x 48}
|
||||
\li 64 x 64
|
||||
\endtable
|
||||
|
||||
For sizes up to 16 x 16, QIcon uses \c qt_extended_16x16.png and
|
||||
@ -224,13 +224,13 @@
|
||||
The Icons example consists of four classes:
|
||||
|
||||
\list
|
||||
\o \c MainWindow inherits QMainWindow and is the main application
|
||||
\li \c MainWindow inherits QMainWindow and is the main application
|
||||
window.
|
||||
\o \c IconPreviewArea is a custom widget that displays all
|
||||
\li \c IconPreviewArea is a custom widget that displays all
|
||||
combinations of states and modes for a given icon.
|
||||
\o \c IconSizeSpinBox is a subclass of QSpinBox that lets the
|
||||
\li \c IconSizeSpinBox is a subclass of QSpinBox that lets the
|
||||
user enter icon sizes (e.g., "48 x 48").
|
||||
\o \c ImageDelegate is a subclass of QItemDelegate that provides
|
||||
\li \c ImageDelegate is a subclass of QItemDelegate that provides
|
||||
comboboxes for letting the user set the mode and state
|
||||
associated with an image.
|
||||
\endlist
|
||||
@ -332,13 +332,13 @@
|
||||
constructor, and declare several private slots:
|
||||
|
||||
\list
|
||||
\o The \c about() slot simply provides information about the example.
|
||||
\o The \c changeStyle() slot changes the application's GUI style and
|
||||
\li The \c about() slot simply provides information about the example.
|
||||
\li The \c changeStyle() slot changes the application's GUI style and
|
||||
adjust the style dependent size options.
|
||||
\o The \c changeSize() slot changes the size of the preview area's icon.
|
||||
\o The \c changeIcon() slot updates the set of pixmaps available to the
|
||||
\li The \c changeSize() slot changes the size of the preview area's icon.
|
||||
\li The \c changeIcon() slot updates the set of pixmaps available to the
|
||||
icon displayed in the preview area.
|
||||
\o The \c addImage() slot allows the user to load a new image into the
|
||||
\li The \c addImage() slot allows the user to load a new image into the
|
||||
application.
|
||||
\endlist
|
||||
|
||||
|
@ -86,11 +86,11 @@
|
||||
|
||||
We connect the following signals to their corresponding slots:
|
||||
\list
|
||||
\o \c{sourceButton}'s \l{QPushButton::clicked()}{clicked()} signal is
|
||||
\li \c{sourceButton}'s \l{QPushButton::clicked()}{clicked()} signal is
|
||||
connected to \c chooseSource(),
|
||||
\o \c{operatorComboBox}'s \l{QComboBox::activated()}{activated()}
|
||||
\li \c{operatorComboBox}'s \l{QComboBox::activated()}{activated()}
|
||||
signal is connected to \c recalculateResult(), and
|
||||
\o \c{destinationButton}'s \l{QToolButton::clicked()}{clicked()} signal
|
||||
\li \c{destinationButton}'s \l{QToolButton::clicked()}{clicked()} signal
|
||||
is connected to \c chooseDestination().
|
||||
\endlist
|
||||
|
||||
|
@ -49,18 +49,18 @@
|
||||
to:
|
||||
|
||||
\list
|
||||
\o \gui{Open...} - Open an image file
|
||||
\o \gui{Print...} - Print an image
|
||||
\o \gui{Exit} - Exit the application
|
||||
\li \gui{Open...} - Open an image file
|
||||
\li \gui{Print...} - Print an image
|
||||
\li \gui{Exit} - Exit the application
|
||||
\endlist
|
||||
|
||||
Once an image is loaded, the \gui View menu allows the users to:
|
||||
|
||||
\list
|
||||
\o \gui{Zoom In} - Scale the image up by 25%
|
||||
\o \gui{Zoom Out} - Scale the image down by 25%
|
||||
\o \gui{Normal Size} - Show the image at its original size
|
||||
\o \gui{Fit to Window} - Stretch the image to occupy the entire window
|
||||
\li \gui{Zoom In} - Scale the image up by 25%
|
||||
\li \gui{Zoom Out} - Scale the image down by 25%
|
||||
\li \gui{Normal Size} - Show the image at its original size
|
||||
\li \gui{Fit to Window} - Stretch the image to occupy the entire window
|
||||
\endlist
|
||||
|
||||
In addition the \gui Help menu provides the users with information
|
||||
@ -202,9 +202,9 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage imageviewer-original_size.png
|
||||
\o \inlineimage imageviewer-zoom_in_1.png
|
||||
\o \inlineimage imageviewer-zoom_in_2.png
|
||||
\li \inlineimage imageviewer-original_size.png
|
||||
\li \inlineimage imageviewer-zoom_in_1.png
|
||||
\li \inlineimage imageviewer-zoom_in_2.png
|
||||
\endtable
|
||||
|
||||
\snippet examples/widgets/imageviewer/imageviewer.cpp 11
|
||||
@ -246,9 +246,9 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage imageviewer-original_size.png
|
||||
\o \inlineimage imageviewer-fit_to_window_1.png
|
||||
\o \inlineimage imageviewer-fit_to_window_2.png
|
||||
\li \inlineimage imageviewer-original_size.png
|
||||
\li \inlineimage imageviewer-fit_to_window_1.png
|
||||
\li \inlineimage imageviewer-fit_to_window_2.png
|
||||
\endtable
|
||||
|
||||
If the slot is called to turn off the option, the
|
||||
|
@ -50,10 +50,10 @@
|
||||
The example consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c LicenseWizard inherits QWizard and implements a non-linear
|
||||
\li \c LicenseWizard inherits QWizard and implements a non-linear
|
||||
five-page wizard that leads the user through the process of
|
||||
choosing a license agreement.
|
||||
\o \c IntroPage, \c EvaluatePage, \c RegisterPage, \c
|
||||
\li \c IntroPage, \c EvaluatePage, \c RegisterPage, \c
|
||||
DetailsPage, and \c ConclusionPage are QWizardPage subclasses
|
||||
that implement the wizard pages.
|
||||
\endlist
|
||||
@ -71,12 +71,12 @@
|
||||
The enum defines the IDs associated with the various pages:
|
||||
|
||||
\table
|
||||
\header \o Class name \o Enum value \o Page ID
|
||||
\row \o \c IntroPage \o \c Page_Intro \o 0
|
||||
\row \o \c EvaluatePage \o \c Page_Evaluate \o 1
|
||||
\row \o \c RegisterPage \o \c Page_Register \o 2
|
||||
\row \o \c DetailsPage \o \c Page_Details \o 3
|
||||
\row \o \c ConclusionPage \o \c Page_Conclusion \o 4
|
||||
\header \li Class name \li Enum value \li Page ID
|
||||
\row \li \c IntroPage \li \c Page_Intro \li 0
|
||||
\row \li \c EvaluatePage \li \c Page_Evaluate \li 1
|
||||
\row \li \c RegisterPage \li \c Page_Register \li 2
|
||||
\row \li \c DetailsPage \li \c Page_Details \li 3
|
||||
\row \li \c ConclusionPage \li \c Page_Conclusion \li 4
|
||||
\endtable
|
||||
|
||||
For this example, the IDs are arbitrary. The only constraints are
|
||||
@ -206,11 +206,11 @@
|
||||
QWidget::setVisible():
|
||||
|
||||
\list
|
||||
\o If the page is shown, we set the \l{QWizard::}{CustomButton1} button's
|
||||
\li If the page is shown, we set the \l{QWizard::}{CustomButton1} button's
|
||||
text to \gui{\underline{P}rint}, we enable the \l{QWizard::}{HaveCustomButton1}
|
||||
option, and we connect the QWizard's \l{QWizard::}{customButtonClicked()}
|
||||
signal to our \c printButtonClicked() slot.
|
||||
\o If the page is hidden, we disable the \l{QWizard::}{HaveCustomButton1}
|
||||
\li If the page is hidden, we disable the \l{QWizard::}{HaveCustomButton1}
|
||||
option and disconnect the \c printButtonClicked() slot.
|
||||
\endlist
|
||||
|
||||
|
@ -47,11 +47,11 @@
|
||||
The code makes use of two classes:
|
||||
|
||||
\list
|
||||
\o \c MceVibrator connects to the MCE service and can start a certain
|
||||
\li \c MceVibrator connects to the MCE service and can start a certain
|
||||
vibrator pattern. It also is responsible to parse the configuration
|
||||
file.
|
||||
|
||||
\o \c ButtonWidget provides a button for each pattern. Pressing the button
|
||||
\li \c ButtonWidget provides a button for each pattern. Pressing the button
|
||||
activates the pattern in question.
|
||||
\endlist
|
||||
|
||||
@ -68,10 +68,10 @@
|
||||
are available to us.
|
||||
|
||||
\list
|
||||
\o \c mceInterface is our D-Bus handle to the MCE service. We use it to
|
||||
\li \c mceInterface is our D-Bus handle to the MCE service. We use it to
|
||||
invoke methods on the MCE request object.
|
||||
|
||||
\o \c lastPatternName contains the pattern that was activated last time. We
|
||||
\li \c lastPatternName contains the pattern that was activated last time. We
|
||||
have to keep track of this, because the last pattern has to be
|
||||
deactivated before activating a new pattern.
|
||||
\endlist
|
||||
|
@ -66,9 +66,9 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage mandelbrot_zoom1.png
|
||||
\o \inlineimage mandelbrot_zoom2.png
|
||||
\o \inlineimage mandelbrot_zoom3.png
|
||||
\li \inlineimage mandelbrot_zoom1.png
|
||||
\li \inlineimage mandelbrot_zoom2.png
|
||||
\li \inlineimage mandelbrot_zoom3.png
|
||||
\endtable
|
||||
|
||||
Similarly, when the user scrolls, the previous pixmap is scrolled
|
||||
@ -77,17 +77,17 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage mandelbrot_scroll1.png
|
||||
\o \inlineimage mandelbrot_scroll2.png
|
||||
\o \inlineimage mandelbrot_scroll3.png
|
||||
\li \inlineimage mandelbrot_scroll1.png
|
||||
\li \inlineimage mandelbrot_scroll2.png
|
||||
\li \inlineimage mandelbrot_scroll3.png
|
||||
\endtable
|
||||
|
||||
The application consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c RenderThread is a QThread subclass that renders
|
||||
\li \c RenderThread is a QThread subclass that renders
|
||||
the Mandelbrot set.
|
||||
\o \c MandelbrotWidget is a QWidget subclass that shows the
|
||||
\li \c MandelbrotWidget is a QWidget subclass that shows the
|
||||
Mandelbrot set on screen and lets the user zoom and scroll.
|
||||
\endlist
|
||||
|
||||
|
@ -39,8 +39,8 @@
|
||||
The example consists of two classes in addition to the main program:
|
||||
|
||||
\list
|
||||
\o \c Calibration is a dialog widget that retrieves the device coordinates.
|
||||
\o \c ScribbleWidget is a minimal drawing program used to let the user
|
||||
\li \c Calibration is a dialog widget that retrieves the device coordinates.
|
||||
\li \c ScribbleWidget is a minimal drawing program used to let the user
|
||||
test the new mouse settings.
|
||||
\endlist
|
||||
|
||||
|
@ -40,14 +40,14 @@
|
||||
The example consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c StateSwitcher inherits QState and can add
|
||||
\li \c StateSwitcher inherits QState and can add
|
||||
\c {StateSwitchTransition}s to other states.
|
||||
When entered, it will randomly transition to one of these
|
||||
states.
|
||||
\o \c StateSwitchTransition is a custom transition that
|
||||
\li \c StateSwitchTransition is a custom transition that
|
||||
triggers on \c{StateSwitchEvent}s.
|
||||
\o \c StateSwitchEvent is a QEvent that triggers \c{StateSwitchTransition}s.
|
||||
\o \c QGraphicsRectWidget is a QGraphicsWidget that simply
|
||||
\li \c StateSwitchEvent is a QEvent that triggers \c{StateSwitchTransition}s.
|
||||
\li \c QGraphicsRectWidget is a QGraphicsWidget that simply
|
||||
paints its background in a solid \l{Qt::}{blue} color.
|
||||
\endlist
|
||||
|
||||
|
@ -161,21 +161,21 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o {1, 8} frame with \e{referenceFrameFormat}
|
||||
\li {1, 8} frame with \e{referenceFrameFormat}
|
||||
\row
|
||||
\o block \o \c{A company}
|
||||
\li block \li \c{A company}
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block \o \c{321 City Street}
|
||||
\li block \li \c{321 City Street}
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block \o \c{Industry Park}
|
||||
\li block \li \c{Industry Park}
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block \o \c{Another country}
|
||||
\li block \li \c{Another country}
|
||||
\endtable
|
||||
|
||||
This is accomplished with the following code:
|
||||
@ -196,11 +196,11 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o block \o \c{Donald}
|
||||
\li block \li \c{Donald}
|
||||
\row
|
||||
\o block \o \c{47338 Park Avenue}
|
||||
\li block \li \c{47338 Park Avenue}
|
||||
\row
|
||||
\o block \o \c{Big City}
|
||||
\li block \li \c{Big City}
|
||||
\endtable
|
||||
|
||||
For spacing purposes, we invoke \l{QTextCursor::insertBlock()}
|
||||
@ -221,21 +221,21 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block \o \c{Date: 25 May 2007}
|
||||
\li block \li \c{Date: 25 May 2007}
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o {1, 4} frame with \e{bodyFrameFormat}
|
||||
\li {1, 4} frame with \e{bodyFrameFormat}
|
||||
\row
|
||||
\o block \o \c{I would like to place an order for the following items:}
|
||||
\li block \li \c{I would like to place an order for the following items:}
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\endtable
|
||||
|
||||
A QTextTableFormat object, \c orderTableFormat, is used to hold the type
|
||||
@ -257,27 +257,27 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o {1, 11} \c{orderTable} with \e{orderTableFormat}
|
||||
\li {1, 11} \c{orderTable} with \e{orderTableFormat}
|
||||
\row
|
||||
\o block \o \c{Product}
|
||||
\li block \li \c{Product}
|
||||
\row
|
||||
\o block \o \c{Quantity}
|
||||
\li block \li \c{Quantity}
|
||||
\row
|
||||
\o block \o \c{T-shirt}
|
||||
\li block \li \c{T-shirt}
|
||||
\row
|
||||
\o block \o \c{4}
|
||||
\li block \li \c{4}
|
||||
\row
|
||||
\o block \o \c{Badge}
|
||||
\li block \li \c{Badge}
|
||||
\row
|
||||
\o block \o \c{3}
|
||||
\li block \li \c{3}
|
||||
\row
|
||||
\o block \o \c{Reference book}
|
||||
\li block \li \c{Reference book}
|
||||
\row
|
||||
\o block \o \c{2}
|
||||
\li block \li \c{2}
|
||||
\row
|
||||
\o block \o \c{Coffee cup}
|
||||
\li block \li \c{Coffee cup}
|
||||
\row
|
||||
\o block \o \c{5}
|
||||
\li block \li \c{5}
|
||||
\endtable
|
||||
|
||||
The \c cursor is then moved back to \c{topFrame}'s
|
||||
@ -296,19 +296,19 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block\o \c{Please update my...}
|
||||
\li block\li \c{Please update my...}
|
||||
\row
|
||||
\o {1, 5} block
|
||||
\li {1, 5} block
|
||||
\row
|
||||
\o {1, 4} \c{offersTable}
|
||||
\li {1, 4} \c{offersTable}
|
||||
\row
|
||||
\o block \o \c{I want to receive...}
|
||||
\li block \li \c{I want to receive...}
|
||||
\row
|
||||
\o block \o \c{I do not want to receive...}
|
||||
\li block \li \c{I do not want to receive...}
|
||||
\row
|
||||
\o block \o \c{X}
|
||||
\li block \li \c{X}
|
||||
\endtable
|
||||
|
||||
The \c cursor is moved to insert "Sincerely" along with the customer's
|
||||
@ -321,17 +321,17 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o {1, 5} block\o \c{Sincerely,}
|
||||
\li {1, 5} block\li \c{Sincerely,}
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block
|
||||
\li block
|
||||
\row
|
||||
\o block \o \c{Donald}
|
||||
\li block \li \c{Donald}
|
||||
\endtable
|
||||
|
||||
The \c createSample() function is used for illustration purposes, to create
|
||||
|
@ -214,30 +214,30 @@
|
||||
calls, using the following approach:
|
||||
|
||||
\list
|
||||
\o Reimplement QGLWidget::initializeGL(), but only perform minimal
|
||||
\li Reimplement QGLWidget::initializeGL(), but only perform minimal
|
||||
initialization. QPainter will perform its own initialization
|
||||
routines, modifying the matrix and property stacks, so it is better
|
||||
to defer certain initialization tasks until just before you render
|
||||
the 3D scene.
|
||||
\o Reimplement QGLWidget::resizeGL() as in the pure 3D case.
|
||||
\o Reimplement QWidget::paintEvent() to draw both 2D and 3D graphics.
|
||||
\li Reimplement QGLWidget::resizeGL() as in the pure 3D case.
|
||||
\li Reimplement QWidget::paintEvent() to draw both 2D and 3D graphics.
|
||||
\endlist
|
||||
|
||||
The \l{QWidget::paintEvent()}{paintEvent()} implementation performs the
|
||||
following tasks:
|
||||
|
||||
\list
|
||||
\o Push the current OpenGL modelview matrix onto a stack.
|
||||
\o Perform initialization tasks usually done in the
|
||||
\li Push the current OpenGL modelview matrix onto a stack.
|
||||
\li Perform initialization tasks usually done in the
|
||||
\l{QGLWidget::initializeGL()}{initializeGL()} function.
|
||||
\o Perform code that would normally be located in the widget's
|
||||
\li Perform code that would normally be located in the widget's
|
||||
\l{QGLWidget::resizeGL()}{resizeGL()} function to set the correct
|
||||
perspective transformation and set up the viewport.
|
||||
\o Render the scene using OpenGL calls.
|
||||
\o Pop the OpenGL modelview matrix off the stack.
|
||||
\o Construct a QPainter object.
|
||||
\o Initialize it for use on the widget with the QPainter::begin() function.
|
||||
\o Draw primitives using QPainter's member functions.
|
||||
\o Call QPainter::end() to finish painting.
|
||||
\li Render the scene using OpenGL calls.
|
||||
\li Pop the OpenGL modelview matrix off the stack.
|
||||
\li Construct a QPainter object.
|
||||
\li Initialize it for use on the widget with the QPainter::begin() function.
|
||||
\li Draw primitives using QPainter's member functions.
|
||||
\li Call QPainter::end() to finish painting.
|
||||
\endlist
|
||||
*/
|
||||
|
@ -81,11 +81,11 @@
|
||||
The private data members are:
|
||||
|
||||
\list
|
||||
\o \c pix: The optional pixmap that is drawn on top of the rectangle.
|
||||
\o \c fillRect: Corresponds to the \c fill property.
|
||||
\o \c color: The configurable gradient color fill of the rectangle.
|
||||
\o \c bounds: The bounds of the rectangle.
|
||||
\o \c gradient: A precalculated gradient used to fill the rectangle.
|
||||
\li \c pix: The optional pixmap that is drawn on top of the rectangle.
|
||||
\li \c fillRect: Corresponds to the \c fill property.
|
||||
\li \c color: The configurable gradient color fill of the rectangle.
|
||||
\li \c bounds: The bounds of the rectangle.
|
||||
\li \c gradient: A precalculated gradient used to fill the rectangle.
|
||||
\endlist
|
||||
|
||||
We will now review the \c RoundRectItem implementation. Let's start by
|
||||
@ -320,13 +320,13 @@
|
||||
QGraphicsRotation object for each of these.
|
||||
|
||||
\list
|
||||
\o \c flipRotation: Rotates the grid around its Qt::YAxis. This rotation is
|
||||
\li \c flipRotation: Rotates the grid around its Qt::YAxis. This rotation is
|
||||
animated from 0 to 180, and eventually back, when enter is pressed on the
|
||||
keyboard, flipping the pad around.
|
||||
\o \c xRotation: Rotates the grid around its Qt::XAxis. This is used to
|
||||
\li \c xRotation: Rotates the grid around its Qt::XAxis. This is used to
|
||||
tilt the pad vertically corresponding to which item is currently selected.
|
||||
This way, the selected item is always kept in front.
|
||||
\o \c yRotation: Rotates the grid around its Qt::YAxis. This is used to
|
||||
\li \c yRotation: Rotates the grid around its Qt::YAxis. This is used to
|
||||
tilt the pad horizontally corresponding to which item is selected. This
|
||||
way, the selected item is always kept in front.
|
||||
\endlist
|
||||
@ -391,11 +391,11 @@
|
||||
values when flipped back:
|
||||
|
||||
\list
|
||||
\o \c smoothFlipRotation: Animates the main 180 degree rotation of the pad.
|
||||
\o \c smoothFlipScale: Scales the pad out and then in again while the pad is rotating.
|
||||
\o \c smoothFlipXRotation: Animates the selection item's X-tilt to 0 and back.
|
||||
\o \c smoothFlipYRotation: Animates the selection item's Y-tilt to 0 and back.
|
||||
\o \c flipAnimation: A parallel animation group that ensures all the above animations are run in parallel.
|
||||
\li \c smoothFlipRotation: Animates the main 180 degree rotation of the pad.
|
||||
\li \c smoothFlipScale: Scales the pad out and then in again while the pad is rotating.
|
||||
\li \c smoothFlipXRotation: Animates the selection item's X-tilt to 0 and back.
|
||||
\li \c smoothFlipYRotation: Animates the selection item's Y-tilt to 0 and back.
|
||||
\li \c flipAnimation: A parallel animation group that ensures all the above animations are run in parallel.
|
||||
\endlist
|
||||
|
||||
All animations are given a 500 millisecond duration and an
|
||||
@ -433,10 +433,10 @@
|
||||
states:
|
||||
|
||||
\list
|
||||
\o \c splashState: The initial state where the splash item is visible.
|
||||
\o \c frontState: The base state where the splash is gone and we can see
|
||||
\li \c splashState: The initial state where the splash item is visible.
|
||||
\li \c frontState: The base state where the splash is gone and we can see
|
||||
the front side of the pad, and navigate the selection item.
|
||||
\o \c backState: The flipped state where the \c backItem is visible, and we
|
||||
\li \c backState: The flipped state where the \c backItem is visible, and we
|
||||
can interact with the QGraphicsProxyWidget-embedded form.
|
||||
\endlist
|
||||
|
||||
@ -531,18 +531,18 @@
|
||||
The view toggles a few necessary properties:
|
||||
|
||||
\list
|
||||
\o It disables its scroll bars - this application has no use for scroll bars.
|
||||
\o It assigns a minimum size. This is necessary to avoid numerical errors
|
||||
\li It disables its scroll bars - this application has no use for scroll bars.
|
||||
\li It assigns a minimum size. This is necessary to avoid numerical errors
|
||||
in our fit-in-view \c resizeEvent() implementation.
|
||||
\o It sets \l{QGraphicsView::FullViewportUpdate}{FullViewportUpdate}, to
|
||||
\li It sets \l{QGraphicsView::FullViewportUpdate}{FullViewportUpdate}, to
|
||||
ensure QGraphicsView doesn't spend time figuring out precisely what needs
|
||||
to be redrawn. This application is very simple - if anything changes,
|
||||
everything is updated.
|
||||
\o It enables background caching - this makes no performance difference
|
||||
\li It enables background caching - this makes no performance difference
|
||||
with OpenGL, but without OpenGL it avoids unnecessary re-scaling of the
|
||||
background pixmap.
|
||||
\o It sets render hints that increase rendering quality.
|
||||
\o If OpenGL is supported, a QGLWidget viewport is assigned to the view.
|
||||
\li It sets render hints that increase rendering quality.
|
||||
\li If OpenGL is supported, a QGLWidget viewport is assigned to the view.
|
||||
\endlist
|
||||
|
||||
Finally, we start the state engine.
|
||||
|
@ -48,9 +48,9 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o The \c RenderArea class which is a custom widget displaying
|
||||
\li The \c RenderArea class which is a custom widget displaying
|
||||
a single painter path.
|
||||
\o The \c Window class which is the applications main window
|
||||
\li The \c Window class which is the applications main window
|
||||
displaying several \c RenderArea widgets, and allowing the user
|
||||
to manipulate the painter paths' filling, pen, color
|
||||
and rotation angle.
|
||||
|
@ -44,9 +44,9 @@
|
||||
of standard views. To do this, we implement the following components:
|
||||
|
||||
\list
|
||||
\i A model which represents each pixel in an image as an item of data, where each
|
||||
\li A model which represents each pixel in an image as an item of data, where each
|
||||
item contains a value for the brightness of the corresponding pixel.
|
||||
\i A custom delegate that uses the information supplied by the model to represent
|
||||
\li A custom delegate that uses the information supplied by the model to represent
|
||||
each pixel as a black circle on a white background, where the radius of the
|
||||
circle corresponds to the darkness of the pixel.
|
||||
\endlist
|
||||
|
@ -55,13 +55,13 @@
|
||||
Plug & Paint consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c MainWindow is a QMainWindow subclass that provides the menu
|
||||
\li \c MainWindow is a QMainWindow subclass that provides the menu
|
||||
system and that contains a \c PaintArea as the central widget.
|
||||
\o \c PaintArea is a QWidget that allows the user to draw using a
|
||||
\li \c PaintArea is a QWidget that allows the user to draw using a
|
||||
brush and to insert shapes.
|
||||
\o \c PluginDialog is a dialog that shows information about the
|
||||
\li \c PluginDialog is a dialog that shows information about the
|
||||
plugins detected by the application.
|
||||
\o \c BrushInterface, \c ShapeInterface, and \c FilterInterface are
|
||||
\li \c BrushInterface, \c ShapeInterface, and \c FilterInterface are
|
||||
abstract base classes that can be implemented by plugins to
|
||||
provide custom brushes, shapes, and image filters.
|
||||
\endlist
|
||||
@ -321,10 +321,10 @@
|
||||
plugin:
|
||||
|
||||
\list 1
|
||||
\o Declare a plugin class.
|
||||
\o Implement the interfaces provided by the plugin.
|
||||
\o Export the plugin using the Q_EXPORT_PLUGIN2() macro.
|
||||
\o Build the plugin using an adequate \c .pro file.
|
||||
\li Declare a plugin class.
|
||||
\li Implement the interfaces provided by the plugin.
|
||||
\li Export the plugin using the Q_EXPORT_PLUGIN2() macro.
|
||||
\li Build the plugin using an adequate \c .pro file.
|
||||
\endlist
|
||||
|
||||
\section1 Declaration of the Plugin Class
|
||||
@ -377,15 +377,15 @@
|
||||
Then comes the brush-dependent part of the code:
|
||||
|
||||
\list
|
||||
\o If the brush is \gui{Pencil}, we just call
|
||||
\li If the brush is \gui{Pencil}, we just call
|
||||
QPainter::drawLine() with the current QPen.
|
||||
|
||||
\o If the brush is \gui{Air Brush}, we start by setting the
|
||||
\li If the brush is \gui{Air Brush}, we start by setting the
|
||||
painter's QBrush to Qt::Dense6Pattern to obtain a dotted
|
||||
pattern. Then we draw a circle filled with that QBrush several
|
||||
times, resulting in a thick line.
|
||||
|
||||
\o If the brush is \gui{Random Letters}, we draw a random letter
|
||||
\li If the brush is \gui{Random Letters}, we draw a random letter
|
||||
at the new cursor position. Most of the code is for setting
|
||||
the font to be bold and larger than the default font and for
|
||||
computing an appropriate bounding rect.
|
||||
|
@ -64,10 +64,10 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c Window draws the text display of the game and sets
|
||||
\li \c Window draws the text display of the game and sets
|
||||
up the state machine. The window also has a status bar
|
||||
above the area in which the rouge moves.
|
||||
\o \c MovementTransition is a transition that carries out
|
||||
\li \c MovementTransition is a transition that carries out
|
||||
a single move of the rogue.
|
||||
\endlist
|
||||
|
||||
|
@ -41,9 +41,9 @@
|
||||
desktop. They are provided with a couple of options:
|
||||
|
||||
\list
|
||||
\o Delaying the screenshot, giving them time to rearrange
|
||||
\li Delaying the screenshot, giving them time to rearrange
|
||||
their desktop.
|
||||
\o Hiding the application's window while the screenshot is taken.
|
||||
\li Hiding the application's window while the screenshot is taken.
|
||||
\endlist
|
||||
|
||||
In addition the application allows the users to save their
|
||||
@ -63,10 +63,10 @@
|
||||
to facilitate the options:
|
||||
|
||||
\list
|
||||
\o The \c newScreenshot() slot prepares a new screenshot.
|
||||
\o The \c saveScreenshot() slot saves the last screenshot.
|
||||
\o The \c shootScreen() slot takes the screenshot.
|
||||
\o The \c updateCheckBox() slot enables or disables the
|
||||
\li The \c newScreenshot() slot prepares a new screenshot.
|
||||
\li The \c saveScreenshot() slot saves the last screenshot.
|
||||
\li The \c shootScreen() slot takes the screenshot.
|
||||
\li The \c updateCheckBox() slot enables or disables the
|
||||
\gui {Hide This Window} option.
|
||||
\endlist
|
||||
|
||||
|
@ -55,9 +55,9 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c ScribbleArea is a custom widget that displays a QImage and
|
||||
\li \c ScribbleArea is a custom widget that displays a QImage and
|
||||
allows to the user to draw on it.
|
||||
\o \c MainWindow provides a menu above the \c ScribbleArea.
|
||||
\li \c MainWindow provides a menu above the \c ScribbleArea.
|
||||
\endlist
|
||||
|
||||
We will start by reviewing the \c ScribbleArea class. Then we will
|
||||
@ -85,14 +85,14 @@
|
||||
We also need the following private variables:
|
||||
|
||||
\list
|
||||
\o \c modified is \c true if there are unsaved
|
||||
\li \c modified is \c true if there are unsaved
|
||||
changes to the image displayed in the scribble area.
|
||||
\o \c scribbling is \c true while the user is pressing
|
||||
\li \c scribbling is \c true while the user is pressing
|
||||
the left mouse button within the scribble area.
|
||||
\o \c penWidth and \c penColor hold the currently
|
||||
\li \c penWidth and \c penColor hold the currently
|
||||
set width and color for the pen used in the application.
|
||||
\o \c image stores the image drawn by the user.
|
||||
\o \c lastPoint holds the position of the cursor at the last
|
||||
\li \c image stores the image drawn by the user.
|
||||
\li \c lastPoint holds the position of the cursor at the last
|
||||
mouse press or mouse move event.
|
||||
\endlist
|
||||
|
||||
@ -176,18 +176,18 @@
|
||||
good reasons for this:
|
||||
|
||||
\list
|
||||
\o The window system requires us to be able to redraw the widget
|
||||
\li The window system requires us to be able to redraw the widget
|
||||
\e{at any time}. For example, if the window is minimized and
|
||||
restored, the window system might have forgotten the contents
|
||||
of the widget and send us a paint event. In other words, we
|
||||
can't rely on the window system to remember our image.
|
||||
|
||||
\o Qt normally doesn't allow us to paint outside of \c
|
||||
\li Qt normally doesn't allow us to paint outside of \c
|
||||
paintEvent(). In particular, we can't paint from the mouse
|
||||
event handlers. (This behavior can be changed using the
|
||||
Qt::WA_PaintOnScreen widget attribute, though.)
|
||||
|
||||
\o If initialized properly, a QImage is guaranteed to use 8-bit
|
||||
\li If initialized properly, a QImage is guaranteed to use 8-bit
|
||||
for each color channel (red, green, blue, and alpha), whereas
|
||||
a QWidget might have a lower color depth, depending on the
|
||||
monitor configuration. This means that if we load a 24-bit or
|
||||
|
@ -59,8 +59,8 @@
|
||||
|
||||
\target SimpleTreeModelStructure
|
||||
\table
|
||||
\row \i \inlineimage treemodel-structure.png
|
||||
\i \bold{Simple Tree Model Structure}
|
||||
\row \li \inlineimage treemodel-structure.png
|
||||
\li \b{Simple Tree Model Structure}
|
||||
|
||||
The data is stored internally in the model using \c TreeItem objects that
|
||||
are linked together in a pointer-based tree structure. Generally, each
|
||||
@ -101,14 +101,14 @@
|
||||
structure. The functions provide the following features:
|
||||
|
||||
\list
|
||||
\o The \c appendChildItem() is used to add data when the model is first
|
||||
\li The \c appendChildItem() is used to add data when the model is first
|
||||
constructed and is not used during normal use.
|
||||
\o The \c child() and \c childCount() functions allow the model to obtain
|
||||
\li The \c child() and \c childCount() functions allow the model to obtain
|
||||
information about any child items.
|
||||
\o Information about the number of columns associated with the item is
|
||||
\li Information about the number of columns associated with the item is
|
||||
provided by \c columnCount(), and the data in each column can be
|
||||
obtained with the data() function.
|
||||
\o The \c row() and \c parent() functions are used to obtain the item's
|
||||
\li The \c row() and \c parent() functions are used to obtain the item's
|
||||
row number and parent item.
|
||||
\endlist
|
||||
|
||||
@ -320,10 +320,10 @@
|
||||
We process the text file with the following two rules:
|
||||
|
||||
\list
|
||||
\o For each pair of strings on each line, create an item (or node)
|
||||
\li For each pair of strings on each line, create an item (or node)
|
||||
in a tree structure, and place each string in a column of data
|
||||
in the item.
|
||||
\o When the first string on a line is indented with respect to the
|
||||
\li When the first string on a line is indented with respect to the
|
||||
first string on the previous line, make the item a child of the
|
||||
previous item created.
|
||||
\endlist
|
||||
|
@ -34,8 +34,8 @@
|
||||
the Windows Mobile SIP (Software Input Panel) and reacts to it.
|
||||
|
||||
\table
|
||||
\row \o \inlineimage sipdialog-closed.png
|
||||
\o \inlineimage sipdialog-opened.png
|
||||
\row \li \inlineimage sipdialog-closed.png
|
||||
\li \inlineimage sipdialog-opened.png
|
||||
\endtable
|
||||
|
||||
Sometimes it is necessary for a dialog to take the SIP into account,
|
||||
@ -90,10 +90,10 @@
|
||||
|
||||
The following signals are connected to their respective slots:
|
||||
\list
|
||||
\o \c{button}'s \l{QPushButton::pressed()}{pressed()} signal to
|
||||
\li \c{button}'s \l{QPushButton::pressed()}{pressed()} signal to
|
||||
\l{QApplication}'s \l{QApplication::closeAllWindows()}
|
||||
{closeAllWindows()} slot,
|
||||
\o \l{QDesktopWidget}'s \l{QDesktopWidget::workAreaResized()}
|
||||
\li \l{QDesktopWidget}'s \l{QDesktopWidget::workAreaResized()}
|
||||
{workAreaResized()} signal to \c{dialog}'s \c desktopResized() slot.
|
||||
\endlist
|
||||
|
||||
|
@ -46,10 +46,10 @@
|
||||
|
||||
\list
|
||||
|
||||
\o \c SlidersGroup is a custom widget. It combines a QSlider, a
|
||||
\li \c SlidersGroup is a custom widget. It combines a QSlider, a
|
||||
QScrollBar and a QDial.
|
||||
|
||||
\o \c Window is the main widget combining a QGroupBox and a
|
||||
\li \c Window is the main widget combining a QGroupBox and a
|
||||
QStackedWidget. In this example, the QStackedWidget provides a
|
||||
stack of two \c SlidersGroup widgets. The QGroupBox contain
|
||||
several widgets that control the behavior of the slider-like
|
||||
@ -122,10 +122,10 @@
|
||||
slider-like widgets:
|
||||
|
||||
\table
|
||||
\header \o \o{2,1} QSlider \o{2,1} QScrollBar \o{2,1} QDial
|
||||
\header \o \o Normal \o Inverted \o Normal \o Inverted \o Normal \o Inverted
|
||||
\row \o Qt::Horizontal \o Left to right \o Right to left \o Left to right \o Right to left \o Clockwise \o Counterclockwise
|
||||
\row \o Qt::Vertical \o Bottom to top \o Top to bottom \o Top to bottom \o Bottom to top \o Clockwise \o Counterclockwise
|
||||
\header \li \li{2,1} QSlider \li{2,1} QScrollBar \li{2,1} QDial
|
||||
\header \li \li Normal \li Inverted \li Normal \li Inverted \li Normal \li Inverted
|
||||
\row \li Qt::Horizontal \li Left to right \li Right to left \li Left to right \li Right to left \li Clockwise \li Counterclockwise
|
||||
\row \li Qt::Vertical \li Bottom to top \li Top to bottom \li Top to bottom \li Bottom to top \li Clockwise \li Counterclockwise
|
||||
\endtable
|
||||
|
||||
It is common to invert the appearance of a vertical QSlider. A
|
||||
|
@ -58,15 +58,15 @@
|
||||
The example consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c StarRating is the custom data type. It stores a rating
|
||||
\li \c StarRating is the custom data type. It stores a rating
|
||||
expressed as stars, such as "2 out of 5 stars" or "5 out of
|
||||
6 stars".
|
||||
|
||||
\o \c StarDelegate inherits QItemDelegate and provides support
|
||||
\li \c StarDelegate inherits QItemDelegate and provides support
|
||||
for \c StarRating (in addition to the data types already
|
||||
handled by QItemDelegate).
|
||||
|
||||
\o \c StarEditor inherits QWidget and is used by \c StarDelegate
|
||||
\li \c StarEditor inherits QWidget and is used by \c StarDelegate
|
||||
to let the user edit a star rating using the mouse.
|
||||
\endlist
|
||||
|
||||
@ -281,7 +281,7 @@
|
||||
editor are:
|
||||
|
||||
\list
|
||||
\o It is possible to open editors programmatically by calling
|
||||
\li It is possible to open editors programmatically by calling
|
||||
QAbstractItemView::edit(), instead of relying on edit
|
||||
triggers. This could be use to support other edit triggers
|
||||
than those offered by the QAbstractItemView::EditTrigger enum.
|
||||
@ -289,7 +289,7 @@
|
||||
item with the mouse might make sense as a way to pop up an
|
||||
editor.
|
||||
|
||||
\o By reimplementing QAbstractItemDelegate::editorEvent(), it is
|
||||
\li By reimplementing QAbstractItemDelegate::editorEvent(), it is
|
||||
possible to implement the editor directly in the delegate,
|
||||
instead of creating a separate QWidget subclass.
|
||||
\endlist
|
||||
|
@ -56,9 +56,9 @@
|
||||
The example consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c NorwegianWoodStyle inherits from QMotifStyle and implements
|
||||
\li \c NorwegianWoodStyle inherits from QMotifStyle and implements
|
||||
the Norwegian Wood style.
|
||||
\o \c WidgetGallery is a \c QDialog subclass that shows the most
|
||||
\li \c WidgetGallery is a \c QDialog subclass that shows the most
|
||||
common widgets and allows the user to switch style
|
||||
dynamically.
|
||||
\endlist
|
||||
@ -91,16 +91,16 @@
|
||||
resources}.
|
||||
|
||||
\table
|
||||
\row \o \inlineimage widgets/styles/images/woodbackground.png
|
||||
\row \li \inlineimage widgets/styles/images/woodbackground.png
|
||||
|
||||
\o \bold{woodbackground.png}
|
||||
\li \b{woodbackground.png}
|
||||
|
||||
This texture is used as the background of most widgets.
|
||||
The wood pattern is horizontal.
|
||||
|
||||
\row \o \inlineimage widgets/styles/images/woodbutton.png
|
||||
\row \li \inlineimage widgets/styles/images/woodbutton.png
|
||||
|
||||
\o \bold{woodbutton.png}
|
||||
\li \b{woodbutton.png}
|
||||
|
||||
This texture is used for filling push buttons and
|
||||
comboboxes. The wood pattern is vertical and more reddish
|
||||
@ -261,17 +261,17 @@
|
||||
them based on the state of the button:
|
||||
|
||||
\list
|
||||
\o If the button is a \l{QPushButton::flat}{flat button}, we use
|
||||
\li If the button is a \l{QPushButton::flat}{flat button}, we use
|
||||
the \l{QPalette::Background}{Background} brush. We set \c
|
||||
darker to \c true if the button is
|
||||
\l{QAbstractButton::down}{down} or
|
||||
\l{QAbstractButton::checked}{checked}.
|
||||
\o If the button is currently held down by the user or in the
|
||||
\li If the button is currently held down by the user or in the
|
||||
\l{QAbstractButton::checked}{checked} state, we use the
|
||||
\l{QPalette::Mid}{Mid} component of the palette. We set
|
||||
\c darker to \c true if the button is
|
||||
\l{QAbstractButton::checked}{checked}.
|
||||
\o Otherwise, we use the \l{QPalette::Button}{Button} component
|
||||
\li Otherwise, we use the \l{QPalette::Button}{Button} component
|
||||
of the palette.
|
||||
\endlist
|
||||
|
||||
|
@ -49,13 +49,13 @@
|
||||
approach:
|
||||
|
||||
\list 1
|
||||
\o \l {Step 1: Creating a Custom Graphics Driver}
|
||||
\li \l {Step 1: Creating a Custom Graphics Driver}
|
||||
{Creating a Custom Graphics Driver}
|
||||
|
||||
\o \l {Step 2: Implementing a Custom Raster Paint Engine}
|
||||
\li \l {Step 2: Implementing a Custom Raster Paint Engine}
|
||||
{Implementing a Custom Paint Engine}
|
||||
|
||||
\o \l {Step 3: Making the Widgets Aware of the Custom Paint
|
||||
\li \l {Step 3: Making the Widgets Aware of the Custom Paint
|
||||
Engine}{Making the Widgets Aware of the Custom Paint Engine}
|
||||
|
||||
\endlist
|
||||
@ -69,8 +69,8 @@
|
||||
\snippet doc/src/snippets/code/doc_src_examples_svgalib.qdoc 0
|
||||
|
||||
\table
|
||||
\header \o SVGAlib
|
||||
\row \o
|
||||
\header \li SVGAlib
|
||||
\row \li
|
||||
|
||||
Instead of interfacing the graphics hardware directly, this
|
||||
example relies on \l {http://www.svgalib.org}{SVGAlib} being
|
||||
@ -212,9 +212,9 @@
|
||||
respectively.
|
||||
|
||||
\table
|
||||
\header \o Private Header Files
|
||||
\header \li Private Header Files
|
||||
\row
|
||||
\o
|
||||
\li
|
||||
|
||||
Note the \c include statement used by this class. The files
|
||||
prefixed with \c private/ are private headers file within
|
||||
@ -285,9 +285,9 @@
|
||||
adjustments of the graphics driver.
|
||||
|
||||
\list
|
||||
\o \l {Implementing a Custom Paint Device}
|
||||
\o \l {Implementing a Custom Window Surface}
|
||||
\o \l {Adjusting the Graphics Driver}
|
||||
\li \l {Implementing a Custom Paint Device}
|
||||
\li \l {Implementing a Custom Window Surface}
|
||||
\li \l {Adjusting the Graphics Driver}
|
||||
\endlist
|
||||
|
||||
\section2 Implementing a Custom Paint Device
|
||||
|
@ -40,9 +40,9 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o The \c Highlighter class defines and applies the
|
||||
\li The \c Highlighter class defines and applies the
|
||||
highlighting rules.
|
||||
\o The \c MainWindow widget is the application's main window.
|
||||
\li The \c MainWindow widget is the application's main window.
|
||||
\endlist
|
||||
|
||||
We will first review the \c Highlighter class to see how you can
|
||||
|
@ -61,15 +61,15 @@
|
||||
The example consists of the following:
|
||||
|
||||
\list
|
||||
\o The \c MainWindow class inherits QMainWindow and creates
|
||||
\li The \c MainWindow class inherits QMainWindow and creates
|
||||
the examples menus and connect their slots and signals.
|
||||
\o The \c TabletCanvas class inherits QWidget and
|
||||
\li The \c TabletCanvas class inherits QWidget and
|
||||
receives tablet events. It uses the events to paint on a
|
||||
offscreen pixmap, which it draws onto itself.
|
||||
\o The \c TabletApplication class inherits QApplication. This
|
||||
\li The \c TabletApplication class inherits QApplication. This
|
||||
class handles tablet events that are not sent to \c tabletEvent().
|
||||
We will look at this later.
|
||||
\o The \c main() function creates a \c MainWindow and shows it
|
||||
\li The \c main() function creates a \c MainWindow and shows it
|
||||
as a top level window.
|
||||
\endlist
|
||||
|
||||
|
@ -53,11 +53,11 @@
|
||||
This example shows how a simple game can be created using only three classes:
|
||||
|
||||
\list
|
||||
\o The \c TetrixWindow class is used to display the player's score, number of
|
||||
\li The \c TetrixWindow class is used to display the player's score, number of
|
||||
lives, and information about the next piece to appear.
|
||||
\o The \c TetrixBoard class contains the game logic, handles keyboard input, and
|
||||
\li The \c TetrixBoard class contains the game logic, handles keyboard input, and
|
||||
displays the pieces on the playing area.
|
||||
\o The \c TetrixPiece class contains information about each piece.
|
||||
\li The \c TetrixPiece class contains information about each piece.
|
||||
\endlist
|
||||
|
||||
In this approach, the \c TetrixBoard class is the most complex class, since it
|
||||
|
@ -37,16 +37,16 @@
|
||||
resource and is loaded into the display at startup.
|
||||
|
||||
\table
|
||||
\row \o \inlineimage textfinder-example-find.png
|
||||
\o \inlineimage textfinder-example-find2.png
|
||||
\row \li \inlineimage textfinder-example-find.png
|
||||
\li \inlineimage textfinder-example-find2.png
|
||||
\endtable
|
||||
|
||||
\section1 Setting Up The Resource File
|
||||
|
||||
The resources required for Text Finder are:
|
||||
\list
|
||||
\o \e{textfinder.ui} - the user interface file created in QtDesigner
|
||||
\o \e{input.txt} - a text file containing some text to be displayed
|
||||
\li \e{textfinder.ui} - the user interface file created in QtDesigner
|
||||
\li \e{input.txt} - a text file containing some text to be displayed
|
||||
in the QTextEdit
|
||||
\endlist
|
||||
|
||||
|
@ -53,8 +53,8 @@
|
||||
The Tooltips example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c ShapeItem is a custom widget representing one single shape item.
|
||||
\o \c SortingBox inherits from QWidget and is the application's main
|
||||
\li \c ShapeItem is a custom widget representing one single shape item.
|
||||
\li \c SortingBox inherits from QWidget and is the application's main
|
||||
widget.
|
||||
\endlist
|
||||
|
||||
|
@ -42,9 +42,9 @@
|
||||
The example consists of two classes and a global enum:
|
||||
|
||||
\list
|
||||
\o The \c RenderArea class controls the rendering of a given shape.
|
||||
\o The \c Window class is the application's main window.
|
||||
\o The \c Operation enum describes the various transformation
|
||||
\li The \c RenderArea class controls the rendering of a given shape.
|
||||
\li The \c Window class is the application's main window.
|
||||
\li The \c Operation enum describes the various transformation
|
||||
operations available in the application.
|
||||
\endlist
|
||||
|
||||
|
@ -200,11 +200,11 @@
|
||||
editor and follow these steps:
|
||||
|
||||
\list
|
||||
\o Uncomment the two lines that create a QLabel with the text
|
||||
\li Uncomment the two lines that create a QLabel with the text
|
||||
"\<b\>TROLL PRINT\</b\>" in \c printpanel.cpp.
|
||||
\o Word-tidying: Replace "2-sided" by "Two-sided" in \c printpanel.cpp.
|
||||
\o Replace "1.0" with "1.1" everywhere it occurs in \c mainwindow.cpp.
|
||||
\o Update the copyright year to 1999-2000 in \c mainwindow.cpp.
|
||||
\li Word-tidying: Replace "2-sided" by "Two-sided" in \c printpanel.cpp.
|
||||
\li Replace "1.0" with "1.1" everywhere it occurs in \c mainwindow.cpp.
|
||||
\li Update the copyright year to 1999-2000 in \c mainwindow.cpp.
|
||||
\endlist
|
||||
|
||||
(Of course the version number and copyright year would be consts or
|
||||
@ -214,25 +214,25 @@
|
||||
Linguist}. The following items are of special interest:
|
||||
|
||||
\list
|
||||
\o \c MainWindow
|
||||
\li \c MainWindow
|
||||
\list
|
||||
\o Troll Print 1.0 - marked "(obs.)", obsolete
|
||||
\o About Troll Print 1.0 - marked "(obs.)", obsolete
|
||||
\o Troll Print 1.0. Copyright 1999 Software, Inc. -
|
||||
\li Troll Print 1.0 - marked "(obs.)", obsolete
|
||||
\li About Troll Print 1.0 - marked "(obs.)", obsolete
|
||||
\li Troll Print 1.0. Copyright 1999 Software, Inc. -
|
||||
marked obsolete
|
||||
\o Troll Print 1.1 - automatically translated as
|
||||
\li Troll Print 1.1 - automatically translated as
|
||||
"Troll Imprimir 1.1"
|
||||
\o About Troll Print 1.1 - automatically translated as
|
||||
\li About Troll Print 1.1 - automatically translated as
|
||||
"Troll Imprimir 1.1"
|
||||
\o Troll Print 1.1. Copyright 1999-2000 Software,
|
||||
\li Troll Print 1.1. Copyright 1999-2000 Software,
|
||||
Inc. - automatically translated as "Troll Imprimir 1.1.
|
||||
Copyright 1999-2000 Software, Inc."
|
||||
\endlist
|
||||
\o \c PrintPanel
|
||||
\li \c PrintPanel
|
||||
\list
|
||||
\o 2-sided - marked "(obs.)", obsolete
|
||||
\o \<b\>TROLL PRINT\</b\> - unmarked, i.e. untranslated
|
||||
\o Two-sided - unmarked, i.e. untranslated.
|
||||
\li 2-sided - marked "(obs.)", obsolete
|
||||
\li \<b\>TROLL PRINT\</b\> - unmarked, i.e. untranslated
|
||||
\li Two-sided - unmarked, i.e. untranslated.
|
||||
\endlist
|
||||
\endlist
|
||||
|
||||
|
@ -61,18 +61,18 @@
|
||||
The example consists of the following classes:
|
||||
|
||||
\list
|
||||
\o \c MainWindow is the main window and arranges the
|
||||
\li \c MainWindow is the main window and arranges the
|
||||
example's widgets. It creates the commands based
|
||||
on user input and keeps them on the command stack.
|
||||
\o \c AddCommand adds an item to the scene.
|
||||
\o \c DeleteCommand deletes an item from the scene.
|
||||
\o \c MoveCommand when an item is moved the MoveCommand keeps record
|
||||
\li \c AddCommand adds an item to the scene.
|
||||
\li \c DeleteCommand deletes an item from the scene.
|
||||
\li \c MoveCommand when an item is moved the MoveCommand keeps record
|
||||
of the start and stop positions of the move, and it
|
||||
moves the item according to these when \c redo() and \c undo()
|
||||
is called.
|
||||
\o \c DiagramScene inherits QGraphicsScene and
|
||||
\li \c DiagramScene inherits QGraphicsScene and
|
||||
emits signals for the \c MoveComands when an item is moved.
|
||||
\o \c DiagramItem inherits QGraphicsPolygonItem and represents
|
||||
\li \c DiagramItem inherits QGraphicsPolygonItem and represents
|
||||
an item in the diagram.
|
||||
\endlist
|
||||
|
||||
|
94
doc/src/examples/widgets/mousebuttons.qdoc
Normal file
94
doc/src/examples/widgets/mousebuttons.qdoc
Normal file
@ -0,0 +1,94 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
|
||||
** Copyright (C) 2012 Rick Stockton <rickstockton@reno-computerhelp.com>
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the documentation of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:FDL$
|
||||
** GNU Free Documentation License
|
||||
** 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.
|
||||
**
|
||||
** Other Usage
|
||||
** Alternatively, this file may be used in accordance with the terms
|
||||
** and conditions contained in a signed written agreement between you
|
||||
** and Nokia.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example widgets/mousebuttons/buttontester
|
||||
\title Mouse Button Tester
|
||||
|
||||
\brief The 'Mouse Button Tester' example demonstrates how to reimplement
|
||||
mouse events within a custom class. You can also use this program to
|
||||
verify that Qt is actually receiving mouse events from your mouse.
|
||||
|
||||
Many 'gamer' mouse devices are configured with high-numbered "buttons"
|
||||
sending text shortcuts for certain games. With such a mouse, no mouse
|
||||
button events occur: The "mouse" sends keystrokes, and the
|
||||
'Mouse Button Tester' Window will not see the event. Receving no event,
|
||||
it will not repaint the Window with new text describing a \button event.
|
||||
|
||||
And so, in addition to it's use as Qt example code, the program may be
|
||||
useful s a mouse device tester. Note that there is another example
|
||||
muouse buttons example which provides the same function, written in QML.
|
||||
|
||||
This program (the Widget-based example) consists of three classes,
|
||||
in addition to the main() parent program:
|
||||
|
||||
\list
|
||||
\o \c A QPushButton, "Quit".
|
||||
\o \c ButtonTester. This is derived from Qt's TextArea class, for
|
||||
purpose of customizing/re-implementing the mouse and wheel event
|
||||
member functions.
|
||||
\o \c A simple QVBoxLayout layout.
|
||||
\endlist
|
||||
|
||||
First we will review the main program, with it's layout and "Quit"
|
||||
QPushButton. Then we will take a look at the \c ButtonTester class.
|
||||
|
||||
\section1 The Main Program
|
||||
|
||||
Note that the QPushButton, "Quit", is defined directly within the main()
|
||||
program, rather than another class. This is a correct way of defining a
|
||||
"Quit" QPushButton: A "Quit" Button defined inside another
|
||||
class would result in the destructor of that second class being
|
||||
called twice. This "Quit" Button uses the traditional Signal/Slot
|
||||
connection to invoke termination of the QApp, which will properly destroy
|
||||
its child classes \before terminating itself.
|
||||
|
||||
The remainder of the main() program is concerned with defining the layout,
|
||||
and applying a minimum size to the customized ButtonTester.
|
||||
|
||||
\section1 ButtonTester Class Definition
|
||||
|
||||
The \c ButtonTester class inherits from QTextEdit, and listens for
|
||||
mouse events on all possible Qt::MouseButton values. It also listens for
|
||||
wheel events from the mouse, and indicates the direction of wheel motion
|
||||
("up", down", "left", or "right"). It prints short debug messages into
|
||||
the Window, and also on the console QDebug() stream, when mouse button
|
||||
and wheel events occur. Our reimplementation of mousePressEvent(),
|
||||
mouseReleaseEvent(), mouseDoubleClickEvent(), and wheelEvent() "drive"
|
||||
the program; the other functions simply convert the Qt::MouseButton
|
||||
values into text strings.
|
||||
|
||||
You should call the ignore() function on any mouse event (or other event)
|
||||
which your widget-based classes do not use and consume. This function
|
||||
assures that Qt will propagate the event through each parent widget,
|
||||
until it is used or propagated to the Window Manager. (Qt attempts to do
|
||||
this automatically, but it is better programming practice to explicitly
|
||||
invoke the function.)
|
||||
|
||||
\image widgets/mousebutton-buttontester.png
|
||||
*/
|
@ -48,10 +48,10 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c WigglyWidget is the custom widget displaying the text
|
||||
\li \c WigglyWidget is the custom widget displaying the text
|
||||
in a wiggly line.
|
||||
|
||||
\o \c Dialog is the dialog widget allowing the user to enter a
|
||||
\li \c Dialog is the dialog widget allowing the user to enter a
|
||||
text. It combines a \c WigglyWidget and a \c QLineEdit.
|
||||
\endlist
|
||||
|
||||
|
@ -46,10 +46,10 @@
|
||||
The example consists of two classes:
|
||||
|
||||
\list
|
||||
\o \c ControllerWindow is the main application widget that allows
|
||||
\li \c ControllerWindow is the main application widget that allows
|
||||
the user to choose among the available window flags, and displays
|
||||
the effect on a separate preview window.
|
||||
\o \c PreviewWindow is a custom widget displaying the name of
|
||||
\li \c PreviewWindow is a custom widget displaying the name of
|
||||
its currently set window flags in a read-only text editor.
|
||||
\endlist
|
||||
|
||||
|
@ -67,11 +67,11 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage coordinatesystem-rect.png
|
||||
\o \inlineimage coordinatesystem-line.png
|
||||
\li \inlineimage coordinatesystem-rect.png
|
||||
\li \inlineimage coordinatesystem-line.png
|
||||
\row
|
||||
\o QRect(1, 2, 6, 4)
|
||||
\o QLine(2, 7, 6, 1)
|
||||
\li QRect(1, 2, 6, 4)
|
||||
\li QLine(2, 7, 6, 1)
|
||||
\endtable
|
||||
|
||||
\section2 Aliased Painting
|
||||
@ -92,14 +92,14 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage coordinatesystem-rect-raster.png
|
||||
\o \inlineimage coordinatesystem-line-raster.png
|
||||
\li \inlineimage coordinatesystem-rect-raster.png
|
||||
\li \inlineimage coordinatesystem-line-raster.png
|
||||
|
||||
\row
|
||||
\o
|
||||
\li
|
||||
\snippet doc/src/snippets/code/doc_src_coordsys.cpp 0
|
||||
|
||||
\o
|
||||
\li
|
||||
\snippet doc/src/snippets/code/doc_src_coordsys.cpp 1
|
||||
\endtable
|
||||
|
||||
@ -112,19 +112,19 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o {3,1} QRectF
|
||||
\li {3,1} QRectF
|
||||
\row
|
||||
\o \inlineimage qrect-diagram-zero.png
|
||||
\o \inlineimage qrectf-diagram-one.png
|
||||
\li \inlineimage qrect-diagram-zero.png
|
||||
\li \inlineimage qrectf-diagram-one.png
|
||||
\row
|
||||
\o Logical representation
|
||||
\o One pixel wide pen
|
||||
\li Logical representation
|
||||
\li One pixel wide pen
|
||||
\row
|
||||
\o \inlineimage qrectf-diagram-two.png
|
||||
\o \inlineimage qrectf-diagram-three.png
|
||||
\li \inlineimage qrectf-diagram-two.png
|
||||
\li \inlineimage qrectf-diagram-three.png
|
||||
\row
|
||||
\o Two pixel wide pen
|
||||
\o Three pixel wide pen
|
||||
\li Two pixel wide pen
|
||||
\li Three pixel wide pen
|
||||
\endtable
|
||||
|
||||
Note that for historical reasons the return value of the
|
||||
@ -158,14 +158,14 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage coordinatesystem-rect-antialias.png
|
||||
\o \inlineimage coordinatesystem-line-antialias.png
|
||||
\li \inlineimage coordinatesystem-rect-antialias.png
|
||||
\li \inlineimage coordinatesystem-line-antialias.png
|
||||
\row
|
||||
\o
|
||||
\li
|
||||
|
||||
\snippet doc/src/snippets/code/doc_src_coordsys.cpp 2
|
||||
|
||||
\o
|
||||
\li
|
||||
\snippet doc/src/snippets/code/doc_src_coordsys.cpp 3
|
||||
\endtable
|
||||
|
||||
@ -183,15 +183,15 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o \inlineimage qpainter-clock.png
|
||||
\o \inlineimage qpainter-rotation.png
|
||||
\o \inlineimage qpainter-scale.png
|
||||
\o \inlineimage qpainter-translation.png
|
||||
\li \inlineimage qpainter-clock.png
|
||||
\li \inlineimage qpainter-rotation.png
|
||||
\li \inlineimage qpainter-scale.png
|
||||
\li \inlineimage qpainter-translation.png
|
||||
\row
|
||||
\o nop
|
||||
\o \l {QPainter::rotate()}{rotate()}
|
||||
\o \l {QPainter::scale()}{scale()}
|
||||
\o \l {QPainter::translate()}{translate()}
|
||||
\li nop
|
||||
\li \l {QPainter::rotate()}{rotate()}
|
||||
\li \l {QPainter::scale()}{scale()}
|
||||
\li \l {QPainter::translate()}{translate()}
|
||||
\endtable
|
||||
|
||||
You can also twist the coordinate system around the origin using
|
||||
@ -218,10 +218,10 @@
|
||||
|
||||
\table 100%
|
||||
\header
|
||||
\o {2,1} Analog Clock Example
|
||||
\li {2,1} Analog Clock Example
|
||||
\row
|
||||
\o \inlineimage coordinatesystem-analogclock.png
|
||||
\o
|
||||
\li \inlineimage coordinatesystem-analogclock.png
|
||||
\li
|
||||
The Analog Clock example shows how to draw the contents of a
|
||||
custom widget using QPainter's transformation matrix.
|
||||
|
||||
@ -236,7 +236,7 @@
|
||||
sizes.
|
||||
|
||||
\row
|
||||
\o {2,1}
|
||||
\li {2,1}
|
||||
|
||||
\snippet examples/widgets/analogclock/analogclock.cpp 9
|
||||
|
||||
@ -368,23 +368,23 @@
|
||||
QPaintDevice, and QPaintEngine classes:
|
||||
|
||||
\table
|
||||
\header \o Class \o Description
|
||||
\header \li Class \li Description
|
||||
\row
|
||||
\o QPainter
|
||||
\o
|
||||
\li QPainter
|
||||
\li
|
||||
The QPainter class performs low-level painting on widgets and
|
||||
other paint devices. QPainter can operate on any object that
|
||||
inherits the QPaintDevice class, using the same code.
|
||||
\row
|
||||
\o QPaintDevice
|
||||
\o
|
||||
\li QPaintDevice
|
||||
\li
|
||||
The QPaintDevice class is the base class of objects that can be
|
||||
painted. Qt provides several devices: QWidget, QImage, QPixmap,
|
||||
QPrinter and QPicture, and other devices can also be defined by
|
||||
subclassing QPaintDevice.
|
||||
\row
|
||||
\o QPaintEngine
|
||||
\o
|
||||
\li QPaintEngine
|
||||
\li
|
||||
The QPaintEngine class provides an abstract definition of how
|
||||
QPainter draws to a given device on a given platform. Qt 4
|
||||
provides several premade implementations of QPaintEngine for the
|
||||
@ -397,10 +397,10 @@
|
||||
using the QTransform class:
|
||||
|
||||
\table
|
||||
\header \o Class \o Description
|
||||
\header \li Class \li Description
|
||||
\row
|
||||
\o QTransform
|
||||
\o
|
||||
\li QTransform
|
||||
\li
|
||||
A 3 x 3 transformation matrix. Use QTransform to rotate, shear,
|
||||
scale, or translate the coordinate system.
|
||||
\endtable
|
||||
@ -411,45 +411,45 @@
|
||||
name is suffixed with an \c F.
|
||||
|
||||
\table
|
||||
\header \o Class \o Description
|
||||
\header \li Class \li Description
|
||||
\row
|
||||
\o \l{QPoint}(\l{QPointF}{F})
|
||||
\o
|
||||
\li \l{QPoint}(\l{QPointF}{F})
|
||||
\li
|
||||
A single 2D point in the coordinate system. Most functions in Qt
|
||||
that deal with points can accept either a QPoint, a QPointF, two
|
||||
\c{int}s, or two \c{qreal}s.
|
||||
\row
|
||||
\o \l{QSize}(\l{QSizeF}{F})
|
||||
\o
|
||||
\li \l{QSize}(\l{QSizeF}{F})
|
||||
\li
|
||||
A single 2D vector. Internally, QPoint and QSize are the same, but
|
||||
a point is not the same as a size, so both classes exist. Again,
|
||||
most functions accept either QSizeF, a QSize, two \c{int}s, or two
|
||||
\c{qreal}s.
|
||||
\row
|
||||
\o \l{QRect}(\l{QRectF}{F})
|
||||
\o
|
||||
\li \l{QRect}(\l{QRectF}{F})
|
||||
\li
|
||||
A 2D rectangle. Most functions accept either a QRectF, a QRect,
|
||||
four \c{int}s, or four \c {qreal}s.
|
||||
\row
|
||||
\o \l{QLine}(\l{QLineF}{F})
|
||||
\o
|
||||
\li \l{QLine}(\l{QLineF}{F})
|
||||
\li
|
||||
A 2D finite-length line, characterized by a start point and an end
|
||||
point.
|
||||
\row
|
||||
\o \l{QPolygon}(\l{QPolygonF}{F})
|
||||
\o
|
||||
\li \l{QPolygon}(\l{QPolygonF}{F})
|
||||
\li
|
||||
A 2D polygon. A polygon is a vector of \c{QPoint(F)}s. If the
|
||||
first and last points are the same, the polygon is closed.
|
||||
\row
|
||||
\o QPainterPath
|
||||
\o
|
||||
\li QPainterPath
|
||||
\li
|
||||
A vectorial specification of a 2D shape. Painter paths are the
|
||||
ultimate painting primitive, in the sense that any shape
|
||||
(rectange, ellipse, spline) or combination of shapes can be
|
||||
expressed as a path. A path specifies both an outline and an area.
|
||||
\row
|
||||
\o QRegion
|
||||
\o
|
||||
\li QRegion
|
||||
\li
|
||||
An area in a paint device, expressed as a list of
|
||||
\l{QRect}s. In general, we recommend using the vectorial
|
||||
QPainterPath class instead of QRegion for specifying areas,
|
||||
|
@ -74,13 +74,13 @@
|
||||
|
||||
\section1 Topics
|
||||
\list
|
||||
\o \l{Classes for Painting}
|
||||
\o \l{Paint Devices and Backends}
|
||||
\o \l{Drawing and Filling}
|
||||
\o \l{Coordinate System}
|
||||
\o \l{Reading and Writing Image Files}
|
||||
\o \l{Styling}
|
||||
\o \l{Printing with Qt}
|
||||
\li \l{Classes for Painting}
|
||||
\li \l{Paint Devices and Backends}
|
||||
\li \l{Drawing and Filling}
|
||||
\li \l{Coordinate System}
|
||||
\li \l{Reading and Writing Image Files}
|
||||
\li \l{Styling}
|
||||
\li \l{Printing with Qt}
|
||||
\endlist
|
||||
|
||||
\section1 Classes for Painting
|
||||
@ -115,14 +115,14 @@
|
||||
\image paintsystem-devices.png
|
||||
|
||||
\table 100%
|
||||
\row \o \bold Widget
|
||||
\row \li \b Widget
|
||||
|
||||
The QWidget class is the base class of all user interface
|
||||
objects. The widget is the atom of the user interface: it receives
|
||||
mouse, keyboard and other events from the window system, and
|
||||
paints a representation of itself on the screen.
|
||||
|
||||
\row \o \bold Image
|
||||
\row \li \b Image
|
||||
|
||||
The QImage class provides a hardware-independent image
|
||||
representation which is designed and optimized for I/O, and for
|
||||
@ -136,7 +136,7 @@
|
||||
painting can be performed in another thread than the current GUI
|
||||
thread.
|
||||
|
||||
\row \o \bold Pixmap
|
||||
\row \li \b Pixmap
|
||||
|
||||
The QPixmap class is an off-screen image representation which is
|
||||
designed and optimized for showing images on screen. Unlike
|
||||
@ -156,7 +156,7 @@
|
||||
constructing QRegion objects, and for setting masks for pixmaps
|
||||
and widgets.
|
||||
|
||||
\row \o \bold {OpenGL Widget}
|
||||
\row \li \b {OpenGL Widget}
|
||||
|
||||
As mentioned previously, Qt provides the QtOpenGL module offering
|
||||
classes that makes it easy to use OpenGL in Qt applications. For
|
||||
@ -169,7 +169,7 @@
|
||||
most drawing operations, such as transformations and pixmap
|
||||
drawing.
|
||||
|
||||
\row \o \bold {Pixel Buffer}
|
||||
\row \li \b {Pixel Buffer}
|
||||
|
||||
The QtOpenGL module also provides the QGLPixelBuffer class which
|
||||
inherits QPaintDevice directly.
|
||||
@ -178,7 +178,7 @@
|
||||
pbuffer is normally done using full hardware acceleration which
|
||||
can be significantly faster than rendering into a QPixmap.
|
||||
|
||||
\row \o \bold {Framebuffer Object}
|
||||
\row \li \b {Framebuffer Object}
|
||||
|
||||
The QtOpenGL module also provides the QGLFramebufferObject class
|
||||
which inherits QPaintDevice directly.
|
||||
@ -188,7 +188,7 @@
|
||||
offer several advantages over pixel buffers for this purpose.
|
||||
These are described in the QGLFramebufferObject class documentation.
|
||||
|
||||
\row \o \bold {Picture}
|
||||
\row \li \b {Picture}
|
||||
|
||||
The QPicture class is a paint device that records and replays
|
||||
QPainter commands. A picture serializes painter commands to an IO
|
||||
@ -200,7 +200,7 @@
|
||||
Qt provides the QPicture::load() and QPicture::save() functions
|
||||
as well as streaming operators for loading and saving pictures.
|
||||
|
||||
\row \o \bold {Printer}
|
||||
\row \li \b {Printer}
|
||||
|
||||
The QPrinter class is a paint device that paints on a printer. On
|
||||
Windows or Mac OS X, QPrinter uses the built-in printer
|
||||
@ -218,7 +218,7 @@
|
||||
to QPrinter::PdfFormat, QPrinter will generate its output as a PDF
|
||||
file.
|
||||
|
||||
\row \o \bold {Custom Backends}
|
||||
\row \li \b {Custom Backends}
|
||||
|
||||
Support for a new backend can be implemented by deriving from the
|
||||
QPaintDevice class and reimplementing the virtual
|
||||
@ -238,17 +238,17 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o Windows
|
||||
\o Software Rasterizer
|
||||
\li Windows
|
||||
\li Software Rasterizer
|
||||
\row
|
||||
\o X11
|
||||
\o X11
|
||||
\li X11
|
||||
\li X11
|
||||
\row
|
||||
\o Mac OS X
|
||||
\o CoreGraphics
|
||||
\li Mac OS X
|
||||
\li CoreGraphics
|
||||
\row
|
||||
\o Embedded
|
||||
\o Software Rasterizer
|
||||
\li Embedded
|
||||
\li Software Rasterizer
|
||||
\endtable
|
||||
|
||||
Passing a command line parameter to the application, such as,
|
||||
@ -289,8 +289,8 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image paintsystem-painterpath.png
|
||||
\o \bold QPainterPath
|
||||
\li \image paintsystem-painterpath.png
|
||||
\li \b QPainterPath
|
||||
|
||||
A painter path is an object composed of lines and curves. For
|
||||
example, a rectangle is composed by lines and an ellipse is
|
||||
@ -333,8 +333,8 @@
|
||||
pixels, and the benefits of anti-aliased painting.
|
||||
|
||||
\table 100%
|
||||
\row \o
|
||||
\bold {Anti-Aliased Painting}
|
||||
\row \li
|
||||
\b {Anti-Aliased Painting}
|
||||
|
||||
When drawing, the pixel rendering is controlled by the
|
||||
QPainter::Antialiasing render hint. The QPainter::RenderHint enum
|
||||
@ -345,7 +345,7 @@
|
||||
antialias edges of primitives if possible, i.e. smoothing the
|
||||
edges by using different color intensities.
|
||||
|
||||
\o \image paintsystem-antialiasing.png
|
||||
\li \image paintsystem-antialiasing.png
|
||||
|
||||
\endtable
|
||||
|
||||
@ -376,8 +376,8 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image paintsystem-fancygradient.png
|
||||
\o \bold QGradient
|
||||
\li \image paintsystem-fancygradient.png
|
||||
\li \b QGradient
|
||||
|
||||
The QGradient class is used in combination with QBrush to specify
|
||||
gradient fills.
|
||||
@ -416,14 +416,14 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \bold QMovie
|
||||
\li \b QMovie
|
||||
|
||||
QMovie is a convenience class for displaying animations, using the
|
||||
QImageReader class internally. Once created, the QMovie class
|
||||
provides various functions for both running and controlling the
|
||||
given animation.
|
||||
|
||||
\o \image paintsystem-movie.png
|
||||
\li \image paintsystem-movie.png
|
||||
\endtable
|
||||
|
||||
The QImageReader and QImageWriter classes rely on the
|
||||
@ -450,8 +450,8 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image paintsystem-svg.png
|
||||
\o \bold {SVG Rendering}
|
||||
\li \image paintsystem-svg.png
|
||||
\li \b {SVG Rendering}
|
||||
|
||||
Scalable Vector Graphics (SVG) is a language for describing two-dimensional
|
||||
graphics and graphical applications in XML. SVG 1.1 is a W3C Recommendation
|
||||
@ -513,10 +513,10 @@
|
||||
Most functions for drawing style elements take four arguments:
|
||||
|
||||
\list
|
||||
\o an enum value specifying which graphical element to draw
|
||||
\o a QStyleOption object specifying how and where to render that element
|
||||
\o a QPainter object that should be used to draw the element
|
||||
\o a QWidget object on which the drawing is performed (optional)
|
||||
\li an enum value specifying which graphical element to draw
|
||||
\li a QStyleOption object specifying how and where to render that element
|
||||
\li a QPainter object that should be used to draw the element
|
||||
\li a QWidget object on which the drawing is performed (optional)
|
||||
\endlist
|
||||
|
||||
The style gets all the information it needs to render the
|
||||
@ -538,8 +538,8 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \inlineimage paintsystem-icon.png
|
||||
\o \bold QIcon
|
||||
\li \inlineimage paintsystem-icon.png
|
||||
\li \b QIcon
|
||||
|
||||
The QIcon class provides scalable icons in different modes and states.
|
||||
|
||||
|
BIN
doc/src/images/widgets/mousebutton-buttontester.png
Normal file
BIN
doc/src/images/widgets/mousebutton-buttontester.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
@ -43,326 +43,331 @@
|
||||
the application happens to be running on.
|
||||
|
||||
\table
|
||||
\row \o bool
|
||||
\o \list
|
||||
\o boolean
|
||||
\row \li bool
|
||||
\li \list
|
||||
\li boolean
|
||||
\endlist
|
||||
\row \o qint8
|
||||
\o \list
|
||||
\o signed byte
|
||||
\row \li qint8
|
||||
\li \list
|
||||
\li signed byte
|
||||
\endlist
|
||||
\row \o qint16
|
||||
\o \list
|
||||
\o signed 16-bit integer
|
||||
\row \li qint16
|
||||
\li \list
|
||||
\li signed 16-bit integer
|
||||
\endlist
|
||||
\row \o qint32
|
||||
\o \list
|
||||
\o signed 32-bit integer
|
||||
\row \li qint32
|
||||
\li \list
|
||||
\li signed 32-bit integer
|
||||
\endlist
|
||||
\row \o qint64
|
||||
\o \list
|
||||
\o signed 64-bit integer
|
||||
\row \li qint64
|
||||
\li \list
|
||||
\li signed 64-bit integer
|
||||
\endlist
|
||||
\row \o quint8
|
||||
\o \list
|
||||
\o unsigned byte
|
||||
\row \li quint8
|
||||
\li \list
|
||||
\li unsigned byte
|
||||
\endlist
|
||||
\row \o quint16
|
||||
\o \list
|
||||
\o unsigned 16-bit integer
|
||||
\row \li quint16
|
||||
\li \list
|
||||
\li unsigned 16-bit integer
|
||||
\endlist
|
||||
\row \o quint32
|
||||
\o \list
|
||||
\o unsigned 32-bit integer
|
||||
\row \li quint32
|
||||
\li \list
|
||||
\li unsigned 32-bit integer
|
||||
\endlist
|
||||
\row \o quint64
|
||||
\o \list
|
||||
\o unsigned 64-bit integer
|
||||
\row \li quint64
|
||||
\li \list
|
||||
\li unsigned 64-bit integer
|
||||
\endlist
|
||||
\row \o \c float
|
||||
\o \list
|
||||
\o 32-bit floating point number using the standard IEEE 754 format
|
||||
\row \li \c float
|
||||
\li \list
|
||||
\li 32-bit floating point number using the standard IEEE 754 format
|
||||
\endlist
|
||||
\row \o \c double
|
||||
\o \list
|
||||
\o 64-bit floating point number using the standard IEEE 754 format
|
||||
\row \li \c double
|
||||
\li \list
|
||||
\li 64-bit floating point number using the standard IEEE 754 format
|
||||
\endlist
|
||||
\row \o \c {const char *}
|
||||
\o \list
|
||||
\o The string length (quint32)
|
||||
\o The string bytes, excluding the terminating 0
|
||||
\row \li \c {const char *}
|
||||
\li \list
|
||||
\li The string length (quint32)
|
||||
\li The string bytes, excluding the terminating 0
|
||||
\endlist
|
||||
\row \o QBitArray
|
||||
\o \list
|
||||
\o The array size (quint32)
|
||||
\o The array bits, i.e. (size + 7)/8 bytes
|
||||
\row \li QBitArray
|
||||
\li \list
|
||||
\li The array size (quint32)
|
||||
\li The array bits, i.e. (size + 7)/8 bytes
|
||||
\endlist
|
||||
\row \o QBrush
|
||||
\o \list
|
||||
\o The brush style (quint8)
|
||||
\o The brush color (QColor)
|
||||
\o If style is CustomPattern, the brush pixmap (QPixmap)
|
||||
\row \li QBrush
|
||||
\li \list
|
||||
\li The brush style (quint8)
|
||||
\li The brush color (QColor)
|
||||
\li If style is CustomPattern, the brush pixmap (QPixmap)
|
||||
\endlist
|
||||
\row \o QByteArray
|
||||
\o \list
|
||||
\o If the byte array is null: 0xFFFFFFFF (quint32)
|
||||
\o Otherwise: the array size (quint32) followed by the array bytes, i.e. size bytes
|
||||
\row \li QByteArray
|
||||
\li \list
|
||||
\li If the byte array is null: 0xFFFFFFFF (quint32)
|
||||
\li Otherwise: the array size (quint32) followed by the array bytes, i.e. size bytes
|
||||
\endlist
|
||||
\row \o \l QColor
|
||||
\o \list
|
||||
\o Color spec (qint8)
|
||||
\o Alpha value (quint16)
|
||||
\o Red value (quint16)
|
||||
\o Green value (quint16)
|
||||
\o Blue value (quint16)
|
||||
\o Pad value (quint16)
|
||||
\row \li \l QColor
|
||||
\li \list
|
||||
\li Color spec (qint8)
|
||||
\li Alpha value (quint16)
|
||||
\li Red value (quint16)
|
||||
\li Green value (quint16)
|
||||
\li Blue value (quint16)
|
||||
\li Pad value (quint16)
|
||||
\endlist
|
||||
\row \o QCursor
|
||||
\o \list
|
||||
\o Shape ID (qint16)
|
||||
\o If shape is BitmapCursor: The bitmap (QPixmap), mask (QPixmap), and hot spot (QPoint)
|
||||
\row \li QCursor
|
||||
\li \list
|
||||
\li Shape ID (qint16)
|
||||
\li If shape is BitmapCursor: The bitmap (QPixmap), mask (QPixmap), and hot spot (QPoint)
|
||||
\endlist
|
||||
\row \o QDate
|
||||
\o \list
|
||||
\o Julian day (quint32)
|
||||
\row \li QDate
|
||||
\li \list
|
||||
\li Julian day (quint32)
|
||||
\endlist
|
||||
\row \o QDateTime
|
||||
\o \list
|
||||
\o Date (QDate)
|
||||
\o Time (QTime)
|
||||
\o 0 for Qt::LocalTime, 1 for Qt::UTC (quint8)
|
||||
\row \li QDateTime
|
||||
\li \list
|
||||
\li Date (QDate)
|
||||
\li Time (QTime)
|
||||
\li 0 for Qt::LocalTime, 1 for Qt::UTC (quint8)
|
||||
\endlist
|
||||
\row \o QEasingCurve
|
||||
\o \list
|
||||
\o type (quint8)
|
||||
\o func (quint64)
|
||||
\o hasConfig (bool)
|
||||
\o If hasConfig is true then these fields follow:
|
||||
\o list
|
||||
\o period (double)
|
||||
\o amplitude (double)
|
||||
\o overshoot (double)
|
||||
\row \li QEasingCurve
|
||||
\li \list
|
||||
\li type (quint8)
|
||||
\li func (quint64)
|
||||
\li hasConfig (bool)
|
||||
\li If hasConfig is true then these fields follow:
|
||||
\li list
|
||||
\li period (double)
|
||||
\li amplitude (double)
|
||||
\li overshoot (double)
|
||||
\endlist
|
||||
\row \o QFont
|
||||
\o \list
|
||||
\o The family (QString)
|
||||
\o The point size (qint16)
|
||||
\o The style hint (quint8)
|
||||
\o The char set (quint8)
|
||||
\o The weight (quint8)
|
||||
\o The font bits (quint8)
|
||||
\row \li QFont
|
||||
\li \list
|
||||
\li The family (QString)
|
||||
\li The point size (qint16)
|
||||
\li The style hint (quint8)
|
||||
\li The char set (quint8)
|
||||
\li The weight (quint8)
|
||||
\li The font bits (quint8)
|
||||
\endlist
|
||||
\row \o QHash<Key, T>
|
||||
\o \list
|
||||
\o The number of items (quint32)
|
||||
\o For all items, the key (Key) and value (T)
|
||||
\row \li QHash<Key, T>
|
||||
\li \list
|
||||
\li The number of items (quint32)
|
||||
\li For all items, the key (Key) and value (T)
|
||||
\endlist
|
||||
\row \o QIcon
|
||||
\o \list
|
||||
\o The number of pixmap entries (quint32)
|
||||
\o For all pixmap entries:
|
||||
\row \li QIcon
|
||||
\li \list
|
||||
\li The number of pixmap entries (quint32)
|
||||
\li For all pixmap entries:
|
||||
\list
|
||||
\o The pixmap (QPixmap)
|
||||
\o The file name (QString)
|
||||
\o The pixmap size (QSize)
|
||||
\o The \l{QIcon::Mode}{mode} (quint32)
|
||||
\o The \l{QIcon::State}{state} (quint32)
|
||||
\li The pixmap (QPixmap)
|
||||
\li The file name (QString)
|
||||
\li The pixmap size (QSize)
|
||||
\li The \l{QIcon::Mode}{mode} (quint32)
|
||||
\li The \l{QIcon::State}{state} (quint32)
|
||||
\endlist
|
||||
\endlist
|
||||
\row \o QImage
|
||||
\o \list
|
||||
\o If the image is null a "null image" marker is saved;
|
||||
\row \li QImage
|
||||
\li \list
|
||||
\li If the image is null a "null image" marker is saved;
|
||||
otherwise the image is saved in PNG or BMP format (depending
|
||||
on the stream version). If you want control of the format,
|
||||
stream the image into a QBuffer (using QImageIO) and stream
|
||||
that.
|
||||
\endlist
|
||||
\row \o QKeySequence
|
||||
\o \list
|
||||
\o A QList<int>, where each integer is a key in the key sequence
|
||||
\row \li QKeySequence
|
||||
\li \list
|
||||
\li A QList<int>, where each integer is a key in the key sequence
|
||||
\endlist
|
||||
\row \o QLinkedList<T>
|
||||
\o \list
|
||||
\o The number of items (quint32)
|
||||
\o The items (T)
|
||||
\row \li QLinkedList<T>
|
||||
\li \list
|
||||
\li The number of items (quint32)
|
||||
\li The items (T)
|
||||
\endlist
|
||||
\row \o QList<T>
|
||||
\o \list
|
||||
\o The number of items (quint32)
|
||||
\o The items (T)
|
||||
\row \li QList<T>
|
||||
\li \list
|
||||
\li The number of items (quint32)
|
||||
\li The items (T)
|
||||
\endlist
|
||||
\row \o QMap<Key, T>
|
||||
\o \list
|
||||
\o The number of items (quint32)
|
||||
\o For all items, the key (Key) and value (T)
|
||||
\row \li QMap<Key, T>
|
||||
\li \list
|
||||
\li The number of items (quint32)
|
||||
\li For all items, the key (Key) and value (T)
|
||||
\endlist
|
||||
\row \o QMargins
|
||||
\o \list
|
||||
\o left (int)
|
||||
\o top (int)
|
||||
\o right (int)
|
||||
\o bottom (int)
|
||||
\row \li QMargins
|
||||
\li \list
|
||||
\li left (int)
|
||||
\li top (int)
|
||||
\li right (int)
|
||||
\li bottom (int)
|
||||
\endlist
|
||||
\row \o QMatrix
|
||||
\o \list
|
||||
\o m11 (double)
|
||||
\o m12 (double)
|
||||
\o m21 (double)
|
||||
\o m22 (double)
|
||||
\o dx (double)
|
||||
\o dy (double)
|
||||
\row \li QMatrix
|
||||
\li \list
|
||||
\li m11 (double)
|
||||
\li m12 (double)
|
||||
\li m21 (double)
|
||||
\li m22 (double)
|
||||
\li dx (double)
|
||||
\li dy (double)
|
||||
\endlist
|
||||
\row \o QMatrix4x4
|
||||
\o \list
|
||||
\o m11 (double)
|
||||
\o m12 (double)
|
||||
\o m13 (double)
|
||||
\o m14 (double)
|
||||
\o m21 (double)
|
||||
\o m22 (double)
|
||||
\o m23 (double)
|
||||
\o m24 (double)
|
||||
\o m31 (double)
|
||||
\o m32 (double)
|
||||
\o m33 (double)
|
||||
\o m34 (double)
|
||||
\o m41 (double)
|
||||
\o m42 (double)
|
||||
\o m43 (double)
|
||||
\o m44 (double)
|
||||
\row \li QMatrix4x4
|
||||
\li \list
|
||||
\li m11 (double)
|
||||
\li m12 (double)
|
||||
\li m13 (double)
|
||||
\li m14 (double)
|
||||
\li m21 (double)
|
||||
\li m22 (double)
|
||||
\li m23 (double)
|
||||
\li m24 (double)
|
||||
\li m31 (double)
|
||||
\li m32 (double)
|
||||
\li m33 (double)
|
||||
\li m34 (double)
|
||||
\li m41 (double)
|
||||
\li m42 (double)
|
||||
\li m43 (double)
|
||||
\li m44 (double)
|
||||
\endlist
|
||||
\row \o QPair<T1, T2>
|
||||
\o \list
|
||||
\o first (T1)
|
||||
\o second (T2)
|
||||
\row \li QPair<T1, T2>
|
||||
\li \list
|
||||
\li first (T1)
|
||||
\li second (T2)
|
||||
\endlist
|
||||
\row \o QPalette
|
||||
\o The disabled, active, and inactive color groups, each of which consists
|
||||
\row \li QPalette
|
||||
\li The disabled, active, and inactive color groups, each of which consists
|
||||
of the following:
|
||||
\list
|
||||
\o foreground (QBrush)
|
||||
\o button (QBrush)
|
||||
\o light (QBrush)
|
||||
\o midlight (QBrush)
|
||||
\o dark (QBrush)
|
||||
\o mid (QBrush)
|
||||
\o text (QBrush)
|
||||
\o brightText (QBrush)
|
||||
\o buttonText (QBrush)
|
||||
\o base (QBrush)
|
||||
\o background (QBrush)
|
||||
\o shadow (QBrush)
|
||||
\o highlight (QBrush)
|
||||
\o highlightedText (QBrush)
|
||||
\o link (QBrush)
|
||||
\o linkVisited (QBrush)
|
||||
\li foreground (QBrush)
|
||||
\li button (QBrush)
|
||||
\li light (QBrush)
|
||||
\li midlight (QBrush)
|
||||
\li dark (QBrush)
|
||||
\li mid (QBrush)
|
||||
\li text (QBrush)
|
||||
\li brightText (QBrush)
|
||||
\li buttonText (QBrush)
|
||||
\li base (QBrush)
|
||||
\li background (QBrush)
|
||||
\li shadow (QBrush)
|
||||
\li highlight (QBrush)
|
||||
\li highlightedText (QBrush)
|
||||
\li link (QBrush)
|
||||
\li linkVisited (QBrush)
|
||||
\endlist
|
||||
\row \o QPen
|
||||
\o \list
|
||||
\o The pen styles (quint8)
|
||||
\o The pen width (quint16)
|
||||
\o The pen color (QColor)
|
||||
\row \li QPen
|
||||
\li \list
|
||||
\li The pen styles (quint8)
|
||||
\li The pen width (quint16)
|
||||
\li The pen color (QColor)
|
||||
\endlist
|
||||
\row \o QPicture
|
||||
\o \list
|
||||
\o The size of the picture data (quint32)
|
||||
\o The raw bytes of picture data (char)
|
||||
\row \li QPicture
|
||||
\li \list
|
||||
\li The size of the picture data (quint32)
|
||||
\li The raw bytes of picture data (char)
|
||||
\endlist
|
||||
\row \o QPixmap
|
||||
\o \list
|
||||
\o Save it as a PNG image.
|
||||
\row \li QPixmap
|
||||
\li \list
|
||||
\li Save it as a PNG image.
|
||||
\endlist
|
||||
\row \o QPoint
|
||||
\o \list
|
||||
\o The x coordinate (qint32)
|
||||
\o The y coordinate (qint32)
|
||||
\row \li QPoint
|
||||
\li \list
|
||||
\li The x coordinate (qint32)
|
||||
\li The y coordinate (qint32)
|
||||
\endlist
|
||||
\row \o QQuaternion
|
||||
\o \list
|
||||
\o The scalar component (double)
|
||||
\o The x coordinate (double)
|
||||
\o The y coordinate (double)
|
||||
\o The z coordinate (double)
|
||||
\row \li QQuaternion
|
||||
\li \list
|
||||
\li The scalar component (double)
|
||||
\li The x coordinate (double)
|
||||
\li The y coordinate (double)
|
||||
\li The z coordinate (double)
|
||||
\endlist
|
||||
\row \o QRect
|
||||
\o \list
|
||||
\o left (qint32)
|
||||
\o top (qint32)
|
||||
\o right (qint32)
|
||||
\o bottom (qint32)
|
||||
\row \li QRect
|
||||
\li \list
|
||||
\li left (qint32)
|
||||
\li top (qint32)
|
||||
\li right (qint32)
|
||||
\li bottom (qint32)
|
||||
\endlist
|
||||
\row \o QRegExp
|
||||
\o \list
|
||||
\o The regexp pattern (QString)
|
||||
\o Case sensitivity (quint8)
|
||||
\o Regular expression syntax (quint8)
|
||||
\o Minimal matching (quint8)
|
||||
\row \li QRegExp
|
||||
\li \list
|
||||
\li The regexp pattern (QString)
|
||||
\li Case sensitivity (quint8)
|
||||
\li Regular expression syntax (quint8)
|
||||
\li Minimal matching (quint8)
|
||||
\endlist
|
||||
\row \o QRegion
|
||||
\o \list
|
||||
\o The size of the data, i.e. 8 + 16 * (number of rectangles) (quint32)
|
||||
\o 10 (qint32)
|
||||
\o The number of rectangles (quint32)
|
||||
\o The rectangles in sequential order (QRect)
|
||||
\row \li QRegularExpression
|
||||
\li \list
|
||||
\li The regular expression pattern (QString)
|
||||
\li The pattern options (quint32)
|
||||
\endlist
|
||||
\row \o QSize
|
||||
\o \list
|
||||
\o width (qint32)
|
||||
\o height (qint32)
|
||||
\row \li QRegion
|
||||
\li \list
|
||||
\li The size of the data, i.e. 8 + 16 * (number of rectangles) (quint32)
|
||||
\li 10 (qint32)
|
||||
\li The number of rectangles (quint32)
|
||||
\li The rectangles in sequential order (QRect)
|
||||
\endlist
|
||||
\row \o QString
|
||||
\o \list
|
||||
\o If the string is null: 0xFFFFFFFF (quint32)
|
||||
\o Otherwise: The string length in bytes (quint32) followed by the data in UTF-16
|
||||
\row \li QSize
|
||||
\li \list
|
||||
\li width (qint32)
|
||||
\li height (qint32)
|
||||
\endlist
|
||||
\row \o QTime
|
||||
\o \list
|
||||
\o Milliseconds since midnight (quint32)
|
||||
\row \li QString
|
||||
\li \list
|
||||
\li If the string is null: 0xFFFFFFFF (quint32)
|
||||
\li Otherwise: The string length in bytes (quint32) followed by the data in UTF-16
|
||||
\endlist
|
||||
\row \o QTransform
|
||||
\o \list
|
||||
\o m11 (double)
|
||||
\o m12 (double)
|
||||
\o m13 (double)
|
||||
\o m21 (double)
|
||||
\o m22 (double)
|
||||
\o m23 (double)
|
||||
\o m31 (double)
|
||||
\o m32 (double)
|
||||
\o m33 (double)
|
||||
\row \li QTime
|
||||
\li \list
|
||||
\li Milliseconds since midnight (quint32)
|
||||
\endlist
|
||||
\row \o QUrl
|
||||
\o \list
|
||||
\o Holds an URL (QString)
|
||||
\row \li QTransform
|
||||
\li \list
|
||||
\li m11 (double)
|
||||
\li m12 (double)
|
||||
\li m13 (double)
|
||||
\li m21 (double)
|
||||
\li m22 (double)
|
||||
\li m23 (double)
|
||||
\li m31 (double)
|
||||
\li m32 (double)
|
||||
\li m33 (double)
|
||||
\endlist
|
||||
\row \o QVariant
|
||||
\o \list
|
||||
\o The type of the data (quint32)
|
||||
\o The null flag (qint8)
|
||||
\o The data of the specified type
|
||||
\row \li QUrl
|
||||
\li \list
|
||||
\li Holds an URL (QString)
|
||||
\endlist
|
||||
\row \o QVector2D
|
||||
\o \list
|
||||
\o the x coordinate (double)
|
||||
\o the y coordinate (double)
|
||||
\row \li QVariant
|
||||
\li \list
|
||||
\li The type of the data (quint32)
|
||||
\li The null flag (qint8)
|
||||
\li The data of the specified type
|
||||
\endlist
|
||||
\row \o QVector3D
|
||||
\o \list
|
||||
\o the x coordinate (double)
|
||||
\o the y coordinate (double)
|
||||
\o the z coordinate (double)
|
||||
\row \li QVector2D
|
||||
\li \list
|
||||
\li the x coordinate (double)
|
||||
\li the y coordinate (double)
|
||||
\endlist
|
||||
\row \o QVector4D
|
||||
\o \list
|
||||
\o the x coordinate (double)
|
||||
\o the y coordinate (double)
|
||||
\o the z coordinate (double)
|
||||
\o the w coordinate (double)
|
||||
\row \li QVector3D
|
||||
\li \list
|
||||
\li the x coordinate (double)
|
||||
\li the y coordinate (double)
|
||||
\li the z coordinate (double)
|
||||
\endlist
|
||||
\row \o QVector<T>
|
||||
\o \list
|
||||
\o The number of items (quint32)
|
||||
\o The items (T)
|
||||
\row \li QVector4D
|
||||
\li \list
|
||||
\li the x coordinate (double)
|
||||
\li the y coordinate (double)
|
||||
\li the z coordinate (double)
|
||||
\li the w coordinate (double)
|
||||
\endlist
|
||||
\row \li QVector<T>
|
||||
\li \list
|
||||
\li The number of items (quint32)
|
||||
\li The items (T)
|
||||
\endlist
|
||||
\endtable
|
||||
*/
|
||||
|
@ -81,16 +81,16 @@ lists the major QNetworkSession functions and how they fit into the session and
|
||||
hardware management categories:
|
||||
|
||||
\table 60%
|
||||
\header \o Interface management \o Session management
|
||||
\row \o QNetworkSession::stop() \o QNetworkSession::open()
|
||||
\row \o QNetworkSession::interface() \o QNetworkSession::close()
|
||||
\row \o QNetworkSession::state() \o QNetworkSession::isOpen()
|
||||
\row \o QNetworkSession::bytesWritten() \o QNetworkSession::migrate()
|
||||
\row \o QNetworkSession::bytesReceived() \o QNetworkSession::ignore()
|
||||
\row \o QNetworkSession::activeTime() \o QNetworkSession::accept()
|
||||
\row \o QNetworkSession::stateChanged() \o QNetworkSession::reject()
|
||||
\row \o \o QNetworkSession::opened()
|
||||
\row \o \o QNetworkSession::closed()
|
||||
\header \li Interface management \li Session management
|
||||
\row \li QNetworkSession::stop() \li QNetworkSession::open()
|
||||
\row \li QNetworkSession::interface() \li QNetworkSession::close()
|
||||
\row \li QNetworkSession::state() \li QNetworkSession::isOpen()
|
||||
\row \li QNetworkSession::bytesWritten() \li QNetworkSession::migrate()
|
||||
\row \li QNetworkSession::bytesReceived() \li QNetworkSession::ignore()
|
||||
\row \li QNetworkSession::activeTime() \li QNetworkSession::accept()
|
||||
\row \li QNetworkSession::stateChanged() \li QNetworkSession::reject()
|
||||
\row \li \li QNetworkSession::opened()
|
||||
\row \li \li QNetworkSession::closed()
|
||||
\endtable
|
||||
|
||||
The state of the session represents the state of the underlying access point
|
||||
@ -242,27 +242,27 @@ determining the feature support:
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Platform
|
||||
\o Backend capabilities
|
||||
\li Platform
|
||||
\li Backend capabilities
|
||||
\row
|
||||
\o Linux\unicode{0xAE}
|
||||
\o Linux uses the \l {http://projects.gnome.org/NetworkManager}{NetworkManager}
|
||||
\li Linux\unicode{0xAE}
|
||||
\li Linux uses the \l {http://projects.gnome.org/NetworkManager}{NetworkManager}
|
||||
and \l {http://connman.net/}{ConnMan} / \l {http://ofono.org/}{oFono} APIs
|
||||
which support interface notifications and starting and stopping of network
|
||||
interfaces.
|
||||
\row
|
||||
\o Windows\unicode{0xAE} XP
|
||||
\o This platform supports interface notifications without active polling.
|
||||
\li Windows\unicode{0xAE} XP
|
||||
\li This platform supports interface notifications without active polling.
|
||||
\row
|
||||
\o Windows XP SP2+Hotfixes, Windows XP SP3, Windows Vista, Windows 7
|
||||
\o In addition to standard Windows XP wifi access point monitoring has been improved which includes the ability to start and stop wifi interfaces. This requires Windows to manage the wifi interfaces.
|
||||
\li Windows XP SP2+Hotfixes, Windows XP SP3, Windows Vista, Windows 7
|
||||
\li In addition to standard Windows XP wifi access point monitoring has been improved which includes the ability to start and stop wifi interfaces. This requires Windows to manage the wifi interfaces.
|
||||
\row
|
||||
\o Mac OS\unicode{0xAE}
|
||||
\o This platform has full support by way of CoreWLAN offered in Mac OS 10.6. Previous
|
||||
\li Mac OS\unicode{0xAE}
|
||||
\li This platform has full support by way of CoreWLAN offered in Mac OS 10.6. Previous
|
||||
versions of Mac OS - 10.5 and 10.4 have limited support.
|
||||
\row
|
||||
\o All other platforms (*nix, Windows Mobile)
|
||||
\o This backend is the fallback for all platforms supports network interface notifications via active polling only.
|
||||
\li All other platforms (*nix, Windows Mobile)
|
||||
\li This backend is the fallback for all platforms supports network interface notifications via active polling only.
|
||||
\endtable
|
||||
|
||||
*/
|
||||
|
@ -112,7 +112,7 @@
|
||||
too small for the higher resolutions of typical printers.
|
||||
|
||||
\table
|
||||
\row \o \bold{Printer and Painter Coordinate Systems}
|
||||
\row \li \b{Printer and Painter Coordinate Systems}
|
||||
|
||||
The \l{QPrinter::}{paperRect()} and \l{QPrinter::}{pageRect()} functions
|
||||
provide information about the size of the paper used for printing and the
|
||||
@ -126,7 +126,7 @@
|
||||
rectangle, and painting operations will be clipped to the bounds of the
|
||||
drawable part of the page.
|
||||
|
||||
\o \inlineimage printer-rects.png
|
||||
\li \inlineimage printer-rects.png
|
||||
\endtable
|
||||
|
||||
The paint system automatically uses the correct device metrics when painting
|
||||
@ -164,12 +164,12 @@
|
||||
functionality can be obtained via a function in the corresponding widget's API.
|
||||
|
||||
\table
|
||||
\header \o Widget \o Printing function \o Accepts
|
||||
\row \o QGraphicsView \o QGraphicsView::render() \o QPainter
|
||||
\row \o QSvgWidget \o QSvgRenderer::render() \o QPainter
|
||||
\row \o QTextEdit \o QTextDocument::print() \o QPrinter
|
||||
\row \o QTextLayout \o QTextLayout::draw() \o QPainter
|
||||
\row \o QTextLine \o QTextLine::draw() \o QPainter
|
||||
\header \li Widget \li Printing function \li Accepts
|
||||
\row \li QGraphicsView \li QGraphicsView::render() \li QPainter
|
||||
\row \li QSvgWidget \li QSvgRenderer::render() \li QPainter
|
||||
\row \li QTextEdit \li QTextDocument::print() \li QPrinter
|
||||
\row \li QTextLayout \li QTextLayout::draw() \li QPainter
|
||||
\row \li QTextLine \li QTextLine::draw() \li QPainter
|
||||
\endtable
|
||||
|
||||
QTextEdit requires a QPrinter rather than a QPainter because it uses information
|
||||
|
289
doc/src/snippets/code/src_corelib_tools_qregularexpression.cpp
Normal file
289
doc/src/snippets/code/src_corelib_tools_qregularexpression.cpp
Normal file
@ -0,0 +1,289 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2012 Giuseppe D'Angelo <dangelog@gmail.com>.
|
||||
** Contact: http://www.qt-project.org/
|
||||
**
|
||||
** This file is part of the documentation 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 Nokia Corporation 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$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
//! [0]
|
||||
QRegularExpression re("a pattern");
|
||||
//! [0]
|
||||
|
||||
|
||||
//! [1]
|
||||
QRegularExpression re;
|
||||
re.setPattern("another pattern");
|
||||
//! [1]
|
||||
|
||||
|
||||
//! [2]
|
||||
// matches two digits followed by a space and a word
|
||||
QRegularExpression re("\\d\\d \\w+");
|
||||
|
||||
// matches a backslash
|
||||
QRegularExpression re2("\\\\");
|
||||
//! [2]
|
||||
|
||||
|
||||
//! [3]
|
||||
QRegularExpression re("a third pattern");
|
||||
QString pattern = re.pattern(); // pattern == "a third pattern"
|
||||
//! [3]
|
||||
|
||||
|
||||
//! [4]
|
||||
// matches "Qt rocks", but also "QT rocks", "QT ROCKS", "qT rOcKs", etc.
|
||||
QRegularExpression re("Qt rocks", QRegularExpression::CaseInsensitiveOption);
|
||||
//! [4]
|
||||
|
||||
|
||||
//! [5]
|
||||
QRegularExpression re("^\\d+$");
|
||||
re.setPatternOptions(QRegularExpression::MultilineOption);
|
||||
// re matches any line in the subject string that contains only digits (but at least one)
|
||||
//! [5]
|
||||
|
||||
|
||||
//! [6]
|
||||
QRegularExpression re = QRegularExpression("^two.*words$", QRegularExpression::MultilineOption
|
||||
| QRegularExpression::DotMatchesEverythingOption);
|
||||
|
||||
QRegularExpression::PatternOptions options = re.patternOptions();
|
||||
// options == QRegularExpression::MultilineOption | QRegularExpression::DotMatchesEverythingOption
|
||||
//! [6]
|
||||
|
||||
|
||||
//! [7]
|
||||
// match two digits followed by a space and a word
|
||||
QRegularExpression re("\\d\\d \\w+");
|
||||
QRegularExpressionMatch match = re.match("abc123 def");
|
||||
bool hasMatch = match.hasMatch(); // true
|
||||
//! [7]
|
||||
|
||||
|
||||
//! [8]
|
||||
QRegularExpression re("\\d\\d \\w+");
|
||||
QRegularExpressionMatch match = re.match("abc123 def");
|
||||
if (match.hasMatch()) {
|
||||
QString matched = match.captured(0); // matched == "23 def"
|
||||
// ...
|
||||
}
|
||||
//! [8]
|
||||
|
||||
|
||||
//! [9]
|
||||
QRegularExpression re("\\d\\d \\w+");
|
||||
QRegularExpressionMatch match = re.match("12 abc 45 def", 1);
|
||||
if (match.hasMatch()) {
|
||||
QString matched = match.captured(0); // matched == "45 def"
|
||||
// ...
|
||||
}
|
||||
//! [9]
|
||||
|
||||
|
||||
//! [10]
|
||||
QRegularExpression re("^(\\d\\d)/(\\d\\d)/(\\d\\d\\d\\d)$");
|
||||
QRegularExpressionMatch match = re.match("08/12/1985");
|
||||
if (match.hasMatch()) {
|
||||
QString day = re.captured(1); // day == "08"
|
||||
QString month = re.captured(2); // month == "12"
|
||||
QString year = re.captured(3); // year == "1985"
|
||||
// ...
|
||||
}
|
||||
//! [10]
|
||||
|
||||
|
||||
//! [11]
|
||||
QRegularExpression re("abc(\\d+)def");
|
||||
QRegularExpressionMatch match = re.match("XYZabc123defXYZ");
|
||||
if (match.hasMatch()) {
|
||||
int startOffset = re.capturedStart(1); // startOffset == 6
|
||||
int endOffset = re.capturedEnd(1); // endOffset == 9
|
||||
// ...
|
||||
}
|
||||
//! [11]
|
||||
|
||||
|
||||
//! [12]
|
||||
QRegularExpression re("^(?<date>\\d\\d)/(?<month>\\d\\d)/(?<year>\\d\\d\\d\\d)$");
|
||||
QRegularExpressionMatch match = re.match("08/12/1985");
|
||||
if (match.hasMatch()) {
|
||||
QString date = match.captured("date"); // date == "08"
|
||||
QString month = match.captured("month"); // month == "12"
|
||||
QString year = match.captured("year"); // year == 1985
|
||||
}
|
||||
//! [12]
|
||||
|
||||
|
||||
//! [13]
|
||||
QRegularExpression re("(\\w+)");
|
||||
QRegularExpressionMatchIterator i = re.globalMatch("the quick fox");
|
||||
//! [13]
|
||||
|
||||
|
||||
//! [14]
|
||||
QStringList words;
|
||||
while (i.hasNext()) {
|
||||
QRegularExpressionMatch match = i.next();
|
||||
QString word = match.captured(1);
|
||||
words << word;
|
||||
}
|
||||
// words contains "the", "quick", "fox"
|
||||
//! [14]
|
||||
|
||||
|
||||
//! [15]
|
||||
QString pattern("^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \\d\\d?, \\d\\d\\d\\d$");
|
||||
QRegularExpression re(pattern);
|
||||
|
||||
QString input("Jan 21,");
|
||||
QRegularExpressionMatch match = re.match(input, 0, QRegularExpressionMatch::PartialPreferCompleteMatch);
|
||||
bool hasMatch = match.hasMatch(); // false
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // true
|
||||
//! [15]
|
||||
|
||||
|
||||
//! [16]
|
||||
QString input("Dec 8, 1985");
|
||||
QRegularExpressionMatch match = re.match(input, 0, QRegularExpressionMatch::PartialPreferCompleteMatch);
|
||||
bool hasMatch = match.hasMatch(); // true
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // false
|
||||
//! [16]
|
||||
|
||||
|
||||
//! [17]
|
||||
QRegularExpression re("abc\\w+X|def");
|
||||
QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpressionMatch::PartialPreferCompleteMatch);
|
||||
bool hasMatch = match.hasMatch(); // true
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // false
|
||||
QString captured = match.captured(0); // captured == "def"
|
||||
//! [17]
|
||||
|
||||
|
||||
//! [18]
|
||||
QRegularExpression re("abc\\w+X|defY");
|
||||
QRegularExpressionMatch match = re.match("abcdef", 0, QRegularExpressionMatch::PartialPreferCompleteMatch);
|
||||
bool hasMatch = match.hasMatch(); // false
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // true
|
||||
QString captured = match.captured(0); // captured == "abcdef"
|
||||
//! [18]
|
||||
|
||||
|
||||
//! [19]
|
||||
QRegularExpression re("abc|ab");
|
||||
QRegularExpressionMatch match = re.match("ab", 0, QRegularExpressionMatch::PartialPreferFirstMatch);
|
||||
bool hasMatch = match.hasMatch(); // false
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // true
|
||||
//! [19]
|
||||
|
||||
|
||||
//! [20]
|
||||
QRegularExpression re("abc(def)?");
|
||||
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpressionMatch::PartialPreferFirstMatch);
|
||||
bool hasMatch = match.hasMatch(); // false
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // true
|
||||
//! [20]
|
||||
|
||||
//! [21]
|
||||
QRegularExpression re("(abc)*");
|
||||
QRegularExpressionMatch match = re.match("abc", 0, QRegularExpressionMatch::PartialPreferFirstMatch);
|
||||
bool hasMatch = match.hasMatch(); // false
|
||||
bool hasPartialMatch = match.hasPartialMatch(); // true
|
||||
//! [21]
|
||||
|
||||
//! [22]
|
||||
QRegularExpression invalidRe("(unmatched|parenthesis");
|
||||
bool isValid = invalidRe.isValid(); // false
|
||||
//! [22]
|
||||
|
||||
//! [23]
|
||||
QRegularExpression invalidRe("(unmatched|parenthesis");
|
||||
if (!invalidRe.isValid()) {
|
||||
QString errorString = invalidRe.errorString(); // errorString == "missing )"
|
||||
int errorOffset = invalidRe.patternErrorOffset(); // errorOffset == 22
|
||||
// ...
|
||||
}
|
||||
//! [23]
|
||||
|
||||
//! [24]
|
||||
QRegularExpression re("^this pattern must match exactly$");
|
||||
//! [24]
|
||||
|
||||
//! [25]
|
||||
QString p("a .*|pattern");
|
||||
QRegularExpression re("\\A(?:" + p + ")\\z"); // re matches exactly the pattern string p
|
||||
//! [25]
|
||||
|
||||
//! [26]
|
||||
QString escaped = QRegularExpression::escape("a(x) = f(x) + g(x)");
|
||||
// escaped == "a\\(x\\)\\ \\=\\ f\\(x\\)\\ \\+\\ g\\(x\\)"
|
||||
//! [26]
|
||||
|
||||
//! [27]
|
||||
QString pattern = "(" + QRegularExpression::escape(name) +
|
||||
"|" + QRegularExpression::escape(nickname) + ")";
|
||||
QRegularExpression re(pattern);
|
||||
//! [27]
|
||||
|
||||
//! [28]
|
||||
QRegularExpressionMatch match = re.match(...);
|
||||
for (int i = 0; i <= match.lastCapturedIndex(); ++i) {
|
||||
QString captured = match.captured(i);
|
||||
// ...
|
||||
}
|
||||
//! [28]
|
||||
|
||||
//! [29]
|
||||
QRegularExpression("(\d\d) (?<name>\w+)");
|
||||
QRegularExpressionMatch match = re.match("23 Jordan");
|
||||
if (match.hasMatch()) {
|
||||
QString number = match.captured(1); // first == "23"
|
||||
QString name = match.captured("name"); // name == "Jordan"
|
||||
}
|
||||
//! [29]
|
||||
|
||||
//! [30]
|
||||
// extracts the words
|
||||
QRegularExpression re("(\w+)");
|
||||
QString subject("the quick fox");
|
||||
QRegularExpressionMatchIterator i = re.globalMatch(subject);
|
||||
while (i.hasNext()) {
|
||||
QRegularExpressionMatch match = i.next();
|
||||
// ...
|
||||
}
|
||||
//! [30]
|
||||
|
||||
|
@ -48,518 +48,518 @@
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o IBM DB2 data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li IBM DB2 data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o SMALLINT
|
||||
\o 16-bit signed integer
|
||||
\o typedef qint16
|
||||
\li SMALLINT
|
||||
\li 16-bit signed integer
|
||||
\li typedef qint16
|
||||
\row
|
||||
\o INTEGER
|
||||
\o 32-bit signed integer
|
||||
\o typedef qint32
|
||||
\li INTEGER
|
||||
\li 32-bit signed integer
|
||||
\li typedef qint32
|
||||
\row
|
||||
\o BIGINT
|
||||
\o 64-bit signed integer
|
||||
\o typedef qint64
|
||||
\li BIGINT
|
||||
\li 64-bit signed integer
|
||||
\li typedef qint64
|
||||
\row
|
||||
\o REAL
|
||||
\o 32-bit Single-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li REAL
|
||||
\li 32-bit Single-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DOUBLE PRECISION
|
||||
\o 64-bit Double-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li DOUBLE PRECISION
|
||||
\li 64-bit Double-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o FLOAT
|
||||
\o 64-bit Double-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li FLOAT
|
||||
\li 64-bit Double-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o CHAR
|
||||
\o Fixed-length, null-terminated character string
|
||||
\o Mapped to QString
|
||||
\li CHAR
|
||||
\li Fixed-length, null-terminated character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o VARCHAR
|
||||
\o Null-terminated varying length string
|
||||
\o Mapped to QString
|
||||
\li VARCHAR
|
||||
\li Null-terminated varying length string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o LONG VARCHAR
|
||||
\o Not null-terminated varying length character string
|
||||
\o Mapped to QString
|
||||
\li LONG VARCHAR
|
||||
\li Not null-terminated varying length character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o BLOB
|
||||
\o Not null-terminated varying binary string with 4-byte string
|
||||
\li BLOB
|
||||
\li Not null-terminated varying binary string with 4-byte string
|
||||
length indicator
|
||||
\o Mapped to QByteArray
|
||||
\li Mapped to QByteArray
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o DATE
|
||||
\o Null-terminated character string of the following format:
|
||||
\li DATE
|
||||
\li Null-terminated character string of the following format:
|
||||
yyyy-mm-dd
|
||||
\o Mapped to QDate
|
||||
\li Mapped to QDate
|
||||
\row
|
||||
\o TIME
|
||||
\o Null-terminated character string of the following format: hh.mm.ss
|
||||
\o Mapped to QTime
|
||||
\li TIME
|
||||
\li Null-terminated character string of the following format: hh.mm.ss
|
||||
\li Mapped to QTime
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o Null-terminated character string of the following format: yyyy-mm-dd-hh.mm.ss.nnnnnn
|
||||
\o Mapped to QDateTime
|
||||
\li TIMESTAMP
|
||||
\li Null-terminated character string of the following format: yyyy-mm-dd-hh.mm.ss.nnnnnn
|
||||
\li Mapped to QDateTime
|
||||
\endtable
|
||||
|
||||
\section2 Borland InterBase Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o Borland InterBase data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li Borland InterBase data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o BOOLEAN
|
||||
\o Boolean
|
||||
\o bool
|
||||
\li BOOLEAN
|
||||
\li Boolean
|
||||
\li bool
|
||||
\row
|
||||
\o TINYINT
|
||||
\o 8 bit signed integer
|
||||
\o typedef qint8
|
||||
\li TINYINT
|
||||
\li 8 bit signed integer
|
||||
\li typedef qint8
|
||||
\row
|
||||
\o SMALLINT
|
||||
\o 16-bit signed integer
|
||||
\o typedef qint16
|
||||
\li SMALLINT
|
||||
\li 16-bit signed integer
|
||||
\li typedef qint16
|
||||
\row
|
||||
\o INTEGER
|
||||
\o 32-bit signed integer
|
||||
\o typedef qint32
|
||||
\li INTEGER
|
||||
\li 32-bit signed integer
|
||||
\li typedef qint32
|
||||
\row
|
||||
\o BIGINT LONG
|
||||
\o 64-bit signed integer
|
||||
\o typedef qint64
|
||||
\li BIGINT LONG
|
||||
\li 64-bit signed integer
|
||||
\li typedef qint64
|
||||
\row
|
||||
\o REAL FLOAT
|
||||
\o 32-bit floating point
|
||||
\o By default mapping to QString
|
||||
\li REAL FLOAT
|
||||
\li 32-bit floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o FLOAT
|
||||
\o 64-bit floating point
|
||||
\o By default mapping to QString
|
||||
\li FLOAT
|
||||
\li 64-bit floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DOUBLE
|
||||
\o 64-bit floating point
|
||||
\o By default mapping to QString
|
||||
\li DOUBLE
|
||||
\li 64-bit floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DOUBLE PRECISION
|
||||
\o 64-bit Double-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li DOUBLE PRECISION
|
||||
\li 64-bit Double-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o VARCHAR STRING
|
||||
\o Character string, Unicode
|
||||
\o Mapped to QString
|
||||
\li VARCHAR STRING
|
||||
\li Character string, Unicode
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o DATE
|
||||
\o Displays date. Format: 'yyyy-mm-dd'
|
||||
\o Mapped to QDate
|
||||
\li DATE
|
||||
\li Displays date. Format: 'yyyy-mm-dd'
|
||||
\li Mapped to QDate
|
||||
\row
|
||||
\o TIME
|
||||
\o Displays time. Format is 'hh:mm:ss' in 24-hour format
|
||||
\o Mapped to QTime
|
||||
\li TIME
|
||||
\li Displays time. Format is 'hh:mm:ss' in 24-hour format
|
||||
\li Mapped to QTime
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o Displays a timestamp. Format is 'yyyy-mm-dd hh:mm:ss'
|
||||
\o Mapped to QDateTime
|
||||
\li TIMESTAMP
|
||||
\li Displays a timestamp. Format is 'yyyy-mm-dd hh:mm:ss'
|
||||
\li Mapped to QDateTime
|
||||
\endtable
|
||||
|
||||
\section2 MySQL Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o MySQL data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li MySQL data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o TINYINT
|
||||
\o 8 bit signed integer
|
||||
\o typedef qint8
|
||||
\li TINYINT
|
||||
\li 8 bit signed integer
|
||||
\li typedef qint8
|
||||
\row
|
||||
\o TINYINT UNSIGNED
|
||||
\o 8 bit unsigned integer
|
||||
\o typedef quint8
|
||||
\li TINYINT UNSIGNED
|
||||
\li 8 bit unsigned integer
|
||||
\li typedef quint8
|
||||
\row
|
||||
\o SMALLINT
|
||||
\o 16-bit signed integer
|
||||
\o typedef qint16
|
||||
\li SMALLINT
|
||||
\li 16-bit signed integer
|
||||
\li typedef qint16
|
||||
\row
|
||||
\o SMALLINT UNSIGNED
|
||||
\o 16-bit unsigned integer
|
||||
\o typedef quint16
|
||||
\li SMALLINT UNSIGNED
|
||||
\li 16-bit unsigned integer
|
||||
\li typedef quint16
|
||||
\row
|
||||
\o INT
|
||||
\o 32-bit signed integer
|
||||
\o typedef qint32
|
||||
\li INT
|
||||
\li 32-bit signed integer
|
||||
\li typedef qint32
|
||||
\row
|
||||
\o INT UNSIGNED
|
||||
\o 32-bit unsigned integer
|
||||
\o typedef quint32
|
||||
\li INT UNSIGNED
|
||||
\li 32-bit unsigned integer
|
||||
\li typedef quint32
|
||||
\row
|
||||
\o BIGINT
|
||||
\o 64-bit signed integer
|
||||
\o typedef qint64
|
||||
\li BIGINT
|
||||
\li 64-bit signed integer
|
||||
\li typedef qint64
|
||||
\row
|
||||
\o FLOAT
|
||||
\o 32-bit Floating Point
|
||||
\o By default mapping to QString
|
||||
\li FLOAT
|
||||
\li 32-bit Floating Point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DOUBLE
|
||||
\o 64-bit Floating Point
|
||||
\o By default mapping to QString
|
||||
\li DOUBLE
|
||||
\li 64-bit Floating Point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o CHAR
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li CHAR
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o VARCHAR
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li VARCHAR
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o TINYTEXT
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li TINYTEXT
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o TEXT
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li TEXT
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o MEDIUMTEXT
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li MEDIUMTEXT
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o LONGTEXT
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li LONGTEXT
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o all BLOB types
|
||||
\o BLOB
|
||||
\o Mapped to QByteArray
|
||||
\li all BLOB types
|
||||
\li BLOB
|
||||
\li Mapped to QByteArray
|
||||
\row
|
||||
\o DATE
|
||||
\o Date without Time
|
||||
\o Mapped to QDate
|
||||
\li DATE
|
||||
\li Date without Time
|
||||
\li Mapped to QDate
|
||||
\row
|
||||
\o DATETIME
|
||||
\o Date and Time
|
||||
\o Mapped to QDateTime
|
||||
\li DATETIME
|
||||
\li Date and Time
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o Date and Time
|
||||
\o Mapped to QDateTime
|
||||
\li TIMESTAMP
|
||||
\li Date and Time
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o TIME
|
||||
\o Time
|
||||
\o Mapped to QTime
|
||||
\li TIME
|
||||
\li Time
|
||||
\li Mapped to QTime
|
||||
\row
|
||||
\o YEAR
|
||||
\o Year (int)
|
||||
\o Mapped to QDateTime
|
||||
\li YEAR
|
||||
\li Year (int)
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o ENUM
|
||||
\o Enumeration of Value Set
|
||||
\o Mapped to QString
|
||||
\li ENUM
|
||||
\li Enumeration of Value Set
|
||||
\li Mapped to QString
|
||||
\endtable
|
||||
|
||||
\section2 Oracle Call Interface Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o Oracle Call Interface data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li Oracle Call Interface data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o NUMBER
|
||||
\o FLOAT, DOUBLE, PRECISIONc REAL
|
||||
\o By default mapping to QString
|
||||
\li NUMBER
|
||||
\li FLOAT, DOUBLE, PRECISIONc REAL
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o NUMBER(38)
|
||||
\o INTEGER INT SMALLINT
|
||||
\o typedef qint8/16/32/64
|
||||
\li NUMBER(38)
|
||||
\li INTEGER INT SMALLINT
|
||||
\li typedef qint8/16/32/64
|
||||
\row
|
||||
\o NUMBER(p,s)
|
||||
\o NUMERIC(p,s) DECIMAL(p,s)a
|
||||
\o By default mapping to QString
|
||||
\li NUMBER(p,s)
|
||||
\li NUMERIC(p,s) DECIMAL(p,s)a
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o NVARCHAR2(n)
|
||||
\o Character string (NATIONAL CHARACTER VARYING(n) NATIONAL
|
||||
\li NVARCHAR2(n)
|
||||
\li Character string (NATIONAL CHARACTER VARYING(n) NATIONAL
|
||||
CHAR VARYING(n) NCHAR VARYING(n))
|
||||
\o Mapped to QString
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o NCHAR(n)
|
||||
\o Character string (NATIONAL CHARACTER(n) NATIONAL CHAR(n)
|
||||
\li NCHAR(n)
|
||||
\li Character string (NATIONAL CHARACTER(n) NATIONAL CHAR(n)
|
||||
NCHAR(n))
|
||||
\o Mapped to QString
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CHAR(n)
|
||||
\o Character string (CHARACTER(n) CHAR(n))
|
||||
\o Mapped to QString
|
||||
\li CHAR(n)
|
||||
\li Character string (CHARACTER(n) CHAR(n))
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o BLOB
|
||||
\o A binary large object
|
||||
\o Mapped to QByteArray
|
||||
\li BLOB
|
||||
\li A binary large object
|
||||
\li Mapped to QByteArray
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o Year, month, and day values of date, as well as hour, minute,
|
||||
\li TIMESTAMP
|
||||
\li Year, month, and day values of date, as well as hour, minute,
|
||||
and second values of time
|
||||
\o Mapped to QDateTime
|
||||
\li Mapped to QDateTime
|
||||
\endtable
|
||||
|
||||
\section2 ODBC Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o ODBC data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li ODBC data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o BIT
|
||||
\o Boolean
|
||||
\o BOOL
|
||||
\li BIT
|
||||
\li Boolean
|
||||
\li BOOL
|
||||
\row
|
||||
\o TINYINT
|
||||
\o 8 bit integer
|
||||
\o typedef qint8
|
||||
\li TINYINT
|
||||
\li 8 bit integer
|
||||
\li typedef qint8
|
||||
\row
|
||||
\o SMALLINT
|
||||
\o 16-bit signed integer
|
||||
\o typedef qint16
|
||||
\li SMALLINT
|
||||
\li 16-bit signed integer
|
||||
\li typedef qint16
|
||||
\row
|
||||
\o INTEGER
|
||||
\o 32-bit signed integer
|
||||
\o typedef qint32
|
||||
\li INTEGER
|
||||
\li 32-bit signed integer
|
||||
\li typedef qint32
|
||||
\row
|
||||
\o BIGINT
|
||||
\o 64-bit signed integer
|
||||
\o typedef qint64
|
||||
\li BIGINT
|
||||
\li 64-bit signed integer
|
||||
\li typedef qint64
|
||||
\row
|
||||
\o REAL
|
||||
\o 32-bit Single-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li REAL
|
||||
\li 32-bit Single-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o FLOAT
|
||||
\o 64-bit Double floating point
|
||||
\o By default mapping to QString
|
||||
\li FLOAT
|
||||
\li 64-bit Double floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DOUBLE
|
||||
\o 64-bit Double floating point
|
||||
\o By default mapping to QString
|
||||
\li DOUBLE
|
||||
\li 64-bit Double floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o CHAR
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li CHAR
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o VARCHAR
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li VARCHAR
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o LONGVARCHAR
|
||||
\o Character string
|
||||
\o Mapped to QString
|
||||
\li LONGVARCHAR
|
||||
\li Character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o DATE
|
||||
\o Character string
|
||||
\o Mapped to QDate
|
||||
\li DATE
|
||||
\li Character string
|
||||
\li Mapped to QDate
|
||||
\row
|
||||
\o TIME
|
||||
\o Character Time, Character string
|
||||
\o Mapped to QTime
|
||||
\li TIME
|
||||
\li Character Time, Character string
|
||||
\li Mapped to QTime
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o Character Time, Character string
|
||||
\o Mapped to QDateTime
|
||||
\li TIMESTAMP
|
||||
\li Character Time, Character string
|
||||
\li Mapped to QDateTime
|
||||
\endtable
|
||||
|
||||
\section2 PostgreSQL Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o PostgreSQL data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li PostgreSQL data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o BOOLEAN
|
||||
\o Boolean
|
||||
\o bool
|
||||
\li BOOLEAN
|
||||
\li Boolean
|
||||
\li bool
|
||||
\row
|
||||
\o SMALLINT
|
||||
\o 16-bit signed integer
|
||||
\o typedef qint16
|
||||
\li SMALLINT
|
||||
\li 16-bit signed integer
|
||||
\li typedef qint16
|
||||
\row
|
||||
\o INTEGER
|
||||
\o 32-bit signed integer
|
||||
\o typedef qint32
|
||||
\li INTEGER
|
||||
\li 32-bit signed integer
|
||||
\li typedef qint32
|
||||
\row
|
||||
\o BIGINT
|
||||
\o 64-bit signed integer
|
||||
\o typedef qint64
|
||||
\li BIGINT
|
||||
\li 64-bit signed integer
|
||||
\li typedef qint64
|
||||
\row
|
||||
\o REAL
|
||||
\o 32-bit variable-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li REAL
|
||||
\li 32-bit variable-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DOUBLE PRECISION
|
||||
\o 64-bit variable-precision floating point
|
||||
\o By default mapping to QString
|
||||
\li DOUBLE PRECISION
|
||||
\li 64-bit variable-precision floating point
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o DECIMAL VARIABLE
|
||||
\o user-specified precision, exact
|
||||
\o Mapped to QString
|
||||
\li DECIMAL VARIABLE
|
||||
\li user-specified precision, exact
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o NUMERIC VARIABLE
|
||||
\o user-specified precision, exact
|
||||
\o Mapped to QString
|
||||
\li NUMERIC VARIABLE
|
||||
\li user-specified precision, exact
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o VARCHAR
|
||||
\o variable-length character string
|
||||
\o Mapped to QString
|
||||
\li VARCHAR
|
||||
\li variable-length character string
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CHARACTER
|
||||
\o Character string of fixed-length
|
||||
\o Mapped to QString
|
||||
\li CHARACTER
|
||||
\li Character string of fixed-length
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o TEXT
|
||||
\o Character string of variable-length
|
||||
\o Mapped to QString
|
||||
\li TEXT
|
||||
\li Character string of variable-length
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o 8 bytes, both date and time
|
||||
\o Mapped to QDateTime
|
||||
\li TIMESTAMP
|
||||
\li 8 bytes, both date and time
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o 8 bytes, both date and time, with time zone
|
||||
\o Mapped to QDateTime
|
||||
\li TIMESTAMP
|
||||
\li 8 bytes, both date and time, with time zone
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o DATE
|
||||
\o 4 bytes, dates only
|
||||
\o Mapped to QDate
|
||||
\li DATE
|
||||
\li 4 bytes, dates only
|
||||
\li Mapped to QDate
|
||||
\row
|
||||
\o TIME
|
||||
\o 8 bytes, times of day only 00:00:00.00 - 23:59:59.99
|
||||
\o Mapped to QTime
|
||||
\li TIME
|
||||
\li 8 bytes, times of day only 00:00:00.00 - 23:59:59.99
|
||||
\li Mapped to QTime
|
||||
\row
|
||||
\o TIME
|
||||
\o 12 bytes times of day only, with time zone 00:00:00.00+12
|
||||
\o Mapped to QDateTime
|
||||
\li TIME
|
||||
\li 12 bytes times of day only, with time zone 00:00:00.00+12
|
||||
\li Mapped to QDateTime
|
||||
\endtable
|
||||
|
||||
\section2 QSQLITE SQLite version 3 Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o QSQLITE SQLite version 3 data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li QSQLITE SQLite version 3 data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o NULL
|
||||
\o NULL value.
|
||||
\o NULL
|
||||
\li NULL
|
||||
\li NULL value.
|
||||
\li NULL
|
||||
\row
|
||||
\o INTEGER
|
||||
\o Signed integer, stored in 8, 16, 24, 32, 48, or 64-bits
|
||||
\li INTEGER
|
||||
\li Signed integer, stored in 8, 16, 24, 32, 48, or 64-bits
|
||||
depending on the magnitude of the value.
|
||||
\o typedef qint8/16/32/64
|
||||
\li typedef qint8/16/32/64
|
||||
\row
|
||||
\o REAL
|
||||
\o 64-bit floating point value.
|
||||
\o By default mapping to QString
|
||||
\li REAL
|
||||
\li 64-bit floating point value.
|
||||
\li By default mapping to QString
|
||||
\row
|
||||
\o TEXT
|
||||
\o Character string (UTF-8, UTF-16BE or UTF-16-LE).
|
||||
\o Mapped to QString
|
||||
\li TEXT
|
||||
\li Character string (UTF-8, UTF-16BE or UTF-16-LE).
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o BLOB
|
||||
\o The value is a BLOB of data, stored exactly as it was input.
|
||||
\o Mapped to QByteArray
|
||||
\li BLOB
|
||||
\li The value is a BLOB of data, stored exactly as it was input.
|
||||
\li Mapped to QByteArray
|
||||
\endtable
|
||||
|
||||
\section2 Sybase Adaptive Server Data Types
|
||||
|
||||
\table 90%
|
||||
\header
|
||||
\o Sybase Adaptive Server data type
|
||||
\o SQL type description
|
||||
\o Recommended input (C++ or Qt data type)
|
||||
\li Sybase Adaptive Server data type
|
||||
\li SQL type description
|
||||
\li Recommended input (C++ or Qt data type)
|
||||
\row
|
||||
\o BINARY
|
||||
\o Describes a fixed-length binary value up to 255 bytes in size.
|
||||
\o Mapped to QByteArray
|
||||
\li BINARY
|
||||
\li Describes a fixed-length binary value up to 255 bytes in size.
|
||||
\li Mapped to QByteArray
|
||||
\row
|
||||
\o CHAR
|
||||
\o Character String
|
||||
\o Mapped to QString
|
||||
\li CHAR
|
||||
\li Character String
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o DATETIME
|
||||
\o Date and time. Range: 1753-01-01 00:00:00 through 9999-12-31 23:59:59.
|
||||
\o Mapped to QDateTime
|
||||
\li DATETIME
|
||||
\li Date and time. Range: 1753-01-01 00:00:00 through 9999-12-31 23:59:59.
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o NCHAR
|
||||
\o Character String of fixed length
|
||||
\o Mapped to QString
|
||||
\li NCHAR
|
||||
\li Character String of fixed length
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o NVARACHAR
|
||||
\o Character String of variable length
|
||||
\o Mapped to QString
|
||||
\li NVARACHAR
|
||||
\li Character String of variable length
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o VARCHAR
|
||||
\o Character String of fixed length
|
||||
\o Mapped to QString
|
||||
\li VARCHAR
|
||||
\li Character String of fixed length
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o CLOB
|
||||
\o Character large string object
|
||||
\o Mapped to QString
|
||||
\li CLOB
|
||||
\li Character large string object
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o TIMESTAMP
|
||||
\o A unique number within a database
|
||||
\o Mapped to QString
|
||||
\li TIMESTAMP
|
||||
\li A unique number within a database
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o SMALLDATETIME
|
||||
\o Date and time. Range: 1900-01-01 00:00 through 2079-12-31 23:59
|
||||
\o Mapped to QDateTime
|
||||
\li SMALLDATETIME
|
||||
\li Date and time. Range: 1900-01-01 00:00 through 2079-12-31 23:59
|
||||
\li Mapped to QDateTime
|
||||
\row
|
||||
\o UNICHAR
|
||||
\o Character String of fixed length.(Unicode)
|
||||
\o Mapped to QString
|
||||
\li UNICHAR
|
||||
\li Character String of fixed length.(Unicode)
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o UNIVARCHAR
|
||||
\o Character String of variable length.(Unicode)
|
||||
\o Mapped to QString
|
||||
\li UNIVARCHAR
|
||||
\li Character String of variable length.(Unicode)
|
||||
\li Mapped to QString
|
||||
\row
|
||||
\o VARBINARY
|
||||
\o Describes a variable-length binary value up to 255 bytes in size
|
||||
\o Mapped to QByteArray
|
||||
\li VARBINARY
|
||||
\li Describes a variable-length binary value up to 255 bytes in size
|
||||
\li Mapped to QByteArray
|
||||
\endtable
|
||||
|
||||
\section2 SQLite Version 2
|
||||
|
@ -49,18 +49,18 @@
|
||||
are provided with Open Source Versions of Qt.
|
||||
|
||||
\table
|
||||
\header \o Driver name \o DBMS
|
||||
\row \o \link #QDB2 QDB2\endlink \o IBM DB2 (version 7.1 and above)
|
||||
\row \o \link #QIBASE QIBASE\endlink \o Borland InterBase
|
||||
\row \o \link #QMYSQL QMYSQL\endlink \o MySQL
|
||||
\row \o \link #QOCI QOCI\endlink \o Oracle Call Interface Driver
|
||||
\row \o \link #QODBC QODBC\endlink
|
||||
\o Open Database Connectivity (ODBC) - Microsoft SQL Server and other
|
||||
\header \li Driver name \li DBMS
|
||||
\row \li \link #QDB2 QDB2\endlink \li IBM DB2 (version 7.1 and above)
|
||||
\row \li \link #QIBASE QIBASE\endlink \li Borland InterBase
|
||||
\row \li \link #QMYSQL QMYSQL\endlink \li MySQL
|
||||
\row \li \link #QOCI QOCI\endlink \li Oracle Call Interface Driver
|
||||
\row \li \link #QODBC QODBC\endlink
|
||||
\li Open Database Connectivity (ODBC) - Microsoft SQL Server and other
|
||||
ODBC-compliant databases
|
||||
\row \o \link #QPSQL QPSQL\endlink \o PostgreSQL (versions 7.3 and above)
|
||||
\row \o \link #QSQLITE2 QSQLITE2\endlink \o SQLite version 2
|
||||
\row \o \link #QSQLITE QSQLITE\endlink \o SQLite version 3
|
||||
\row \o \link #QTDS QTDS\endlink \o Sybase Adaptive Server \note obsolete from Qt 4.7
|
||||
\row \li \link #QPSQL QPSQL\endlink \li PostgreSQL (versions 7.3 and above)
|
||||
\row \li \link #QSQLITE2 QSQLITE2\endlink \li SQLite version 2
|
||||
\row \li \link #QSQLITE QSQLITE\endlink \li SQLite version 3
|
||||
\row \li \link #QTDS QTDS\endlink \li Sybase Adaptive Server \note obsolete from Qt 4.7
|
||||
\endtable
|
||||
|
||||
SQLite is the in-process database system with the best test coverage
|
||||
@ -69,7 +69,7 @@
|
||||
Linux. The completeness of the support for other systems depends on the
|
||||
availability and quality of client libraries.
|
||||
|
||||
\bold{Note:} To build a driver plugin you need to have the appropriate
|
||||
\b{Note:} To build a driver plugin you need to have the appropriate
|
||||
client library for your Database Management System (DBMS). This provides
|
||||
access to the API exposed by the DBMS, and is typically shipped with it.
|
||||
Most installation programs also allow you to install "development
|
||||
@ -123,7 +123,7 @@
|
||||
|
||||
\snippet doc/src/snippets/code/doc_src_sql-driver.cpp 2
|
||||
|
||||
\bold{Note:} \c{@outval1} and \c{@outval2} are variables local to the current
|
||||
\b{Note:} \c{@outval1} and \c{@outval2} are variables local to the current
|
||||
connection and will not be affected by queries sent from another host
|
||||
or connection.
|
||||
|
||||
@ -185,59 +185,59 @@
|
||||
|
||||
\list
|
||||
|
||||
\o Download the following components:
|
||||
\li Download the following components:
|
||||
\list
|
||||
\o \c{MinGW-5.1.6.exe}
|
||||
\o \c{mingw-utils-0.3.tar.gz}
|
||||
\o Qt sources, e.g. \c{qt-everywhere-opensource-src-4.6.2.zip}
|
||||
\o \c{mysql-5.1.35-win32.msi}
|
||||
\li \c{MinGW-5.1.6.exe}
|
||||
\li \c{mingw-utils-0.3.tar.gz}
|
||||
\li Qt sources, e.g. \c{qt-everywhere-opensource-src-4.6.2.zip}
|
||||
\li \c{mysql-5.1.35-win32.msi}
|
||||
\endlist
|
||||
|
||||
\o Install \c{MinGW-5.1.6.exe} in, e.g. \c{C:\MinGW}.
|
||||
\li Install \c{MinGW-5.1.6.exe} in, e.g. \c{C:\MinGW}.
|
||||
|
||||
\o Extract \c{mingw-utils-0.3.tar.gz} into, e.g. \c{C:\MinGW}.
|
||||
\li Extract \c{mingw-utils-0.3.tar.gz} into, e.g. \c{C:\MinGW}.
|
||||
|
||||
\o Add the path for \c{MinGW-5.1.6.exe} to your \c{PATH} variable,
|
||||
\li Add the path for \c{MinGW-5.1.6.exe} to your \c{PATH} variable,
|
||||
e.g. \c{C:\MinGW\bin;}
|
||||
|
||||
\o Extract the Qt sources, (\c{qt-everywhere-opensource-src-4.6.2.zip}),
|
||||
\li Extract the Qt sources, (\c{qt-everywhere-opensource-src-4.6.2.zip}),
|
||||
into, e.g. \c{C:\Qt}.
|
||||
|
||||
\o Add the path for the eventual Qt binary to your \c{PATH} variable,
|
||||
\li Add the path for the eventual Qt binary to your \c{PATH} variable,
|
||||
e.g. \c{C:\Qt\4.6.2\bin;}.
|
||||
|
||||
\o Install MySQL (\c{mysql-5.1.35-win32.msi}), customizing the
|
||||
\li Install MySQL (\c{mysql-5.1.35-win32.msi}), customizing the
|
||||
components. Select only the headers and libraries. Install in,
|
||||
e.g. \c{C:\MySQL\MySQL51}.
|
||||
|
||||
\o Open the DOS prompt, go to \c{C:\MySQL\MySQL51\lib\opt}, and run
|
||||
\li Open the DOS prompt, go to \c{C:\MySQL\MySQL51\lib\opt}, and run
|
||||
the following commands:
|
||||
\list
|
||||
\o \c{reimp -d libmysql.lib}
|
||||
\o \c{dlltool -k -d libmysql.def -l libmysql.a}
|
||||
\li \c{reimp -d libmysql.lib}
|
||||
\li \c{dlltool -k -d libmysql.def -l libmysql.a}
|
||||
\endlist
|
||||
|
||||
\o Open the DOS prompt, go to \c{C:\Qt\4.6.2} and run the following commands:
|
||||
\li Open the DOS prompt, go to \c{C:\Qt\4.6.2} and run the following commands:
|
||||
\list
|
||||
\o \c{configure.exe -debug-and-release -platform win32-g++ -qt-sql-mysql
|
||||
\li \c{configure.exe -debug-and-release -platform win32-g++ -qt-sql-mysql
|
||||
-l mysql -I C:\MySQL\MySQL51\include -L C:\MySQL\MySQL51\lib\opt}
|
||||
\o \c{mingw32-make sub-src}
|
||||
\li \c{mingw32-make sub-src}
|
||||
\endlist
|
||||
This step takes a long time.
|
||||
|
||||
\o Open the DOS prompt, go to
|
||||
\li Open the DOS prompt, go to
|
||||
\c{C:\Qt\4.6.2\src\plugins\sqldrivers\mysql} and run the
|
||||
following command:
|
||||
\list
|
||||
\o \c{qmake "INCLUDEPATH+=C:\MySQL\MySQL51\include" "LIBS+=-L. mysql" mysql.pro}
|
||||
\li \c{qmake "INCLUDEPATH+=C:\MySQL\MySQL51\include" "LIBS+=-L. mysql" mysql.pro}
|
||||
\endlist
|
||||
|
||||
\o Now the following libraries are ready in \c{C:\Qt\4.6.2\plugins\sqldrivers}.
|
||||
\li Now the following libraries are ready in \c{C:\Qt\4.6.2\plugins\sqldrivers}.
|
||||
\list
|
||||
\o \c{libqsqlmysql4.a}
|
||||
\o \c{libqsqlmysqld4.a}
|
||||
\o \c{qsqlmysql4.dll}
|
||||
\o \c{qsqlmysqld4.dll}
|
||||
\li \c{libqsqlmysql4.a}
|
||||
\li \c{libqsqlmysqld4.a}
|
||||
\li \c{qsqlmysql4.dll}
|
||||
\li \c{qsqlmysqld4.dll}
|
||||
\endlist
|
||||
To use the SDK and QtCreator directly, copy these libraries to
|
||||
your \c{C:\Qt\...\qt\plugins\sqldrivers\}, and copy
|
||||
@ -287,8 +287,8 @@
|
||||
Oracle library files required to build the driver:
|
||||
|
||||
\list
|
||||
\i \c libclntsh.so (all versions)
|
||||
\i \c libwtc9.so (only Oracle 9)
|
||||
\li \c libclntsh.so (all versions)
|
||||
\li \c libwtc9.so (only Oracle 9)
|
||||
\endlist
|
||||
|
||||
Tell \c qmake where to find the Oracle header files and shared
|
||||
@ -301,7 +301,7 @@
|
||||
Instant Client Package SDK (you need to adjust the version number accordingly):
|
||||
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 7
|
||||
|
||||
\bold{Note:} If you are using the Oracle Instant Client package,
|
||||
\b{Note:} If you are using the Oracle Instant Client package,
|
||||
you will need to set LD_LIBRARY_PATH when building the OCI SQL plugin
|
||||
and when running an application that uses the OCI SQL plugin. You can
|
||||
avoid this requirement by setting and RPATH and listing all of the
|
||||
@ -331,7 +331,7 @@
|
||||
|
||||
\snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 9
|
||||
|
||||
\bold{Note:} This database plugin is not supported for Windows CE.
|
||||
\b{Note:} This database plugin is not supported for Windows CE.
|
||||
|
||||
\target QODBC
|
||||
\section2 QODBC for Open Database Connectivity (ODBC)
|
||||
@ -345,7 +345,7 @@
|
||||
driver manager that is installed on your system. The QODBC plugin
|
||||
then allows you to use these data sources in your Qt applications.
|
||||
|
||||
\bold{Note:} You should use native drivers in preference to the ODBC
|
||||
\b{Note:} You should use native drivers in preference to the ODBC
|
||||
driver where they are available. ODBC support can be used as a fallback
|
||||
for compliant databases if no native drivers are available.
|
||||
|
||||
@ -396,7 +396,7 @@
|
||||
|
||||
\snippet doc/src/snippets/code/doc_src_sql-driver.cpp 10
|
||||
|
||||
\bold{Note:} The value returned by the stored procedure's return statement
|
||||
\b{Note:} The value returned by the stored procedure's return statement
|
||||
is discarded.
|
||||
|
||||
\section3 ODBC Unicode Support
|
||||
@ -435,7 +435,7 @@
|
||||
If you are not using a Microsoft compiler, replace \c nmake with \c
|
||||
make in the line above.
|
||||
|
||||
\bold{Note:} This database plugin is not officially supported for Windows CE.
|
||||
\b{Note:} This database plugin is not officially supported for Windows CE.
|
||||
|
||||
\target QPSQL
|
||||
\section2 QPSQL for PostgreSQL (Version 7.3 and Above)
|
||||
@ -496,7 +496,7 @@
|
||||
Users of MinGW may wish to consult the following online document:
|
||||
\l{PostgreSQL MinGW/Native Windows}.
|
||||
|
||||
\bold{Note:} This database plugin is not supported for Windows CE.
|
||||
\b{Note:} This database plugin is not supported for Windows CE.
|
||||
|
||||
\target QTDS
|
||||
\section2 QTDS for Sybase Adaptive Server
|
||||
@ -515,11 +515,11 @@
|
||||
Under Unix, two libraries are available which support the TDS protocol:
|
||||
|
||||
\list
|
||||
\i FreeTDS, a free implementation of the TDS protocol
|
||||
\li FreeTDS, a free implementation of the TDS protocol
|
||||
(\l{http://www.freetds.org}). Note that FreeTDS is not yet stable,
|
||||
so some functionality may not work as expected.
|
||||
|
||||
\i Sybase Open Client, available from \l{http://www.sybase.com}.
|
||||
\li Sybase Open Client, available from \l{http://www.sybase.com}.
|
||||
Note for Linux users: Get the Open Client RPM from
|
||||
\l{http://linux.sybase.com}.
|
||||
\endlist
|
||||
@ -545,7 +545,7 @@
|
||||
are not using a Microsoft compiler, replace \c nmake with \c make in
|
||||
the line above.
|
||||
|
||||
\bold{Note:} This database plugin is not supported for Windows CE.
|
||||
\b{Note:} This database plugin is not supported for Windows CE.
|
||||
|
||||
\target QDB2
|
||||
\section2 QDB2 for IBM DB2 (Version 7.1 and Above)
|
||||
@ -582,7 +582,7 @@
|
||||
If you are not using a Microsoft compiler, replace \c nmake
|
||||
with \c make in the line above.
|
||||
|
||||
\bold{Note:} This database plugin is not supported for Windows CE.
|
||||
\b{Note:} This database plugin is not supported for Windows CE.
|
||||
|
||||
\target QSQLITE2
|
||||
\section2 QSQLITE2 for SQLite Version 2
|
||||
@ -745,7 +745,7 @@
|
||||
|
||||
Note that \c{C:\interbase\bin} must be in the \c PATH.
|
||||
|
||||
\bold{Note:} This database plugin is not supported for Windows CE.
|
||||
\b{Note:} This database plugin is not supported for Windows CE.
|
||||
|
||||
\target troubleshooting
|
||||
\section1 Troubleshooting
|
||||
@ -763,16 +763,16 @@
|
||||
make sure that the following requirements are met:
|
||||
|
||||
\list
|
||||
\i Ensure that you are using a shared Qt library; you cannot use the
|
||||
\li Ensure that you are using a shared Qt library; you cannot use the
|
||||
plugins with a static build.
|
||||
\i Ensure that the plugin is in the correct directory. You can use
|
||||
\li Ensure that the plugin is in the correct directory. You can use
|
||||
QApplication::libraryPaths() to determine where Qt looks for plugins.
|
||||
\i Ensure that the client libraries of the DBMS are available on the
|
||||
\li Ensure that the client libraries of the DBMS are available on the
|
||||
system. On Unix, run the command \c{ldd} and pass the name of the
|
||||
plugin as parameter, for example \c{ldd libqsqlmysql.so}. You will
|
||||
get a warning if any of the client libraries couldn't be found.
|
||||
On Windows, you can use Visual Studio's dependency walker.
|
||||
\i Compile Qt with \c{QT_DEBUG_COMPONENT} defined to get very verbose
|
||||
\li Compile Qt with \c{QT_DEBUG_COMPONENT} defined to get very verbose
|
||||
debug output when loading plugins.
|
||||
\endlist
|
||||
|
||||
|
@ -52,18 +52,18 @@
|
||||
\section1 Topics:
|
||||
|
||||
\list
|
||||
\o \l{Database Classes}
|
||||
\o \l{Connecting to Databases}
|
||||
\li \l{Database Classes}
|
||||
\li \l{Connecting to Databases}
|
||||
\list
|
||||
\o \l{SQL Database Drivers}
|
||||
\li \l{SQL Database Drivers}
|
||||
\endlist
|
||||
\o \l{Executing SQL Statements}
|
||||
\li \l{Executing SQL Statements}
|
||||
\list
|
||||
\o \l{Data Types for Qt-supported Database Systems}
|
||||
\li \l{Data Types for Qt-supported Database Systems}
|
||||
\endlist
|
||||
\o \l{Using the SQL Model Classes}
|
||||
\o \l{Presenting Data in a Table View}
|
||||
\o \l{Creating Data-Aware Forms}
|
||||
\li \l{Using the SQL Model Classes}
|
||||
\li \l{Presenting Data in a Table View}
|
||||
\li \l{Creating Data-Aware Forms}
|
||||
\endlist
|
||||
|
||||
\section1 Database Classes
|
||||
@ -338,12 +338,12 @@
|
||||
QSqlTableModel, and QSqlRelationalTableModel.
|
||||
|
||||
\table
|
||||
\row \o QSqlQueryModel
|
||||
\o A read-only model based on an arbitrary SQL query.
|
||||
\row \o QSqlTableModel
|
||||
\o A read-write model that works on a single table.
|
||||
\row \o QSqlRelationalTableModel
|
||||
\o A QSqlTableModel subclass with foreign key support.
|
||||
\row \li QSqlQueryModel
|
||||
\li A read-only model based on an arbitrary SQL query.
|
||||
\row \li QSqlTableModel
|
||||
\li A read-write model that works on a single table.
|
||||
\row \li QSqlRelationalTableModel
|
||||
\li A QSqlTableModel subclass with foreign key support.
|
||||
\endtable
|
||||
|
||||
These classes derive from QAbstractTableModel (which in turn
|
||||
@ -435,8 +435,8 @@
|
||||
pitfalls, though:
|
||||
|
||||
\list
|
||||
\o Without any caching, performance may drop significantly.
|
||||
\o If you modify a primary key, the record might slip through
|
||||
\li Without any caching, performance may drop significantly.
|
||||
\li If you modify a primary key, the record might slip through
|
||||
your fingers while you are trying to populate it.
|
||||
\endlist
|
||||
|
||||
@ -450,8 +450,8 @@
|
||||
that \c authorid is a foreign key.
|
||||
|
||||
\table
|
||||
\row \o \inlineimage noforeignkeys.png
|
||||
\o \inlineimage foreignkeys.png
|
||||
\row \li \inlineimage noforeignkeys.png
|
||||
\li \inlineimage foreignkeys.png
|
||||
\endtable
|
||||
|
||||
The screenshot on the left shows a plain QSqlTableModel in a
|
||||
|
@ -40,10 +40,10 @@
|
||||
par Qt, tel que:
|
||||
|
||||
\list
|
||||
\o Les Widgets et leur mise en page à l'aide des layouts
|
||||
\o Les signaux et slots
|
||||
\o Les structures de données de collections
|
||||
\o Les entrées/sorties
|
||||
\li Les Widgets et leur mise en page à l'aide des layouts
|
||||
\li Les signaux et slots
|
||||
\li Les structures de données de collections
|
||||
\li Les entrées/sorties
|
||||
\endlist
|
||||
|
||||
Si c'est votre premier contact avec Qt, lisez \l{How to Learn Qt}{Comment apprendre Qt}
|
||||
@ -54,13 +54,13 @@
|
||||
Les chapitres du tutoriel:
|
||||
|
||||
\list 1
|
||||
\o \l{tutorials/addressbook-fr/part1}{Conception de l'interface utilisateur}
|
||||
\o \l{tutorials/addressbook-fr/part2}{Ajouter des adresses}
|
||||
\o \l{tutorials/addressbook-fr/part3}{Navigation entre les éléments}
|
||||
\o \l{tutorials/addressbook-fr/part4}{éditer et supprimer des adresses}
|
||||
\o \l{tutorials/addressbook-fr/part5}{Ajout d'une fonction de recherche}
|
||||
\o \l{tutorials/addressbook-fr/part6}{Sauvegarde et chargement}
|
||||
\o \l{tutorials/addressbook-fr/part7}{Fonctionnalités avancées}
|
||||
\li \l{tutorials/addressbook-fr/part1}{Conception de l'interface utilisateur}
|
||||
\li \l{tutorials/addressbook-fr/part2}{Ajouter des adresses}
|
||||
\li \l{tutorials/addressbook-fr/part3}{Navigation entre les éléments}
|
||||
\li \l{tutorials/addressbook-fr/part4}{éditer et supprimer des adresses}
|
||||
\li \l{tutorials/addressbook-fr/part5}{Ajout d'une fonction de recherche}
|
||||
\li \l{tutorials/addressbook-fr/part6}{Sauvegarde et chargement}
|
||||
\li \l{tutorials/addressbook-fr/part7}{Fonctionnalités avancées}
|
||||
\endlist
|
||||
|
||||
La petite application que nous développerons ici ne possède pas tous les éléments
|
||||
@ -99,10 +99,10 @@
|
||||
Trois fichiers sont nécessaires à l'implémentation de ce carnet d'adresses:
|
||||
|
||||
\list
|
||||
\o \c{addressbook.h} - le fichier de définition (header) pour la classe \c AddressBook,
|
||||
\o \c{addressbook.cpp} - le fichier source, qui comprend l'implémentation de la classe
|
||||
\li \c{addressbook.h} - le fichier de définition (header) pour la classe \c AddressBook,
|
||||
\li \c{addressbook.cpp} - le fichier source, qui comprend l'implémentation de la classe
|
||||
\c AddressBook
|
||||
\o \c{main.cpp} - le fichier qui contient la méthode \c main() , et
|
||||
\li \c{main.cpp} - le fichier qui contient la méthode \c main() , et
|
||||
une instance de la classe \c AddressBook.
|
||||
\endlist
|
||||
|
||||
@ -116,13 +116,13 @@
|
||||
ou modifier le comportement d'un widget présente les avantages suivants:
|
||||
|
||||
\list
|
||||
\o La possibilité d'implémenter des méthodes virtuelles et des méthodes
|
||||
\li La possibilité d'implémenter des méthodes virtuelles et des méthodes
|
||||
virtuelles pures pour obtenir exactement ce que l'on souhaite, avec la possibilité
|
||||
d'utiliser l'implémentation de la classe mère si besoin est.
|
||||
\o Cela permet l'encapsulation partielle de l'interface utilisateur dans une classe,
|
||||
\li Cela permet l'encapsulation partielle de l'interface utilisateur dans une classe,
|
||||
afin que les autres parties de l'application n'aient pas à se soucier de chacun des
|
||||
widgets qui forment l'interface utilisateur.
|
||||
\o La classe fille peut être utilisée pour créer de nombreux widgets personnalisés
|
||||
\li La classe fille peut être utilisée pour créer de nombreux widgets personnalisés
|
||||
dans une même application ou bibliothèque, et le code de la classe fille peut être
|
||||
réutilisé dans d'autres projets
|
||||
\endlist
|
||||
@ -343,7 +343,7 @@
|
||||
La méthode \c submitContact() peut être divisée en trois parties:
|
||||
|
||||
\list 1
|
||||
\o Nous extrayons les détails du contact depuis \c nameLine et \c addressText
|
||||
\li Nous extrayons les détails du contact depuis \c nameLine et \c addressText
|
||||
et les stockons dans des objets QString. Nous les validons pour s'assurer
|
||||
que l'utilisateur n'a pas cliqué sur "Add" avec des champs de saisie
|
||||
vides; sinon un message est affiché avec QMessageBox pour rappeller à
|
||||
@ -351,7 +351,7 @@
|
||||
|
||||
\snippet tutorials/addressbook/part2/addressbook.cpp submitContact part1
|
||||
|
||||
\o Ensuite, nous vérifions si le contact existe déjà. Si aucun contacts
|
||||
\li Ensuite, nous vérifions si le contact existe déjà. Si aucun contacts
|
||||
existant n'entre en conflit avec le nouveau, nous l'ajoutons à
|
||||
\c contacts et nous affichons un QMessageBox pour informer l'utilisateur
|
||||
que le contact a été ajouté.
|
||||
@ -363,7 +363,7 @@
|
||||
Notre objet \c contacts est basé sur des paires clé-valeur formés par
|
||||
le nom et l'adresse, nous voulons nous assurer que la \e clé est unique.
|
||||
|
||||
\o Une fois que les deux vérifications précédentes ont été traitées,
|
||||
\li Une fois que les deux vérifications précédentes ont été traitées,
|
||||
nous restaurons les boutons à leur état normal à l'aide du code
|
||||
suivant:
|
||||
|
||||
@ -482,8 +482,8 @@
|
||||
sur \c contact dans la méthode \c next(), et ensuite:
|
||||
|
||||
\list
|
||||
\o Si l'itérateur n'est pas à la fin de \c contacts, nous l'incrémentons
|
||||
\o Si l'itérateur est à la fin de \c contacts, nous changeons sa position
|
||||
\li Si l'itérateur n'est pas à la fin de \c contacts, nous l'incrémentons
|
||||
\li Si l'itérateur est à la fin de \c contacts, nous changeons sa position
|
||||
jusqu'au début de \c contacts. Cela donne l'illusion que notre QMap
|
||||
fonctionne comme une liste circulaire.
|
||||
\endlist
|
||||
@ -497,11 +497,11 @@
|
||||
itérateur sur \c contacts et ensuite:
|
||||
|
||||
\list
|
||||
\o Si l'itérateur est à la fin de \c contacts, on réinitialise
|
||||
\li Si l'itérateur est à la fin de \c contacts, on réinitialise
|
||||
l'affichage et on retourne.
|
||||
\o Si l'itérateur est au début de \c contacts, on change sa
|
||||
\li Si l'itérateur est au début de \c contacts, on change sa
|
||||
position jusqu'à la fin
|
||||
\o Ensuite, on décrémente l'itérateur
|
||||
\li Ensuite, on décrémente l'itérateur
|
||||
\endlist
|
||||
|
||||
\snippet tutorials/addressbook/part3/addressbook.cpp previous() function
|
||||
@ -538,9 +538,9 @@
|
||||
Dans ce chapitre, on définit l'énumération \c Mode avec trois valeurs possibles.
|
||||
|
||||
\list
|
||||
\o \c{NavigationMode},
|
||||
\o \c{AddingMode}, et
|
||||
\o \c{EditingMode}.
|
||||
\li \c{NavigationMode},
|
||||
\li \c{AddingMode}, et
|
||||
\li \c{EditingMode}.
|
||||
\endlist
|
||||
|
||||
\section1 Définition de la classe AddressBook
|
||||
|
@ -47,10 +47,10 @@
|
||||
components of Qt, including:
|
||||
|
||||
\list
|
||||
\o Widgets and layout managers
|
||||
\o Container classes
|
||||
\o Signals and slots
|
||||
\o Input and output devices
|
||||
\li Widgets and layout managers
|
||||
\li Container classes
|
||||
\li Signals and slots
|
||||
\li Input and output devices
|
||||
\endlist
|
||||
|
||||
If you are new to Qt, we recommend reading \l{How to Learn Qt} first.
|
||||
@ -58,13 +58,13 @@
|
||||
Tutorial contents:
|
||||
|
||||
\list 1
|
||||
\o \l{tutorials/addressbook/part1}{Designing the User Interface}
|
||||
\o \l{tutorials/addressbook/part2}{Adding Addresses}
|
||||
\o \l{tutorials/addressbook/part3}{Navigating between Entries}
|
||||
\o \l{tutorials/addressbook/part4}{Editing and Removing Addresses}
|
||||
\o \l{tutorials/addressbook/part5}{Adding a Find Function}
|
||||
\o \l{tutorials/addressbook/part6}{Loading and Saving}
|
||||
\o \l{tutorials/addressbook/part7}{Additional Features}
|
||||
\li \l{tutorials/addressbook/part1}{Designing the User Interface}
|
||||
\li \l{tutorials/addressbook/part2}{Adding Addresses}
|
||||
\li \l{tutorials/addressbook/part3}{Navigating between Entries}
|
||||
\li \l{tutorials/addressbook/part4}{Editing and Removing Addresses}
|
||||
\li \l{tutorials/addressbook/part5}{Adding a Find Function}
|
||||
\li \l{tutorials/addressbook/part6}{Loading and Saving}
|
||||
\li \l{tutorials/addressbook/part7}{Additional Features}
|
||||
\endlist
|
||||
|
||||
The tutorial source code is located in \c{examples/tutorials/addressbook}.
|
||||
@ -105,11 +105,11 @@
|
||||
There are three files used to implement this address book:
|
||||
|
||||
\list
|
||||
\o \c{addressbook.h} - the definition file for the \c AddressBook
|
||||
\li \c{addressbook.h} - the definition file for the \c AddressBook
|
||||
class,
|
||||
\o \c{addressbook.cpp} - the implementation file for the
|
||||
\li \c{addressbook.cpp} - the implementation file for the
|
||||
\c AddressBook class, and
|
||||
\o \c{main.cpp} - the file containing a \c main() function, with
|
||||
\li \c{main.cpp} - the file containing a \c main() function, with
|
||||
an instance of \c AddressBook.
|
||||
\endlist
|
||||
|
||||
@ -121,13 +121,13 @@
|
||||
extend or change the behavior of a widget has the following advantages:
|
||||
|
||||
\list
|
||||
\o We can write implementations of virtual or pure virtual functions to
|
||||
\li We can write implementations of virtual or pure virtual functions to
|
||||
obtain exactly what we need, falling back on the base class's implementation
|
||||
when necessary.
|
||||
\o It allows us to encapsulate parts of the user interface within a class,
|
||||
\li It allows us to encapsulate parts of the user interface within a class,
|
||||
so that the other parts of the application don't need to know about the
|
||||
individual widgets in the user interface.
|
||||
\o The subclass can be used to create multiple custom widgets in the same
|
||||
\li The subclass can be used to create multiple custom widgets in the same
|
||||
application or library, and the code for the subclass can be reused in other
|
||||
projects.
|
||||
\endlist
|
||||
@ -340,14 +340,14 @@
|
||||
The \c submitContact() function can be divided into three parts:
|
||||
|
||||
\list 1
|
||||
\o We extract the contact's details from \c nameLine and \c addressText
|
||||
\li We extract the contact's details from \c nameLine and \c addressText
|
||||
and store them in QString objects. We also validate to make sure that the
|
||||
user did not click \gui Submit with empty input fields; otherwise, a
|
||||
QMessageBox is displayed to remind the user for a name and address.
|
||||
|
||||
\snippet tutorials/addressbook/part2/addressbook.cpp submitContact part1
|
||||
|
||||
\o We then proceed to check if the contact already exists. If it does not
|
||||
\li We then proceed to check if the contact already exists. If it does not
|
||||
exist, we add the contact to \c contacts and we display a QMessageBox to
|
||||
inform the user that the contact has been added.
|
||||
|
||||
@ -358,7 +358,7 @@
|
||||
Our \c contacts object is based on key-value pairs of name and address,
|
||||
hence, we want to ensure that \e key is unique.
|
||||
|
||||
\o Once we have handled both cases mentioned above, we restore the push
|
||||
\li Once we have handled both cases mentioned above, we restore the push
|
||||
buttons to their normal state with the following code:
|
||||
|
||||
\snippet tutorials/addressbook/part2/addressbook.cpp submitContact part3
|
||||
@ -471,9 +471,9 @@
|
||||
for \c contacts and then:
|
||||
|
||||
\list
|
||||
\o If the iterator is not at the end of \c contacts, we increment it
|
||||
\li If the iterator is not at the end of \c contacts, we increment it
|
||||
by one.
|
||||
\o If the iterator is at the end of \c contacts, we move it to the
|
||||
\li If the iterator is at the end of \c contacts, we move it to the
|
||||
beginning of \c contacts. This gives us the illusion that our QMap is
|
||||
working like a circularly-linked list.
|
||||
\endlist
|
||||
@ -487,11 +487,11 @@
|
||||
\c contacts and then:
|
||||
|
||||
\list
|
||||
\o If the iterator is at the end of \c contacts, we clear the
|
||||
\li If the iterator is at the end of \c contacts, we clear the
|
||||
display and return.
|
||||
\o If the iterator is at the beginning of \c contacts, we move it to
|
||||
\li If the iterator is at the beginning of \c contacts, we move it to
|
||||
the end.
|
||||
\o We then decrement the iterator by one.
|
||||
\li We then decrement the iterator by one.
|
||||
\endlist
|
||||
|
||||
\snippet tutorials/addressbook/part3/addressbook.cpp previous() function
|
||||
@ -524,9 +524,9 @@
|
||||
Here we define the \c Mode enum with three different values:
|
||||
|
||||
\list
|
||||
\o \c{NavigationMode},
|
||||
\o \c{AddingMode}, and
|
||||
\o \c{EditingMode}.
|
||||
\li \c{NavigationMode},
|
||||
\li \c{AddingMode}, and
|
||||
\li \c{EditingMode}.
|
||||
\endlist
|
||||
|
||||
\section1 Defining the AddressBook Class
|
||||
|
@ -55,16 +55,16 @@
|
||||
such as:
|
||||
|
||||
\list
|
||||
\o The difference between standard and model/view widgets
|
||||
\o Adapters between forms and models
|
||||
\o Developing a simple model/view application
|
||||
\o Predefined models
|
||||
\o Intermediate topics such as:
|
||||
\li The difference between standard and model/view widgets
|
||||
\li Adapters between forms and models
|
||||
\li Developing a simple model/view application
|
||||
\li Predefined models
|
||||
\li Intermediate topics such as:
|
||||
\list
|
||||
\o Tree views
|
||||
\o Selection
|
||||
\o Delegates
|
||||
\o Debugging with model test
|
||||
\li Tree views
|
||||
\li Selection
|
||||
\li Delegates
|
||||
\li Debugging with model test
|
||||
\endlist
|
||||
\endlist
|
||||
|
||||
@ -91,11 +91,11 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o Standard widgets use data that is part of the widget.
|
||||
\o \image standardwidget.png
|
||||
\li Standard widgets use data that is part of the widget.
|
||||
\li \image standardwidget.png
|
||||
\row
|
||||
\o View classes operate on external data (the model)
|
||||
\o \image modelview.png
|
||||
\li View classes operate on external data (the model)
|
||||
\li \image modelview.png
|
||||
\endtable
|
||||
|
||||
\section2 1.1 Standard Widgets
|
||||
@ -133,30 +133,30 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Widget
|
||||
\o Standard Widget\br
|
||||
\li Widget
|
||||
\li Standard Widget\br
|
||||
(an item based convenience class)
|
||||
\o Model/View View Class\br
|
||||
\li Model/View View Class\br
|
||||
(for use with external data)
|
||||
\row
|
||||
\o \inlineimage listview.png
|
||||
\o \l QListWidget
|
||||
\o \l QListView
|
||||
\li \inlineimage listview.png
|
||||
\li \l QListWidget
|
||||
\li \l QListView
|
||||
\row
|
||||
\o \inlineimage tableview.png
|
||||
\o \l QTableWidget
|
||||
\o \l QTableView
|
||||
\li \inlineimage tableview.png
|
||||
\li \l QTableWidget
|
||||
\li \l QTableView
|
||||
\row
|
||||
\o \inlineimage treeview.png
|
||||
\o \l QTreeWidget
|
||||
\o \l QTreeView
|
||||
\li \inlineimage treeview.png
|
||||
\li \l QTreeWidget
|
||||
\li \l QTreeView
|
||||
\row
|
||||
\o \inlineimage columnview.png
|
||||
\o
|
||||
\o \l QColumnView shows a tree as a hierarchy of lists
|
||||
\li \inlineimage columnview.png
|
||||
\li
|
||||
\li \l QColumnView shows a tree as a hierarchy of lists
|
||||
\row
|
||||
\o \inlineimage modelview-combobox.png
|
||||
\o {2, 1} \l QComboBox can work as both a view class and also
|
||||
\li \inlineimage modelview-combobox.png
|
||||
\li {2, 1} \l QComboBox can work as both a view class and also
|
||||
as a traditional widget
|
||||
\endtable
|
||||
|
||||
@ -212,8 +212,8 @@
|
||||
things:
|
||||
|
||||
\list
|
||||
\o How many rows and columns should be displayed.
|
||||
\o What content should be printed into each cell.
|
||||
\li How many rows and columns should be displayed.
|
||||
\li What content should be printed into each cell.
|
||||
\endlist
|
||||
|
||||
The model needs some code to respond to this.
|
||||
@ -271,33 +271,33 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o \l{Qt::ItemDataRole}{enum Qt::ItemDataRole}
|
||||
\o Meaning
|
||||
\o Type
|
||||
\li \l{Qt::ItemDataRole}{enum Qt::ItemDataRole}
|
||||
\li Meaning
|
||||
\li Type
|
||||
\row
|
||||
\o \l{Qt::ItemDataRole}{}Qt::DisplayRole
|
||||
\o text
|
||||
\o QString
|
||||
\li \l{Qt::ItemDataRole}{}Qt::DisplayRole
|
||||
\li text
|
||||
\li QString
|
||||
\row
|
||||
\o \l{Qt::ItemDataRole}{Qt::FontRole}
|
||||
\o font
|
||||
\o QFont
|
||||
\li \l{Qt::ItemDataRole}{Qt::FontRole}
|
||||
\li font
|
||||
\li QFont
|
||||
\row
|
||||
\o \l{Qt::ItemDataRole}{BackgroundRole}
|
||||
\o brush for the background of the cell
|
||||
\o QBrush
|
||||
\li \l{Qt::ItemDataRole}{BackgroundRole}
|
||||
\li brush for the background of the cell
|
||||
\li QBrush
|
||||
\row
|
||||
\o \l{Qt::ItemDataRole}{Qt::TextAlignmentRole}
|
||||
\o text alignment
|
||||
\o \l{Qt::AlignmentFlag}{enum Qt::AlignmentFlag}
|
||||
\li \l{Qt::ItemDataRole}{Qt::TextAlignmentRole}
|
||||
\li text alignment
|
||||
\li \l{Qt::AlignmentFlag}{enum Qt::AlignmentFlag}
|
||||
\row
|
||||
\o {1, 3} \l{Qt::ItemDataRole}{Qt::CheckStateRole}
|
||||
\o {1, 3} suppresses checkboxes with \l{QVariant}{QVariant()},
|
||||
\li {1, 3} \l{Qt::ItemDataRole}{Qt::CheckStateRole}
|
||||
\li {1, 3} suppresses checkboxes with \l{QVariant}{QVariant()},
|
||||
|
||||
sets checkboxes with \l{Qt::CheckState}{Qt::Checked}
|
||||
|
||||
or \l{Qt::CheckState}{Qt::Unchecked}
|
||||
\o {1, 3} \l{Qt::ItemDataRole}{enum Qt::ItemDataRole}
|
||||
\li {1, 3} \l{Qt::ItemDataRole}{enum Qt::ItemDataRole}
|
||||
\endtable
|
||||
|
||||
Refer to the Qt namespace documentation to learn more about the
|
||||
@ -490,27 +490,27 @@
|
||||
|
||||
\table
|
||||
\row
|
||||
\o QStringListModel
|
||||
\o Stores a list of strings
|
||||
\li QStringListModel
|
||||
\li Stores a list of strings
|
||||
\row
|
||||
\o QStandardItemModel
|
||||
\o Stores arbitrary hierarchical items
|
||||
\li QStandardItemModel
|
||||
\li Stores arbitrary hierarchical items
|
||||
\row
|
||||
\o QFileSystemModel\br
|
||||
\li QFileSystemModel\br
|
||||
QDirModel
|
||||
\o Encapsulate the local file system
|
||||
\li Encapsulate the local file system
|
||||
\row
|
||||
\o QSqlQueryModel
|
||||
\o Encapsulate an SQL result set
|
||||
\li QSqlQueryModel
|
||||
\li Encapsulate an SQL result set
|
||||
\row
|
||||
\o QSqlTableModel
|
||||
\o Encapsulates an SQL table
|
||||
\li QSqlTableModel
|
||||
\li Encapsulates an SQL table
|
||||
\row
|
||||
\o QSqlRelationalTableModel
|
||||
\o Encapsulates an SQL table with foreign keys
|
||||
\li QSqlRelationalTableModel
|
||||
\li Encapsulates an SQL table with foreign keys
|
||||
\row
|
||||
\o QSortFilterProxyModel
|
||||
\o Sorts and/or filters another model
|
||||
\li QSortFilterProxyModel
|
||||
\li Sorts and/or filters another model
|
||||
|
||||
\endtable
|
||||
|
||||
@ -562,11 +562,11 @@
|
||||
Other references to delegates in Qt Documentation:
|
||||
|
||||
\list
|
||||
\o \l{Spin Box Delegate Example}
|
||||
\o \l{QAbstractItemDelegate}{QAbstractItemDelegate Class Reference}
|
||||
\o \l{QSqlRelationalDelegate}{QSqlRelationalDelegate Class Reference}
|
||||
\o \l{QStyledItemDelegate}{QStyledItemDelegate Class Reference}
|
||||
\o \l{QItemDelegate}{QItemDelegate Class Reference}
|
||||
\li \l{Spin Box Delegate Example}
|
||||
\li \l{QAbstractItemDelegate}{QAbstractItemDelegate Class Reference}
|
||||
\li \l{QSqlRelationalDelegate}{QSqlRelationalDelegate Class Reference}
|
||||
\li \l{QStyledItemDelegate}{QStyledItemDelegate Class Reference}
|
||||
\li \l{QItemDelegate}{QItemDelegate Class Reference}
|
||||
\endlist
|
||||
|
||||
|
||||
@ -599,16 +599,16 @@
|
||||
Qt but also in several good books.
|
||||
|
||||
\list 1
|
||||
\o \bold{C++ GUI Programming with Qt 4} / Jasmin Blanchette, Mark Summerfield,
|
||||
\li \b{C++ GUI Programming with Qt 4} / Jasmin Blanchette, Mark Summerfield,
|
||||
\e{Prentice Hall, 2nd edition}, ISBN 0-13-235416-0. Also available in
|
||||
German: \bold{C++ GUI Programmierung mit Qt 4: Die offizielle Einführung},
|
||||
German: \b{C++ GUI Programmierung mit Qt 4: Die offizielle Einführung},
|
||||
\e{Addison-Wesley}, ISBN 3-827327-29-6
|
||||
\o \bold{The Book of Qt4, The Art of Building Qt Applications} / Daniel Molkentin,
|
||||
\li \b{The Book of Qt4, The Art of Building Qt Applications} / Daniel Molkentin,
|
||||
\e{Open Source Press}, ISBN 1-59327-147-6.
|
||||
Translated from \bold{Qt 4, Einführung in die Applikationsentwicklung},
|
||||
Translated from \b{Qt 4, Einführung in die Applikationsentwicklung},
|
||||
\e{Open Source Press}, ISBN 3-937514-12-0.
|
||||
\o \bold{Foundations of Qt Development} / Johan Thelin, \e{Apress}, ISBN 1-59059-831-8.
|
||||
\o \bold{Advanced Qt Programming} / Mark Summerfield, \e{Prentice Hall}, ISBN 0-321-63590-6.
|
||||
\li \b{Foundations of Qt Development} / Johan Thelin, \e{Apress}, ISBN 1-59059-831-8.
|
||||
\li \b{Advanced Qt Programming} / Mark Summerfield, \e{Prentice Hall}, ISBN 0-321-63590-6.
|
||||
This book covers Model/View programming on more than 150 pages.
|
||||
\endlist
|
||||
|
||||
@ -621,157 +621,157 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Example name
|
||||
\o View class used
|
||||
\o Model used
|
||||
\o Aspects covered
|
||||
\o
|
||||
\li Example name
|
||||
\li View class used
|
||||
\li Model used
|
||||
\li Aspects covered
|
||||
\li
|
||||
\row
|
||||
\o Team Leaders
|
||||
\o QListview
|
||||
\o QStringListModel
|
||||
\o
|
||||
\o Book 1, Chapter 10, Figure 10.6
|
||||
\li Team Leaders
|
||||
\li QListview
|
||||
\li QStringListModel
|
||||
\li
|
||||
\li Book 1, Chapter 10, Figure 10.6
|
||||
\row
|
||||
\o Directory Viewer
|
||||
\o QTreeView
|
||||
\o QDirModel
|
||||
\o
|
||||
\o Book 1, Chapter 10, Figure 10.7
|
||||
\li Directory Viewer
|
||||
\li QTreeView
|
||||
\li QDirModel
|
||||
\li
|
||||
\li Book 1, Chapter 10, Figure 10.7
|
||||
\row
|
||||
\o Color Names
|
||||
\o QListView
|
||||
\o QSortFilterProxyModel
|
||||
\li Color Names
|
||||
\li QListView
|
||||
\li QSortFilterProxyModel
|
||||
applied to QStringListModel
|
||||
\o
|
||||
\o Book 1, Chapter 10, Figure 10.8
|
||||
\li
|
||||
\li Book 1, Chapter 10, Figure 10.8
|
||||
\row
|
||||
\o Currencies
|
||||
\o QTableView
|
||||
\o custom model based on
|
||||
\li Currencies
|
||||
\li QTableView
|
||||
\li custom model based on
|
||||
QAbstractTableModel
|
||||
\o Read only
|
||||
\o Book 1, Chapter 10, Figure 10.10
|
||||
\li Read only
|
||||
\li Book 1, Chapter 10, Figure 10.10
|
||||
\row
|
||||
\o Cities
|
||||
\o QTableView
|
||||
\o Custom model based on
|
||||
\li Cities
|
||||
\li QTableView
|
||||
\li Custom model based on
|
||||
QAbstractTableModel
|
||||
\o Read / write
|
||||
\o Book 1, Chapter 10, Figure 10.12
|
||||
\li Read / write
|
||||
\li Book 1, Chapter 10, Figure 10.12
|
||||
\row
|
||||
\o Boolean Parser
|
||||
\o QTreeView
|
||||
\o Custom model based on
|
||||
\li Boolean Parser
|
||||
\li QTreeView
|
||||
\li Custom model based on
|
||||
QAbstractItemModel
|
||||
\o Read only
|
||||
\o Book 1, Chapter 10, Figure 10.14
|
||||
\li Read only
|
||||
\li Book 1, Chapter 10, Figure 10.14
|
||||
\row
|
||||
\o Track Editor
|
||||
\o {2, 1} QTableWidget
|
||||
\o Custom delegate providing a custom editor
|
||||
\o Book 1, Chapter 10, Figure 10.15
|
||||
\li Track Editor
|
||||
\li {2, 1} QTableWidget
|
||||
\li Custom delegate providing a custom editor
|
||||
\li Book 1, Chapter 10, Figure 10.15
|
||||
|
||||
\row
|
||||
\o Four directory views
|
||||
\o QListView
|
||||
\li Four directory views
|
||||
\li QListView
|
||||
QTableView
|
||||
QTreeView
|
||||
\o QDirModel
|
||||
\o Demonstrates the use of multiple views
|
||||
\o Book2, Chapter 8.2
|
||||
\li QDirModel
|
||||
\li Demonstrates the use of multiple views
|
||||
\li Book2, Chapter 8.2
|
||||
\row
|
||||
\o Address Book
|
||||
\o QListView
|
||||
\li Address Book
|
||||
\li QListView
|
||||
QTableView
|
||||
QTreeView
|
||||
\o Custom model based on
|
||||
\li Custom model based on
|
||||
QAbstractTableModel
|
||||
\o Read / write
|
||||
\o Book2, Chapter 8.4
|
||||
\li Read / write
|
||||
\li Book2, Chapter 8.4
|
||||
\row
|
||||
\o Address Book with sorting
|
||||
\o
|
||||
\o QProxyModel
|
||||
\o Introducing sort and filter capabilities
|
||||
\o Book2, Chapter 8.5
|
||||
\li Address Book with sorting
|
||||
\li
|
||||
\li QProxyModel
|
||||
\li Introducing sort and filter capabilities
|
||||
\li Book2, Chapter 8.5
|
||||
\row
|
||||
\o Address Book
|
||||
\li Address Book
|
||||
with checkboxes
|
||||
\o
|
||||
\o
|
||||
\o Introducing checkboxes in model/view
|
||||
\o Book2, Chapter 8.6
|
||||
\li
|
||||
\li
|
||||
\li Introducing checkboxes in model/view
|
||||
\li Book2, Chapter 8.6
|
||||
\row
|
||||
\o Address Book with transposed grid
|
||||
\o
|
||||
\o Custom proxy Model based on QAbstractProxyModel
|
||||
\o Introducing a custom model
|
||||
\o Book2, Chapter 8.7
|
||||
\li Address Book with transposed grid
|
||||
\li
|
||||
\li Custom proxy Model based on QAbstractProxyModel
|
||||
\li Introducing a custom model
|
||||
\li Book2, Chapter 8.7
|
||||
\row
|
||||
\o Address Book with drag and drop
|
||||
\o
|
||||
\o
|
||||
\o Introducing drag and drop support
|
||||
\o Book2, Chapter 8.8
|
||||
\li Address Book with drag and drop
|
||||
\li
|
||||
\li
|
||||
\li Introducing drag and drop support
|
||||
\li Book2, Chapter 8.8
|
||||
\row
|
||||
\o Address Book with custom editor
|
||||
\o
|
||||
\o
|
||||
\o Introducing custom delegates
|
||||
\o Book2, Chapter 8.9
|
||||
\li Address Book with custom editor
|
||||
\li
|
||||
\li
|
||||
\li Introducing custom delegates
|
||||
\li Book2, Chapter 8.9
|
||||
\row
|
||||
\o Views
|
||||
\o QListView
|
||||
\li Views
|
||||
\li QListView
|
||||
QTableView
|
||||
QTreeView
|
||||
\o QStandardItemModel
|
||||
\o Read only
|
||||
\o Book 3, Chapter 5, figure 5-3
|
||||
\li QStandardItemModel
|
||||
\li Read only
|
||||
\li Book 3, Chapter 5, figure 5-3
|
||||
\row
|
||||
\o Bardelegate
|
||||
\o QTableView
|
||||
\o
|
||||
\o Custom delegate for presentation based on QAbstractItemDelegate
|
||||
\o Book 3, Chapter 5, figure 5-5
|
||||
\li Bardelegate
|
||||
\li QTableView
|
||||
\li
|
||||
\li Custom delegate for presentation based on QAbstractItemDelegate
|
||||
\li Book 3, Chapter 5, figure 5-5
|
||||
\row
|
||||
\o Editdelegate
|
||||
\o QTableView
|
||||
\o
|
||||
\o Custom delegate for editing based on QAbstractItemDelegate
|
||||
\o Book 3, Chapter 5, figure 5-6
|
||||
\li Editdelegate
|
||||
\li QTableView
|
||||
\li
|
||||
\li Custom delegate for editing based on QAbstractItemDelegate
|
||||
\li Book 3, Chapter 5, figure 5-6
|
||||
\row
|
||||
\o Singleitemview
|
||||
\o Custom view based on QAbstractItemView
|
||||
\o
|
||||
\o Custom view
|
||||
\o Book 3,
|
||||
\li Singleitemview
|
||||
\li Custom view based on QAbstractItemView
|
||||
\li
|
||||
\li Custom view
|
||||
\li Book 3,
|
||||
Chapter 5,
|
||||
figure 5-7
|
||||
\row
|
||||
\o listmodel
|
||||
\o QTableView
|
||||
\o Custom Model based on QAbstractTableModel
|
||||
\o Read only
|
||||
\o Book 3, Chapter 5, Figure 5-8
|
||||
\li listmodel
|
||||
\li QTableView
|
||||
\li Custom Model based on QAbstractTableModel
|
||||
\li Read only
|
||||
\li Book 3, Chapter 5, Figure 5-8
|
||||
\row
|
||||
\o treemodel
|
||||
\o QTreeView
|
||||
\o Custom Model based on QAbstractItemModel
|
||||
\o Read only
|
||||
\o Book 3, Chapter 5, Figure 5-10
|
||||
\li treemodel
|
||||
\li QTreeView
|
||||
\li Custom Model based on QAbstractItemModel
|
||||
\li Read only
|
||||
\li Book 3, Chapter 5, Figure 5-10
|
||||
\row
|
||||
\o edit integers
|
||||
\o QListView
|
||||
\o Custom Model based on QAbstractListModel
|
||||
\o Read / write
|
||||
\o Book 3, Chapter 5, Listing 5-37, Figure 5-11
|
||||
\li edit integers
|
||||
\li QListView
|
||||
\li Custom Model based on QAbstractListModel
|
||||
\li Read / write
|
||||
\li Book 3, Chapter 5, Listing 5-37, Figure 5-11
|
||||
\row
|
||||
\o sorting
|
||||
\o QTableView
|
||||
\o QSortFilterProxyModel applied to QStringListModel
|
||||
\o Demonstrates sorting
|
||||
\o Book 3, Chapter 5, Figure 5-12
|
||||
\li sorting
|
||||
\li QTableView
|
||||
\li QSortFilterProxyModel applied to QStringListModel
|
||||
\li Demonstrates sorting
|
||||
\li Book 3, Chapter 5, Figure 5-12
|
||||
\endtable
|
||||
|
||||
|
||||
@ -782,108 +782,108 @@
|
||||
|
||||
\table
|
||||
\header
|
||||
\o Example name
|
||||
\o View class used
|
||||
\o Model used
|
||||
\o Aspects covered
|
||||
\li Example name
|
||||
\li View class used
|
||||
\li Model used
|
||||
\li Aspects covered
|
||||
\row
|
||||
\o Address Book
|
||||
\o QTableView
|
||||
\o QAbstractTableModel
|
||||
\li Address Book
|
||||
\li QTableView
|
||||
\li QAbstractTableModel
|
||||
QSortFilterProxyModel
|
||||
\o Usage of QSortFilterProxyModel to generate different
|
||||
\li Usage of QSortFilterProxyModel to generate different
|
||||
subsets from one data pool
|
||||
\row
|
||||
\o Basic Sort/Filter Model
|
||||
\o QTreeView
|
||||
\o QStandardItemModel
|
||||
\li Basic Sort/Filter Model
|
||||
\li QTreeView
|
||||
\li QStandardItemModel
|
||||
QSortFilterProxyModel
|
||||
\o
|
||||
\li
|
||||
\row
|
||||
\o Chart
|
||||
\o Custom view
|
||||
\o QStandardItemModel
|
||||
\o Designing custom views that cooperate with selection models
|
||||
\li Chart
|
||||
\li Custom view
|
||||
\li QStandardItemModel
|
||||
\li Designing custom views that cooperate with selection models
|
||||
\row
|
||||
\o Color Editor Factory
|
||||
\o {2, 1} QTableWidget
|
||||
\o Enhancing the standard delegate with a new custom editor to choose colours
|
||||
\li Color Editor Factory
|
||||
\li {2, 1} QTableWidget
|
||||
\li Enhancing the standard delegate with a new custom editor to choose colours
|
||||
\row
|
||||
\o Combo Widget Mapper
|
||||
\o QDataWidgetMapper to map QLineEdit, QTextEdit and QComboBox
|
||||
\o QStandardItemModel
|
||||
\o Shows how a QComboBox can serve as a view class
|
||||
\li Combo Widget Mapper
|
||||
\li QDataWidgetMapper to map QLineEdit, QTextEdit and QComboBox
|
||||
\li QStandardItemModel
|
||||
\li Shows how a QComboBox can serve as a view class
|
||||
\row
|
||||
\o Custom Sort/Filter Model
|
||||
\o QTreeView
|
||||
\o QStandardItemModel
|
||||
\li Custom Sort/Filter Model
|
||||
\li QTreeView
|
||||
\li QStandardItemModel
|
||||
QSortFilterProxyModel
|
||||
\o Subclass QSortFilterProxyModel for advanced sorting and filtering
|
||||
\li Subclass QSortFilterProxyModel for advanced sorting and filtering
|
||||
\row
|
||||
\o Dir View
|
||||
\o QTreeView
|
||||
\o QDirModel
|
||||
\o Very small example to demonstrate how to assign a model to a view
|
||||
\li Dir View
|
||||
\li QTreeView
|
||||
\li QDirModel
|
||||
\li Very small example to demonstrate how to assign a model to a view
|
||||
\row
|
||||
\o Editable Tree Model
|
||||
\o QTreeView
|
||||
\o Custom tree model
|
||||
\o Comprehensive example for working with trees, demonstrates
|
||||
\li Editable Tree Model
|
||||
\li QTreeView
|
||||
\li Custom tree model
|
||||
\li Comprehensive example for working with trees, demonstrates
|
||||
editing cells and tree structure with an underlying custom
|
||||
model
|
||||
\row
|
||||
\o Fetch More
|
||||
\o QListView
|
||||
\o Custom list model
|
||||
\o Dynamically changing model
|
||||
\li Fetch More
|
||||
\li QListView
|
||||
\li Custom list model
|
||||
\li Dynamically changing model
|
||||
\row
|
||||
\o Frozen Column
|
||||
\o QTableView
|
||||
\o QStandardItemModel
|
||||
\o
|
||||
\li Frozen Column
|
||||
\li QTableView
|
||||
\li QStandardItemModel
|
||||
\li
|
||||
\row
|
||||
\o Interview
|
||||
\o Multiple
|
||||
\o Custom item model
|
||||
\o Multiple views
|
||||
\li Interview
|
||||
\li Multiple
|
||||
\li Custom item model
|
||||
\li Multiple views
|
||||
\row
|
||||
\o Pixelator
|
||||
\o QTableView
|
||||
\o Custom table model
|
||||
\o Implementation of a custom delegate
|
||||
\li Pixelator
|
||||
\li QTableView
|
||||
\li Custom table model
|
||||
\li Implementation of a custom delegate
|
||||
\row
|
||||
\o Puzzle
|
||||
\o QListView
|
||||
\o Custom list model
|
||||
\o Model/view with drag and drop
|
||||
\li Puzzle
|
||||
\li QListView
|
||||
\li Custom list model
|
||||
\li Model/view with drag and drop
|
||||
\row
|
||||
\o Simple DOM Model
|
||||
\o QTreeView
|
||||
\o Custom tree model
|
||||
\o Read only example for a custom tree model
|
||||
\li Simple DOM Model
|
||||
\li QTreeView
|
||||
\li Custom tree model
|
||||
\li Read only example for a custom tree model
|
||||
\row
|
||||
\o Simple Tree Model
|
||||
\o QTreeView
|
||||
\o Custom tree model
|
||||
\o Read only example for a custom tree model
|
||||
\li Simple Tree Model
|
||||
\li QTreeView
|
||||
\li Custom tree model
|
||||
\li Read only example for a custom tree model
|
||||
\row
|
||||
\o Simple Widget Mapper
|
||||
\o QDataWidgetMapper to map QLineEdit, QTextEdit and QSpinBox
|
||||
\o QStandardItemModel
|
||||
\o Basic QDataWidgetMapper usage
|
||||
\li Simple Widget Mapper
|
||||
\li QDataWidgetMapper to map QLineEdit, QTextEdit and QSpinBox
|
||||
\li QStandardItemModel
|
||||
\li Basic QDataWidgetMapper usage
|
||||
\row
|
||||
\o Spin Box Delegate
|
||||
\o QTableView
|
||||
\o QStandardItemModel
|
||||
\o Custom delegate that uses a spin box as a cell editor
|
||||
\li Spin Box Delegate
|
||||
\li QTableView
|
||||
\li QStandardItemModel
|
||||
\li Custom delegate that uses a spin box as a cell editor
|
||||
\row
|
||||
\o Spreadsheet
|
||||
\o {2, 1} QTableView
|
||||
\o Custom delegates
|
||||
\li Spreadsheet
|
||||
\li {2, 1} QTableView
|
||||
\li Custom delegates
|
||||
\row
|
||||
\o Star Delegate
|
||||
\o {2, 1} QTableWidget
|
||||
\o Comprehensive custom delegate example.
|
||||
\li Star Delegate
|
||||
\li {2, 1} QTableWidget
|
||||
\li Comprehensive custom delegate example.
|
||||
\endtable
|
||||
|
||||
A \l{Model/View Programming}{reference document} for model/view technology
|
||||
|
@ -51,11 +51,11 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o The user presses \key Tab (or \key Shift+Tab).
|
||||
\o The user clicks a widget.
|
||||
\o The user presses a keyboard shortcut.
|
||||
\o The user uses the mouse wheel.
|
||||
\o The user moves the focus to a window, and the application must
|
||||
\li The user presses \key Tab (or \key Shift+Tab).
|
||||
\li The user clicks a widget.
|
||||
\li The user presses a keyboard shortcut.
|
||||
\li The user uses the mouse wheel.
|
||||
\li The user moves the focus to a window, and the application must
|
||||
determine which widget within the window should get the focus.
|
||||
\endlist
|
||||
|
||||
@ -93,14 +93,14 @@
|
||||
|
||||
\list 1
|
||||
|
||||
\o If the program can determine whether the field is needed, it can
|
||||
\li If the program can determine whether the field is needed, it can
|
||||
move focus there when the user finishes entry and presses \gui OK, or when
|
||||
the user presses Enter after finishing the other fields. Alternately,
|
||||
include the field in the tab order but disable it. Enable it if it
|
||||
becomes appropriate in view of what the user has set in the other
|
||||
fields.
|
||||
|
||||
\o The label for the field can include a keyboard shortcut that moves
|
||||
\li The label for the field can include a keyboard shortcut that moves
|
||||
focus to this field.
|
||||
|
||||
\endlist
|
||||
|
@ -38,11 +38,11 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-checkbox.png
|
||||
\li \image cde-checkbox.png
|
||||
\caption The QCheckBox widget provides a checkbox with a text label.
|
||||
\o \image cde-radiobutton.png
|
||||
\li \image cde-radiobutton.png
|
||||
\caption The QRadioButton widget provides a radio button with a text or pixmap label.
|
||||
\o \image cde-pushbutton.png
|
||||
\li \image cde-pushbutton.png
|
||||
\image cde-toolbutton.png
|
||||
\caption The QPushButton widget provides a command button.
|
||||
\endtable
|
||||
@ -51,13 +51,13 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-groupbox.png
|
||||
\li \image cde-groupbox.png
|
||||
The The QGroupBox widget provides a group box frame with a title.
|
||||
\o \image cde-tabwidget.png
|
||||
\li \image cde-tabwidget.png
|
||||
The QTabWidget class provides a stack of tabbed widgets.
|
||||
\o \image cde-frame.png
|
||||
\li \image cde-frame.png
|
||||
The QFrame widget provides a simple decorated container for other widgets.
|
||||
\o \image cde-toolbox.png
|
||||
\li \image cde-toolbox.png
|
||||
The QToolBox class provides a column of tabbed widget items.
|
||||
\endtable
|
||||
|
||||
@ -65,24 +65,24 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-listview.png
|
||||
\li \image cde-listview.png
|
||||
The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
|
||||
\o \image cde-treeview.png
|
||||
\li \image cde-treeview.png
|
||||
The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
|
||||
\o \image cde-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o
|
||||
\o
|
||||
\li \image cde-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
|
||||
\li
|
||||
\endtable
|
||||
|
||||
\section2 Display Widgets
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-progressbar.png
|
||||
\li \image cde-progressbar.png
|
||||
The QProgressBar widget provides a horizontal progress bar.
|
||||
\o \image cde-label.png
|
||||
\li \image cde-label.png
|
||||
The QLabel widget provides a text or image display.
|
||||
\o \image cde-lcdnumber.png
|
||||
\li \image cde-lcdnumber.png
|
||||
The QLCDNumber widget displays a number with LCD-like digits.
|
||||
\endtable
|
||||
|
||||
@ -90,43 +90,43 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-lineedit.png
|
||||
\li \image cde-lineedit.png
|
||||
The QLineEdit widget is a one-line text editor.
|
||||
\o \image cde-dateedit.png
|
||||
\li \image cde-dateedit.png
|
||||
The QDateEdit class provides a widget for editing dates.
|
||||
\o \image cde-timeedit.png
|
||||
\li \image cde-timeedit.png
|
||||
The QTimeEdit class provides a widget for editing times.
|
||||
\o \image cde-datetimeedit.png
|
||||
\li \image cde-datetimeedit.png
|
||||
The QDateTimeEdit class provides a widget for editing dates and times.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-slider.png
|
||||
\li \image cde-slider.png
|
||||
The QSlider widget provides a vertical or horizontal slider.
|
||||
\o \image cde-combobox.png
|
||||
\li \image cde-combobox.png
|
||||
The QComboBox widget is a combined button and pop-up list.
|
||||
\o \image cde-spinbox.png
|
||||
\li \image cde-spinbox.png
|
||||
The QSpinBox class provides a spin box widget.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-fontcombobox.png
|
||||
\li \image cde-fontcombobox.png
|
||||
The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
|
||||
\o \image cde-doublespinbox.png
|
||||
\li \image cde-doublespinbox.png
|
||||
The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
|
||||
\o \image cde-horizontalscrollbar.png
|
||||
\li \image cde-horizontalscrollbar.png
|
||||
The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cde-dial.png
|
||||
\li \image cde-dial.png
|
||||
The QDial class provides a rounded range control (like a speedometer or potentiometer).
|
||||
\o \image cde-textedit.png
|
||||
\li \image cde-textedit.png
|
||||
The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
|
||||
\o \image cde-calendarwidget.png
|
||||
\li \image cde-calendarwidget.png
|
||||
The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
|
||||
\endtable
|
||||
|
||||
|
@ -38,18 +38,18 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-pushbutton.png
|
||||
\li \image cleanlooks-pushbutton.png
|
||||
\caption The QPushButton widget provides a command button.
|
||||
\o \image cleanlooks-toolbutton.png
|
||||
\li \image cleanlooks-toolbutton.png
|
||||
\caption The QToolButton class provides a quick-access button to commands
|
||||
or options, usually used inside a QToolBar.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-checkbox.png
|
||||
\li \image cleanlooks-checkbox.png
|
||||
\caption The QCheckBox widget provides a checkbox with a text label.
|
||||
\o \image cleanlooks-radiobutton.png
|
||||
\li \image cleanlooks-radiobutton.png
|
||||
\caption The QRadioButton widget provides a radio button with a text or pixmap label.
|
||||
\endtable
|
||||
|
||||
@ -57,13 +57,13 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-groupbox.png
|
||||
\li \image cleanlooks-groupbox.png
|
||||
The The QGroupBox widget provides a group box frame with a title.
|
||||
\o \image cleanlooks-tabwidget.png
|
||||
\li \image cleanlooks-tabwidget.png
|
||||
The QTabWidget class provides a stack of tabbed widgets.
|
||||
\o \image cleanlooks-frame.png
|
||||
\li \image cleanlooks-frame.png
|
||||
The QFrame widget provides a simple decorated container for other widgets.
|
||||
\o \image cleanlooks-toolbox.png
|
||||
\li \image cleanlooks-toolbox.png
|
||||
The QToolBox class provides a column of tabbed widget items.
|
||||
\endtable
|
||||
|
||||
@ -71,24 +71,24 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-listview.png
|
||||
\li \image cleanlooks-listview.png
|
||||
The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
|
||||
\o \image cleanlooks-treeview.png
|
||||
\li \image cleanlooks-treeview.png
|
||||
The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
|
||||
\o \image cleanlooks-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o
|
||||
\o
|
||||
\li \image cleanlooks-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
|
||||
\li
|
||||
\endtable
|
||||
|
||||
\section2 Display Widgets
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-progressbar.png
|
||||
\li \image cleanlooks-progressbar.png
|
||||
The QProgressBar widget provides a horizontal progress bar.
|
||||
\o \image cleanlooks-label.png
|
||||
\li \image cleanlooks-label.png
|
||||
The QLabel widget provides a text or image display.
|
||||
\o \image cleanlooks-lcdnumber.png
|
||||
\li \image cleanlooks-lcdnumber.png
|
||||
The QLCDNumber widget displays a number with LCD-like digits.
|
||||
\endtable
|
||||
|
||||
@ -96,43 +96,43 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-lineedit.png
|
||||
\li \image cleanlooks-lineedit.png
|
||||
The QLineEdit widget is a one-line text editor.
|
||||
\o \image cleanlooks-dateedit.png
|
||||
\li \image cleanlooks-dateedit.png
|
||||
The QDateEdit class provides a widget for editing dates.
|
||||
\o \image cleanlooks-timeedit.png
|
||||
\li \image cleanlooks-timeedit.png
|
||||
The QTimeEdit class provides a widget for editing times.
|
||||
\o \image cleanlooks-datetimeedit.png
|
||||
\li \image cleanlooks-datetimeedit.png
|
||||
The QDateTimeEdit class provides a widget for editing dates and times.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-slider.png
|
||||
\li \image cleanlooks-slider.png
|
||||
The QSlider widget provides a vertical or horizontal slider.
|
||||
\o \image cleanlooks-combobox.png
|
||||
\li \image cleanlooks-combobox.png
|
||||
The QComboBox widget is a combined button and pop-up list.
|
||||
\o \image cleanlooks-spinbox.png
|
||||
\li \image cleanlooks-spinbox.png
|
||||
The QSpinBox class provides a spin box widget.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-fontcombobox.png
|
||||
\li \image cleanlooks-fontcombobox.png
|
||||
The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
|
||||
\o \image cleanlooks-doublespinbox.png
|
||||
\li \image cleanlooks-doublespinbox.png
|
||||
The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
|
||||
\o \image cleanlooks-horizontalscrollbar.png
|
||||
\li \image cleanlooks-horizontalscrollbar.png
|
||||
The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image cleanlooks-dial.png
|
||||
\li \image cleanlooks-dial.png
|
||||
The QDial class provides a rounded range control (like a speedometer or potentiometer).
|
||||
\o \image cleanlooks-textedit.png
|
||||
\li \image cleanlooks-textedit.png
|
||||
The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
|
||||
\o \image cleanlooks-calendarwidget.png
|
||||
\li \image cleanlooks-calendarwidget.png
|
||||
The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
|
||||
\endtable
|
||||
*/
|
||||
|
@ -41,18 +41,18 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-pushbutton.png
|
||||
\li \image gtk-pushbutton.png
|
||||
\caption The QPushButton widget provides a command button.
|
||||
\o \image gtk-toolbutton.png
|
||||
\li \image gtk-toolbutton.png
|
||||
\caption The QToolButton class provides a quick-access button to commands
|
||||
or options, usually used inside a QToolBar.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-checkbox.png
|
||||
\li \image gtk-checkbox.png
|
||||
\caption The QCheckBox widget provides a checkbox with a text label.
|
||||
\o \image gtk-radiobutton.png
|
||||
\li \image gtk-radiobutton.png
|
||||
\caption The QRadioButton widget provides a radio button with a text or pixmap label.
|
||||
\endtable
|
||||
|
||||
@ -60,13 +60,13 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-groupbox.png
|
||||
\li \image gtk-groupbox.png
|
||||
The The QGroupBox widget provides a group box frame with a title.
|
||||
\o \image gtk-tabwidget.png
|
||||
\li \image gtk-tabwidget.png
|
||||
The QTabWidget class provides a stack of tabbed widgets.
|
||||
\o \image gtk-frame.png
|
||||
\li \image gtk-frame.png
|
||||
The QFrame widget provides a simple decorated container for other widgets.
|
||||
\o \image gtk-toolbox.png
|
||||
\li \image gtk-toolbox.png
|
||||
The QToolBox class provides a column of tabbed widget items.
|
||||
\endtable
|
||||
|
||||
@ -74,24 +74,24 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-listview.png
|
||||
\li \image gtk-listview.png
|
||||
The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
|
||||
\o \image gtk-treeview.png
|
||||
\li \image gtk-treeview.png
|
||||
The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
|
||||
\o \image gtk-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o
|
||||
\o
|
||||
\li \image gtk-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
|
||||
\li
|
||||
\endtable
|
||||
|
||||
\section2 Display Widgets
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-progressbar.png
|
||||
\li \image gtk-progressbar.png
|
||||
The QProgressBar widget provides a horizontal progress bar.
|
||||
\o \image gtk-label.png
|
||||
\li \image gtk-label.png
|
||||
The QLabel widget provides a text or image display.
|
||||
\o \image gtk-lcdnumber.png
|
||||
\li \image gtk-lcdnumber.png
|
||||
The QLCDNumber widget displays a number with LCD-like digits.
|
||||
\endtable
|
||||
|
||||
@ -99,43 +99,43 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-lineedit.png
|
||||
\li \image gtk-lineedit.png
|
||||
The QLineEdit widget is a one-line text editor.
|
||||
\o \image gtk-dateedit.png
|
||||
\li \image gtk-dateedit.png
|
||||
The QDateEdit class provides a widget for editing dates.
|
||||
\o \image gtk-timeedit.png
|
||||
\li \image gtk-timeedit.png
|
||||
The QTimeEdit class provides a widget for editing times.
|
||||
\o \image gtk-datetimeedit.png
|
||||
\li \image gtk-datetimeedit.png
|
||||
The QDateTimeEdit class provides a widget for editing dates and times.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-slider.png
|
||||
\li \image gtk-slider.png
|
||||
The QSlider widget provides a vertical or horizontal slider.
|
||||
\o \image gtk-combobox.png
|
||||
\li \image gtk-combobox.png
|
||||
The QComboBox widget is a combined button and pop-up list.
|
||||
\o \image gtk-spinbox.png
|
||||
\li \image gtk-spinbox.png
|
||||
The QSpinBox class provides a spin box widget.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-fontcombobox.png
|
||||
\li \image gtk-fontcombobox.png
|
||||
The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
|
||||
\o \image gtk-doublespinbox.png
|
||||
\li \image gtk-doublespinbox.png
|
||||
The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
|
||||
\o \image gtk-horizontalscrollbar.png
|
||||
\li \image gtk-horizontalscrollbar.png
|
||||
The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image gtk-dial.png
|
||||
\li \image gtk-dial.png
|
||||
The QDial class provides a rounded range control (like a speedometer or potentiometer).
|
||||
\o \image gtk-textedit.png
|
||||
\li \image gtk-textedit.png
|
||||
The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
|
||||
\o \image gtk-calendarwidget.png
|
||||
\li \image gtk-calendarwidget.png
|
||||
The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
|
||||
\endtable
|
||||
*/
|
||||
|
@ -38,18 +38,18 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-pushbutton.png
|
||||
\li \image macintosh-pushbutton.png
|
||||
\caption The QPushButton widget provides a command button.
|
||||
\o \image macintosh-toolbutton.png
|
||||
\li \image macintosh-toolbutton.png
|
||||
\caption The QToolButton class provides a quick-access button to commands
|
||||
or options, usually used inside a QToolBar.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-checkbox.png
|
||||
\li \image macintosh-checkbox.png
|
||||
\caption The QCheckBox widget provides a checkbox with a text label.
|
||||
\o \image macintosh-radiobutton.png
|
||||
\li \image macintosh-radiobutton.png
|
||||
\caption The QRadioButton widget provides a radio button with a text or pixmap label.
|
||||
\endtable
|
||||
|
||||
@ -57,13 +57,13 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-groupbox.png
|
||||
\li \image macintosh-groupbox.png
|
||||
The The QGroupBox widget provides a group box frame with a title.
|
||||
\o \image macintosh-tabwidget.png
|
||||
\li \image macintosh-tabwidget.png
|
||||
The QTabWidget class provides a stack of tabbed widgets.
|
||||
\o \image macintosh-frame.png
|
||||
\li \image macintosh-frame.png
|
||||
The QFrame widget provides a simple decorated container for other widgets.
|
||||
\o \image macintosh-toolbox.png
|
||||
\li \image macintosh-toolbox.png
|
||||
The QToolBox class provides a column of tabbed widget items.
|
||||
\endtable
|
||||
|
||||
@ -71,24 +71,24 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-listview.png
|
||||
\li \image macintosh-listview.png
|
||||
The QListView class provides a default model/view implementation of a list/icon view. The QListWidget class provides a classic item-based list/icon view.
|
||||
\o \image macintosh-treeview.png
|
||||
\li \image macintosh-treeview.png
|
||||
The QTreeView class provides a default model/view implementation of a tree view. The QTreeWidget class provides a classic item-based tree view.
|
||||
\o \image macintosh-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\o
|
||||
\o
|
||||
\li \image macintosh-tableview.png
|
||||
The QTableView class provides a default model/view implementation of a table view. The QTableWidget class provides a classic item-based table view.\li
|
||||
\li
|
||||
\endtable
|
||||
|
||||
\section2 Display Widgets
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-progressbar.png
|
||||
\li \image macintosh-progressbar.png
|
||||
The QProgressBar widget provides a horizontal progress bar.
|
||||
\o \image macintosh-label.png
|
||||
\li \image macintosh-label.png
|
||||
The QLabel widget provides a text or image display.
|
||||
\o \image macintosh-lcdnumber.png
|
||||
\li \image macintosh-lcdnumber.png
|
||||
The QLCDNumber widget displays a number with LCD-like digits.
|
||||
\endtable
|
||||
|
||||
@ -96,43 +96,43 @@
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-lineedit.png
|
||||
\li \image macintosh-lineedit.png
|
||||
The QLineEdit widget is a one-line text editor.
|
||||
\o \image macintosh-dateedit.png
|
||||
\li \image macintosh-dateedit.png
|
||||
The QDateEdit class provides a widget for editing dates.
|
||||
\o \image macintosh-timeedit.png
|
||||
\li \image macintosh-timeedit.png
|
||||
The QTimeEdit class provides a widget for editing times.
|
||||
\o \image macintosh-datetimeedit.png
|
||||
\li \image macintosh-datetimeedit.png
|
||||
The QDateTimeEdit class provides a widget for editing dates and times.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-slider.png
|
||||
\li \image macintosh-slider.png
|
||||
The QSlider widget provides a vertical or horizontal slider.
|
||||
\o \image macintosh-combobox.png
|
||||
\li \image macintosh-combobox.png
|
||||
The QComboBox widget is a combined button and pop-up list.
|
||||
\o \image macintosh-spinbox.png
|
||||
\li \image macintosh-spinbox.png
|
||||
The QSpinBox class provides a spin box widget.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-fontcombobox.png
|
||||
\li \image macintosh-fontcombobox.png
|
||||
The QFontComboBox widget is a specialized combobox that enables fonts to be selected from a pop-up list containing previews of available fonts.
|
||||
\o \image macintosh-doublespinbox.png
|
||||
\li \image macintosh-doublespinbox.png
|
||||
The QDoubleSpinBox class provides a spin box widget that allows double precision floating point numbers to be entered.
|
||||
\o \image macintosh-horizontalscrollbar.png
|
||||
\li \image macintosh-horizontalscrollbar.png
|
||||
The QScrollBar widget provides a vertical or horizontal scroll bar. Here, we show a scroll bar with horizontal orientation.
|
||||
\endtable
|
||||
|
||||
\table 100%
|
||||
\row
|
||||
\o \image macintosh-dial.png
|
||||
\li \image macintosh-dial.png
|
||||
The QDial class provides a rounded range control (like a speedometer or potentiometer).
|
||||
\o \image macintosh-textedit.png
|
||||
\li \image macintosh-textedit.png
|
||||
The QTextEdit class provides a widget that is used to edit and display both plain and rich text.
|
||||
\o \image macintosh-calendarwidget.png
|
||||
\li \image macintosh-calendarwidget.png
|
||||
The QCalendarWidget class provides a monthly calendar widget that can be used to select dates.
|
||||
\endtable
|
||||
*/
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user