Merge branch 'release' into stable

Change-Id: If3aa1b7ed75082eff6e9761ad82c83691135ed60
This commit is contained in:
Sergio Ahumada 2013-01-31 18:55:53 +01:00
commit 6239af6f0f
92 changed files with 1209 additions and 385 deletions

94
dist/changes-5.0.1 vendored
View File

@ -40,37 +40,66 @@ Legal
* Library *
****************************************************************************
QtCore
-----
- Fix QMutex::tryLock with negative values
- Fix a leak in case the QMetaObject::Connection survives the sender object,
after a successful disconnect().
- Speed up and fix QByteArray::setNum()
- [QTBUG-28924] Don't increase the reference count if dynamic_cast failed
QtGui
-----
- Fix QGuiApplication::keyboardModifiers() and QGuiApplication::mouseButtons()
- Fix styleName support in QPA font database
- Make QImage::mirrored() propagate devicePixelRatio
- [QTBUG-28324] Fixed invalid memory read in SSSE3 image blending code.
QtWidgets
---------
- Do not inform that a widget is not visible when it's disabled.
- [QTBUG-28031, QTBUG-2596] QMenu: Do not set snapToMouse if a caused-widget exists.
- [QTBUG-28321] Fix focusproxy-relayed crash in QGraphicsItem destructor.
- [QTBUG-28446] Fix compilation when Q_NO_USING_KEYWORD is defined
- [QTBUG-28477] Fix QWidget::setWindowOpacity() when called before show().
- [QTBUG-28506] Style animations: fix QCommonStylePrivate::stopAnimation()
- [QTBUG-28557] Fix QGtkPainter::reset() to reset the clip rect
QtNetwork
---------
- [QTBUG-28937] SSL certificates: blacklist mis-issued Turktrust certificates
QtDBus
------
- qdbusxml2cpp: Check string length before checking for \r\n.
QtConcurrent
------------
QtOpenGL
--------
QtScript
--------
- Fix compilation of Open GL ES 2 examples when using a Qt-namespace.
- Fixed deadlock situation in QtOpenGL's texture management.
- updating qeglfshooks_imx6.cpp to 12.09.01 (L3.0.35) opengl-drivers
- [QTBUG-27512] Entered hardcoded urls for <OpenGL> and <Khronos O.GL>
- [QTBUG-28875] Fix bug in multisampling handling when converting from surface format
QTestLib
--------
- Add qtest_widget.h to the list of testlib headers
QtSql
-----
- Fix QSqlQuery test in relation to PSQL support
****************************************************************************
* Database Drivers *
****************************************************************************
@ -81,6 +110,8 @@ sqlite
postgres
--------
- Use PG_VERSION if PG_MAJORVERSION is not defined
****************************************************************************
* Platform Specific Changes *
****************************************************************************
@ -88,19 +119,44 @@ postgres
Qt for Linux/X11
----------------
- XCB: add support for getting and setting appTime and appUserTime.
- [QTBUG-28561] Fixed incorrect handling of extra mouse buttons in XCB platform plugin.
Qt for Windows
--------------
- DBUS: Fix linker errors on Windows.
- Define Q_COMPILER_AUTO_FUNCTION for MVSC
- [QTBUG-28611] Fix warnings about not being able to set Window geometry on Windows.
- [QTBUG-28611] QMdiArea: Increase minimum size for Windows 8/Large fonts.
- [QTBUG-28645] Rename conflicting symbol QVariantToVARIANT
- [QTBUG-28876] QWindowsVistaStyle: fix frame rendering
Qt for Mac OS X
---------------
- Ignore ScrollBarAlwaysOn policy for transient scrollbars
- New rendering for disclose triangle, get proper color when selected
- [QTBUG-27415] Fix bugs for font selection in QFontDialog
- [QTBUG-28161] Ensure the native filedialog starts up with the right directory
- [QTBUG-28443] Cocoa: Re-enable per class palette on QPA plugin
- [QTBUG-28669] Fix transient QScrollBar flashing
- [QTBUG-28738] Bring back proper layout in QMessageBox
Qt for BlackBerry
-----------------
- Reset virtual keyboard when shown.
- Disable Q_COMPILER_RVALUE_REFS on QNX
- Fix QNX QPA plugin clipboard impl
- Don't crash because the window hasn't been initialized yet.
Qt for Embedded Linux
---------------------
Qt for Windows CE
-----------------
****************************************************************************
* Compiler Specific Changes *
****************************************************************************
@ -111,11 +167,41 @@ Qt for Windows CE
* Tools *
****************************************************************************
configure
---------
- Remove the -fast configure option as it was pretty much broken
- [QTBUG-23569, QTBUG-25760] Check for gtk_adjustment_configure as this is not always implemented
mkspecs
-------
- Fix the computation of the location of mkspecs.
- [QTBUG-28215] Enable forcing generation of static plugin imports
- [QTBUG-28606] Fix installation of plugin module .pris in static Qt builds
moc
---
- [QTBUG-26589] Remove the timestamp info in genarated files to optimize rebuilds with ccache
qmake
-----
- Do not fixify + create QMAKE_{PKGCONFIG,LIBTOOL}_DESTDIR
- Fix qtCompileTest for cross building modules
- [QTBUG-28104] Respect the OBJECTS_DIR setting for XCode projects
- [QTBUG-24589] Fix handling of precompiled header files in XCode projects
- [QTBUG-28624] accept hex/octal values for RC_LANG and RC_CODEPAGE
- [QTBUG-28625] fix duplicate TRANSLATION entry in generated RC file
- [QTBUG-28682, QTBUG-28683] fix DLL manifest resource ids for debug builds
****************************************************************************
* Plugins *
****************************************************************************
- Accessibility Linux: Prevent access to invalid interfaces
- Call QAccessible::updateAccessibility when caret moves in QTextEdit
****************************************************************************
* Important Behavior Changes *

View File

@ -51,14 +51,14 @@ QString contentType = header.value("content-type");
//! [2]
QHttpRequestHeader header("GET", QUrl::toPercentEncoding("/index.html"));
header.setValue("Host", "qt.nokia.com");
http->setHost("qt.nokia.com");
header.setValue("Host", "qt-project.org");
http->setHost("qt-project.org");
http->request(header);
//! [2]
//! [3]
http->setHost("qt.nokia.com"); // id == 1
http->setHost("qt-project.org"); // id == 1
http->get(QUrl::toPercentEncoding("/index.html")); // id == 2
//! [3]

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(dbus))
TEMPLATE = subdirs
SUBDIRS = listnames \
pingpong \

View File

@ -1,3 +1,5 @@
requires(if(wince|embedded|x11):qtHaveModule(gui))
TEMPLATE = subdirs
SUBDIRS = styleexample raycasting flickable digiflip

View File

@ -1,28 +1,23 @@
TEMPLATE = subdirs
CONFIG += no_docs_target
SUBDIRS = \
gui \
network \
threads \
xml \
qpa
qtHaveModule(widgets) {
SUBDIRS += widgets \
ipc \
sql \
tools \
touch \
gestures
}
wince*|embedded|x11:qtHaveModule(gui): SUBDIRS += embedded
contains(QT_BUILD_PARTS, tools):qtHaveModule(gui):qtHaveModule(widgets): SUBDIRS += qtestlib
qtHaveModule(opengl):qtHaveModule(widgets): SUBDIRS += opengl
qtHaveModule(dbus): SUBDIRS += dbus
qtHaveModule(concurrent): SUBDIRS += qtconcurrent
SUBDIRS = \
dbus \
embedded \
gestures \
gui \
ipc \
network \
opengl \
qpa \
qtconcurrent \
qtestlib \
sql \
threads \
tools \
touch \
widgets \
xml
aggregate.files = aggregate/examples.pro
aggregate.path = $$[QT_INSTALL_EXAMPLES]

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(widgets))
TEMPLATE = \
subdirs
SUBDIRS = \

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(widgets))
TEMPLATE = subdirs
# no QSharedMemory
!vxworks:!qnx:SUBDIRS = sharedmemory

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(opengl))
TEMPLATE = subdirs
contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2){

View File

@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example qtconcurrent/imagescaling
\example imagescaling
\title Image Scaling Example
\brief Demonstrates how to asynchronously scale images.
\ingroup qtconcurrentexamples

View File

@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example qtconcurrent/map
\example map
\title Map Example
\brief Demonstrates how to scale images synchronously.
\ingroup qtconcurrentexamples

View File

@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example qtconcurrent/progressdialog
\example progressdialog
\title QtConcurrent Progress Dialog Example
\brief Demonstrates how to monitor the progress of the active processes.
\ingroup qtconcurrentexamples

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(concurrent))
TEMPLATE = subdirs
SUBDIRS = imagescaling \
map \

View File

@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example qtconcurrent/runfunction
\example runfunction
\title Run Function Example
\brief Demonstrates how to run standard functions concurrently.
\ingroup qtconcurrentexamples

View File

@ -26,7 +26,7 @@
****************************************************************************/
/*!
\example qtconcurrent/wordcount
\example wordcount
\title QtConcurrent Word Count Example
\brief Demonstrates how to use the map-reduce algorithm
\ingroup qtconcurrentexamples

View File

@ -1,2 +1,4 @@
requires(contains(QT_BUILD_PARTS,tools):qtHaveModule(widgets))
TEMPLATE = subdirs
SUBDIRS = tutorial1 tutorial2 tutorial3 tutorial4 tutorial5

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(widgets))
TEMPLATE = subdirs
SUBDIRS = books \
@ -19,4 +21,3 @@ SUBDIRS = books \
}
EXAMPLE_FILES = connection.h

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(widgets))
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = contiguouscache \

View File

@ -1,2 +1,4 @@
requires(qtHaveModule(widgets))
TEMPLATE = subdirs
SUBDIRS = pinchzoom fingerpaint knobs dials

View File

@ -192,6 +192,6 @@
fetched with QTextBlock::userData(). Matching parentheses can be
highlighted with an extra selection. The "Matching Parentheses
with QSyntaxHighlighter" article in Qt Quarterly 31 implements
this. You find it here: \l{http://doc.qt.nokia.com/qq/}.
this. You find it here: \l{http://doc.qt.digia.com/qq/}.
*/

View File

@ -248,7 +248,7 @@
It is possible to implement parenthesis matching with
QSyntaxHighlighter. The "Matching Parentheses with
QSyntaxHighlighter" article in Qt Quarterly 31
(\l{http://doc.qt.nokia.com/qq/}) implements this. We also have
(\l{http://doc.qt.digia.com/qq/}) implements this. We also have
the \l{Code Editor Example}, which shows how to implement line
numbers and how to highlight the current line.

View File

@ -1,28 +1,15 @@
TEMPLATE = subdirs
SUBDIRS = basicdrawing \
concentriccircles \
examples_affine \
examples_composition \
examples_deform \
examples_gradients \
examples_pathstroke \
painting_shared \
affine \
composition \
deform \
gradients \
pathstroke \
imagecomposition \
painterpaths \
transformations \
fontsampler
examples_affine.subdir = affine
examples_composition.subdir = composition
examples_deform.subdir = deform
examples_gradients.subdir = gradients
examples_pathstroke.subdir = pathstroke
painting_shared.subdir = shared
!ordered {
examples_affine.depends = painting_shared
examples_deform.depends = painting_shared
examples_gradients.depends = painting_shared
examples_composition.depends = painting_shared
examples_pathstroke.depends = painting_shared
}
EXAMPLE_FILES = \
shared

View File

@ -1,26 +0,0 @@
TEMPLATE = lib
CONFIG += static
qtHaveModule(opengl) {
DEFINES += QT_OPENGL_SUPPORT
QT += opengl
}
QT += widgets
build_all:!build_pass {
CONFIG -= build_all
CONFIG += release
}
TARGET = demo_shared
SOURCES += \
arthurstyle.cpp\
arthurwidgets.cpp \
hoverpoints.cpp
HEADERS += \
arthurstyle.h \
arthurwidgets.h \
hoverpoints.h
RESOURCES += shared.qrc

View File

@ -9,7 +9,7 @@ SOURCES += main.cpp \
EXAMPLE_FILES = encodedfiles
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/codecs
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/codecs
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -8,7 +8,7 @@ SOURCES = fsmodel.cpp \
RESOURCES = completer.qrc
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/completer
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/completer
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -8,7 +8,7 @@ SOURCES = main.cpp \
RESOURCES = customcompleter.qrc
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/customcompleter
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/customcompleter
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -5,5 +5,5 @@ SUBDIRS = echowindow \
#! [0]
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
INSTALLS += target

View File

@ -15,7 +15,7 @@ win32 {
}
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -12,5 +12,5 @@ DESTDIR = ../plugins
EXAMPLE_FILES = echoplugin.json
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin/plugin
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin/plugin
INSTALLS += target

View File

@ -22,7 +22,7 @@ TRANSLATIONS += translations/i18n_ar.ts \
translations/i18n_zh.ts
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/i18n
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/i18n
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -19,5 +19,5 @@ if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
#! [0]
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint
INSTALLS += target

View File

@ -10,5 +10,5 @@ DESTDIR = ../../plugandpaint/plugins
#! [0]
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint/plugins
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
INSTALLS += target

View File

@ -10,5 +10,5 @@ DESTDIR = ../../plugandpaint/plugins
#! [0]
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint/plugins
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
INSTALLS += target

View File

@ -5,7 +5,7 @@ SOURCES = regexpdialog.cpp \
main.cpp
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/regexp
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/regexp
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -13,7 +13,7 @@ SOURCES = locationdialog.cpp \
EXAMPLE_FILES = inifiles
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/settingseditor
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/settingseditor
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -18,5 +18,5 @@ win32 {
EXAMPLE_FILES += simplestyle.json
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin/styles
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin/styles
INSTALLS += target

View File

@ -3,5 +3,5 @@ SUBDIRS = stylewindow \
plugin
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
INSTALLS += target

View File

@ -13,5 +13,5 @@ win32 {
}
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
INSTALLS += target

View File

@ -8,7 +8,7 @@ SOURCES = treemodelcompleter.cpp \
RESOURCES = treemodelcompleter.qrc
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/treemodelcompleter
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/treemodelcompleter
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -12,5 +12,5 @@ build_all:!build_pass {
RESOURCES += undo.qrc
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/undo
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/undo
INSTALLS += target

View File

@ -12,7 +12,7 @@ SOURCES = commands.cpp \
RESOURCES = undoframework.qrc
# install
target.path = $$[QT_INSTALL_EXAMPLES]/tools/undoframework
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/undoframework
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -4,7 +4,7 @@ Qt documentation, which can be viewed using Qt Assistant or a Web browser.
The tutorial is also available online at
http://qt.nokia.com/doc/4.4/tutorial.html
http://qt-project.org/doc/qt-5.0/qtwidgets/tutorials-addressbook.html
All programs corresponding to the chapters in the tutorial should
automatically be built when Qt is compiled, or will be provided as

View File

@ -4,7 +4,7 @@ Qt documentation, which can be viewed using Qt Assistant or a Web browser.
The tutorial is also available online at
http://qt.nokia.com/doc/tutorial.html
http://qt-project.org/doc/qt-5.0/qtwidgets/tutorials-addressbook.html
All programs corresponding to the chapters in the tutorial should
automatically be built when Qt is compiled, or will be provided as

View File

@ -1,3 +1,5 @@
requires(qtHaveModule(widgets))
TEMPLATE = subdirs
CONFIG += no_docs_target

View File

@ -67,7 +67,7 @@ void MainWindow::on_aboutAction_triggered()
{
QMessageBox::about(this, tr("About Style sheet"),
tr("The <b>Style Sheet</b> example shows how widgets can be styled "
"using <a href=\"http://qt.nokia.com/doc/4.5/stylesheet.html\">Qt "
"using <a href=\"http://doc.qt.digia.com/4.5/stylesheet.html\">Qt "
"Style Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop up the "
"style editor, and either choose an existing style sheet or design "
"your own."));

View File

@ -71,16 +71,16 @@
</folder>
<folder folded="no">
<title>Qt</title>
<bookmark href="http://qt.nokia.com/doc/2.3/">
<bookmark href="http://doc.qt.digia.com/2.3/">
<title>Qt 2.3 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/3.3/">
<bookmark href="http://doc.qt.digia.com/3.3/">
<title>Qt 3.3 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/4.0/">
<bookmark href="http://doc.qt.digia.com/4.0/">
<title>Qt 4.0 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/">
<bookmark href="http://qt-project.org/">
<title>Qt Home Page</title>
</bookmark>
</folder>

View File

@ -45,16 +45,16 @@
<title>QtQuestions</title>
</bookmark>
</folder>
<bookmark href="http://qt.nokia.com/doc/qq/">
<bookmark href="http://doc.qt.digia.com/qq/">
<title>Qt Quarterly</title>
</bookmark>
<bookmark href="http://qt.nokia.com/">
<bookmark href="http://qt-project.org/">
<title>Qt home page</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/4.0/">
<bookmark href="http://doc.qt.digia.com/4.0/">
<title>Qt 4.0 documentation</title>
</bookmark>
<bookmark href="http://qt.nokia.com/developer/faqs/">
<bookmark href="http://qt-project.org/faq/">
<title>Frequently Asked Questions</title>
</bookmark>
</folder>

View File

@ -5,7 +5,7 @@
</head>
<body>
<p>A paragraph.</p>
<p>A second paragraph. Check out our <a href="http://labs.qt.nokia.com/">developer blogs</a></p>
<p>And the last paragraph. Or our <a href="http://qt.nokia.com/doc/">online documentation</a>.</p>
<p>A second paragraph. Check out our <a href="http://blog.qt.digia.com/">developer blogs</a></p>
<p>And the last paragraph. Or our <a href="http://qt-project.org/doc/">online documentation</a>.</p>
</body>
</html>

View File

@ -76,7 +76,7 @@ RSSListing::RSSListing(QWidget *parent)
{
lineEdit = new QLineEdit(this);
lineEdit->setText("http://labs.qt.nokia.com/blogs/feed");
lineEdit->setText("http://blog.qt.digia.com/feed/");
fetchButton = new QPushButton(tr("Fetch"), this);

View File

@ -71,16 +71,16 @@
</folder>
<folder folded="no">
<title>Qt</title>
<bookmark href="http://qt.nokia.com/doc/2.3/">
<bookmark href="http://doc.qt.digia.com/2.3/">
<title>Qt 2.3 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/3.3/">
<bookmark href="http://doc.qt.digia.com/3.3/">
<title>Qt 3.3 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/4.0/">
<bookmark href="http://doc.qt.digia.com/4.0/">
<title>Qt 4.0 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/">
<bookmark href="http://qt-project.org/">
<title>Qt Home Page</title>
</bookmark>
</folder>

View File

@ -45,16 +45,16 @@
<title>QtQuestions</title>
</bookmark>
</folder>
<bookmark href="http://qt.nokia.com/doc/qq/">
<bookmark href="http://doc.qt.digia.com/qq/">
<title>Qt Quarterly</title>
</bookmark>
<bookmark href="http://qt.nokia.com/">
<bookmark href="http://qt-project.org/">
<title>qt home page</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/4.0/">
<bookmark href="http://doc.qt.digia.com/4.0/">
<title>Qt 4.0 documentation</title>
</bookmark>
<bookmark href="http://qt.nokia.com/developer/faqs/">
<bookmark href="http://qt-project.org/faq/">
<title>Frequently Asked Questions</title>
</bookmark>
</folder>

View File

@ -71,16 +71,16 @@
</folder>
<folder folded="no">
<title>Qt</title>
<bookmark href="http://qt.nokia.com/doc/2.3/">
<bookmark href="http://doc.qt.digia.com/2.3/">
<title>Qt 2.3 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/3.3/">
<bookmark href="http://doc.qt.digia.com/3.3/">
<title>Qt 3.3 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/4.0/">
<bookmark href="http://doc.qt.digia.com/4.0/">
<title>Qt 4.0 Reference</title>
</bookmark>
<bookmark href="http://qt.nokia.com/">
<bookmark href="http://qt-project.org/">
<title>Qt Home Page</title>
</bookmark>
</folder>

View File

@ -45,16 +45,16 @@
<title>QtQuestions</title>
</bookmark>
</folder>
<bookmark href="http://qt.nokia.com/doc/qq/">
<bookmark href="http://doc.qt.digia.com/qq/">
<title>Qt Quarterly</title>
</bookmark>
<bookmark href="http://qt.nokia.com/">
<bookmark href="http://qt-project.org/">
<title>Qt home page</title>
</bookmark>
<bookmark href="http://qt.nokia.com/doc/4.0/">
<bookmark href="http://doc.qt.digia.com/4.0/">
<title>Qt 4.0 documentation</title>
</bookmark>
<bookmark href="http://qt.nokia.com/developer/faqs/">
<bookmark href="http://qt-project.org/faq/">
<title>Frequently Asked Questions</title>
</bookmark>
</folder>

View File

@ -25,7 +25,7 @@ qml1_target: \
else: \
instbase = $$[QT_INSTALL_QML]
exists($$[QT_HOST_PREFIX]/.qmake.cache) {
!prefix_build {
# These bizarre rules copy the files to the qtbase build directory
defineReplace(qmlModStripSrcDir) {

View File

@ -20,7 +20,10 @@
debug(1, "Not loading qmodule.pri twice")
}
!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):!exists($$[QT_HOST_DATA]/.qmake.cache) {
!exists($$[QT_HOST_DATA]/.qmake.cache): \
CONFIG += prefix_build
!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):prefix_build {
# When doing a -prefix build of top-level qt5/qt.pro, we need to announce
# this repo's module pris' location to the other repos.
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))

View File

@ -16,8 +16,8 @@ isEmpty(MODULE_BASE_DIR): MODULE_BASE_DIR = $$MODULE_PROFILE_DIR
isEmpty(MODULE_BASE_OUTDIR): MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_DIR)
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR
QTDIR = $$[QT_HOST_PREFIX]
exists($$QTDIR/.qmake.cache) {
!prefix_build {
QTDIR = $$[QT_HOST_PREFIX]
# Permit modules to enforce being built outside QTDIR ...
!force_independent: MODULE_BASE_OUTDIR = $$QTDIR
# ... though this sort of breaks the idea.

View File

@ -9,6 +9,22 @@
# We mean it.
#
defineTest(addInstallFiles) {
for(sf, 2) {
sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
contains(sf, \\..*) {
check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
} else {
sfp = $$replace(sf, /.*, )
!equals(sfp, $$sf): \
$$1 *= $$sfp
else: \
$$1 += $$sf
}
}
export($$1)
}
probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
!isEmpty(probase):!contains(probase, ^\\..*) {
for(ex, EXAMPLE_FILES): \
@ -42,34 +58,26 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
# Just for Qt Creator
OTHER_FILES += $$sourcefiles
for(inst, INSTALLS): \
!equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
for(file, $${inst}.files): \
sourcefiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
sourcefiles += \
$$_PRO_FILE_ $$RC_FILE $$DEF_FILE \
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
$$DBUS_ADAPTORS $$DBUS_INTERFACES
for(sf, sourcefiles) {
sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
contains(sf, \\..*) {
check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
} else {
sfp = $$replace(sf, /.*, )
!equals(sfp, $$sf): \
sources.files *= $$sfp
else: \
sources.files += $$sf
}
}
addInstallFiles(sources.files, $$sourcefiles)
sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
INSTALLS += sources
check_examples {
srcfiles = $$sources.files
for(inst, INSTALLS): \
!equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
for(file, $${inst}.files): \
instfiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
addInstallFiles(srcfiles, $$instfiles)
thefiles = $$files($$_PRO_FILE_PWD_/*)
for(i, thefiles): \
allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_)
for(i, sources.files): \
for(i, srcfiles): \
allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_)
for(i, SUBDIRS) {
sd = $$eval($${i}.file)
@ -84,4 +92,12 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
allfiles -= doc
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
}
# Do not actually build the examples in production builds
!equals(TEMPLATE, subdirs):!contains(QT_CONFIG, private_tests) {
TEMPLATE = aux
CONFIG -= have_target qt staticlib dll
SOURCES =
INSTALLS -= target
}
}

View File

@ -45,65 +45,7 @@ else: \
MODULE_DEFINE = QT_$${ucmodule}_LIB
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
load(qt_build_paths)
MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
!build_pass {
# Create a module .pri file
unix:!static: \
module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
else: \
module_rpath =
!isEmpty(QT_FOR_PRIVATE) {
contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
} else {
module_privdep =
}
static: \
module_build_type = "QT.$${MODULE}.module_config = staticlib"
else:mac:contains(QT_CONFIG, qt_framework): \
module_build_type = "QT.$${MODULE}.module_config = lib_bundle"
else: \
module_build_type =
!isEmpty(MODULE_CONFIG): \
module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
else: \
module_config =
!no_module_headers {
MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME"
MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \
\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME"
}
MODULE_PRI_CONT = \
"QT.$${MODULE}.VERSION = $${VERSION}" \
"QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
"QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
"QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
"" \
"QT.$${MODULE}.name = $$TARGET" \
"QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
"QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
"QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
"QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
"QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
$$module_rpath \
"QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
"QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
"QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
"QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
$$module_privdep \
$$module_build_type \
$$module_config \
"QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
"" \
"QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
} # !build_pass
load(qt_module_fwdpri)
load(qt_module_pris)
INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)
@ -112,7 +54,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_inclu
#other
TEMPLATE = lib
DESTDIR = $$eval(QT.$${MODULE}.libs)
win32:!wince*:exists($$[QT_INSTALL_PREFIX]/.qmake.cache): DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
win32:!wince*:!prefix_build: DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
CONFIG += qmake_cache target_qt
@ -206,7 +148,9 @@ unix {
}
unix|win32-g++* {
for(i, QT):QMAKE_PKGCONFIG_REQUIRES += $$eval(QT.$${i}.name)
QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, Qt$$section(VERSION, ., 0, 0))
for(i, MODULE_DEPENDS): \
QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION))
isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
}

View File

@ -1,92 +0,0 @@
#
# W A R N I N G
# -------------
#
# This file is not part of the Qt API. It exists purely as an
# implementation detail. It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#
!build_pass {
load(qt_build_paths)
MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri
# -rpath-link is used by the linker to find depedencies of dynamic
# libraries which were NOT specified on the command line.
# This means that .libs of each module's regular .depends (QT) don't
# need to be put there, as they appear on the linker line anyway.
# A module's QT_PRIVATE's .libs OTOH need to be put there.
# .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates
# are used, the libraries are explicitly linked. If not, their locations
# need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn
# contain privates, they always end up in -rpath-link of dependant
# modules.
# For simplicity of use, each module's rpath list has all dependencies
# transitively resolved already.
pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE
pubdep = $$resolve_depends(pubqt, "QT.")
privqt = $$replace(QT_PRIVATE, -private$, )
privdep = $$resolve_depends(privqt, "QT.")
rpaths =
alldep = $$pubdep $$privdep
for(dep, alldep) { # Inherit link-rpaths from all our dependencies
rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private)
}
privdep -= $$pubdep
for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths
rpaths += $$eval(QT.$${dep}.libs)
!isEmpty(rpaths) {
rpaths = $$unique(rpaths)
module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)"
} else {
module_rpathlink =
}
rpaths_priv =
xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.")
for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths
rpaths_priv += $$eval(QT.$${dep}.libs)
rpaths_priv = $$unique(rpaths_priv)
rpaths_priv -= $$rpaths
!isEmpty(rpaths_priv) {
module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)"
} else {
module_rpathlink_priv =
}
# Create a forwarding module .pri file
MODULE_FWD_PRI_CONT = \
"QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \
"QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \
"QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
"QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
"QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
"QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
"QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
$$module_rpathlink \
$$module_rpathlink_priv \
"include($$MODULE_PRI)"
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.")
touch($$MODULE_FWD_PRI, $$MODULE_PRI)
# Then, inject the new module into the current cache state
!contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI) { # before the actual include()!
added = $$MODULE_PRI $$MODULE_FWD_PRI
cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, added)
unset(added)
}
include($$MODULE_FWD_PRI)
for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \
name depends private_depends module_config CONFIG DEFINES sources \
includes private_includes bins libs libexecs plugins imports qml \
rpath_link rpath_link_private \
)):defined(QT.$${MODULE}.$$var, var):cache(QT.$${MODULE}.$$var, transient)
cache(QT_CONFIG, transient)
} # !build_pass
# Schedule the regular .pri file for installation
CONFIG += qt_install_module

View File

@ -0,0 +1,160 @@
#
# W A R N I N G
# -------------
#
# This file is not part of the Qt API. It exists purely as an
# implementation detail. It may change from version to version
# without notice, or even be removed.
#
# We mean it.
#
load(qt_build_paths)
MODULE_FWD_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules/qt_lib_$${MODULE}.pri
prefix_build: \
MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
else: \
MODULE_PRI = $$MODULE_FWD_PRI
!build_pass {
# Create a module .pri file
unix:!static: \
module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
else: \
module_rpath =
!isEmpty(QT_FOR_PRIVATE) {
contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
} else {
module_privdep =
}
static: \
module_build_type = "QT.$${MODULE}.module_config = staticlib"
else:mac:contains(QT_CONFIG, qt_framework): \
module_build_type = "QT.$${MODULE}.module_config = lib_bundle"
else: \
module_build_type =
!isEmpty(MODULE_CONFIG): \
module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
else: \
module_config =
!no_module_headers {
MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME"
MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \
\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME"
}
MODULE_PRI_CONT = \
"QT.$${MODULE}.VERSION = $${VERSION}" \
"QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
"QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
"QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
"" \
"QT.$${MODULE}.name = $$TARGET" \
"QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
"QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
"QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
"QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
"QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
$$module_rpath \
"QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
"QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
"QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
"QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
$$module_privdep \
$$module_build_type \
$$module_config \
"QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
"" \
"QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
MODULE_PRI_FILES = $$MODULE_PRI
prefix_build {
# -rpath-link is used by the linker to find depedencies of dynamic
# libraries which were NOT specified on the command line.
# This means that .libs of each module's regular .depends (QT) don't
# need to be put there, as they appear on the linker line anyway.
# A module's QT_PRIVATE's .libs OTOH need to be put there.
# .depends_private (QT_FOR_PRIVATE) is somewhat special: if the privates
# are used, the libraries are explicitly linked. If not, their locations
# need to be put into -rpath-link. As QT_FOR_PRIVATE cannot in turn
# contain privates, they always end up in -rpath-link of dependant
# modules.
# For simplicity of use, each module's rpath list has all dependencies
# transitively resolved already.
pubqt = $$MODULE_DEPENDS $$QT_FOR_PRIVATE
pubdep = $$resolve_depends(pubqt, "QT.")
privqt = $$replace(QT_PRIVATE, -private$, )
privdep = $$resolve_depends(privqt, "QT.")
rpaths =
alldep = $$pubdep $$privdep
for(dep, alldep) { # Inherit link-rpaths from all our dependencies
rpaths += $$eval(QT.$${dep}.rpath_link) $$eval(QT.$${dep}.rpath_link_private)
}
privdep -= $$pubdep
for(dep, privdep): \ # Add our private dependencies' lib paths as new link-rpaths
rpaths += $$eval(QT.$${dep}.libs)
!isEmpty(rpaths) {
rpaths = $$unique(rpaths)
module_rpathlink = "QT.$${MODULE}.rpath_link = $$val_escape(rpaths)"
} else {
module_rpathlink =
}
rpaths_priv =
xtradep = $$resolve_depends(QT_FOR_PRIVATE, "QT.")
for(dep, xtradep): \ # Add our private API's dependencies' lib paths as new link-rpaths
rpaths_priv += $$eval(QT.$${dep}.libs)
rpaths_priv = $$unique(rpaths_priv)
rpaths_priv -= $$rpaths
!isEmpty(rpaths_priv) {
module_rpathlink_priv = "QT.$${MODULE}.rpath_link_private = $$val_escape(rpaths_priv)"
} else {
module_rpathlink_priv =
}
# Create a forwarding module .pri file
MODULE_FWD_PRI_CONT = \
"QT_MODULE_BIN_BASE = $$MODULE_BASE_OUTDIR/bin" \
"QT_MODULE_INCLUDE_BASE = $$MODULE_BASE_OUTDIR/include" \
"QT_MODULE_IMPORT_BASE = $$MODULE_BASE_OUTDIR/imports" \
"QT_MODULE_QML_BASE = $$MODULE_BASE_OUTDIR/qml" \
"QT_MODULE_LIB_BASE = $$MODULE_BASE_OUTDIR/lib" \
"QT_MODULE_LIBEXEC_BASE = $$MODULE_BASE_OUTDIR/libexec" \
"QT_MODULE_PLUGIN_BASE = $$MODULE_BASE_OUTDIR/plugins" \
$$module_rpathlink \
$$module_rpathlink_priv \
"include($$MODULE_PRI)"
write_file($$MODULE_FWD_PRI, MODULE_FWD_PRI_CONT)|error("Aborting.")
touch($$MODULE_FWD_PRI, $$MODULE_PRI)
MODULE_PRI_FILES += $$MODULE_FWD_PRI
} else { # prefix_build
# This is needed for the direct include() below.
QT_MODULE_BIN_BASE = $$[QT_INSTALL_BINS]
QT_MODULE_INCLUDE_BASE = $$[QT_INSTALL_HEADERS]
QT_MODULE_IMPORT_BASE = $$[QT_INSTALL_IMPORTS]
QT_MODULE_QML_BASE = $$[QT_INSTALL_QML]
QT_MODULE_LIB_BASE = $$[QT_INSTALL_LIBS]
QT_MODULE_LIBEXEC_BASE = $$[QT_INSTALL_LIBEXECS]
QT_MODULE_PLUGIN_BASE = $$[QT_INSTALL_PLUGINS]
}
# Then, inject the new module into the current cache state
!contains(QMAKE_INTERNAL_INCLUDED_FILES, $$MODULE_PRI): \ # before the actual include()!
cache(QMAKE_INTERNAL_INCLUDED_FILES, add transient, MODULE_PRI_FILES)
include($$MODULE_FWD_PRI)
for(var, $$list(VERSION MAJOR_VERSION MINOR_VERSION PATCH_VERSION \
name depends private_depends module_config CONFIG DEFINES sources \
includes private_includes bins libs libexecs plugins imports qml \
rpath_link rpath_link_private \
)):defined(QT.$${MODULE}.$$var, var):cache(QT.$${MODULE}.$$var, transient)
cache(QT_CONFIG, transient)
} # !build_pass
# Schedule the regular .pri file for installation
CONFIG += qt_install_module

View File

@ -31,7 +31,7 @@ load(qt_targets)
# If we are doing a prefix build, create a "module" pri which enables
# qtPrepareTool() to work with the non-installed build.
!build_pass:!exists($$[QT_INSTALL_PREFIX]/.qmake.cache) {
!build_pass:prefix_build {
isEmpty(MODULE):MODULE = $$TARGET

View File

@ -15,7 +15,8 @@ isEmpty(ANGLE_DIR) {
win32 {
GNUTOOLS_DIR=$$PWD/../../../../gnuwin32/bin
exists($$GNUTOOLS_DIR/gperf.exe) {
GNUTOOLS = "(set $$escape_expand(\\\")PATH=$$replace(GNUTOOLS_DIR, [/\\\\], $${QMAKE_DIR_SEP});%PATH%$$escape_expand(\\\"))"
# Escape closing parens when expanding the variable, otherwise cmd confuses itself.
GNUTOOLS = "(set PATH=$$replace(GNUTOOLS_DIR, [/\\\\], $${QMAKE_DIR_SEP});%PATH:)=^)%)"
}
}

View File

@ -36,7 +36,6 @@ exampledirs += \
../ \
snippets \
../../../examples/threads/ \
../../../examples/tools/ \
../../../examples/widgets/
../../../examples/tools/
imagedirs += images

View File

@ -535,7 +535,7 @@ CApaApplication *myApplicationFactory();
//! [49]
void myMessageHandler(QtMsgType, const QMessageLogContext &, const char *);
void myMessageHandler(QtMsgType, const QMessageLogContext &, const QString &);
//! [49]
//! [50]

View File

@ -45,7 +45,7 @@ QUrl url("http://www.example.com/List of holidays.xml");
//! [1]
QUrl url = QUrl::fromEncoded("http://qt.nokia.com/List%20of%20holidays.xml");
QUrl url = QUrl::fromEncoded("http://qt-project.org/List%20of%20holidays.xml");
//! [1]
@ -73,10 +73,10 @@ http://www.example.com/cgi-bin/drawgraph.cgi?type(pie)color(green)
//! [5]
QUrl baseUrl("http://qt.nokia.com/support");
QUrl relativeUrl("../products/solutions");
QUrl baseUrl("http://qt.digia.com/Support/");
QUrl relativeUrl("../Product/Library/");
qDebug(baseUrl.resolved(relativeUrl).toString());
// prints "http://qt.nokia.com/products/solutions"
// prints "http://qt.digia.com/Product/Library/"
//! [5]

View File

@ -258,7 +258,7 @@ if (url.startsWith("ftp:"))
//! [26]
QByteArray url("http://qt.nokia.com/index.html");
QByteArray url("http://qt-project.org/doc/qt-5.0/qtdoc/index.html");
if (url.endsWith(".html"))
...
//! [26]
@ -286,16 +286,16 @@ QByteArray z = x.mid(5); // z == "pineapples"
//! [30]
QByteArray x("Qt by NOKIA");
QByteArray x("Qt by DIGIA");
QByteArray y = x.toLower();
// y == "qt by nokia"
// y == "qt by digia"
//! [30]
//! [31]
QByteArray x("Qt by NOKIA");
QByteArray x("Qt by DIGIA");
QByteArray y = x.toUpper();
// y == "QT BY NOKIA"
// y == "QT BY DIGIA"
//! [31]

View File

@ -61,8 +61,8 @@ int main(int argc, char *argv[])
stream.writeAttribute("folded", "no");
//! [write element]
stream.writeStartElement("bookmark");
stream.writeAttribute("href", "http://qt.nokia.com/");
stream.writeTextElement("title", "Qt Home");
stream.writeAttribute("href", "http://qt-project.org/");
stream.writeTextElement("title", "Qt Project");
stream.writeEndElement(); // bookmark
//! [write element]
stream.writeEndElement(); // folder

View File

@ -0,0 +1,14 @@
QT += widgets
HEADERS = mainwindow.h
SOURCES = main.cpp \
mainwindow.cpp
#! [0]
RESOURCES = application.qrc
#! [0]
# install
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/application
INSTALLS += target
simulator: warning(This example might not fully work on Simulator platform)

View File

@ -0,0 +1,10 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/paste.png</file>
<file>images/save.png</file>
</qresource>
</RCC>

View File

@ -0,0 +1,392 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
** of its contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
//! [0]
#include <QtWidgets>
#include "mainwindow.h"
//! [0]
//! [1]
MainWindow::MainWindow()
//! [1] //! [2]
{
textEdit = new QPlainTextEdit;
setCentralWidget(textEdit);
createActions();
createMenus();
createToolBars();
createStatusBar();
readSettings();
connect(textEdit->document(), SIGNAL(contentsChanged()),
this, SLOT(documentWasModified()));
setCurrentFile("");
setUnifiedTitleAndToolBarOnMac(true);
}
//! [2]
//! [3]
void MainWindow::closeEvent(QCloseEvent *event)
//! [3] //! [4]
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
//! [4]
//! [5]
void MainWindow::newFile()
//! [5] //! [6]
{
if (maybeSave()) {
textEdit->clear();
setCurrentFile("");
}
}
//! [6]
//! [7]
void MainWindow::open()
//! [7] //! [8]
{
if (maybeSave()) {
QString fileName = QFileDialog::getOpenFileName(this);
if (!fileName.isEmpty())
loadFile(fileName);
}
}
//! [8]
//! [9]
bool MainWindow::save()
//! [9] //! [10]
{
if (curFile.isEmpty()) {
return saveAs();
} else {
return saveFile(curFile);
}
}
//! [10]
//! [11]
bool MainWindow::saveAs()
//! [11] //! [12]
{
QString fileName = QFileDialog::getSaveFileName(this);
if (fileName.isEmpty())
return false;
return saveFile(fileName);
}
//! [12]
//! [13]
void MainWindow::about()
//! [13] //! [14]
{
QMessageBox::about(this, tr("About Application"),
tr("The <b>Application</b> example demonstrates how to "
"write modern GUI applications using Qt, with a menu bar, "
"toolbars, and a status bar."));
}
//! [14]
//! [15]
void MainWindow::documentWasModified()
//! [15] //! [16]
{
setWindowModified(textEdit->document()->isModified());
}
//! [16]
//! [17]
void MainWindow::createActions()
//! [17] //! [18]
{
newAct = new QAction(QIcon(":/images/new.png"), tr("&New"), this);
newAct->setShortcuts(QKeySequence::New);
newAct->setStatusTip(tr("Create a new file"));
connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));
//! [19]
openAct = new QAction(QIcon(":/images/open.png"), tr("&Open..."), this);
openAct->setShortcuts(QKeySequence::Open);
openAct->setStatusTip(tr("Open an existing file"));
connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
//! [18] //! [19]
saveAct = new QAction(QIcon(":/images/save.png"), tr("&Save"), this);
saveAct->setShortcuts(QKeySequence::Save);
saveAct->setStatusTip(tr("Save the document to disk"));
connect(saveAct, SIGNAL(triggered()), this, SLOT(save()));
saveAsAct = new QAction(tr("Save &As..."), this);
saveAsAct->setShortcuts(QKeySequence::SaveAs);
saveAsAct->setStatusTip(tr("Save the document under a new name"));
connect(saveAsAct, SIGNAL(triggered()), this, SLOT(saveAs()));
//! [20]
exitAct = new QAction(tr("E&xit"), this);
exitAct->setShortcuts(QKeySequence::Quit);
//! [20]
exitAct->setStatusTip(tr("Exit the application"));
connect(exitAct, SIGNAL(triggered()), this, SLOT(close()));
//! [21]
cutAct = new QAction(QIcon(":/images/cut.png"), tr("Cu&t"), this);
//! [21]
cutAct->setShortcuts(QKeySequence::Cut);
cutAct->setStatusTip(tr("Cut the current selection's contents to the "
"clipboard"));
connect(cutAct, SIGNAL(triggered()), textEdit, SLOT(cut()));
copyAct = new QAction(QIcon(":/images/copy.png"), tr("&Copy"), this);
copyAct->setShortcuts(QKeySequence::Copy);
copyAct->setStatusTip(tr("Copy the current selection's contents to the "
"clipboard"));
connect(copyAct, SIGNAL(triggered()), textEdit, SLOT(copy()));
pasteAct = new QAction(QIcon(":/images/paste.png"), tr("&Paste"), this);
pasteAct->setShortcuts(QKeySequence::Paste);
pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "
"selection"));
connect(pasteAct, SIGNAL(triggered()), textEdit, SLOT(paste()));
aboutAct = new QAction(tr("&About"), this);
aboutAct->setStatusTip(tr("Show the application's About box"));
connect(aboutAct, SIGNAL(triggered()), this, SLOT(about()));
//! [22]
aboutQtAct = new QAction(tr("About &Qt"), this);
aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
connect(aboutQtAct, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
//! [22]
//! [23]
cutAct->setEnabled(false);
//! [23] //! [24]
copyAct->setEnabled(false);
connect(textEdit, SIGNAL(copyAvailable(bool)),
cutAct, SLOT(setEnabled(bool)));
connect(textEdit, SIGNAL(copyAvailable(bool)),
copyAct, SLOT(setEnabled(bool)));
}
//! [24]
//! [25] //! [26]
void MainWindow::createMenus()
//! [25] //! [27]
{
fileMenu = menuBar()->addMenu(tr("&File"));
fileMenu->addAction(newAct);
//! [28]
fileMenu->addAction(openAct);
//! [28]
fileMenu->addAction(saveAct);
//! [26]
fileMenu->addAction(saveAsAct);
fileMenu->addSeparator();
fileMenu->addAction(exitAct);
editMenu = menuBar()->addMenu(tr("&Edit"));
editMenu->addAction(cutAct);
editMenu->addAction(copyAct);
editMenu->addAction(pasteAct);
menuBar()->addSeparator();
helpMenu = menuBar()->addMenu(tr("&Help"));
helpMenu->addAction(aboutAct);
helpMenu->addAction(aboutQtAct);
}
//! [27]
//! [29] //! [30]
void MainWindow::createToolBars()
{
fileToolBar = addToolBar(tr("File"));
fileToolBar->addAction(newAct);
//! [29] //! [31]
fileToolBar->addAction(openAct);
//! [31]
fileToolBar->addAction(saveAct);
editToolBar = addToolBar(tr("Edit"));
editToolBar->addAction(cutAct);
editToolBar->addAction(copyAct);
editToolBar->addAction(pasteAct);
}
//! [30]
//! [32]
void MainWindow::createStatusBar()
//! [32] //! [33]
{
statusBar()->showMessage(tr("Ready"));
}
//! [33]
//! [34] //! [35]
void MainWindow::readSettings()
//! [34] //! [36]
{
QSettings settings("QtProject", "Application Example");
QPoint pos = settings.value("pos", QPoint(200, 200)).toPoint();
QSize size = settings.value("size", QSize(400, 400)).toSize();
resize(size);
move(pos);
}
//! [35] //! [36]
//! [37] //! [38]
void MainWindow::writeSettings()
//! [37] //! [39]
{
QSettings settings("QtProject", "Application Example");
settings.setValue("pos", pos());
settings.setValue("size", size());
}
//! [38] //! [39]
//! [40]
bool MainWindow::maybeSave()
//! [40] //! [41]
{
if (textEdit->document()->isModified()) {
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("Application"),
tr("The document has been modified.\n"
"Do you want to save your changes?"),
QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
if (ret == QMessageBox::Save)
return save();
else if (ret == QMessageBox::Cancel)
return false;
}
return true;
}
//! [41]
//! [42]
void MainWindow::loadFile(const QString &fileName)
//! [42] //! [43]
{
QFile file(fileName);
if (!file.open(QFile::ReadOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"),
tr("Cannot read file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return;
}
QTextStream in(&file);
#ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::WaitCursor);
#endif
textEdit->setPlainText(in.readAll());
#ifndef QT_NO_CURSOR
QApplication::restoreOverrideCursor();
#endif
setCurrentFile(fileName);
statusBar()->showMessage(tr("File loaded"), 2000);
}
//! [43]
//! [44]
bool MainWindow::saveFile(const QString &fileName)
//! [44] //! [45]
{
QFile file(fileName);
if (!file.open(QFile::WriteOnly | QFile::Text)) {
QMessageBox::warning(this, tr("Application"),
tr("Cannot write file %1:\n%2.")
.arg(fileName)
.arg(file.errorString()));
return false;
}
QTextStream out(&file);
#ifndef QT_NO_CURSOR
QApplication::setOverrideCursor(Qt::WaitCursor);
#endif
out << textEdit->toPlainText();
#ifndef QT_NO_CURSOR
QApplication::restoreOverrideCursor();
#endif
setCurrentFile(fileName);
statusBar()->showMessage(tr("File saved"), 2000);
return true;
}
//! [45]
//! [46]
void MainWindow::setCurrentFile(const QString &fileName)
//! [46] //! [47]
{
curFile = fileName;
textEdit->document()->setModified(false);
setWindowModified(false);
QString shownName = curFile;
if (curFile.isEmpty())
shownName = "untitled.txt";
setWindowFilePath(shownName);
}
//! [47]
//! [48]
QString MainWindow::strippedName(const QString &fullFileName)
//! [48] //! [49]
{
return QFileInfo(fullFileName).fileName();
}
//! [49]

View File

@ -100,7 +100,7 @@
event delivery mechanisms are flexible. The documentation for
QCoreApplication::notify() concisely tells the whole story; the
\e{Qt Quarterly} article
\l{http://doc.qt.nokia.com/qq/qq11-events.html}{Another Look at Events}
\l{http://doc.qt.digia.com/qq/qq11-events.html}{Another Look at Events}
rehashes it less concisely. Here we will explain enough for 95%
of applications.

View File

@ -50,7 +50,7 @@
Here's an example \c .qrc file:
\quotefile mainwindows/application/application.qrc
\quotefile resource-system/application.qrc
The resource files listed in the \c .qrc file are files that are
part of the application's source tree. The specified paths are
@ -122,7 +122,7 @@
mentioned in the application's \c .pro file so that \c qmake knows
about it. For example:
\snippet mainwindows/application/application.pro 0
\snippet resource-system/application.pro 0
\c qmake will produce make rules to generate a file called \c
qrc_application.cpp that is linked into the application. This
@ -167,7 +167,7 @@
pass a resource path instead of a file name to the QIcon, QImage,
or QPixmap constructor:
\snippet mainwindows/application/mainwindow.cpp 21
\snippet resource-system/mainwindow.cpp 21
See the \l{mainwindows/application}{Application} example for an
actual application that uses Qt's resource system to store its

View File

@ -2492,7 +2492,7 @@
"\l{http://bugreports.qt-project.org/browse/QTWEBSITE-13}{http://bugreports.qt.../QTWEBSITE-13/}"),
whereas Qt::ElideRight is appropriate
for other strings (e.g.,
"\l{http://qt.nokia.com/doc/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
"\l{http://doc.qt.digia.com/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
\sa QAbstractItemView::textElideMode, QFontMetrics::elidedText(), AlignmentFlag, QTabBar::elideMode
*/

View File

@ -3861,7 +3861,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\section1 Examples:
\list
\li qt.nokia.com becomes http://qt.nokia.com
\li qt-project.org becomes http://qt-project.org
\li ftp.qt-project.org becomes ftp://ftp.qt-project.org
\li hostname becomes http://hostname
\li /home/user/test.html becomes file:///home/user/test.html

View File

@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE
memory.
The \e{Qt Quarterly} article
\l{http://qt.nokia.com/doc/qq/qq12-qpixmapcache.html}{Optimizing
\l{http://doc.qt.digia.com/qq/qq12-qpixmapcache.html}{Optimizing
with QPixmapCache} explains how to use QPixmapCache to speed up
applications by caching the results of painting.

View File

@ -95,6 +95,7 @@ typedef GLfloat GLdouble;
# if defined(Q_OS_WIN)
# include <QtCore/qt_windows.h>
# endif
# define GL_GLEXT_LEGACY // Prevents GL/gl.h form #including system glext.h
# include <GL/gl.h>
# include <QtGui/qopenglext.h>
# endif // Q_OS_MAC

View File

@ -43,13 +43,13 @@ QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
//! [0]
//! [1]
QNetworkRequest request;
request.setUrl(QUrl("http://qt.nokia.com"));
request.setUrl(QUrl("http://qt-project.org"));
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
QNetworkReply *reply = manager->get(request);

View File

@ -47,11 +47,11 @@ manager->setCache(diskCache);
//! [1]
// do a normal request (preferred from network, as this is the default)
QNetworkRequest request(QUrl(QString("http://qt.nokia.com")));
QNetworkRequest request(QUrl(QString("http://qt-project.org")));
manager->get(request);
// do a request preferred from cache
QNetworkRequest request2(QUrl(QString("http://qt.nokia.com")));
QNetworkRequest request2(QUrl(QString("http://qt-project.org")));
request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
manager->get(request2);
//! [1]

View File

@ -39,8 +39,8 @@
****************************************************************************/
//! [0]
// To find the IP address of qt.nokia.com
QHostInfo::lookupHost("qt.nokia.com",
// To find the IP address of qt-project.org
QHostInfo::lookupHost("qt-project.org",
this, SLOT(printResults(QHostInfo)));
// To find the host name for 4.2.2.1
@ -50,7 +50,7 @@ QHostInfo::lookupHost("4.2.2.1",
//! [1]
QHostInfo info = QHostInfo::fromName("qt.nokia.com");
QHostInfo info = QHostInfo::fromName("qt-project.org");
//! [1]

View File

@ -44,6 +44,7 @@
#ifndef QT_NO_OPENGL
#include <QtGui/qopengl.h>
#include <QtWidgets/qwidget.h>
#include <QtGui/qpaintengine.h>
#include <QtOpenGL/qglcolormap.h>
@ -54,33 +55,6 @@
QT_BEGIN_HEADER
#if defined(Q_OS_WIN)
# include <QtCore/qt_windows.h>
#endif
#if defined(Q_OS_MAC)
# if !defined(Q_OS_IOS)
# include <OpenGL/gl.h>
# else
# if defined(QT_OPENGL_ES_2)
# include <OpenGLES/ES2/gl.h>
# endif
# endif
#elif defined(QT_OPENGL_ES_2)
# include <GLES2/gl2.h>
# else
# include <GL/gl.h>
# endif
#if defined(QT_OPENGL_ES_2)
# ifndef GL_DOUBLE
# define GL_DOUBLE GL_FLOAT
# endif
# ifndef GLdouble
typedef GLfloat GLdouble;
# endif
#endif
QT_BEGIN_NAMESPACE

View File

@ -24,7 +24,7 @@ win32 {
$$PWD/qprintengine_win_p.h
SOURCES += \
$$PWD/qprintengine_win.cpp
LIBS += -lwinspool -lcomdlg32
LIBS += -lwinspool -lcomdlg32 -lgdi32 -luser32
}
unix:!mac:contains(QT_CONFIG, cups): {

View File

@ -36,7 +36,3 @@
\externalpage http://qt.gitorious.org/qt-labs/qtestlib-tools
\title qtestlib-tools
*/
/*!
\externalpage http://qt.nokia.com/services-partners/partners/partner-directory
\title Partner Directory
*/

View File

@ -3573,7 +3573,7 @@ bool QWizardPage::validatePage()
from the rest of your implementation, whenever the value of isComplete()
changes. This ensures that QWizard updates the enabled or disabled state of
its buttons. An example of the reimplementation is
available \l{http://qt.nokia.com/doc/qq/qq22-qwizard.html#validatebeforeitstoolate}
available \l{http://doc.qt.digia.com/qq/qq22-qwizard.html#validatebeforeitstoolate}
{here}.
\sa completeChanged(), isFinalPage()

View File

@ -0,0 +1,347 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the demonstration applications of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Digia. For licensing terms and
** conditions see http://qt.digia.com/licensing. For further information
** use the contact form at http://qt.digia.com/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Digia gives you certain additional
** rights. These rights are described in the Digia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
**
** $QT_END_LICENSE$
**
****************************************************************************/
#include "macmainwindow.h"
#import <Cocoa/Cocoa.h>
#include <QtGui>
#ifdef Q_WS_MAC
#include <Carbon/Carbon.h>
#ifdef QT_MAC_USE_COCOA
//![0]
SearchWidget::SearchWidget(QWidget *parent)
: QMacCocoaViewContainer(0, parent)
{
// Many Cocoa objects create temporary autorelease objects,
// so create a pool to catch them.
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Create the NSSearchField, set it on the QCocoaViewContainer.
NSSearchField *search = [[NSSearchField alloc] init];
setCocoaView(search);
// Use a Qt menu for the search field menu.
QMenu *qtMenu = createMenu(this);
NSMenu *nsMenu = qtMenu->macMenu(0);
[[search cell] setSearchMenuTemplate:nsMenu];
// Release our reference, since our super class takes ownership and we
// don't need it anymore.
[search release];
// Clean up our pool as we no longer need it.
[pool release];
}
//![0]
SearchWidget::~SearchWidget()
{
}
QSize SearchWidget::sizeHint() const
{
return QSize(150, 40);
}
#else
// The SearchWidget class wraps a native HISearchField.
SearchWidget::SearchWidget(QWidget *parent)
:QWidget(parent)
{
// Create a native search field and pass its window id to QWidget::create.
searchFieldText = CFStringCreateWithCString(0, "search", 0);
HISearchFieldCreate(NULL/*bounds*/, kHISearchFieldAttributesSearchIcon | kHISearchFieldAttributesCancel,
NULL/*menu ref*/, searchFieldText, &searchField);
create(reinterpret_cast<WId>(searchField));
// Use a Qt menu for the search field menu.
QMenu *searchMenu = createMenu(this);
MenuRef menuRef = searchMenu->macMenu(0);
HISearchFieldSetSearchMenu(searchField, menuRef);
setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
}
SearchWidget::~SearchWidget()
{
CFRelease(searchField);
CFRelease(searchFieldText);
}
// Get the size hint from the search field.
QSize SearchWidget::sizeHint() const
{
EventRef event;
HIRect optimalBounds;
CreateEvent(0, kEventClassControl,
kEventControlGetOptimalBounds,
GetCurrentEventTime(),
kEventAttributeUserEvent, &event);
SendEventToEventTargetWithOptions(event,
HIObjectGetEventTarget(HIObjectRef(winId())),
kEventTargetDontPropagate);
GetEventParameter(event,
kEventParamControlOptimalBounds, typeHIRect,
0, sizeof(HIRect), 0, &optimalBounds);
ReleaseEvent(event);
return QSize(optimalBounds.size.width + 100, // make it a bit wider.
optimalBounds.size.height);
}
#endif
QMenu *createMenu(QWidget *parent)
{
QMenu *searchMenu = new QMenu(parent);
QAction * indexAction = searchMenu->addAction("Index Search");
indexAction->setCheckable(true);
indexAction->setChecked(true);
QAction * fulltextAction = searchMenu->addAction("Full Text Search");
fulltextAction->setCheckable(true);
QActionGroup *searchActionGroup = new QActionGroup(parent);
searchActionGroup->addAction(indexAction);
searchActionGroup->addAction(fulltextAction);
searchActionGroup->setExclusive(true);
return searchMenu;
}
SearchWrapper::SearchWrapper(QWidget *parent)
:QWidget(parent)
{
s = new SearchWidget(this);
s->move(2,2);
setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
}
QSize SearchWrapper::sizeHint() const
{
return s->sizeHint() + QSize(6, 2);
}
Spacer::Spacer(QWidget *parent)
:QWidget(parent)
{
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
setSizePolicy(sizePolicy);
}
QSize Spacer::sizeHint() const
{
return QSize(1, 1);
}
MacSplitterHandle::MacSplitterHandle(Qt::Orientation orientation, QSplitter *parent)
: QSplitterHandle(orientation, parent) { }
// Paint the horizontal handle as a gradient, paint
// the vertical handle as a line.
void MacSplitterHandle::paintEvent(QPaintEvent *)
{
QPainter painter(this);
QColor topColor(145, 145, 145);
QColor bottomColor(142, 142, 142);
QColor gradientStart(252, 252, 252);
QColor gradientStop(223, 223, 223);
if (orientation() == Qt::Vertical) {
painter.setPen(topColor);
painter.drawLine(0, 0, width(), 0);
painter.setPen(bottomColor);
painter.drawLine(0, height() - 1, width(), height() - 1);
QLinearGradient linearGrad(QPointF(0, 0), QPointF(0, height() -3));
linearGrad.setColorAt(0, gradientStart);
linearGrad.setColorAt(1, gradientStop);
painter.fillRect(QRect(QPoint(0,1), size() - QSize(0, 2)), QBrush(linearGrad));
} else {
painter.setPen(topColor);
painter.drawLine(0, 0, 0, height());
}
}
QSize MacSplitterHandle::sizeHint() const
{
QSize parent = QSplitterHandle::sizeHint();
if (orientation() == Qt::Vertical) {
return parent + QSize(0, 3);
} else {
return QSize(1, parent.height());
}
}
QSplitterHandle *MacSplitter::createHandle()
{
return new MacSplitterHandle(orientation(), this);
}
MacMainWindow::MacMainWindow()
{
QSettings settings;
restoreGeometry(settings.value("Geometry").toByteArray());
setWindowTitle("Mac Main Window");
splitter = new MacSplitter();
// Set up the left-hand side blue side bar.
sidebar = new QTreeView();
sidebar->setFrameStyle(QFrame::NoFrame);
sidebar->setAttribute(Qt::WA_MacShowFocusRect, false);
sidebar->setAutoFillBackground(true);
// Set the palette.
QPalette palette = sidebar->palette();
QColor macSidebarColor(231, 237, 246);
QColor macSidebarHighlightColor(168, 183, 205);
palette.setColor(QPalette::Base, macSidebarColor);
palette.setColor(QPalette::Highlight, macSidebarHighlightColor);
sidebar->setPalette(palette);
sidebar->setModel(createItemModel());
sidebar->header()->hide();
sidebar->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
sidebar->setTextElideMode(Qt::ElideMiddle);
splitter->addWidget(sidebar);
horizontalSplitter = new MacSplitter();
horizontalSplitter->setOrientation(Qt::Vertical);
splitter->addWidget(horizontalSplitter);
splitter->setStretchFactor(0, 0);
splitter->setStretchFactor(1, 1);
// Set up the top document list view.
documents = new QListView();
documents->setFrameStyle(QFrame::NoFrame);
documents->setAttribute(Qt::WA_MacShowFocusRect, false);
documents->setModel(createDocumentModel());
documents->setAlternatingRowColors(true);
documents->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
horizontalSplitter->addWidget(documents);
horizontalSplitter->setStretchFactor(0, 0);
// Set up the text view.
textedit = new QTextEdit();
textedit->setFrameStyle(QFrame::NoFrame);
textedit->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
textedit->setText("<br><br><br><br><br><br><center><b>This demo shows how to create a \
Qt main window application that has the same appearance as other \
Mac OS X applications such as Mail or iTunes. This includes \
customizing the item views and QSplitter and wrapping native widgets \
such as the search field.</b></center>");
horizontalSplitter->addWidget(textedit);
setCentralWidget(splitter);
toolBar = addToolBar(tr("Search"));
toolBar->addWidget(new Spacer());
toolBar->addWidget(new SearchWrapper());
setUnifiedTitleAndToolBarOnMac(true);
}
MacMainWindow::~MacMainWindow()
{
QSettings settings;
settings.setValue("Geometry", saveGeometry());
}
QAbstractItemModel *MacMainWindow::createItemModel()
{
QStandardItemModel *model = new QStandardItemModel();
QStandardItem *parentItem = model->invisibleRootItem();
QStandardItem *documentationItem = new QStandardItem("Documentation");
parentItem->appendRow(documentationItem);
QStandardItem *assistantItem = new QStandardItem("Qt MainWindow Manual");
documentationItem->appendRow(assistantItem);
QStandardItem *designerItem = new QStandardItem("Qt Designer Manual");
documentationItem->appendRow(designerItem);
QStandardItem *qtItem = new QStandardItem("Qt Reference Documentation");
qtItem->appendRow(new QStandardItem("Classes"));
qtItem->appendRow(new QStandardItem("Overviews"));
qtItem->appendRow(new QStandardItem("Tutorial & Examples"));
documentationItem->appendRow(qtItem);
QStandardItem *bookmarksItem = new QStandardItem("Bookmarks");
parentItem->appendRow(bookmarksItem);
bookmarksItem->appendRow(new QStandardItem("QWidget"));
bookmarksItem->appendRow(new QStandardItem("QObject"));
bookmarksItem->appendRow(new QStandardItem("QWizard"));
return model;
}
void MacMainWindow::resizeEvent(QResizeEvent *)
{
if (toolBar)
toolBar->updateGeometry();
}
QAbstractItemModel *MacMainWindow::createDocumentModel()
{
QStandardItemModel *model = new QStandardItemModel();
QStandardItem *parentItem = model->invisibleRootItem();
parentItem->appendRow(new QStandardItem("QWidget Class Reference"));
parentItem->appendRow(new QStandardItem("QObject Class Reference"));
parentItem->appendRow(new QStandardItem("QListView Class Reference"));
return model;
}
#endif // Q_WS_MAC

View File

@ -68,7 +68,7 @@
required gesture type. The standard types are defined by the Qt::GestureType
enum and include many commonly used gestures.
\snippet examples/gestures/imagegestures/imagewidget.cpp enable gestures
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp enable gestures
In the above code, the gestures are set up in the constructor of the target object
itself.
@ -125,18 +125,18 @@
\l{QWidget::}{event()} handler function and delegates gesture events to a
specialized gestureEvent() function:
\snippet examples/gestures/imagegestures/imagewidget.cpp event handler
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp event handler
The gesture events delivered to the target object can be examined individually
and dealt with appropriately:
\snippet examples/gestures/imagegestures/imagewidget.cpp gesture event handler
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp gesture event handler
Responding to a gesture is simply a matter of obtaining the QGesture object
delivered in the QGestureEvent sent to the target object and examining the
information it contains.
\snippet examples/gestures/imagegestures/imagewidget.cpp swipe function
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp swipe function
Here, we examine the direction in which the user swiped the widget and modify
its contents accordingly.

View File

@ -576,7 +576,7 @@
problem.
Qt Labs provides software called
\l{http://labs.qt.nokia.com/page/Projects/Itemview/Modeltest}{ModelTest},
\l{http://qt-project.org/wiki/Model_Test}{ModelTest},
which checks models while your programming is running. Every time the model
is changed, ModelTest scans the model and reports errors with an assert.
This is especially important for tree models, since their hierarchical

View File

@ -249,7 +249,7 @@
For further guidance when implementing these functions, see the
\e{Qt Quarterly} article
\l{http://doc.qt.nokia.com/qq/qq04-height-for-width.html}
\l{http://doc.qt.digia.com/qq/qq04-height-for-width.html}
{Trading Height for Width}.

View File

@ -109,7 +109,7 @@ QSizePolicy::operator QVariant() const
be expressed using hasHeightForWidth(), heightForWidth(), and
minimumHeightForWidth(). For more explanation see the \e{Qt
Quarterly} article
\l{http://qt.nokia.com/doc/qq/qq04-height-for-width.html}{Trading
\l{http://doc.qt.digia.com/qq/qq04-height-for-width.html}{Trading
Height for Width}.
\sa QLayout

View File

@ -85,7 +85,7 @@
developer to provide the autorelease pool.
The following is a snippet of subclassing QMacCocoaViewContainer to wrap a NSSearchField.
\snippet widgets/mainwindows/macmainwindow/macmainwindow.mm 0
\snippet macmainwindow.mm 0
*/

View File

@ -72,10 +72,6 @@
\snippet qmacnativewidget/main.mm 0
On Carbon, this would do the equivalent:
\snippet qmacnativewidget/main.mm 1
Note that QMacNativeWidget requires knowledge of Carbon or Cocoa. All it
does is get the Qt hierarchy into a window not owned by Qt. It is then up
to the programmer to ensure it is placed correctly in the window and

View File

@ -108,7 +108,7 @@ QDomElement element4 = document.createElement("MyElement");
//! [7]
<link href="http://qt.nokia.com" color="red" />
<link href="http://qt-project.org" color="red" />
//! [7]
@ -116,10 +116,10 @@ QDomElement element4 = document.createElement("MyElement");
QDomElement e = //...
//...
QDomAttr a = e.attributeNode("href");
cout << a.value() << endl; // prints "http://qt.nokia.com"
a.setValue("http://qt.nokia.com/doc"); // change the node's attribute
cout << a.value() << endl; // prints "http://qt-project.org"
a.setValue("http://qt-project.org/doc"); // change the node's attribute
QDomAttr a2 = e.attributeNode("href");
cout << a2.value() << endl; // prints "http://qt.nokia.com/doc"
cout << a2.value() << endl; // prints "http://qt-project.org/doc"
//! [8]

View File

@ -2365,7 +2365,7 @@ events are reported.
it we can use the same handler for both of the following
reader functions:
\snippet rsslisting/rsslisting.cpp 0
\snippet rsslisting/listing.cpp 0
Since the reader will inform the handler of parsing errors, it is
necessary to reimplement QXmlErrorHandler::fatalError() if, for