Merge branch 'release' into stable
Change-Id: If3aa1b7ed75082eff6e9761ad82c83691135ed60
This commit is contained in:
commit
6239af6f0f
94
dist/changes-5.0.1
vendored
94
dist/changes-5.0.1
vendored
@ -40,37 +40,66 @@ Legal
|
|||||||
* Library *
|
* Library *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
|
|
||||||
QtCore
|
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
|
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
|
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
|
QtNetwork
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
- [QTBUG-28937] SSL certificates: blacklist mis-issued Turktrust certificates
|
||||||
|
|
||||||
QtDBus
|
QtDBus
|
||||||
------
|
------
|
||||||
|
|
||||||
|
- qdbusxml2cpp: Check string length before checking for \r\n.
|
||||||
|
|
||||||
QtConcurrent
|
QtConcurrent
|
||||||
------------
|
------------
|
||||||
|
|
||||||
QtOpenGL
|
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
|
QTestLib
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
- Add qtest_widget.h to the list of testlib headers
|
||||||
|
|
||||||
QtSql
|
QtSql
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
- Fix QSqlQuery test in relation to PSQL support
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Database Drivers *
|
* Database Drivers *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
@ -81,6 +110,8 @@ sqlite
|
|||||||
postgres
|
postgres
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
- Use PG_VERSION if PG_MAJORVERSION is not defined
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Platform Specific Changes *
|
* Platform Specific Changes *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
@ -88,19 +119,44 @@ postgres
|
|||||||
Qt for Linux/X11
|
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
|
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
|
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 Embedded Linux
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
Qt for Windows CE
|
Qt for Windows CE
|
||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Compiler Specific Changes *
|
* Compiler Specific Changes *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
@ -111,11 +167,41 @@ Qt for Windows CE
|
|||||||
* Tools *
|
* 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 *
|
* Plugins *
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
|
- Accessibility Linux: Prevent access to invalid interfaces
|
||||||
|
- Call QAccessible::updateAccessibility when caret moves in QTextEdit
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
* Important Behavior Changes *
|
* Important Behavior Changes *
|
||||||
|
@ -51,14 +51,14 @@ QString contentType = header.value("content-type");
|
|||||||
|
|
||||||
//! [2]
|
//! [2]
|
||||||
QHttpRequestHeader header("GET", QUrl::toPercentEncoding("/index.html"));
|
QHttpRequestHeader header("GET", QUrl::toPercentEncoding("/index.html"));
|
||||||
header.setValue("Host", "qt.nokia.com");
|
header.setValue("Host", "qt-project.org");
|
||||||
http->setHost("qt.nokia.com");
|
http->setHost("qt-project.org");
|
||||||
http->request(header);
|
http->request(header);
|
||||||
//! [2]
|
//! [2]
|
||||||
|
|
||||||
|
|
||||||
//! [3]
|
//! [3]
|
||||||
http->setHost("qt.nokia.com"); // id == 1
|
http->setHost("qt-project.org"); // id == 1
|
||||||
http->get(QUrl::toPercentEncoding("/index.html")); // id == 2
|
http->get(QUrl::toPercentEncoding("/index.html")); // id == 2
|
||||||
//! [3]
|
//! [3]
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(dbus))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = listnames \
|
SUBDIRS = listnames \
|
||||||
pingpong \
|
pingpong \
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(if(wince|embedded|x11):qtHaveModule(gui))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = styleexample raycasting flickable digiflip
|
SUBDIRS = styleexample raycasting flickable digiflip
|
||||||
|
|
||||||
|
@ -1,28 +1,23 @@
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
CONFIG += no_docs_target
|
CONFIG += no_docs_target
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
gui \
|
dbus \
|
||||||
network \
|
embedded \
|
||||||
threads \
|
gestures \
|
||||||
xml \
|
gui \
|
||||||
qpa
|
ipc \
|
||||||
|
network \
|
||||||
qtHaveModule(widgets) {
|
opengl \
|
||||||
SUBDIRS += widgets \
|
qpa \
|
||||||
ipc \
|
qtconcurrent \
|
||||||
sql \
|
qtestlib \
|
||||||
tools \
|
sql \
|
||||||
touch \
|
threads \
|
||||||
gestures
|
tools \
|
||||||
}
|
touch \
|
||||||
|
widgets \
|
||||||
wince*|embedded|x11:qtHaveModule(gui): SUBDIRS += embedded
|
xml
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
aggregate.files = aggregate/examples.pro
|
aggregate.files = aggregate/examples.pro
|
||||||
aggregate.path = $$[QT_INSTALL_EXAMPLES]
|
aggregate.path = $$[QT_INSTALL_EXAMPLES]
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = \
|
TEMPLATE = \
|
||||||
subdirs
|
subdirs
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
# no QSharedMemory
|
# no QSharedMemory
|
||||||
!vxworks:!qnx:SUBDIRS = sharedmemory
|
!vxworks:!qnx:SUBDIRS = sharedmemory
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(opengl))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2){
|
contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2){
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example qtconcurrent/imagescaling
|
\example imagescaling
|
||||||
\title Image Scaling Example
|
\title Image Scaling Example
|
||||||
\brief Demonstrates how to asynchronously scale images.
|
\brief Demonstrates how to asynchronously scale images.
|
||||||
\ingroup qtconcurrentexamples
|
\ingroup qtconcurrentexamples
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example qtconcurrent/map
|
\example map
|
||||||
\title Map Example
|
\title Map Example
|
||||||
\brief Demonstrates how to scale images synchronously.
|
\brief Demonstrates how to scale images synchronously.
|
||||||
\ingroup qtconcurrentexamples
|
\ingroup qtconcurrentexamples
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example qtconcurrent/progressdialog
|
\example progressdialog
|
||||||
\title QtConcurrent Progress Dialog Example
|
\title QtConcurrent Progress Dialog Example
|
||||||
\brief Demonstrates how to monitor the progress of the active processes.
|
\brief Demonstrates how to monitor the progress of the active processes.
|
||||||
\ingroup qtconcurrentexamples
|
\ingroup qtconcurrentexamples
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(concurrent))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = imagescaling \
|
SUBDIRS = imagescaling \
|
||||||
map \
|
map \
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example qtconcurrent/runfunction
|
\example runfunction
|
||||||
\title Run Function Example
|
\title Run Function Example
|
||||||
\brief Demonstrates how to run standard functions concurrently.
|
\brief Demonstrates how to run standard functions concurrently.
|
||||||
\ingroup qtconcurrentexamples
|
\ingroup qtconcurrentexamples
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\example qtconcurrent/wordcount
|
\example wordcount
|
||||||
\title QtConcurrent Word Count Example
|
\title QtConcurrent Word Count Example
|
||||||
\brief Demonstrates how to use the map-reduce algorithm
|
\brief Demonstrates how to use the map-reduce algorithm
|
||||||
\ingroup qtconcurrentexamples
|
\ingroup qtconcurrentexamples
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
|
requires(contains(QT_BUILD_PARTS,tools):qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = tutorial1 tutorial2 tutorial3 tutorial4 tutorial5
|
SUBDIRS = tutorial1 tutorial2 tutorial3 tutorial4 tutorial5
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
SUBDIRS = books \
|
SUBDIRS = books \
|
||||||
@ -19,4 +21,3 @@ SUBDIRS = books \
|
|||||||
}
|
}
|
||||||
|
|
||||||
EXAMPLE_FILES = connection.h
|
EXAMPLE_FILES = connection.h
|
||||||
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
CONFIG += ordered
|
CONFIG += ordered
|
||||||
SUBDIRS = contiguouscache \
|
SUBDIRS = contiguouscache \
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
|
requires(qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = pinchzoom fingerpaint knobs dials
|
SUBDIRS = pinchzoom fingerpaint knobs dials
|
||||||
|
@ -192,6 +192,6 @@
|
|||||||
fetched with QTextBlock::userData(). Matching parentheses can be
|
fetched with QTextBlock::userData(). Matching parentheses can be
|
||||||
highlighted with an extra selection. The "Matching Parentheses
|
highlighted with an extra selection. The "Matching Parentheses
|
||||||
with QSyntaxHighlighter" article in Qt Quarterly 31 implements
|
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/}.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
@ -248,7 +248,7 @@
|
|||||||
It is possible to implement parenthesis matching with
|
It is possible to implement parenthesis matching with
|
||||||
QSyntaxHighlighter. The "Matching Parentheses with
|
QSyntaxHighlighter. The "Matching Parentheses with
|
||||||
QSyntaxHighlighter" article in Qt Quarterly 31
|
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
|
the \l{Code Editor Example}, which shows how to implement line
|
||||||
numbers and how to highlight the current line.
|
numbers and how to highlight the current line.
|
||||||
|
|
||||||
|
@ -1,28 +1,15 @@
|
|||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
SUBDIRS = basicdrawing \
|
SUBDIRS = basicdrawing \
|
||||||
concentriccircles \
|
concentriccircles \
|
||||||
examples_affine \
|
affine \
|
||||||
examples_composition \
|
composition \
|
||||||
examples_deform \
|
deform \
|
||||||
examples_gradients \
|
gradients \
|
||||||
examples_pathstroke \
|
pathstroke \
|
||||||
painting_shared \
|
|
||||||
imagecomposition \
|
imagecomposition \
|
||||||
painterpaths \
|
painterpaths \
|
||||||
transformations \
|
transformations \
|
||||||
fontsampler
|
fontsampler
|
||||||
|
|
||||||
examples_affine.subdir = affine
|
EXAMPLE_FILES = \
|
||||||
examples_composition.subdir = composition
|
shared
|
||||||
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
|
|
||||||
}
|
|
||||||
|
@ -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
|
|
@ -9,7 +9,7 @@ SOURCES += main.cpp \
|
|||||||
EXAMPLE_FILES = encodedfiles
|
EXAMPLE_FILES = encodedfiles
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/codecs
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/codecs
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -8,7 +8,7 @@ SOURCES = fsmodel.cpp \
|
|||||||
RESOURCES = completer.qrc
|
RESOURCES = completer.qrc
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/completer
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/completer
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -8,7 +8,7 @@ SOURCES = main.cpp \
|
|||||||
RESOURCES = customcompleter.qrc
|
RESOURCES = customcompleter.qrc
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/customcompleter
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/customcompleter
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -5,5 +5,5 @@ SUBDIRS = echowindow \
|
|||||||
#! [0]
|
#! [0]
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -15,7 +15,7 @@ win32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -12,5 +12,5 @@ DESTDIR = ../plugins
|
|||||||
EXAMPLE_FILES = echoplugin.json
|
EXAMPLE_FILES = echoplugin.json
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin/plugin
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin/plugin
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -22,7 +22,7 @@ TRANSLATIONS += translations/i18n_ar.ts \
|
|||||||
translations/i18n_zh.ts
|
translations/i18n_zh.ts
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/i18n
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/i18n
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -19,5 +19,5 @@ if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
|
|||||||
#! [0]
|
#! [0]
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -10,5 +10,5 @@ DESTDIR = ../../plugandpaint/plugins
|
|||||||
#! [0]
|
#! [0]
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint/plugins
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -10,5 +10,5 @@ DESTDIR = ../../plugandpaint/plugins
|
|||||||
|
|
||||||
#! [0]
|
#! [0]
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint/plugins
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -5,7 +5,7 @@ SOURCES = regexpdialog.cpp \
|
|||||||
main.cpp
|
main.cpp
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/regexp
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/regexp
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -13,7 +13,7 @@ SOURCES = locationdialog.cpp \
|
|||||||
EXAMPLE_FILES = inifiles
|
EXAMPLE_FILES = inifiles
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/settingseditor
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/settingseditor
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -18,5 +18,5 @@ win32 {
|
|||||||
EXAMPLE_FILES += simplestyle.json
|
EXAMPLE_FILES += simplestyle.json
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin/styles
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin/styles
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -3,5 +3,5 @@ SUBDIRS = stylewindow \
|
|||||||
plugin
|
plugin
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -13,5 +13,5 @@ win32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -8,7 +8,7 @@ SOURCES = treemodelcompleter.cpp \
|
|||||||
RESOURCES = treemodelcompleter.qrc
|
RESOURCES = treemodelcompleter.qrc
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/treemodelcompleter
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/treemodelcompleter
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -12,5 +12,5 @@ build_all:!build_pass {
|
|||||||
RESOURCES += undo.qrc
|
RESOURCES += undo.qrc
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/undo
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/undo
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
@ -12,7 +12,7 @@ SOURCES = commands.cpp \
|
|||||||
RESOURCES = undoframework.qrc
|
RESOURCES = undoframework.qrc
|
||||||
|
|
||||||
# install
|
# install
|
||||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/undoframework
|
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/undoframework
|
||||||
INSTALLS += target
|
INSTALLS += target
|
||||||
|
|
||||||
simulator: warning(This example might not fully work on Simulator platform)
|
simulator: warning(This example might not fully work on Simulator platform)
|
||||||
|
@ -4,7 +4,7 @@ Qt documentation, which can be viewed using Qt Assistant or a Web browser.
|
|||||||
|
|
||||||
The tutorial is also available online at
|
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
|
All programs corresponding to the chapters in the tutorial should
|
||||||
automatically be built when Qt is compiled, or will be provided as
|
automatically be built when Qt is compiled, or will be provided as
|
||||||
|
@ -4,7 +4,7 @@ Qt documentation, which can be viewed using Qt Assistant or a Web browser.
|
|||||||
|
|
||||||
The tutorial is also available online at
|
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
|
All programs corresponding to the chapters in the tutorial should
|
||||||
automatically be built when Qt is compiled, or will be provided as
|
automatically be built when Qt is compiled, or will be provided as
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
requires(qtHaveModule(widgets))
|
||||||
|
|
||||||
TEMPLATE = subdirs
|
TEMPLATE = subdirs
|
||||||
CONFIG += no_docs_target
|
CONFIG += no_docs_target
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ void MainWindow::on_aboutAction_triggered()
|
|||||||
{
|
{
|
||||||
QMessageBox::about(this, tr("About Style sheet"),
|
QMessageBox::about(this, tr("About Style sheet"),
|
||||||
tr("The <b>Style Sheet</b> example shows how widgets can be styled "
|
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 Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop up the "
|
||||||
"style editor, and either choose an existing style sheet or design "
|
"style editor, and either choose an existing style sheet or design "
|
||||||
"your own."));
|
"your own."));
|
||||||
|
@ -71,16 +71,16 @@
|
|||||||
</folder>
|
</folder>
|
||||||
<folder folded="no">
|
<folder folded="no">
|
||||||
<title>Qt</title>
|
<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>
|
<title>Qt 2.3 Reference</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 3.3 Reference</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 4.0 Reference</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/">
|
<bookmark href="http://qt-project.org/">
|
||||||
<title>Qt Home Page</title>
|
<title>Qt Home Page</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
|
@ -45,16 +45,16 @@
|
|||||||
<title>QtQuestions</title>
|
<title>QtQuestions</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
<bookmark href="http://qt.nokia.com/doc/qq/">
|
<bookmark href="http://doc.qt.digia.com/qq/">
|
||||||
<title>Qt Quarterly</title>
|
<title>Qt Quarterly</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/">
|
<bookmark href="http://qt-project.org/">
|
||||||
<title>Qt home page</title>
|
<title>Qt home page</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 4.0 documentation</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/developer/faqs/">
|
<bookmark href="http://qt-project.org/faq/">
|
||||||
<title>Frequently Asked Questions</title>
|
<title>Frequently Asked Questions</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<p>A paragraph.</p>
|
<p>A paragraph.</p>
|
||||||
<p>A second paragraph. Check out our <a href="http://labs.qt.nokia.com/">developer blogs</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.nokia.com/doc/">online documentation</a>.</p>
|
<p>And the last paragraph. Or our <a href="http://qt-project.org/doc/">online documentation</a>.</p>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -76,7 +76,7 @@ RSSListing::RSSListing(QWidget *parent)
|
|||||||
{
|
{
|
||||||
|
|
||||||
lineEdit = new QLineEdit(this);
|
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);
|
fetchButton = new QPushButton(tr("Fetch"), this);
|
||||||
|
|
||||||
|
@ -71,16 +71,16 @@
|
|||||||
</folder>
|
</folder>
|
||||||
<folder folded="no">
|
<folder folded="no">
|
||||||
<title>Qt</title>
|
<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>
|
<title>Qt 2.3 Reference</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 3.3 Reference</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 4.0 Reference</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/">
|
<bookmark href="http://qt-project.org/">
|
||||||
<title>Qt Home Page</title>
|
<title>Qt Home Page</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
|
@ -45,16 +45,16 @@
|
|||||||
<title>QtQuestions</title>
|
<title>QtQuestions</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
<bookmark href="http://qt.nokia.com/doc/qq/">
|
<bookmark href="http://doc.qt.digia.com/qq/">
|
||||||
<title>Qt Quarterly</title>
|
<title>Qt Quarterly</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/">
|
<bookmark href="http://qt-project.org/">
|
||||||
<title>qt home page</title>
|
<title>qt home page</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 4.0 documentation</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/developer/faqs/">
|
<bookmark href="http://qt-project.org/faq/">
|
||||||
<title>Frequently Asked Questions</title>
|
<title>Frequently Asked Questions</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
|
@ -71,16 +71,16 @@
|
|||||||
</folder>
|
</folder>
|
||||||
<folder folded="no">
|
<folder folded="no">
|
||||||
<title>Qt</title>
|
<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>
|
<title>Qt 2.3 Reference</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 3.3 Reference</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 4.0 Reference</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/">
|
<bookmark href="http://qt-project.org/">
|
||||||
<title>Qt Home Page</title>
|
<title>Qt Home Page</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
|
@ -45,16 +45,16 @@
|
|||||||
<title>QtQuestions</title>
|
<title>QtQuestions</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
<bookmark href="http://qt.nokia.com/doc/qq/">
|
<bookmark href="http://doc.qt.digia.com/qq/">
|
||||||
<title>Qt Quarterly</title>
|
<title>Qt Quarterly</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/">
|
<bookmark href="http://qt-project.org/">
|
||||||
<title>Qt home page</title>
|
<title>Qt home page</title>
|
||||||
</bookmark>
|
</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>
|
<title>Qt 4.0 documentation</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
<bookmark href="http://qt.nokia.com/developer/faqs/">
|
<bookmark href="http://qt-project.org/faq/">
|
||||||
<title>Frequently Asked Questions</title>
|
<title>Frequently Asked Questions</title>
|
||||||
</bookmark>
|
</bookmark>
|
||||||
</folder>
|
</folder>
|
||||||
|
@ -25,7 +25,7 @@ qml1_target: \
|
|||||||
else: \
|
else: \
|
||||||
instbase = $$[QT_INSTALL_QML]
|
instbase = $$[QT_INSTALL_QML]
|
||||||
|
|
||||||
exists($$[QT_HOST_PREFIX]/.qmake.cache) {
|
!prefix_build {
|
||||||
# These bizarre rules copy the files to the qtbase build directory
|
# These bizarre rules copy the files to the qtbase build directory
|
||||||
|
|
||||||
defineReplace(qmlModStripSrcDir) {
|
defineReplace(qmlModStripSrcDir) {
|
||||||
|
@ -20,7 +20,10 @@
|
|||||||
debug(1, "Not loading qmodule.pri twice")
|
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
|
# 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.
|
# this repo's module pris' location to the other repos.
|
||||||
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))
|
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))
|
||||||
|
@ -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_BASE_OUTDIR): MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_DIR)
|
||||||
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR
|
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR
|
||||||
|
|
||||||
QTDIR = $$[QT_HOST_PREFIX]
|
!prefix_build {
|
||||||
exists($$QTDIR/.qmake.cache) {
|
QTDIR = $$[QT_HOST_PREFIX]
|
||||||
# Permit modules to enforce being built outside QTDIR ...
|
# Permit modules to enforce being built outside QTDIR ...
|
||||||
!force_independent: MODULE_BASE_OUTDIR = $$QTDIR
|
!force_independent: MODULE_BASE_OUTDIR = $$QTDIR
|
||||||
# ... though this sort of breaks the idea.
|
# ... though this sort of breaks the idea.
|
||||||
|
@ -9,6 +9,22 @@
|
|||||||
# We mean it.
|
# 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)
|
probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
||||||
!isEmpty(probase):!contains(probase, ^\\..*) {
|
!isEmpty(probase):!contains(probase, ^\\..*) {
|
||||||
for(ex, EXAMPLE_FILES): \
|
for(ex, EXAMPLE_FILES): \
|
||||||
@ -42,34 +58,26 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
|||||||
# Just for Qt Creator
|
# Just for Qt Creator
|
||||||
OTHER_FILES += $$sourcefiles
|
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 += \
|
sourcefiles += \
|
||||||
$$_PRO_FILE_ $$RC_FILE $$DEF_FILE \
|
$$_PRO_FILE_ $$RC_FILE $$DEF_FILE \
|
||||||
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
|
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
|
||||||
$$DBUS_ADAPTORS $$DBUS_INTERFACES
|
$$DBUS_ADAPTORS $$DBUS_INTERFACES
|
||||||
for(sf, sourcefiles) {
|
addInstallFiles(sources.files, $$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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
|
sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
|
||||||
INSTALLS += sources
|
INSTALLS += sources
|
||||||
|
|
||||||
check_examples {
|
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_/*)
|
thefiles = $$files($$_PRO_FILE_PWD_/*)
|
||||||
for(i, thefiles): \
|
for(i, thefiles): \
|
||||||
allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_)
|
allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_)
|
||||||
for(i, sources.files): \
|
for(i, srcfiles): \
|
||||||
allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_)
|
allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_)
|
||||||
for(i, SUBDIRS) {
|
for(i, SUBDIRS) {
|
||||||
sd = $$eval($${i}.file)
|
sd = $$eval($${i}.file)
|
||||||
@ -84,4 +92,12 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
|||||||
allfiles -= doc
|
allfiles -= doc
|
||||||
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
|
!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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,65 +45,7 @@ else: \
|
|||||||
MODULE_DEFINE = QT_$${ucmodule}_LIB
|
MODULE_DEFINE = QT_$${ucmodule}_LIB
|
||||||
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
|
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
|
||||||
|
|
||||||
load(qt_build_paths)
|
load(qt_module_pris)
|
||||||
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)
|
|
||||||
|
|
||||||
INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)
|
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
|
#other
|
||||||
TEMPLATE = lib
|
TEMPLATE = lib
|
||||||
DESTDIR = $$eval(QT.$${MODULE}.libs)
|
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
|
CONFIG += qmake_cache target_qt
|
||||||
|
|
||||||
@ -206,7 +148,9 @@ unix {
|
|||||||
}
|
}
|
||||||
|
|
||||||
unix|win32-g++* {
|
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): \
|
isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
|
||||||
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
|
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
|
||||||
}
|
}
|
||||||
|
@ -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
|
|
160
mkspecs/features/qt_module_pris.prf
Normal file
160
mkspecs/features/qt_module_pris.prf
Normal 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
|
@ -31,7 +31,7 @@ load(qt_targets)
|
|||||||
|
|
||||||
# If we are doing a prefix build, create a "module" pri which enables
|
# If we are doing a prefix build, create a "module" pri which enables
|
||||||
# qtPrepareTool() to work with the non-installed build.
|
# qtPrepareTool() to work with the non-installed build.
|
||||||
!build_pass:!exists($$[QT_INSTALL_PREFIX]/.qmake.cache) {
|
!build_pass:prefix_build {
|
||||||
|
|
||||||
isEmpty(MODULE):MODULE = $$TARGET
|
isEmpty(MODULE):MODULE = $$TARGET
|
||||||
|
|
||||||
|
@ -15,7 +15,8 @@ isEmpty(ANGLE_DIR) {
|
|||||||
win32 {
|
win32 {
|
||||||
GNUTOOLS_DIR=$$PWD/../../../../gnuwin32/bin
|
GNUTOOLS_DIR=$$PWD/../../../../gnuwin32/bin
|
||||||
exists($$GNUTOOLS_DIR/gperf.exe) {
|
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:)=^)%)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,6 @@ exampledirs += \
|
|||||||
../ \
|
../ \
|
||||||
snippets \
|
snippets \
|
||||||
../../../examples/threads/ \
|
../../../examples/threads/ \
|
||||||
../../../examples/tools/ \
|
../../../examples/tools/
|
||||||
../../../examples/widgets/
|
|
||||||
|
|
||||||
imagedirs += images
|
imagedirs += images
|
||||||
|
@ -535,7 +535,7 @@ CApaApplication *myApplicationFactory();
|
|||||||
|
|
||||||
|
|
||||||
//! [49]
|
//! [49]
|
||||||
void myMessageHandler(QtMsgType, const QMessageLogContext &, const char *);
|
void myMessageHandler(QtMsgType, const QMessageLogContext &, const QString &);
|
||||||
//! [49]
|
//! [49]
|
||||||
|
|
||||||
//! [50]
|
//! [50]
|
||||||
|
@ -45,7 +45,7 @@ QUrl url("http://www.example.com/List of holidays.xml");
|
|||||||
|
|
||||||
|
|
||||||
//! [1]
|
//! [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]
|
//! [1]
|
||||||
|
|
||||||
|
|
||||||
@ -73,10 +73,10 @@ http://www.example.com/cgi-bin/drawgraph.cgi?type(pie)color(green)
|
|||||||
|
|
||||||
|
|
||||||
//! [5]
|
//! [5]
|
||||||
QUrl baseUrl("http://qt.nokia.com/support");
|
QUrl baseUrl("http://qt.digia.com/Support/");
|
||||||
QUrl relativeUrl("../products/solutions");
|
QUrl relativeUrl("../Product/Library/");
|
||||||
qDebug(baseUrl.resolved(relativeUrl).toString());
|
qDebug(baseUrl.resolved(relativeUrl).toString());
|
||||||
// prints "http://qt.nokia.com/products/solutions"
|
// prints "http://qt.digia.com/Product/Library/"
|
||||||
//! [5]
|
//! [5]
|
||||||
|
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ if (url.startsWith("ftp:"))
|
|||||||
|
|
||||||
|
|
||||||
//! [26]
|
//! [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"))
|
if (url.endsWith(".html"))
|
||||||
...
|
...
|
||||||
//! [26]
|
//! [26]
|
||||||
@ -286,16 +286,16 @@ QByteArray z = x.mid(5); // z == "pineapples"
|
|||||||
|
|
||||||
|
|
||||||
//! [30]
|
//! [30]
|
||||||
QByteArray x("Qt by NOKIA");
|
QByteArray x("Qt by DIGIA");
|
||||||
QByteArray y = x.toLower();
|
QByteArray y = x.toLower();
|
||||||
// y == "qt by nokia"
|
// y == "qt by digia"
|
||||||
//! [30]
|
//! [30]
|
||||||
|
|
||||||
|
|
||||||
//! [31]
|
//! [31]
|
||||||
QByteArray x("Qt by NOKIA");
|
QByteArray x("Qt by DIGIA");
|
||||||
QByteArray y = x.toUpper();
|
QByteArray y = x.toUpper();
|
||||||
// y == "QT BY NOKIA"
|
// y == "QT BY DIGIA"
|
||||||
//! [31]
|
//! [31]
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,8 +61,8 @@ int main(int argc, char *argv[])
|
|||||||
stream.writeAttribute("folded", "no");
|
stream.writeAttribute("folded", "no");
|
||||||
//! [write element]
|
//! [write element]
|
||||||
stream.writeStartElement("bookmark");
|
stream.writeStartElement("bookmark");
|
||||||
stream.writeAttribute("href", "http://qt.nokia.com/");
|
stream.writeAttribute("href", "http://qt-project.org/");
|
||||||
stream.writeTextElement("title", "Qt Home");
|
stream.writeTextElement("title", "Qt Project");
|
||||||
stream.writeEndElement(); // bookmark
|
stream.writeEndElement(); // bookmark
|
||||||
//! [write element]
|
//! [write element]
|
||||||
stream.writeEndElement(); // folder
|
stream.writeEndElement(); // folder
|
||||||
|
14
src/corelib/doc/snippets/resource-system/application.pro
Normal file
14
src/corelib/doc/snippets/resource-system/application.pro
Normal 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)
|
10
src/corelib/doc/snippets/resource-system/application.qrc
Normal file
10
src/corelib/doc/snippets/resource-system/application.qrc
Normal 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>
|
392
src/corelib/doc/snippets/resource-system/mainwindow.cpp
Normal file
392
src/corelib/doc/snippets/resource-system/mainwindow.cpp
Normal 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]
|
@ -100,7 +100,7 @@
|
|||||||
event delivery mechanisms are flexible. The documentation for
|
event delivery mechanisms are flexible. The documentation for
|
||||||
QCoreApplication::notify() concisely tells the whole story; the
|
QCoreApplication::notify() concisely tells the whole story; the
|
||||||
\e{Qt Quarterly} article
|
\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%
|
rehashes it less concisely. Here we will explain enough for 95%
|
||||||
of applications.
|
of applications.
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
Here's an example \c .qrc file:
|
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
|
The resource files listed in the \c .qrc file are files that are
|
||||||
part of the application's source tree. The specified paths 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
|
mentioned in the application's \c .pro file so that \c qmake knows
|
||||||
about it. For example:
|
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
|
\c qmake will produce make rules to generate a file called \c
|
||||||
qrc_application.cpp that is linked into the application. This
|
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,
|
pass a resource path instead of a file name to the QIcon, QImage,
|
||||||
or QPixmap constructor:
|
or QPixmap constructor:
|
||||||
|
|
||||||
\snippet mainwindows/application/mainwindow.cpp 21
|
\snippet resource-system/mainwindow.cpp 21
|
||||||
|
|
||||||
See the \l{mainwindows/application}{Application} example for an
|
See the \l{mainwindows/application}{Application} example for an
|
||||||
actual application that uses Qt's resource system to store its
|
actual application that uses Qt's resource system to store its
|
||||||
|
@ -2492,7 +2492,7 @@
|
|||||||
"\l{http://bugreports.qt-project.org/browse/QTWEBSITE-13}{http://bugreports.qt.../QTWEBSITE-13/}"),
|
"\l{http://bugreports.qt-project.org/browse/QTWEBSITE-13}{http://bugreports.qt.../QTWEBSITE-13/}"),
|
||||||
whereas Qt::ElideRight is appropriate
|
whereas Qt::ElideRight is appropriate
|
||||||
for other strings (e.g.,
|
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
|
\sa QAbstractItemView::textElideMode, QFontMetrics::elidedText(), AlignmentFlag, QTabBar::elideMode
|
||||||
*/
|
*/
|
||||||
|
@ -3861,7 +3861,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
\section1 Examples:
|
\section1 Examples:
|
||||||
|
|
||||||
\list
|
\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 ftp.qt-project.org becomes ftp://ftp.qt-project.org
|
||||||
\li hostname becomes http://hostname
|
\li hostname becomes http://hostname
|
||||||
\li /home/user/test.html becomes file:///home/user/test.html
|
\li /home/user/test.html becomes file:///home/user/test.html
|
||||||
|
@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE
|
|||||||
memory.
|
memory.
|
||||||
|
|
||||||
The \e{Qt Quarterly} article
|
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
|
with QPixmapCache} explains how to use QPixmapCache to speed up
|
||||||
applications by caching the results of painting.
|
applications by caching the results of painting.
|
||||||
|
|
||||||
|
@ -95,6 +95,7 @@ typedef GLfloat GLdouble;
|
|||||||
# if defined(Q_OS_WIN)
|
# if defined(Q_OS_WIN)
|
||||||
# include <QtCore/qt_windows.h>
|
# include <QtCore/qt_windows.h>
|
||||||
# endif
|
# endif
|
||||||
|
# define GL_GLEXT_LEGACY // Prevents GL/gl.h form #including system glext.h
|
||||||
# include <GL/gl.h>
|
# include <GL/gl.h>
|
||||||
# include <QtGui/qopenglext.h>
|
# include <QtGui/qopenglext.h>
|
||||||
# endif // Q_OS_MAC
|
# endif // Q_OS_MAC
|
||||||
|
@ -43,13 +43,13 @@ QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
|||||||
connect(manager, SIGNAL(finished(QNetworkReply*)),
|
connect(manager, SIGNAL(finished(QNetworkReply*)),
|
||||||
this, SLOT(replyFinished(QNetworkReply*)));
|
this, SLOT(replyFinished(QNetworkReply*)));
|
||||||
|
|
||||||
manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));
|
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
|
||||||
//! [0]
|
//! [0]
|
||||||
|
|
||||||
|
|
||||||
//! [1]
|
//! [1]
|
||||||
QNetworkRequest request;
|
QNetworkRequest request;
|
||||||
request.setUrl(QUrl("http://qt.nokia.com"));
|
request.setUrl(QUrl("http://qt-project.org"));
|
||||||
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
|
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
|
||||||
|
|
||||||
QNetworkReply *reply = manager->get(request);
|
QNetworkReply *reply = manager->get(request);
|
||||||
|
@ -47,11 +47,11 @@ manager->setCache(diskCache);
|
|||||||
|
|
||||||
//! [1]
|
//! [1]
|
||||||
// do a normal request (preferred from network, as this is the default)
|
// 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);
|
manager->get(request);
|
||||||
|
|
||||||
// do a request preferred from cache
|
// 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);
|
request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
|
||||||
manager->get(request2);
|
manager->get(request2);
|
||||||
//! [1]
|
//! [1]
|
||||||
|
@ -39,8 +39,8 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
//! [0]
|
//! [0]
|
||||||
// To find the IP address of qt.nokia.com
|
// To find the IP address of qt-project.org
|
||||||
QHostInfo::lookupHost("qt.nokia.com",
|
QHostInfo::lookupHost("qt-project.org",
|
||||||
this, SLOT(printResults(QHostInfo)));
|
this, SLOT(printResults(QHostInfo)));
|
||||||
|
|
||||||
// To find the host name for 4.2.2.1
|
// To find the host name for 4.2.2.1
|
||||||
@ -50,7 +50,7 @@ QHostInfo::lookupHost("4.2.2.1",
|
|||||||
|
|
||||||
|
|
||||||
//! [1]
|
//! [1]
|
||||||
QHostInfo info = QHostInfo::fromName("qt.nokia.com");
|
QHostInfo info = QHostInfo::fromName("qt-project.org");
|
||||||
//! [1]
|
//! [1]
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
|
|
||||||
#ifndef QT_NO_OPENGL
|
#ifndef QT_NO_OPENGL
|
||||||
|
|
||||||
|
#include <QtGui/qopengl.h>
|
||||||
#include <QtWidgets/qwidget.h>
|
#include <QtWidgets/qwidget.h>
|
||||||
#include <QtGui/qpaintengine.h>
|
#include <QtGui/qpaintengine.h>
|
||||||
#include <QtOpenGL/qglcolormap.h>
|
#include <QtOpenGL/qglcolormap.h>
|
||||||
@ -54,33 +55,6 @@
|
|||||||
|
|
||||||
QT_BEGIN_HEADER
|
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
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ win32 {
|
|||||||
$$PWD/qprintengine_win_p.h
|
$$PWD/qprintengine_win_p.h
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/qprintengine_win.cpp
|
$$PWD/qprintengine_win.cpp
|
||||||
LIBS += -lwinspool -lcomdlg32
|
LIBS += -lwinspool -lcomdlg32 -lgdi32 -luser32
|
||||||
}
|
}
|
||||||
|
|
||||||
unix:!mac:contains(QT_CONFIG, cups): {
|
unix:!mac:contains(QT_CONFIG, cups): {
|
||||||
|
@ -36,7 +36,3 @@
|
|||||||
\externalpage http://qt.gitorious.org/qt-labs/qtestlib-tools
|
\externalpage http://qt.gitorious.org/qt-labs/qtestlib-tools
|
||||||
\title qtestlib-tools
|
\title qtestlib-tools
|
||||||
*/
|
*/
|
||||||
/*!
|
|
||||||
\externalpage http://qt.nokia.com/services-partners/partners/partner-directory
|
|
||||||
\title Partner Directory
|
|
||||||
*/
|
|
||||||
|
@ -3573,7 +3573,7 @@ bool QWizardPage::validatePage()
|
|||||||
from the rest of your implementation, whenever the value of isComplete()
|
from the rest of your implementation, whenever the value of isComplete()
|
||||||
changes. This ensures that QWizard updates the enabled or disabled state of
|
changes. This ensures that QWizard updates the enabled or disabled state of
|
||||||
its buttons. An example of the reimplementation is
|
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}.
|
{here}.
|
||||||
|
|
||||||
\sa completeChanged(), isFinalPage()
|
\sa completeChanged(), isFinalPage()
|
||||||
|
347
src/widgets/doc/snippets/macmainwindow.mm
Executable file
347
src/widgets/doc/snippets/macmainwindow.mm
Executable 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
|
@ -68,7 +68,7 @@
|
|||||||
required gesture type. The standard types are defined by the Qt::GestureType
|
required gesture type. The standard types are defined by the Qt::GestureType
|
||||||
enum and include many commonly used gestures.
|
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
|
In the above code, the gestures are set up in the constructor of the target object
|
||||||
itself.
|
itself.
|
||||||
@ -125,18 +125,18 @@
|
|||||||
\l{QWidget::}{event()} handler function and delegates gesture events to a
|
\l{QWidget::}{event()} handler function and delegates gesture events to a
|
||||||
specialized gestureEvent() function:
|
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
|
The gesture events delivered to the target object can be examined individually
|
||||||
and dealt with appropriately:
|
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
|
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
|
delivered in the QGestureEvent sent to the target object and examining the
|
||||||
information it contains.
|
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
|
Here, we examine the direction in which the user swiped the widget and modify
|
||||||
its contents accordingly.
|
its contents accordingly.
|
||||||
|
@ -576,7 +576,7 @@
|
|||||||
problem.
|
problem.
|
||||||
|
|
||||||
Qt Labs provides software called
|
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
|
which checks models while your programming is running. Every time the model
|
||||||
is changed, ModelTest scans the model and reports errors with an assert.
|
is changed, ModelTest scans the model and reports errors with an assert.
|
||||||
This is especially important for tree models, since their hierarchical
|
This is especially important for tree models, since their hierarchical
|
||||||
|
@ -249,7 +249,7 @@
|
|||||||
|
|
||||||
For further guidance when implementing these functions, see the
|
For further guidance when implementing these functions, see the
|
||||||
\e{Qt Quarterly} article
|
\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}.
|
{Trading Height for Width}.
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ QSizePolicy::operator QVariant() const
|
|||||||
be expressed using hasHeightForWidth(), heightForWidth(), and
|
be expressed using hasHeightForWidth(), heightForWidth(), and
|
||||||
minimumHeightForWidth(). For more explanation see the \e{Qt
|
minimumHeightForWidth(). For more explanation see the \e{Qt
|
||||||
Quarterly} article
|
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}.
|
Height for Width}.
|
||||||
|
|
||||||
\sa QLayout
|
\sa QLayout
|
||||||
|
@ -85,7 +85,7 @@
|
|||||||
developer to provide the autorelease pool.
|
developer to provide the autorelease pool.
|
||||||
|
|
||||||
The following is a snippet of subclassing QMacCocoaViewContainer to wrap a NSSearchField.
|
The following is a snippet of subclassing QMacCocoaViewContainer to wrap a NSSearchField.
|
||||||
\snippet widgets/mainwindows/macmainwindow/macmainwindow.mm 0
|
\snippet macmainwindow.mm 0
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -72,10 +72,6 @@
|
|||||||
|
|
||||||
\snippet qmacnativewidget/main.mm 0
|
\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
|
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
|
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
|
to the programmer to ensure it is placed correctly in the window and
|
||||||
|
@ -108,7 +108,7 @@ QDomElement element4 = document.createElement("MyElement");
|
|||||||
|
|
||||||
|
|
||||||
//! [7]
|
//! [7]
|
||||||
<link href="http://qt.nokia.com" color="red" />
|
<link href="http://qt-project.org" color="red" />
|
||||||
//! [7]
|
//! [7]
|
||||||
|
|
||||||
|
|
||||||
@ -116,10 +116,10 @@ QDomElement element4 = document.createElement("MyElement");
|
|||||||
QDomElement e = //...
|
QDomElement e = //...
|
||||||
//...
|
//...
|
||||||
QDomAttr a = e.attributeNode("href");
|
QDomAttr a = e.attributeNode("href");
|
||||||
cout << a.value() << endl; // prints "http://qt.nokia.com"
|
cout << a.value() << endl; // prints "http://qt-project.org"
|
||||||
a.setValue("http://qt.nokia.com/doc"); // change the node's attribute
|
a.setValue("http://qt-project.org/doc"); // change the node's attribute
|
||||||
QDomAttr a2 = e.attributeNode("href");
|
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]
|
//! [8]
|
||||||
|
|
||||||
|
|
||||||
|
@ -2365,7 +2365,7 @@ events are reported.
|
|||||||
it we can use the same handler for both of the following
|
it we can use the same handler for both of the following
|
||||||
reader functions:
|
reader functions:
|
||||||
|
|
||||||
\snippet rsslisting/rsslisting.cpp 0
|
\snippet rsslisting/listing.cpp 0
|
||||||
|
|
||||||
Since the reader will inform the handler of parsing errors, it is
|
Since the reader will inform the handler of parsing errors, it is
|
||||||
necessary to reimplement QXmlErrorHandler::fatalError() if, for
|
necessary to reimplement QXmlErrorHandler::fatalError() if, for
|
||||||
|
Loading…
x
Reference in New Issue
Block a user