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 *
|
||||
****************************************************************************
|
||||
|
||||
|
||||
QtCore
|
||||
-----
|
||||
|
||||
- Fix QMutex::tryLock with negative values
|
||||
- Fix a leak in case the QMetaObject::Connection survives the sender object,
|
||||
after a successful disconnect().
|
||||
- Speed up and fix QByteArray::setNum()
|
||||
- [QTBUG-28924] Don't increase the reference count if dynamic_cast failed
|
||||
|
||||
QtGui
|
||||
-----
|
||||
|
||||
- Fix QGuiApplication::keyboardModifiers() and QGuiApplication::mouseButtons()
|
||||
- Fix styleName support in QPA font database
|
||||
- Make QImage::mirrored() propagate devicePixelRatio
|
||||
- [QTBUG-28324] Fixed invalid memory read in SSSE3 image blending code.
|
||||
|
||||
QtWidgets
|
||||
---------
|
||||
|
||||
- Do not inform that a widget is not visible when it's disabled.
|
||||
- [QTBUG-28031, QTBUG-2596] QMenu: Do not set snapToMouse if a caused-widget exists.
|
||||
- [QTBUG-28321] Fix focusproxy-relayed crash in QGraphicsItem destructor.
|
||||
- [QTBUG-28446] Fix compilation when Q_NO_USING_KEYWORD is defined
|
||||
- [QTBUG-28477] Fix QWidget::setWindowOpacity() when called before show().
|
||||
- [QTBUG-28506] Style animations: fix QCommonStylePrivate::stopAnimation()
|
||||
- [QTBUG-28557] Fix QGtkPainter::reset() to reset the clip rect
|
||||
|
||||
QtNetwork
|
||||
---------
|
||||
|
||||
- [QTBUG-28937] SSL certificates: blacklist mis-issued Turktrust certificates
|
||||
|
||||
QtDBus
|
||||
------
|
||||
|
||||
- qdbusxml2cpp: Check string length before checking for \r\n.
|
||||
|
||||
QtConcurrent
|
||||
------------
|
||||
|
||||
QtOpenGL
|
||||
--------
|
||||
|
||||
QtScript
|
||||
--------
|
||||
- Fix compilation of Open GL ES 2 examples when using a Qt-namespace.
|
||||
- Fixed deadlock situation in QtOpenGL's texture management.
|
||||
- updating qeglfshooks_imx6.cpp to 12.09.01 (L3.0.35) opengl-drivers
|
||||
- [QTBUG-27512] Entered hardcoded urls for <OpenGL> and <Khronos O.GL>
|
||||
- [QTBUG-28875] Fix bug in multisampling handling when converting from surface format
|
||||
|
||||
QTestLib
|
||||
--------
|
||||
|
||||
- Add qtest_widget.h to the list of testlib headers
|
||||
|
||||
QtSql
|
||||
-----
|
||||
|
||||
- Fix QSqlQuery test in relation to PSQL support
|
||||
|
||||
****************************************************************************
|
||||
* Database Drivers *
|
||||
****************************************************************************
|
||||
@ -81,6 +110,8 @@ sqlite
|
||||
postgres
|
||||
--------
|
||||
|
||||
- Use PG_VERSION if PG_MAJORVERSION is not defined
|
||||
|
||||
****************************************************************************
|
||||
* Platform Specific Changes *
|
||||
****************************************************************************
|
||||
@ -88,19 +119,44 @@ postgres
|
||||
Qt for Linux/X11
|
||||
----------------
|
||||
|
||||
- XCB: add support for getting and setting appTime and appUserTime.
|
||||
- [QTBUG-28561] Fixed incorrect handling of extra mouse buttons in XCB platform plugin.
|
||||
|
||||
Qt for Windows
|
||||
--------------
|
||||
|
||||
- DBUS: Fix linker errors on Windows.
|
||||
- Define Q_COMPILER_AUTO_FUNCTION for MVSC
|
||||
- [QTBUG-28611] Fix warnings about not being able to set Window geometry on Windows.
|
||||
- [QTBUG-28611] QMdiArea: Increase minimum size for Windows 8/Large fonts.
|
||||
- [QTBUG-28645] Rename conflicting symbol QVariantToVARIANT
|
||||
- [QTBUG-28876] QWindowsVistaStyle: fix frame rendering
|
||||
|
||||
Qt for Mac OS X
|
||||
---------------
|
||||
|
||||
- Ignore ScrollBarAlwaysOn policy for transient scrollbars
|
||||
- New rendering for disclose triangle, get proper color when selected
|
||||
- [QTBUG-27415] Fix bugs for font selection in QFontDialog
|
||||
- [QTBUG-28161] Ensure the native filedialog starts up with the right directory
|
||||
- [QTBUG-28443] Cocoa: Re-enable per class palette on QPA plugin
|
||||
- [QTBUG-28669] Fix transient QScrollBar flashing
|
||||
- [QTBUG-28738] Bring back proper layout in QMessageBox
|
||||
|
||||
Qt for BlackBerry
|
||||
-----------------
|
||||
|
||||
- Reset virtual keyboard when shown.
|
||||
- Disable Q_COMPILER_RVALUE_REFS on QNX
|
||||
- Fix QNX QPA plugin clipboard impl
|
||||
- Don't crash because the window hasn't been initialized yet.
|
||||
|
||||
Qt for Embedded Linux
|
||||
---------------------
|
||||
|
||||
Qt for Windows CE
|
||||
-----------------
|
||||
|
||||
|
||||
****************************************************************************
|
||||
* Compiler Specific Changes *
|
||||
****************************************************************************
|
||||
@ -111,11 +167,41 @@ Qt for Windows CE
|
||||
* Tools *
|
||||
****************************************************************************
|
||||
|
||||
configure
|
||||
---------
|
||||
|
||||
- Remove the -fast configure option as it was pretty much broken
|
||||
- [QTBUG-23569, QTBUG-25760] Check for gtk_adjustment_configure as this is not always implemented
|
||||
|
||||
mkspecs
|
||||
-------
|
||||
|
||||
- Fix the computation of the location of mkspecs.
|
||||
- [QTBUG-28215] Enable forcing generation of static plugin imports
|
||||
- [QTBUG-28606] Fix installation of plugin module .pris in static Qt builds
|
||||
|
||||
moc
|
||||
---
|
||||
|
||||
- [QTBUG-26589] Remove the timestamp info in genarated files to optimize rebuilds with ccache
|
||||
|
||||
qmake
|
||||
-----
|
||||
|
||||
- Do not fixify + create QMAKE_{PKGCONFIG,LIBTOOL}_DESTDIR
|
||||
- Fix qtCompileTest for cross building modules
|
||||
- [QTBUG-28104] Respect the OBJECTS_DIR setting for XCode projects
|
||||
- [QTBUG-24589] Fix handling of precompiled header files in XCode projects
|
||||
- [QTBUG-28624] accept hex/octal values for RC_LANG and RC_CODEPAGE
|
||||
- [QTBUG-28625] fix duplicate TRANSLATION entry in generated RC file
|
||||
- [QTBUG-28682, QTBUG-28683] fix DLL manifest resource ids for debug builds
|
||||
|
||||
****************************************************************************
|
||||
* Plugins *
|
||||
****************************************************************************
|
||||
|
||||
- Accessibility Linux: Prevent access to invalid interfaces
|
||||
- Call QAccessible::updateAccessibility when caret moves in QTextEdit
|
||||
|
||||
****************************************************************************
|
||||
* Important Behavior Changes *
|
||||
|
@ -51,14 +51,14 @@ QString contentType = header.value("content-type");
|
||||
|
||||
//! [2]
|
||||
QHttpRequestHeader header("GET", QUrl::toPercentEncoding("/index.html"));
|
||||
header.setValue("Host", "qt.nokia.com");
|
||||
http->setHost("qt.nokia.com");
|
||||
header.setValue("Host", "qt-project.org");
|
||||
http->setHost("qt-project.org");
|
||||
http->request(header);
|
||||
//! [2]
|
||||
|
||||
|
||||
//! [3]
|
||||
http->setHost("qt.nokia.com"); // id == 1
|
||||
http->setHost("qt-project.org"); // id == 1
|
||||
http->get(QUrl::toPercentEncoding("/index.html")); // id == 2
|
||||
//! [3]
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(dbus))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = listnames \
|
||||
pingpong \
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(if(wince|embedded|x11):qtHaveModule(gui))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = styleexample raycasting flickable digiflip
|
||||
|
||||
|
@ -1,28 +1,23 @@
|
||||
TEMPLATE = subdirs
|
||||
CONFIG += no_docs_target
|
||||
|
||||
SUBDIRS = \
|
||||
gui \
|
||||
network \
|
||||
threads \
|
||||
xml \
|
||||
qpa
|
||||
|
||||
qtHaveModule(widgets) {
|
||||
SUBDIRS += widgets \
|
||||
ipc \
|
||||
sql \
|
||||
tools \
|
||||
touch \
|
||||
gestures
|
||||
}
|
||||
|
||||
wince*|embedded|x11:qtHaveModule(gui): SUBDIRS += embedded
|
||||
|
||||
contains(QT_BUILD_PARTS, tools):qtHaveModule(gui):qtHaveModule(widgets): SUBDIRS += qtestlib
|
||||
qtHaveModule(opengl):qtHaveModule(widgets): SUBDIRS += opengl
|
||||
qtHaveModule(dbus): SUBDIRS += dbus
|
||||
qtHaveModule(concurrent): SUBDIRS += qtconcurrent
|
||||
SUBDIRS = \
|
||||
dbus \
|
||||
embedded \
|
||||
gestures \
|
||||
gui \
|
||||
ipc \
|
||||
network \
|
||||
opengl \
|
||||
qpa \
|
||||
qtconcurrent \
|
||||
qtestlib \
|
||||
sql \
|
||||
threads \
|
||||
tools \
|
||||
touch \
|
||||
widgets \
|
||||
xml
|
||||
|
||||
aggregate.files = aggregate/examples.pro
|
||||
aggregate.path = $$[QT_INSTALL_EXAMPLES]
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = \
|
||||
subdirs
|
||||
SUBDIRS = \
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
# no QSharedMemory
|
||||
!vxworks:!qnx:SUBDIRS = sharedmemory
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(opengl))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
|
||||
contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2){
|
||||
|
@ -26,7 +26,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example qtconcurrent/imagescaling
|
||||
\example imagescaling
|
||||
\title Image Scaling Example
|
||||
\brief Demonstrates how to asynchronously scale images.
|
||||
\ingroup qtconcurrentexamples
|
||||
|
@ -26,7 +26,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example qtconcurrent/map
|
||||
\example map
|
||||
\title Map Example
|
||||
\brief Demonstrates how to scale images synchronously.
|
||||
\ingroup qtconcurrentexamples
|
||||
|
@ -26,7 +26,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example qtconcurrent/progressdialog
|
||||
\example progressdialog
|
||||
\title QtConcurrent Progress Dialog Example
|
||||
\brief Demonstrates how to monitor the progress of the active processes.
|
||||
\ingroup qtconcurrentexamples
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(concurrent))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = imagescaling \
|
||||
map \
|
||||
|
@ -26,7 +26,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example qtconcurrent/runfunction
|
||||
\example runfunction
|
||||
\title Run Function Example
|
||||
\brief Demonstrates how to run standard functions concurrently.
|
||||
\ingroup qtconcurrentexamples
|
||||
|
@ -26,7 +26,7 @@
|
||||
****************************************************************************/
|
||||
|
||||
/*!
|
||||
\example qtconcurrent/wordcount
|
||||
\example wordcount
|
||||
\title QtConcurrent Word Count Example
|
||||
\brief Demonstrates how to use the map-reduce algorithm
|
||||
\ingroup qtconcurrentexamples
|
||||
|
@ -1,2 +1,4 @@
|
||||
requires(contains(QT_BUILD_PARTS,tools):qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = tutorial1 tutorial2 tutorial3 tutorial4 tutorial5
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
|
||||
SUBDIRS = books \
|
||||
@ -19,4 +21,3 @@ SUBDIRS = books \
|
||||
}
|
||||
|
||||
EXAMPLE_FILES = connection.h
|
||||
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
CONFIG += ordered
|
||||
SUBDIRS = contiguouscache \
|
||||
|
@ -1,2 +1,4 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = pinchzoom fingerpaint knobs dials
|
||||
|
@ -192,6 +192,6 @@
|
||||
fetched with QTextBlock::userData(). Matching parentheses can be
|
||||
highlighted with an extra selection. The "Matching Parentheses
|
||||
with QSyntaxHighlighter" article in Qt Quarterly 31 implements
|
||||
this. You find it here: \l{http://doc.qt.nokia.com/qq/}.
|
||||
this. You find it here: \l{http://doc.qt.digia.com/qq/}.
|
||||
|
||||
*/
|
||||
|
@ -248,7 +248,7 @@
|
||||
It is possible to implement parenthesis matching with
|
||||
QSyntaxHighlighter. The "Matching Parentheses with
|
||||
QSyntaxHighlighter" article in Qt Quarterly 31
|
||||
(\l{http://doc.qt.nokia.com/qq/}) implements this. We also have
|
||||
(\l{http://doc.qt.digia.com/qq/}) implements this. We also have
|
||||
the \l{Code Editor Example}, which shows how to implement line
|
||||
numbers and how to highlight the current line.
|
||||
|
||||
|
@ -1,28 +1,15 @@
|
||||
TEMPLATE = subdirs
|
||||
SUBDIRS = basicdrawing \
|
||||
concentriccircles \
|
||||
examples_affine \
|
||||
examples_composition \
|
||||
examples_deform \
|
||||
examples_gradients \
|
||||
examples_pathstroke \
|
||||
painting_shared \
|
||||
affine \
|
||||
composition \
|
||||
deform \
|
||||
gradients \
|
||||
pathstroke \
|
||||
imagecomposition \
|
||||
painterpaths \
|
||||
transformations \
|
||||
fontsampler
|
||||
|
||||
examples_affine.subdir = affine
|
||||
examples_composition.subdir = composition
|
||||
examples_deform.subdir = deform
|
||||
examples_gradients.subdir = gradients
|
||||
examples_pathstroke.subdir = pathstroke
|
||||
painting_shared.subdir = shared
|
||||
|
||||
!ordered {
|
||||
examples_affine.depends = painting_shared
|
||||
examples_deform.depends = painting_shared
|
||||
examples_gradients.depends = painting_shared
|
||||
examples_composition.depends = painting_shared
|
||||
examples_pathstroke.depends = painting_shared
|
||||
}
|
||||
EXAMPLE_FILES = \
|
||||
shared
|
||||
|
@ -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
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/codecs
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/codecs
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -8,7 +8,7 @@ SOURCES = fsmodel.cpp \
|
||||
RESOURCES = completer.qrc
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/completer
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/completer
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -8,7 +8,7 @@ SOURCES = main.cpp \
|
||||
RESOURCES = customcompleter.qrc
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/customcompleter
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/customcompleter
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -5,5 +5,5 @@ SUBDIRS = echowindow \
|
||||
#! [0]
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
|
||||
INSTALLS += target
|
||||
|
@ -15,7 +15,7 @@ win32 {
|
||||
}
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -12,5 +12,5 @@ DESTDIR = ../plugins
|
||||
EXAMPLE_FILES = echoplugin.json
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/echoplugin/plugin
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/echoplugin/plugin
|
||||
INSTALLS += target
|
||||
|
@ -22,7 +22,7 @@ TRANSLATIONS += translations/i18n_ar.ts \
|
||||
translations/i18n_zh.ts
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/i18n
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/i18n
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -19,5 +19,5 @@ if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
|
||||
#! [0]
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint
|
||||
INSTALLS += target
|
||||
|
@ -10,5 +10,5 @@ DESTDIR = ../../plugandpaint/plugins
|
||||
#! [0]
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint/plugins
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
|
||||
INSTALLS += target
|
||||
|
@ -10,5 +10,5 @@ DESTDIR = ../../plugandpaint/plugins
|
||||
|
||||
#! [0]
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/plugandpaint/plugins
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
|
||||
INSTALLS += target
|
||||
|
@ -5,7 +5,7 @@ SOURCES = regexpdialog.cpp \
|
||||
main.cpp
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/regexp
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/regexp
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -13,7 +13,7 @@ SOURCES = locationdialog.cpp \
|
||||
EXAMPLE_FILES = inifiles
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/settingseditor
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/settingseditor
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -18,5 +18,5 @@ win32 {
|
||||
EXAMPLE_FILES += simplestyle.json
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin/styles
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin/styles
|
||||
INSTALLS += target
|
||||
|
@ -3,5 +3,5 @@ SUBDIRS = stylewindow \
|
||||
plugin
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
|
||||
INSTALLS += target
|
||||
|
@ -13,5 +13,5 @@ win32 {
|
||||
}
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/styleplugin
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/styleplugin
|
||||
INSTALLS += target
|
||||
|
@ -8,7 +8,7 @@ SOURCES = treemodelcompleter.cpp \
|
||||
RESOURCES = treemodelcompleter.qrc
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/treemodelcompleter
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/treemodelcompleter
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -12,5 +12,5 @@ build_all:!build_pass {
|
||||
RESOURCES += undo.qrc
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/undo
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/undo
|
||||
INSTALLS += target
|
||||
|
@ -12,7 +12,7 @@ SOURCES = commands.cpp \
|
||||
RESOURCES = undoframework.qrc
|
||||
|
||||
# install
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/tools/undoframework
|
||||
target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/undoframework
|
||||
INSTALLS += target
|
||||
|
||||
simulator: warning(This example might not fully work on Simulator platform)
|
||||
|
@ -4,7 +4,7 @@ Qt documentation, which can be viewed using Qt Assistant or a Web browser.
|
||||
|
||||
The tutorial is also available online at
|
||||
|
||||
http://qt.nokia.com/doc/4.4/tutorial.html
|
||||
http://qt-project.org/doc/qt-5.0/qtwidgets/tutorials-addressbook.html
|
||||
|
||||
All programs corresponding to the chapters in the tutorial should
|
||||
automatically be built when Qt is compiled, or will be provided as
|
||||
|
@ -4,7 +4,7 @@ Qt documentation, which can be viewed using Qt Assistant or a Web browser.
|
||||
|
||||
The tutorial is also available online at
|
||||
|
||||
http://qt.nokia.com/doc/tutorial.html
|
||||
http://qt-project.org/doc/qt-5.0/qtwidgets/tutorials-addressbook.html
|
||||
|
||||
All programs corresponding to the chapters in the tutorial should
|
||||
automatically be built when Qt is compiled, or will be provided as
|
||||
|
@ -1,3 +1,5 @@
|
||||
requires(qtHaveModule(widgets))
|
||||
|
||||
TEMPLATE = subdirs
|
||||
CONFIG += no_docs_target
|
||||
|
||||
|
@ -67,7 +67,7 @@ void MainWindow::on_aboutAction_triggered()
|
||||
{
|
||||
QMessageBox::about(this, tr("About Style sheet"),
|
||||
tr("The <b>Style Sheet</b> example shows how widgets can be styled "
|
||||
"using <a href=\"http://qt.nokia.com/doc/4.5/stylesheet.html\">Qt "
|
||||
"using <a href=\"http://doc.qt.digia.com/4.5/stylesheet.html\">Qt "
|
||||
"Style Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop up the "
|
||||
"style editor, and either choose an existing style sheet or design "
|
||||
"your own."));
|
||||
|
@ -71,16 +71,16 @@
|
||||
</folder>
|
||||
<folder folded="no">
|
||||
<title>Qt</title>
|
||||
<bookmark href="http://qt.nokia.com/doc/2.3/">
|
||||
<bookmark href="http://doc.qt.digia.com/2.3/">
|
||||
<title>Qt 2.3 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/3.3/">
|
||||
<bookmark href="http://doc.qt.digia.com/3.3/">
|
||||
<title>Qt 3.3 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/4.0/">
|
||||
<bookmark href="http://doc.qt.digia.com/4.0/">
|
||||
<title>Qt 4.0 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/">
|
||||
<bookmark href="http://qt-project.org/">
|
||||
<title>Qt Home Page</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
|
@ -45,16 +45,16 @@
|
||||
<title>QtQuestions</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
<bookmark href="http://qt.nokia.com/doc/qq/">
|
||||
<bookmark href="http://doc.qt.digia.com/qq/">
|
||||
<title>Qt Quarterly</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/">
|
||||
<bookmark href="http://qt-project.org/">
|
||||
<title>Qt home page</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/4.0/">
|
||||
<bookmark href="http://doc.qt.digia.com/4.0/">
|
||||
<title>Qt 4.0 documentation</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/developer/faqs/">
|
||||
<bookmark href="http://qt-project.org/faq/">
|
||||
<title>Frequently Asked Questions</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
|
@ -5,7 +5,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<p>A paragraph.</p>
|
||||
<p>A second paragraph. Check out our <a href="http://labs.qt.nokia.com/">developer blogs</a></p>
|
||||
<p>And the last paragraph. Or our <a href="http://qt.nokia.com/doc/">online documentation</a>.</p>
|
||||
<p>A second paragraph. Check out our <a href="http://blog.qt.digia.com/">developer blogs</a></p>
|
||||
<p>And the last paragraph. Or our <a href="http://qt-project.org/doc/">online documentation</a>.</p>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -76,7 +76,7 @@ RSSListing::RSSListing(QWidget *parent)
|
||||
{
|
||||
|
||||
lineEdit = new QLineEdit(this);
|
||||
lineEdit->setText("http://labs.qt.nokia.com/blogs/feed");
|
||||
lineEdit->setText("http://blog.qt.digia.com/feed/");
|
||||
|
||||
fetchButton = new QPushButton(tr("Fetch"), this);
|
||||
|
||||
|
@ -71,16 +71,16 @@
|
||||
</folder>
|
||||
<folder folded="no">
|
||||
<title>Qt</title>
|
||||
<bookmark href="http://qt.nokia.com/doc/2.3/">
|
||||
<bookmark href="http://doc.qt.digia.com/2.3/">
|
||||
<title>Qt 2.3 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/3.3/">
|
||||
<bookmark href="http://doc.qt.digia.com/3.3/">
|
||||
<title>Qt 3.3 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/4.0/">
|
||||
<bookmark href="http://doc.qt.digia.com/4.0/">
|
||||
<title>Qt 4.0 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/">
|
||||
<bookmark href="http://qt-project.org/">
|
||||
<title>Qt Home Page</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
|
@ -45,16 +45,16 @@
|
||||
<title>QtQuestions</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
<bookmark href="http://qt.nokia.com/doc/qq/">
|
||||
<bookmark href="http://doc.qt.digia.com/qq/">
|
||||
<title>Qt Quarterly</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/">
|
||||
<bookmark href="http://qt-project.org/">
|
||||
<title>qt home page</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/4.0/">
|
||||
<bookmark href="http://doc.qt.digia.com/4.0/">
|
||||
<title>Qt 4.0 documentation</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/developer/faqs/">
|
||||
<bookmark href="http://qt-project.org/faq/">
|
||||
<title>Frequently Asked Questions</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
|
@ -71,16 +71,16 @@
|
||||
</folder>
|
||||
<folder folded="no">
|
||||
<title>Qt</title>
|
||||
<bookmark href="http://qt.nokia.com/doc/2.3/">
|
||||
<bookmark href="http://doc.qt.digia.com/2.3/">
|
||||
<title>Qt 2.3 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/3.3/">
|
||||
<bookmark href="http://doc.qt.digia.com/3.3/">
|
||||
<title>Qt 3.3 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/4.0/">
|
||||
<bookmark href="http://doc.qt.digia.com/4.0/">
|
||||
<title>Qt 4.0 Reference</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/">
|
||||
<bookmark href="http://qt-project.org/">
|
||||
<title>Qt Home Page</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
|
@ -45,16 +45,16 @@
|
||||
<title>QtQuestions</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
<bookmark href="http://qt.nokia.com/doc/qq/">
|
||||
<bookmark href="http://doc.qt.digia.com/qq/">
|
||||
<title>Qt Quarterly</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/">
|
||||
<bookmark href="http://qt-project.org/">
|
||||
<title>Qt home page</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/doc/4.0/">
|
||||
<bookmark href="http://doc.qt.digia.com/4.0/">
|
||||
<title>Qt 4.0 documentation</title>
|
||||
</bookmark>
|
||||
<bookmark href="http://qt.nokia.com/developer/faqs/">
|
||||
<bookmark href="http://qt-project.org/faq/">
|
||||
<title>Frequently Asked Questions</title>
|
||||
</bookmark>
|
||||
</folder>
|
||||
|
@ -25,7 +25,7 @@ qml1_target: \
|
||||
else: \
|
||||
instbase = $$[QT_INSTALL_QML]
|
||||
|
||||
exists($$[QT_HOST_PREFIX]/.qmake.cache) {
|
||||
!prefix_build {
|
||||
# These bizarre rules copy the files to the qtbase build directory
|
||||
|
||||
defineReplace(qmlModStripSrcDir) {
|
||||
|
@ -20,7 +20,10 @@
|
||||
debug(1, "Not loading qmodule.pri twice")
|
||||
}
|
||||
|
||||
!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):!exists($$[QT_HOST_DATA]/.qmake.cache) {
|
||||
!exists($$[QT_HOST_DATA]/.qmake.cache): \
|
||||
CONFIG += prefix_build
|
||||
|
||||
!build_pass:!isEmpty(_QMAKE_SUPER_CACHE_):prefix_build {
|
||||
# When doing a -prefix build of top-level qt5/qt.pro, we need to announce
|
||||
# this repo's module pris' location to the other repos.
|
||||
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$shadowed($$dirname(_QMAKE_CONF_))
|
||||
|
@ -16,8 +16,8 @@ isEmpty(MODULE_BASE_DIR): MODULE_BASE_DIR = $$MODULE_PROFILE_DIR
|
||||
isEmpty(MODULE_BASE_OUTDIR): MODULE_BASE_OUTDIR = $$shadowed($$MODULE_BASE_DIR)
|
||||
isEmpty(MODULE_QMAKE_OUTDIR): MODULE_QMAKE_OUTDIR = $$MODULE_BASE_OUTDIR
|
||||
|
||||
QTDIR = $$[QT_HOST_PREFIX]
|
||||
exists($$QTDIR/.qmake.cache) {
|
||||
!prefix_build {
|
||||
QTDIR = $$[QT_HOST_PREFIX]
|
||||
# Permit modules to enforce being built outside QTDIR ...
|
||||
!force_independent: MODULE_BASE_OUTDIR = $$QTDIR
|
||||
# ... though this sort of breaks the idea.
|
||||
|
@ -9,6 +9,22 @@
|
||||
# We mean it.
|
||||
#
|
||||
|
||||
defineTest(addInstallFiles) {
|
||||
for(sf, 2) {
|
||||
sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
|
||||
contains(sf, \\..*) {
|
||||
check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
|
||||
} else {
|
||||
sfp = $$replace(sf, /.*, )
|
||||
!equals(sfp, $$sf): \
|
||||
$$1 *= $$sfp
|
||||
else: \
|
||||
$$1 += $$sf
|
||||
}
|
||||
}
|
||||
export($$1)
|
||||
}
|
||||
|
||||
probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
||||
!isEmpty(probase):!contains(probase, ^\\..*) {
|
||||
for(ex, EXAMPLE_FILES): \
|
||||
@ -42,34 +58,26 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
||||
# Just for Qt Creator
|
||||
OTHER_FILES += $$sourcefiles
|
||||
|
||||
for(inst, INSTALLS): \
|
||||
!equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
|
||||
for(file, $${inst}.files): \
|
||||
sourcefiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
|
||||
sourcefiles += \
|
||||
$$_PRO_FILE_ $$RC_FILE $$DEF_FILE \
|
||||
$$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \
|
||||
$$DBUS_ADAPTORS $$DBUS_INTERFACES
|
||||
for(sf, sourcefiles) {
|
||||
sf = $$relative_path($$sf, $$_PRO_FILE_PWD_)
|
||||
contains(sf, \\..*) {
|
||||
check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf")
|
||||
} else {
|
||||
sfp = $$replace(sf, /.*, )
|
||||
!equals(sfp, $$sf): \
|
||||
sources.files *= $$sfp
|
||||
else: \
|
||||
sources.files += $$sf
|
||||
}
|
||||
}
|
||||
addInstallFiles(sources.files, $$sourcefiles)
|
||||
sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase
|
||||
INSTALLS += sources
|
||||
|
||||
check_examples {
|
||||
srcfiles = $$sources.files
|
||||
for(inst, INSTALLS): \
|
||||
!equals(inst, target):!contains($${inst}.CONFIG, no_check_exist): \
|
||||
for(file, $${inst}.files): \
|
||||
instfiles += $$files($$absolute_path($$file, $$_PRO_FILE_PWD_))
|
||||
addInstallFiles(srcfiles, $$instfiles)
|
||||
|
||||
thefiles = $$files($$_PRO_FILE_PWD_/*)
|
||||
for(i, thefiles): \
|
||||
allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_)
|
||||
for(i, sources.files): \
|
||||
for(i, srcfiles): \
|
||||
allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_)
|
||||
for(i, SUBDIRS) {
|
||||
sd = $$eval($${i}.file)
|
||||
@ -84,4 +92,12 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
|
||||
allfiles -= doc
|
||||
!isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
|
||||
}
|
||||
|
||||
# Do not actually build the examples in production builds
|
||||
!equals(TEMPLATE, subdirs):!contains(QT_CONFIG, private_tests) {
|
||||
TEMPLATE = aux
|
||||
CONFIG -= have_target qt staticlib dll
|
||||
SOURCES =
|
||||
INSTALLS -= target
|
||||
}
|
||||
}
|
||||
|
@ -45,65 +45,7 @@ else: \
|
||||
MODULE_DEFINE = QT_$${ucmodule}_LIB
|
||||
MODULE_DEFINES = $$MODULE_DEFINE $$MODULE_DEFINES
|
||||
|
||||
load(qt_build_paths)
|
||||
MODULE_PRI = $$MODULE_QMAKE_OUTDIR/mkspecs/modules-inst/qt_lib_$${MODULE}.pri
|
||||
|
||||
!build_pass {
|
||||
|
||||
# Create a module .pri file
|
||||
unix:!static: \
|
||||
module_rpath = "QT.$${MODULE}.rpath = $$[QT_INSTALL_LIBS/raw]"
|
||||
else: \
|
||||
module_rpath =
|
||||
!isEmpty(QT_FOR_PRIVATE) {
|
||||
contains(QT_FOR_PRIVATE, .*-private$):error("QT_FOR_PRIVATE may not contain *-private.")
|
||||
module_privdep = "QT.$${MODULE}.private_depends = $$QT_FOR_PRIVATE"
|
||||
} else {
|
||||
module_privdep =
|
||||
}
|
||||
static: \
|
||||
module_build_type = "QT.$${MODULE}.module_config = staticlib"
|
||||
else:mac:contains(QT_CONFIG, qt_framework): \
|
||||
module_build_type = "QT.$${MODULE}.module_config = lib_bundle"
|
||||
else: \
|
||||
module_build_type =
|
||||
!isEmpty(MODULE_CONFIG): \
|
||||
module_config = "QT.$${MODULE}.CONFIG = $$MODULE_CONFIG"
|
||||
else: \
|
||||
module_config =
|
||||
!no_module_headers {
|
||||
MODULE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE \$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME"
|
||||
MODULE_PRIVATE_INCLUDES = "\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION \
|
||||
\$\$QT_MODULE_INCLUDE_BASE/$$MODULE_INCNAME/$$VERSION/$$MODULE_INCNAME"
|
||||
}
|
||||
MODULE_PRI_CONT = \
|
||||
"QT.$${MODULE}.VERSION = $${VERSION}" \
|
||||
"QT.$${MODULE}.MAJOR_VERSION = $$section(VERSION, ., 0, 0)" \
|
||||
"QT.$${MODULE}.MINOR_VERSION = $$section(VERSION, ., 1, 1)" \
|
||||
"QT.$${MODULE}.PATCH_VERSION = $$section(VERSION, ., 2, 2)" \
|
||||
"" \
|
||||
"QT.$${MODULE}.name = $$TARGET" \
|
||||
"QT.$${MODULE}.bins = \$\$QT_MODULE_BIN_BASE" \
|
||||
"QT.$${MODULE}.includes = $$MODULE_INCLUDES" \
|
||||
"QT.$${MODULE}.private_includes = $$MODULE_PRIVATE_INCLUDES" \
|
||||
"QT.$${MODULE}.libs = \$\$QT_MODULE_LIB_BASE" \
|
||||
"QT.$${MODULE}.libexecs = \$\$QT_MODULE_LIBEXEC_BASE" \
|
||||
$$module_rpath \
|
||||
"QT.$${MODULE}.plugins = \$\$QT_MODULE_PLUGIN_BASE" \
|
||||
"QT.$${MODULE}.imports = \$\$QT_MODULE_IMPORT_BASE" \
|
||||
"QT.$${MODULE}.qml = \$\$QT_MODULE_QML_BASE" \
|
||||
"QT.$${MODULE}.depends =$$join(MODULE_DEPENDS, " ", " ")" \
|
||||
$$module_privdep \
|
||||
$$module_build_type \
|
||||
$$module_config \
|
||||
"QT.$${MODULE}.DEFINES = $$MODULE_DEFINES" \ # assume sufficient quoting
|
||||
"" \
|
||||
"QT_CONFIG += $$MODULE" # this is obsolete, but some code still depends on it
|
||||
write_file($$MODULE_PRI, MODULE_PRI_CONT)|error("Aborting.")
|
||||
|
||||
} # !build_pass
|
||||
|
||||
load(qt_module_fwdpri)
|
||||
load(qt_module_pris)
|
||||
|
||||
INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_includes)
|
||||
|
||||
@ -112,7 +54,7 @@ INCLUDEPATH *= $$eval(QT.$${MODULE}.includes) $$eval(QT.$${MODULE}.private_inclu
|
||||
#other
|
||||
TEMPLATE = lib
|
||||
DESTDIR = $$eval(QT.$${MODULE}.libs)
|
||||
win32:!wince*:exists($$[QT_INSTALL_PREFIX]/.qmake.cache): DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
|
||||
win32:!wince*:!prefix_build: DLLDESTDIR = $$eval(QT.$${MODULE}.bins)
|
||||
|
||||
CONFIG += qmake_cache target_qt
|
||||
|
||||
@ -206,7 +148,9 @@ unix {
|
||||
}
|
||||
|
||||
unix|win32-g++* {
|
||||
for(i, QT):QMAKE_PKGCONFIG_REQUIRES += $$eval(QT.$${i}.name)
|
||||
QMAKE_PKGCONFIG_NAME = $$replace(TARGET, ^Qt, Qt$$section(VERSION, ., 0, 0))
|
||||
for(i, MODULE_DEPENDS): \
|
||||
QMAKE_PKGCONFIG_REQUIRES += $$replace(QT.$${i}.name, ^Qt, Qt$$eval(QT.$${i}.MAJOR_VERSION))
|
||||
isEmpty(QMAKE_PKGCONFIG_DESCRIPTION): \
|
||||
QMAKE_PKGCONFIG_DESCRIPTION = $$replace(TARGET, ^Qt, "Qt ") module
|
||||
}
|
||||
|
@ -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
|
||||
# qtPrepareTool() to work with the non-installed build.
|
||||
!build_pass:!exists($$[QT_INSTALL_PREFIX]/.qmake.cache) {
|
||||
!build_pass:prefix_build {
|
||||
|
||||
isEmpty(MODULE):MODULE = $$TARGET
|
||||
|
||||
|
@ -15,7 +15,8 @@ isEmpty(ANGLE_DIR) {
|
||||
win32 {
|
||||
GNUTOOLS_DIR=$$PWD/../../../../gnuwin32/bin
|
||||
exists($$GNUTOOLS_DIR/gperf.exe) {
|
||||
GNUTOOLS = "(set $$escape_expand(\\\")PATH=$$replace(GNUTOOLS_DIR, [/\\\\], $${QMAKE_DIR_SEP});%PATH%$$escape_expand(\\\"))"
|
||||
# Escape closing parens when expanding the variable, otherwise cmd confuses itself.
|
||||
GNUTOOLS = "(set PATH=$$replace(GNUTOOLS_DIR, [/\\\\], $${QMAKE_DIR_SEP});%PATH:)=^)%)"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,6 @@ exampledirs += \
|
||||
../ \
|
||||
snippets \
|
||||
../../../examples/threads/ \
|
||||
../../../examples/tools/ \
|
||||
../../../examples/widgets/
|
||||
../../../examples/tools/
|
||||
|
||||
imagedirs += images
|
||||
|
@ -535,7 +535,7 @@ CApaApplication *myApplicationFactory();
|
||||
|
||||
|
||||
//! [49]
|
||||
void myMessageHandler(QtMsgType, const QMessageLogContext &, const char *);
|
||||
void myMessageHandler(QtMsgType, const QMessageLogContext &, const QString &);
|
||||
//! [49]
|
||||
|
||||
//! [50]
|
||||
|
@ -45,7 +45,7 @@ QUrl url("http://www.example.com/List of holidays.xml");
|
||||
|
||||
|
||||
//! [1]
|
||||
QUrl url = QUrl::fromEncoded("http://qt.nokia.com/List%20of%20holidays.xml");
|
||||
QUrl url = QUrl::fromEncoded("http://qt-project.org/List%20of%20holidays.xml");
|
||||
//! [1]
|
||||
|
||||
|
||||
@ -73,10 +73,10 @@ http://www.example.com/cgi-bin/drawgraph.cgi?type(pie)color(green)
|
||||
|
||||
|
||||
//! [5]
|
||||
QUrl baseUrl("http://qt.nokia.com/support");
|
||||
QUrl relativeUrl("../products/solutions");
|
||||
QUrl baseUrl("http://qt.digia.com/Support/");
|
||||
QUrl relativeUrl("../Product/Library/");
|
||||
qDebug(baseUrl.resolved(relativeUrl).toString());
|
||||
// prints "http://qt.nokia.com/products/solutions"
|
||||
// prints "http://qt.digia.com/Product/Library/"
|
||||
//! [5]
|
||||
|
||||
|
||||
|
@ -258,7 +258,7 @@ if (url.startsWith("ftp:"))
|
||||
|
||||
|
||||
//! [26]
|
||||
QByteArray url("http://qt.nokia.com/index.html");
|
||||
QByteArray url("http://qt-project.org/doc/qt-5.0/qtdoc/index.html");
|
||||
if (url.endsWith(".html"))
|
||||
...
|
||||
//! [26]
|
||||
@ -286,16 +286,16 @@ QByteArray z = x.mid(5); // z == "pineapples"
|
||||
|
||||
|
||||
//! [30]
|
||||
QByteArray x("Qt by NOKIA");
|
||||
QByteArray x("Qt by DIGIA");
|
||||
QByteArray y = x.toLower();
|
||||
// y == "qt by nokia"
|
||||
// y == "qt by digia"
|
||||
//! [30]
|
||||
|
||||
|
||||
//! [31]
|
||||
QByteArray x("Qt by NOKIA");
|
||||
QByteArray x("Qt by DIGIA");
|
||||
QByteArray y = x.toUpper();
|
||||
// y == "QT BY NOKIA"
|
||||
// y == "QT BY DIGIA"
|
||||
//! [31]
|
||||
|
||||
|
||||
|
@ -61,8 +61,8 @@ int main(int argc, char *argv[])
|
||||
stream.writeAttribute("folded", "no");
|
||||
//! [write element]
|
||||
stream.writeStartElement("bookmark");
|
||||
stream.writeAttribute("href", "http://qt.nokia.com/");
|
||||
stream.writeTextElement("title", "Qt Home");
|
||||
stream.writeAttribute("href", "http://qt-project.org/");
|
||||
stream.writeTextElement("title", "Qt Project");
|
||||
stream.writeEndElement(); // bookmark
|
||||
//! [write element]
|
||||
stream.writeEndElement(); // folder
|
||||
|
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
|
||||
QCoreApplication::notify() concisely tells the whole story; the
|
||||
\e{Qt Quarterly} article
|
||||
\l{http://doc.qt.nokia.com/qq/qq11-events.html}{Another Look at Events}
|
||||
\l{http://doc.qt.digia.com/qq/qq11-events.html}{Another Look at Events}
|
||||
rehashes it less concisely. Here we will explain enough for 95%
|
||||
of applications.
|
||||
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
Here's an example \c .qrc file:
|
||||
|
||||
\quotefile mainwindows/application/application.qrc
|
||||
\quotefile resource-system/application.qrc
|
||||
|
||||
The resource files listed in the \c .qrc file are files that are
|
||||
part of the application's source tree. The specified paths are
|
||||
@ -122,7 +122,7 @@
|
||||
mentioned in the application's \c .pro file so that \c qmake knows
|
||||
about it. For example:
|
||||
|
||||
\snippet mainwindows/application/application.pro 0
|
||||
\snippet resource-system/application.pro 0
|
||||
|
||||
\c qmake will produce make rules to generate a file called \c
|
||||
qrc_application.cpp that is linked into the application. This
|
||||
@ -167,7 +167,7 @@
|
||||
pass a resource path instead of a file name to the QIcon, QImage,
|
||||
or QPixmap constructor:
|
||||
|
||||
\snippet mainwindows/application/mainwindow.cpp 21
|
||||
\snippet resource-system/mainwindow.cpp 21
|
||||
|
||||
See the \l{mainwindows/application}{Application} example for an
|
||||
actual application that uses Qt's resource system to store its
|
||||
|
@ -2492,7 +2492,7 @@
|
||||
"\l{http://bugreports.qt-project.org/browse/QTWEBSITE-13}{http://bugreports.qt.../QTWEBSITE-13/}"),
|
||||
whereas Qt::ElideRight is appropriate
|
||||
for other strings (e.g.,
|
||||
"\l{http://qt.nokia.com/doc/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
|
||||
"\l{http://doc.qt.digia.com/qq/qq09-mac-deployment.html}{Deploying Applications on Ma...}").
|
||||
|
||||
\sa QAbstractItemView::textElideMode, QFontMetrics::elidedText(), AlignmentFlag, QTabBar::elideMode
|
||||
*/
|
||||
|
@ -3861,7 +3861,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
\section1 Examples:
|
||||
|
||||
\list
|
||||
\li qt.nokia.com becomes http://qt.nokia.com
|
||||
\li qt-project.org becomes http://qt-project.org
|
||||
\li ftp.qt-project.org becomes ftp://ftp.qt-project.org
|
||||
\li hostname becomes http://hostname
|
||||
\li /home/user/test.html becomes file:///home/user/test.html
|
||||
|
@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE
|
||||
memory.
|
||||
|
||||
The \e{Qt Quarterly} article
|
||||
\l{http://qt.nokia.com/doc/qq/qq12-qpixmapcache.html}{Optimizing
|
||||
\l{http://doc.qt.digia.com/qq/qq12-qpixmapcache.html}{Optimizing
|
||||
with QPixmapCache} explains how to use QPixmapCache to speed up
|
||||
applications by caching the results of painting.
|
||||
|
||||
|
@ -95,6 +95,7 @@ typedef GLfloat GLdouble;
|
||||
# if defined(Q_OS_WIN)
|
||||
# include <QtCore/qt_windows.h>
|
||||
# endif
|
||||
# define GL_GLEXT_LEGACY // Prevents GL/gl.h form #including system glext.h
|
||||
# include <GL/gl.h>
|
||||
# include <QtGui/qopenglext.h>
|
||||
# endif // Q_OS_MAC
|
||||
|
@ -43,13 +43,13 @@ QNetworkAccessManager *manager = new QNetworkAccessManager(this);
|
||||
connect(manager, SIGNAL(finished(QNetworkReply*)),
|
||||
this, SLOT(replyFinished(QNetworkReply*)));
|
||||
|
||||
manager->get(QNetworkRequest(QUrl("http://qt.nokia.com")));
|
||||
manager->get(QNetworkRequest(QUrl("http://qt-project.org")));
|
||||
//! [0]
|
||||
|
||||
|
||||
//! [1]
|
||||
QNetworkRequest request;
|
||||
request.setUrl(QUrl("http://qt.nokia.com"));
|
||||
request.setUrl(QUrl("http://qt-project.org"));
|
||||
request.setRawHeader("User-Agent", "MyOwnBrowser 1.0");
|
||||
|
||||
QNetworkReply *reply = manager->get(request);
|
||||
|
@ -47,11 +47,11 @@ manager->setCache(diskCache);
|
||||
|
||||
//! [1]
|
||||
// do a normal request (preferred from network, as this is the default)
|
||||
QNetworkRequest request(QUrl(QString("http://qt.nokia.com")));
|
||||
QNetworkRequest request(QUrl(QString("http://qt-project.org")));
|
||||
manager->get(request);
|
||||
|
||||
// do a request preferred from cache
|
||||
QNetworkRequest request2(QUrl(QString("http://qt.nokia.com")));
|
||||
QNetworkRequest request2(QUrl(QString("http://qt-project.org")));
|
||||
request2.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
|
||||
manager->get(request2);
|
||||
//! [1]
|
||||
|
@ -39,8 +39,8 @@
|
||||
****************************************************************************/
|
||||
|
||||
//! [0]
|
||||
// To find the IP address of qt.nokia.com
|
||||
QHostInfo::lookupHost("qt.nokia.com",
|
||||
// To find the IP address of qt-project.org
|
||||
QHostInfo::lookupHost("qt-project.org",
|
||||
this, SLOT(printResults(QHostInfo)));
|
||||
|
||||
// To find the host name for 4.2.2.1
|
||||
@ -50,7 +50,7 @@ QHostInfo::lookupHost("4.2.2.1",
|
||||
|
||||
|
||||
//! [1]
|
||||
QHostInfo info = QHostInfo::fromName("qt.nokia.com");
|
||||
QHostInfo info = QHostInfo::fromName("qt-project.org");
|
||||
//! [1]
|
||||
|
||||
|
||||
|
@ -44,6 +44,7 @@
|
||||
|
||||
#ifndef QT_NO_OPENGL
|
||||
|
||||
#include <QtGui/qopengl.h>
|
||||
#include <QtWidgets/qwidget.h>
|
||||
#include <QtGui/qpaintengine.h>
|
||||
#include <QtOpenGL/qglcolormap.h>
|
||||
@ -54,33 +55,6 @@
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
#if defined(Q_OS_WIN)
|
||||
# include <QtCore/qt_windows.h>
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_MAC)
|
||||
# if !defined(Q_OS_IOS)
|
||||
# include <OpenGL/gl.h>
|
||||
# else
|
||||
# if defined(QT_OPENGL_ES_2)
|
||||
# include <OpenGLES/ES2/gl.h>
|
||||
# endif
|
||||
# endif
|
||||
#elif defined(QT_OPENGL_ES_2)
|
||||
# include <GLES2/gl2.h>
|
||||
# else
|
||||
# include <GL/gl.h>
|
||||
# endif
|
||||
|
||||
#if defined(QT_OPENGL_ES_2)
|
||||
# ifndef GL_DOUBLE
|
||||
# define GL_DOUBLE GL_FLOAT
|
||||
# endif
|
||||
# ifndef GLdouble
|
||||
typedef GLfloat GLdouble;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
||||
|
@ -24,7 +24,7 @@ win32 {
|
||||
$$PWD/qprintengine_win_p.h
|
||||
SOURCES += \
|
||||
$$PWD/qprintengine_win.cpp
|
||||
LIBS += -lwinspool -lcomdlg32
|
||||
LIBS += -lwinspool -lcomdlg32 -lgdi32 -luser32
|
||||
}
|
||||
|
||||
unix:!mac:contains(QT_CONFIG, cups): {
|
||||
|
@ -36,7 +36,3 @@
|
||||
\externalpage http://qt.gitorious.org/qt-labs/qtestlib-tools
|
||||
\title qtestlib-tools
|
||||
*/
|
||||
/*!
|
||||
\externalpage http://qt.nokia.com/services-partners/partners/partner-directory
|
||||
\title Partner Directory
|
||||
*/
|
||||
|
@ -3573,7 +3573,7 @@ bool QWizardPage::validatePage()
|
||||
from the rest of your implementation, whenever the value of isComplete()
|
||||
changes. This ensures that QWizard updates the enabled or disabled state of
|
||||
its buttons. An example of the reimplementation is
|
||||
available \l{http://qt.nokia.com/doc/qq/qq22-qwizard.html#validatebeforeitstoolate}
|
||||
available \l{http://doc.qt.digia.com/qq/qq22-qwizard.html#validatebeforeitstoolate}
|
||||
{here}.
|
||||
|
||||
\sa completeChanged(), isFinalPage()
|
||||
|
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
|
||||
enum and include many commonly used gestures.
|
||||
|
||||
\snippet examples/gestures/imagegestures/imagewidget.cpp enable gestures
|
||||
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp enable gestures
|
||||
|
||||
In the above code, the gestures are set up in the constructor of the target object
|
||||
itself.
|
||||
@ -125,18 +125,18 @@
|
||||
\l{QWidget::}{event()} handler function and delegates gesture events to a
|
||||
specialized gestureEvent() function:
|
||||
|
||||
\snippet examples/gestures/imagegestures/imagewidget.cpp event handler
|
||||
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp event handler
|
||||
|
||||
The gesture events delivered to the target object can be examined individually
|
||||
and dealt with appropriately:
|
||||
|
||||
\snippet examples/gestures/imagegestures/imagewidget.cpp gesture event handler
|
||||
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp gesture event handler
|
||||
|
||||
Responding to a gesture is simply a matter of obtaining the QGesture object
|
||||
delivered in the QGestureEvent sent to the target object and examining the
|
||||
information it contains.
|
||||
|
||||
\snippet examples/gestures/imagegestures/imagewidget.cpp swipe function
|
||||
\snippet ../../../examples/gestures/imagegestures/imagewidget.cpp swipe function
|
||||
|
||||
Here, we examine the direction in which the user swiped the widget and modify
|
||||
its contents accordingly.
|
||||
|
@ -576,7 +576,7 @@
|
||||
problem.
|
||||
|
||||
Qt Labs provides software called
|
||||
\l{http://labs.qt.nokia.com/page/Projects/Itemview/Modeltest}{ModelTest},
|
||||
\l{http://qt-project.org/wiki/Model_Test}{ModelTest},
|
||||
which checks models while your programming is running. Every time the model
|
||||
is changed, ModelTest scans the model and reports errors with an assert.
|
||||
This is especially important for tree models, since their hierarchical
|
||||
|
@ -249,7 +249,7 @@
|
||||
|
||||
For further guidance when implementing these functions, see the
|
||||
\e{Qt Quarterly} article
|
||||
\l{http://doc.qt.nokia.com/qq/qq04-height-for-width.html}
|
||||
\l{http://doc.qt.digia.com/qq/qq04-height-for-width.html}
|
||||
{Trading Height for Width}.
|
||||
|
||||
|
||||
|
@ -109,7 +109,7 @@ QSizePolicy::operator QVariant() const
|
||||
be expressed using hasHeightForWidth(), heightForWidth(), and
|
||||
minimumHeightForWidth(). For more explanation see the \e{Qt
|
||||
Quarterly} article
|
||||
\l{http://qt.nokia.com/doc/qq/qq04-height-for-width.html}{Trading
|
||||
\l{http://doc.qt.digia.com/qq/qq04-height-for-width.html}{Trading
|
||||
Height for Width}.
|
||||
|
||||
\sa QLayout
|
||||
|
@ -85,7 +85,7 @@
|
||||
developer to provide the autorelease pool.
|
||||
|
||||
The following is a snippet of subclassing QMacCocoaViewContainer to wrap a NSSearchField.
|
||||
\snippet widgets/mainwindows/macmainwindow/macmainwindow.mm 0
|
||||
\snippet macmainwindow.mm 0
|
||||
|
||||
*/
|
||||
|
||||
|
@ -72,10 +72,6 @@
|
||||
|
||||
\snippet qmacnativewidget/main.mm 0
|
||||
|
||||
On Carbon, this would do the equivalent:
|
||||
|
||||
\snippet qmacnativewidget/main.mm 1
|
||||
|
||||
Note that QMacNativeWidget requires knowledge of Carbon or Cocoa. All it
|
||||
does is get the Qt hierarchy into a window not owned by Qt. It is then up
|
||||
to the programmer to ensure it is placed correctly in the window and
|
||||
|
@ -108,7 +108,7 @@ QDomElement element4 = document.createElement("MyElement");
|
||||
|
||||
|
||||
//! [7]
|
||||
<link href="http://qt.nokia.com" color="red" />
|
||||
<link href="http://qt-project.org" color="red" />
|
||||
//! [7]
|
||||
|
||||
|
||||
@ -116,10 +116,10 @@ QDomElement element4 = document.createElement("MyElement");
|
||||
QDomElement e = //...
|
||||
//...
|
||||
QDomAttr a = e.attributeNode("href");
|
||||
cout << a.value() << endl; // prints "http://qt.nokia.com"
|
||||
a.setValue("http://qt.nokia.com/doc"); // change the node's attribute
|
||||
cout << a.value() << endl; // prints "http://qt-project.org"
|
||||
a.setValue("http://qt-project.org/doc"); // change the node's attribute
|
||||
QDomAttr a2 = e.attributeNode("href");
|
||||
cout << a2.value() << endl; // prints "http://qt.nokia.com/doc"
|
||||
cout << a2.value() << endl; // prints "http://qt-project.org/doc"
|
||||
//! [8]
|
||||
|
||||
|
||||
|
@ -2365,7 +2365,7 @@ events are reported.
|
||||
it we can use the same handler for both of the following
|
||||
reader functions:
|
||||
|
||||
\snippet rsslisting/rsslisting.cpp 0
|
||||
\snippet rsslisting/listing.cpp 0
|
||||
|
||||
Since the reader will inform the handler of parsing errors, it is
|
||||
necessary to reimplement QXmlErrorHandler::fatalError() if, for
|
||||
|
Loading…
Reference in New Issue
Block a user