From 9fde9ab167e52948d337de7fb7b871f7a1d75f43 Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Mon, 7 May 2012 13:54:52 +0200 Subject: [PATCH 01/13] Properly implement a 'make docs' target for subdirs and apps/libs Only call qdoc for projects which sets the QMAKE_DOCS variable to point to a qdocconf file. Exclude examples/ and tests/ from the qdoc run, by adding no_docs_target to CONFIG for those projects. Change-Id: Ic856c8f19db59309302d0602b3e99735609e525a Reviewed-by: Lars Knoll Reviewed-by: Oswald Buddenhagen Reviewed-by: Casper van Donderen --- examples/examples.pro | 2 ++ mkspecs/features/default_post.prf | 27 +++++++++++++++++++++++++++ src/corelib/corelib.pro | 4 +++- src/corelib/doc/doc.pri | 3 --- src/network/doc/doc.pri | 3 --- src/network/network.pro | 4 +++- src/sql/doc/doc.pri | 3 --- src/sql/sql.pro | 4 +++- src/tools/bootstrap/bootstrap.pro | 3 +++ src/tools/qdoc/qdoc.pro | 6 ++++++ src/xml/doc/doc.pri | 3 --- src/xml/xml.pro | 4 +++- tests/tests.pro | 1 + 13 files changed, 51 insertions(+), 16 deletions(-) delete mode 100644 src/corelib/doc/doc.pri delete mode 100644 src/network/doc/doc.pri delete mode 100644 src/sql/doc/doc.pri delete mode 100644 src/xml/doc/doc.pri diff --git a/examples/examples.pro b/examples/examples.pro index 2180d185871..7ce42d7fe72 100644 --- a/examples/examples.pro +++ b/examples/examples.pro @@ -1,4 +1,6 @@ TEMPLATE = subdirs +CONFIG += no_docs_target + SUBDIRS = \ network \ statemachine \ diff --git a/mkspecs/features/default_post.prf b/mkspecs/features/default_post.prf index 874b4bf4247..0a0fd8dfa83 100644 --- a/mkspecs/features/default_post.prf +++ b/mkspecs/features/default_post.prf @@ -64,3 +64,30 @@ QMAKE_LIBDIR += $$QMAKE_LIBDIR_POST QMAKE_EXTRA_TARGETS += check } +# Let every project have a 'docs' target +!contains(QMAKE_EXTRA_TARGETS, docs) { + contains(TEMPLATE, subdirs) { + # `make docs' should iterate through all subdirs + # (except those with no_default_target or no_docs_target) + !contains(CONFIG, no_docs_target):for(subdir, SUBDIRS) { + subdir_config = $$eval($${subdir}.CONFIG) + !contains(subdir_config, no_docs_target):!contains(subdir_config, no_default_target):docs.recurse += $$subdir + unset(subdir_config) + } + !isEmpty(docs.recurse) { + # setup the recurse target only when there is something to recurse into + docs.CONFIG = recursive + docs.recurse_target = docs + } + } else { + # apps and libs only generate docs if QMAKE_DOCS is set + !isEmpty(QMAKE_DOCS) { + !exists($$QMAKE_DOCS):error("Cannot find documentation specification file $$QMAKE_DOCS") + exists($$[QT_INSTALL_DOCS]):QMAKE_DOCS_INDEX *= $$[QT_INSTALL_DOCS] + qtPrepareTool(QDOC, qdoc) + for(index, QMAKE_DOCS_INDEX):QDOC_INDEX += -indexdir $$index + docs.commands += $$QDOC $$QMAKE_DOCS_OPTIONS $$QDOC_INDEX $$QMAKE_DOCS + } + } + QMAKE_EXTRA_TARGETS += docs +} diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index d98cebb6726..4856c1b5fb5 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -16,6 +16,9 @@ load(qt_module_config) HEADERS += $$QT_SOURCE_TREE/src/corelib/qtcoreversion.h +QMAKE_DOCS = $$PWD/doc/qtcore.qdocconf +QMAKE_DOCS_INDEX = ../../doc + include(animation/animation.pri) include(arch/arch.pri) include(global/global.pri) @@ -30,7 +33,6 @@ include(codecs/codecs.pri) include(statemachine/statemachine.pri) include(mimetypes/mimetypes.pri) include(xml/xml.pri) -include(doc/doc.pri) mac|darwin { !ios { diff --git a/src/corelib/doc/doc.pri b/src/corelib/doc/doc.pri deleted file mode 100644 index ed970d75926..00000000000 --- a/src/corelib/doc/doc.pri +++ /dev/null @@ -1,3 +0,0 @@ -qtPrepareTool(QDOC, qdoc) -docs.commands += $$QDOC $$QT.core.sources/doc/qtcore.qdocconf -QMAKE_EXTRA_TARGETS += docs diff --git a/src/network/doc/doc.pri b/src/network/doc/doc.pri deleted file mode 100644 index 7ca0ad07d4a..00000000000 --- a/src/network/doc/doc.pri +++ /dev/null @@ -1,3 +0,0 @@ -qtPrepareTool(QDOC, qdoc) -docs.commands += $$QDOC $$QT.network.sources/doc/qtnetwork.qdocconf -QMAKE_EXTRA_TARGETS += docs diff --git a/src/network/network.pro b/src/network/network.pro index a6597338f59..3e1bc6d4e5e 100644 --- a/src/network/network.pro +++ b/src/network/network.pro @@ -24,9 +24,11 @@ load(qt_module_config) HEADERS += $$QT_SOURCE_TREE/src/network/qtnetworkversion.h +QMAKE_DOCS = $$PWD/doc/qtnetwork.qdocconf +QMAKE_DOCS_INDEX = ../../doc + include(access/access.pri) include(bearer/bearer.pri) -include(doc/doc.pri) include(kernel/kernel.pri) include(socket/socket.pri) include(ssl/ssl.pri) diff --git a/src/sql/doc/doc.pri b/src/sql/doc/doc.pri deleted file mode 100644 index 2bc2e005d48..00000000000 --- a/src/sql/doc/doc.pri +++ /dev/null @@ -1,3 +0,0 @@ -qtPrepareTool(QDOC, qdoc) -docs.commands += $$QDOC $$QT.sql.sources/doc/qtsql.qdocconf -QMAKE_EXTRA_TARGETS += docs diff --git a/src/sql/sql.pro b/src/sql/sql.pro index e3f81f3498b..c2345d92ef1 100644 --- a/src/sql/sql.pro +++ b/src/sql/sql.pro @@ -21,7 +21,9 @@ DEFINES += QT_NO_CAST_FROM_ASCII PRECOMPILED_HEADER = ../corelib/global/qt_pch.h SQL_P = sql -include(doc/doc.pri) +QMAKE_DOCS = $$PWD/doc/qtsql.qdocconf +QMAKE_DOCS_INDEX = ../../doc + include(kernel/kernel.pri) include(drivers/drivers.pri) include(models/models.pri) diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index 21fc2f9ca5d..37b4c3dd1d7 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -127,3 +127,6 @@ freeze_target.target = freeze freeze_target.commands = freeze_target.depends = first QMAKE_EXTRA_TARGETS += freeze_target +docs.commands = +docs.depends = first +QMAKE_EXTRA_TARGETS += docs diff --git a/src/tools/qdoc/qdoc.pro b/src/tools/qdoc/qdoc.pro index 484b0c6ba1d..1e570583f56 100644 --- a/src/tools/qdoc/qdoc.pro +++ b/src/tools/qdoc/qdoc.pro @@ -116,4 +116,10 @@ QMAKE_EXTRA_TARGETS += html-docs qch-docs target.path = $$[QT_HOST_BINS] INSTALLS += target + +# Ensure that qdoc is built before we generate the docs +docs.commands = +docs.depends = first +QMAKE_EXTRA_TARGET += docs + load(qt_targets) diff --git a/src/xml/doc/doc.pri b/src/xml/doc/doc.pri deleted file mode 100644 index d02e45e64e1..00000000000 --- a/src/xml/doc/doc.pri +++ /dev/null @@ -1,3 +0,0 @@ -qtPrepareTool(QDOC, qdoc) -docs.commands += $$QDOC $$QT.xml.sources/doc/qtxml.qdocconf -QMAKE_EXTRA_TARGETS += docs diff --git a/src/xml/xml.pro b/src/xml/xml.pro index b8c24496ae2..2fff0218e42 100644 --- a/src/xml/xml.pro +++ b/src/xml/xml.pro @@ -16,6 +16,9 @@ load(qt_module_config) HEADERS += $$QT_SOURCE_TREE/src/xml/qtxmlversion.h +QMAKE_DOCS = $$PWD/doc/qtxml.qdocconf +QMAKE_DOCS_INDEX = ../../doc + PRECOMPILED_HEADER = ../corelib/global/qt_pch.h win32-borland { @@ -23,6 +26,5 @@ win32-borland { QMAKE_CXXFLAGS_WARN_ON += -w-use } -include(doc/doc.pri) include(dom/dom.pri) include(sax/sax.pri) diff --git a/tests/tests.pro b/tests/tests.pro index 0c933681eeb..0f50930774e 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -1,4 +1,5 @@ TEMPLATE = subdirs +CONFIG += no_docs_target SUBDIRS = auto # benchmarks in debug mode is rarely sensible From 7eca53b51a2c7cae0b39fedb0b78205504bfd64b Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Mon, 7 May 2012 11:10:29 +0200 Subject: [PATCH 02/13] Doc: Modularize QtNetwork documentation. This change moves the snippets and imagesto the modularized directories. Change-Id: If14912692a7f72d7de345eaf88d9ec9752310fca Reviewed-by: Marius Storm-Olsen --- src/network/access/qftp.cpp | 8 ++++---- src/network/access/qhttpmultipart.cpp | 8 ++++---- src/network/access/qnetworkaccessmanager.cpp | 12 ++++++------ src/network/access/qnetworkdiskcache.cpp | 6 +++--- src/network/access/qnetworkreply.cpp | 2 +- src/network/access/qnetworkrequest.cpp | 2 +- src/network/bearer/qnetworkconfigmanager.cpp | 2 +- .../network/doc}/images/roaming-states.png | Bin .../snippets/code/src_network_access_qftp.cpp | 0 .../code/src_network_access_qhttpmultipart.cpp | 0 .../code/src_network_access_qhttppart.cpp | 0 .../src_network_access_qnetworkaccessmanager.cpp | 0 .../code/src_network_access_qnetworkdiskcache.cpp | 0 .../code/src_network_access_qnetworkreply.cpp | 0 .../code/src_network_access_qnetworkrequest.cpp | 0 .../src_network_bearer_qnetworkconfigmanager.cpp | 0 .../code/src_network_kernel_qdnslookup.cpp | 0 .../code/src_network_kernel_qhostaddress.cpp | 0 .../code/src_network_kernel_qhostinfo.cpp | 0 .../code/src_network_kernel_qnetworkproxy.cpp | 0 .../code/src_network_socket_qabstractsocket.cpp | 0 .../code/src_network_socket_qlocalsocket_unix.cpp | 0 .../src_network_socket_qnativesocketengine.cpp | 0 .../code/src_network_socket_qtcpserver.cpp | 0 .../code/src_network_socket_qudpsocket.cpp | 0 .../code/src_network_ssl_qsslcertificate.cpp | 0 .../code/src_network_ssl_qsslconfiguration.cpp | 0 .../snippets/code/src_network_ssl_qsslsocket.cpp | 0 .../network/doc}/snippets/network/tcpwait.cpp | 0 src/network/kernel/qdnslookup.cpp | 4 ++-- src/network/kernel/qhostaddress.cpp | 2 +- src/network/kernel/qhostinfo.cpp | 12 ++++++------ src/network/kernel/qnetworkproxy.cpp | 6 +++--- src/network/socket/qabstractsocket.cpp | 10 +++++----- src/network/socket/qlocalsocket.cpp | 4 ++-- src/network/socket/qnativesocketengine.cpp | 4 ++-- src/network/socket/qtcpserver.cpp | 2 +- src/network/socket/qudpsocket.cpp | 2 +- src/network/ssl/qsslcertificate.cpp | 2 +- src/network/ssl/qsslconfiguration.cpp | 2 +- src/network/ssl/qsslsocket.cpp | 14 +++++++------- 41 files changed, 52 insertions(+), 52 deletions(-) rename {doc/src => src/network/doc}/images/roaming-states.png (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qftp.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qhttpmultipart.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qhttppart.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qnetworkaccessmanager.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qnetworkdiskcache.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qnetworkreply.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_access_qnetworkrequest.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_kernel_qdnslookup.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_kernel_qhostaddress.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_kernel_qhostinfo.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_kernel_qnetworkproxy.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_socket_qabstractsocket.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_socket_qlocalsocket_unix.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_socket_qnativesocketengine.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_socket_qtcpserver.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_socket_qudpsocket.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_ssl_qsslcertificate.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_ssl_qsslconfiguration.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/src_network_ssl_qsslsocket.cpp (100%) rename {doc/src => src/network/doc}/snippets/network/tcpwait.cpp (100%) diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index ba30ad08ba7..324126baae8 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -1361,7 +1361,7 @@ int QFtpPrivate::addCommand(QFtpCommand *cmd) e.g. if you want to connect and login to a FTP server. This is simply achieved: - \snippet doc/src/snippets/code/src_network_access_qftp.cpp 0 + \snippet code/src_network_access_qftp.cpp 0 In this case two FTP commands have been scheduled. When the last scheduled command has finished, a done() signal is emitted with @@ -1379,12 +1379,12 @@ int QFtpPrivate::addCommand(QFtpCommand *cmd) Example: If you want to download the INSTALL file from the Qt FTP server, you would write this: - \snippet doc/src/snippets/code/src_network_access_qftp.cpp 1 + \snippet code/src_network_access_qftp.cpp 1 For this example the following sequence of signals is emitted (with small variations, depending on network traffic, etc.): - \snippet doc/src/snippets/code/src_network_access_qftp.cpp 2 + \snippet code/src_network_access_qftp.cpp 2 The dataTransferProgress() signal in the above example is useful if you want to show a \link QProgressBar progress bar \endlink to @@ -1397,7 +1397,7 @@ int QFtpPrivate::addCommand(QFtpCommand *cmd) If the login fails for the above example, the signals would look like this: - \snippet doc/src/snippets/code/src_network_access_qftp.cpp 3 + \snippet code/src_network_access_qftp.cpp 3 You can then get details about the error with the error() and errorString() functions. diff --git a/src/network/access/qhttpmultipart.cpp b/src/network/access/qhttpmultipart.cpp index 27164d69aef..ca7e2f6be8f 100644 --- a/src/network/access/qhttpmultipart.cpp +++ b/src/network/access/qhttpmultipart.cpp @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE and a data block, which are separated by each other by two consecutive new lines. An example for one part would be: - \snippet doc/src/snippets/code/src_network_access_qhttppart.cpp 0 + \snippet code/src_network_access_qhttppart.cpp 0 For setting headers, use setHeader() and setRawHeader(), which behave exactly like QNetworkRequest::setHeader() and QNetworkRequest::setRawHeader(). @@ -77,12 +77,12 @@ QT_BEGIN_NAMESPACE To construct a QHttpPart with a small body, consider the following snippet (this produces the data shown in the example above): - \snippet doc/src/snippets/code/src_network_access_qhttppart.cpp 1 + \snippet code/src_network_access_qhttppart.cpp 1 To construct a QHttpPart reading from a device (e.g. a file), the following can be applied: - \snippet doc/src/snippets/code/src_network_access_qhttppart.cpp 2 + \snippet code/src_network_access_qhttppart.cpp 2 Be aware that QHttpPart does not take ownership of the device when set, so it is the developer's responsibility to destroy it when it is not needed anymore. @@ -226,7 +226,7 @@ void QHttpPart::setBodyDevice(QIODevice *device) As an example, consider the following code snippet, which constructs a multipart message containing a text part followed by an image part: - \snippet doc/src/snippets/code/src_network_access_qhttpmultipart.cpp 0 + \snippet code/src_network_access_qhttpmultipart.cpp 0 \sa QHttpPart, QNetworkAccessManager::post() */ diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index b539ed4d9a4..66d8a66b434 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -178,7 +178,7 @@ static void ensureInitialized() returned in response to the corresponding request. A simple download off the network could be accomplished with: - \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 0 + \snippet code/src_network_access_qnetworkaccessmanager.cpp 0 QNetworkAccessManager has an asynchronous API. When the \tt replyFinished slot above is called, the parameter it @@ -197,7 +197,7 @@ static void ensureInitialized() A more involved example, assuming the manager is already existent, can be: - \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 1 + \snippet code/src_network_access_qnetworkaccessmanager.cpp 1 \section1 Network and Roaming support @@ -283,11 +283,11 @@ static void ensureInitialized() By default the value of this property reflects the physical state of the device. Applications may override it to disable all network requests via this network access manager by calling - \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 4 + \snippet code/src_network_access_qnetworkaccessmanager.cpp 4 Network requests can be reenabled again by calling - \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 5 + \snippet code/src_network_access_qnetworkaccessmanager.cpp 5 \note Calling setNetworkAccessible() does not change the network state. */ @@ -805,12 +805,12 @@ QNetworkReply *QNetworkAccessManager::deleteResource(const QNetworkRequest &requ To restore the default network configuration set the network configuration to the value returned from QNetworkConfigurationManager::defaultConfiguration(). - \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 2 + \snippet code/src_network_access_qnetworkaccessmanager.cpp 2 If an invalid network configuration is set, a network session will not be created. In this case network requests will be processed regardless, but may fail. For example: - \snippet doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp 3 + \snippet code/src_network_access_qnetworkaccessmanager.cpp 3 \sa configuration(), QNetworkSession */ diff --git a/src/network/access/qnetworkdiskcache.cpp b/src/network/access/qnetworkdiskcache.cpp index bcaf81a6a06..0a1d43f70f8 100644 --- a/src/network/access/qnetworkdiskcache.cpp +++ b/src/network/access/qnetworkdiskcache.cpp @@ -88,17 +88,17 @@ QT_BEGIN_NAMESPACE A network disk cache can be enabled by: - \snippet doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp 0 + \snippet code/src_network_access_qnetworkdiskcache.cpp 0 When sending requests, to control the preference of when to use the cache and when to use the network, consider the following: - \snippet doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp 1 + \snippet code/src_network_access_qnetworkdiskcache.cpp 1 To check whether the response came from the cache or from the network, the following can be applied: - \snippet doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp 2 + \snippet code/src_network_access_qnetworkdiskcache.cpp 2 */ /*! diff --git a/src/network/access/qnetworkreply.cpp b/src/network/access/qnetworkreply.cpp index aefe07223f7..3b6ec5d4b50 100644 --- a/src/network/access/qnetworkreply.cpp +++ b/src/network/access/qnetworkreply.cpp @@ -616,7 +616,7 @@ void QNetworkReply::setSslConfiguration(const QSslConfiguration &config) If, for instance, you want to issue a request to a server that uses a self-signed certificate, consider the following snippet: - \snippet doc/src/snippets/code/src_network_access_qnetworkreply.cpp 0 + \snippet code/src_network_access_qnetworkreply.cpp 0 Multiple calls to this function will replace the list of errors that were passed in previous calls. diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 1c8655e9aed..9df06328a12 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -487,7 +487,7 @@ QList QNetworkRequest::rawHeaderList() const the corresponding "cooked" header will be set as well. For example: - \snippet doc/src/snippets/code/src_network_access_qnetworkrequest.cpp 0 + \snippet code/src_network_access_qnetworkrequest.cpp 0 will also set the known header LastModifiedHeader to be the QDateTime object of the parsed date. diff --git a/src/network/bearer/qnetworkconfigmanager.cpp b/src/network/bearer/qnetworkconfigmanager.cpp index 511bec8f230..0561ea93d19 100644 --- a/src/network/bearer/qnetworkconfigmanager.cpp +++ b/src/network/bearer/qnetworkconfigmanager.cpp @@ -321,7 +321,7 @@ QNetworkConfiguration QNetworkConfigurationManager::configurationFromIdentifier( This is equivalent to the following code snippet: - \snippet doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp 0 + \snippet code/src_network_bearer_qnetworkconfigmanager.cpp 0 \sa onlineStateChanged() */ diff --git a/doc/src/images/roaming-states.png b/src/network/doc/images/roaming-states.png similarity index 100% rename from doc/src/images/roaming-states.png rename to src/network/doc/images/roaming-states.png diff --git a/doc/src/snippets/code/src_network_access_qftp.cpp b/src/network/doc/snippets/code/src_network_access_qftp.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qftp.cpp rename to src/network/doc/snippets/code/src_network_access_qftp.cpp diff --git a/doc/src/snippets/code/src_network_access_qhttpmultipart.cpp b/src/network/doc/snippets/code/src_network_access_qhttpmultipart.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qhttpmultipart.cpp rename to src/network/doc/snippets/code/src_network_access_qhttpmultipart.cpp diff --git a/doc/src/snippets/code/src_network_access_qhttppart.cpp b/src/network/doc/snippets/code/src_network_access_qhttppart.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qhttppart.cpp rename to src/network/doc/snippets/code/src_network_access_qhttppart.cpp diff --git a/doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp b/src/network/doc/snippets/code/src_network_access_qnetworkaccessmanager.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qnetworkaccessmanager.cpp rename to src/network/doc/snippets/code/src_network_access_qnetworkaccessmanager.cpp diff --git a/doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp b/src/network/doc/snippets/code/src_network_access_qnetworkdiskcache.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qnetworkdiskcache.cpp rename to src/network/doc/snippets/code/src_network_access_qnetworkdiskcache.cpp diff --git a/doc/src/snippets/code/src_network_access_qnetworkreply.cpp b/src/network/doc/snippets/code/src_network_access_qnetworkreply.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qnetworkreply.cpp rename to src/network/doc/snippets/code/src_network_access_qnetworkreply.cpp diff --git a/doc/src/snippets/code/src_network_access_qnetworkrequest.cpp b/src/network/doc/snippets/code/src_network_access_qnetworkrequest.cpp similarity index 100% rename from doc/src/snippets/code/src_network_access_qnetworkrequest.cpp rename to src/network/doc/snippets/code/src_network_access_qnetworkrequest.cpp diff --git a/doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp b/src/network/doc/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp similarity index 100% rename from doc/src/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp rename to src/network/doc/snippets/code/src_network_bearer_qnetworkconfigmanager.cpp diff --git a/doc/src/snippets/code/src_network_kernel_qdnslookup.cpp b/src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp similarity index 100% rename from doc/src/snippets/code/src_network_kernel_qdnslookup.cpp rename to src/network/doc/snippets/code/src_network_kernel_qdnslookup.cpp diff --git a/doc/src/snippets/code/src_network_kernel_qhostaddress.cpp b/src/network/doc/snippets/code/src_network_kernel_qhostaddress.cpp similarity index 100% rename from doc/src/snippets/code/src_network_kernel_qhostaddress.cpp rename to src/network/doc/snippets/code/src_network_kernel_qhostaddress.cpp diff --git a/doc/src/snippets/code/src_network_kernel_qhostinfo.cpp b/src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp similarity index 100% rename from doc/src/snippets/code/src_network_kernel_qhostinfo.cpp rename to src/network/doc/snippets/code/src_network_kernel_qhostinfo.cpp diff --git a/doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp b/src/network/doc/snippets/code/src_network_kernel_qnetworkproxy.cpp similarity index 100% rename from doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp rename to src/network/doc/snippets/code/src_network_kernel_qnetworkproxy.cpp diff --git a/doc/src/snippets/code/src_network_socket_qabstractsocket.cpp b/src/network/doc/snippets/code/src_network_socket_qabstractsocket.cpp similarity index 100% rename from doc/src/snippets/code/src_network_socket_qabstractsocket.cpp rename to src/network/doc/snippets/code/src_network_socket_qabstractsocket.cpp diff --git a/doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp b/src/network/doc/snippets/code/src_network_socket_qlocalsocket_unix.cpp similarity index 100% rename from doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp rename to src/network/doc/snippets/code/src_network_socket_qlocalsocket_unix.cpp diff --git a/doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp b/src/network/doc/snippets/code/src_network_socket_qnativesocketengine.cpp similarity index 100% rename from doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp rename to src/network/doc/snippets/code/src_network_socket_qnativesocketengine.cpp diff --git a/doc/src/snippets/code/src_network_socket_qtcpserver.cpp b/src/network/doc/snippets/code/src_network_socket_qtcpserver.cpp similarity index 100% rename from doc/src/snippets/code/src_network_socket_qtcpserver.cpp rename to src/network/doc/snippets/code/src_network_socket_qtcpserver.cpp diff --git a/doc/src/snippets/code/src_network_socket_qudpsocket.cpp b/src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp similarity index 100% rename from doc/src/snippets/code/src_network_socket_qudpsocket.cpp rename to src/network/doc/snippets/code/src_network_socket_qudpsocket.cpp diff --git a/doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp b/src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp similarity index 100% rename from doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp rename to src/network/doc/snippets/code/src_network_ssl_qsslcertificate.cpp diff --git a/doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp b/src/network/doc/snippets/code/src_network_ssl_qsslconfiguration.cpp similarity index 100% rename from doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp rename to src/network/doc/snippets/code/src_network_ssl_qsslconfiguration.cpp diff --git a/doc/src/snippets/code/src_network_ssl_qsslsocket.cpp b/src/network/doc/snippets/code/src_network_ssl_qsslsocket.cpp similarity index 100% rename from doc/src/snippets/code/src_network_ssl_qsslsocket.cpp rename to src/network/doc/snippets/code/src_network_ssl_qsslsocket.cpp diff --git a/doc/src/snippets/network/tcpwait.cpp b/src/network/doc/snippets/network/tcpwait.cpp similarity index 100% rename from doc/src/snippets/network/tcpwait.cpp rename to src/network/doc/snippets/network/tcpwait.cpp diff --git a/src/network/kernel/qdnslookup.cpp b/src/network/kernel/qdnslookup.cpp index 7a1d4e45de5..a8264229785 100644 --- a/src/network/kernel/qdnslookup.cpp +++ b/src/network/kernel/qdnslookup.cpp @@ -171,11 +171,11 @@ static void qt_qdnsservicerecord_sort(QList &records) For example, you can determine which servers an XMPP chat client should connect to for a given domain with: - \snippet doc/src/snippets/code/src_network_kernel_qdnslookup.cpp 0 + \snippet code/src_network_kernel_qdnslookup.cpp 0 Once the request finishes you can handle the results with: - \snippet doc/src/snippets/code/src_network_kernel_qdnslookup.cpp 1 + \snippet code/src_network_kernel_qdnslookup.cpp 1 \note If you simply want to find the IP address(es) associated with a host name, or the host name associated with an IP address you should use diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index 56473e29823..3ca0f84c394 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -644,7 +644,7 @@ QAbstractSocket::NetworkLayerProtocol QHostAddress::protocol() const Returns the IPv6 address as a Q_IPV6ADDR structure. The structure consists of 16 unsigned characters. - \snippet doc/src/snippets/code/src_network_kernel_qhostaddress.cpp 0 + \snippet code/src_network_kernel_qhostaddress.cpp 0 This value is valid if the protocol() is \l{QAbstractSocket::}{IPv6Protocol}. diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 085f2f66519..32cf90145cd 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -83,7 +83,7 @@ Q_GLOBAL_STATIC(QHostInfoLookupManager, theHostInfoLookupManager) Example: - \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 0 + \snippet code/src_network_kernel_qhostinfo.cpp 0 The slot is invoked when the results are ready. The results are @@ -97,7 +97,7 @@ Q_GLOBAL_STATIC(QHostInfoLookupManager, theHostInfoLookupManager) If you want a blocking lookup, use the QHostInfo::fromName() function: - \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 1 + \snippet code/src_network_kernel_qhostinfo.cpp 1 QHostInfo supports Internationalized Domain Names (IDNs) through the IDNA and Punycode standards. @@ -126,12 +126,12 @@ static QBasicAtomicInt theIdCounter = Q_BASIC_ATOMIC_INITIALIZER(1); The lookup is performed by a single function call, for example: - \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 2 + \snippet code/src_network_kernel_qhostinfo.cpp 2 The implementation of the slot prints basic information about the addresses returned by the lookup, or reports an error if it failed: - \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 3 + \snippet code/src_network_kernel_qhostinfo.cpp 3 If you pass a literal IP address to \a name instead of a host name, QHostInfo will search for the domain name for the IP (i.e., QHostInfo will @@ -139,7 +139,7 @@ static QBasicAtomicInt theIdCounter = Q_BASIC_ATOMIC_INITIALIZER(1); contain both the resolved domain name and IP addresses for the host name. Example: - \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 4 + \snippet code/src_network_kernel_qhostinfo.cpp 4 \note There is no guarantee on the order the signals will be emitted if you start multiple requests with lookupHost(). @@ -311,7 +311,7 @@ QHostInfo::~QHostInfo() Example: - \snippet doc/src/snippets/code/src_network_kernel_qhostinfo.cpp 5 + \snippet code/src_network_kernel_qhostinfo.cpp 5 \sa hostName(), error() */ diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index 6c1ee0ef420..50bf670e7ea 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -59,14 +59,14 @@ network-enabled applications that you have written should automatically support network proxy using the following code. - \snippet doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp 0 + \snippet code/src_network_kernel_qnetworkproxy.cpp 0 An alternative to setting an application wide proxy is to specify the proxy for individual sockets using QAbstractSocket::setProxy() and QTcpServer::setProxy(). In this way, it is possible to disable the use of a proxy for specific sockets using the following code: - \snippet doc/src/snippets/code/src_network_kernel_qnetworkproxy.cpp 1 + \snippet code/src_network_kernel_qnetworkproxy.cpp 1 Network proxy is not used if the address used in \l {QAbstractSocket::connectToHost()}{connectToHost()}, \l @@ -800,7 +800,7 @@ QList QNetworkProxy::rawHeaderList() const the corresponding "cooked" header will be set as well. For example: - \snippet doc/src/snippets/code/src_network_access_qnetworkrequest.cpp 0 + \snippet code/src_network_access_qnetworkrequest.cpp 0 will also set the known header LastModifiedHeader to be the QDateTime object of the parsed date. diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 9d95d3a70e4..9a974c13263 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -142,7 +142,7 @@ We show an example: - \snippet doc/src/snippets/network/tcpwait.cpp 0 + \snippet network/tcpwait.cpp 0 If \l{QIODevice::}{waitForReadyRead()} returns false, the connection has been closed or an error has occurred. @@ -1937,7 +1937,7 @@ static int qt_timeout_value(int msecs, int elapsed) The following example waits up to one second for a connection to be established: - \snippet doc/src/snippets/code/src_network_socket_qabstractsocket.cpp 0 + \snippet code/src_network_socket_qabstractsocket.cpp 0 If msecs is -1, this function will not time out. @@ -2182,7 +2182,7 @@ bool QAbstractSocket::waitForBytesWritten(int msecs) The following example waits up to one second for a connection to be closed: - \snippet doc/src/snippets/code/src_network_socket_qabstractsocket.cpp 1 + \snippet code/src_network_socket_qabstractsocket.cpp 1 If msecs is -1, this function will not time out. @@ -2285,7 +2285,7 @@ bool QAbstractSocket::isSequential() const This function is most commonly used when reading data from the socket in a loop. For example: - \snippet doc/src/snippets/code/src_network_socket_qabstractsocket.cpp 2 + \snippet code/src_network_socket_qabstractsocket.cpp 2 \sa bytesAvailable(), readyRead() */ @@ -2873,7 +2873,7 @@ void QAbstractSocket::setSocketError(SocketError socketError) To disable the use of a proxy for this socket, use the QNetworkProxy::NoProxy proxy type: - \snippet doc/src/snippets/code/src_network_socket_qabstractsocket.cpp 3 + \snippet code/src_network_socket_qabstractsocket.cpp 3 The default value for the proxy is QNetworkProxy::DefaultProxy, which means the socket will use the application settings: if a diff --git a/src/network/socket/qlocalsocket.cpp b/src/network/socket/qlocalsocket.cpp index ced7bba09be..9947f3d16e3 100644 --- a/src/network/socket/qlocalsocket.cpp +++ b/src/network/socket/qlocalsocket.cpp @@ -255,7 +255,7 @@ QT_BEGIN_NAMESPACE The following example waits up to one second for a connection to be established: - \snippet doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp 0 + \snippet code/src_network_socket_qlocalsocket_unix.cpp 0 If \a msecs is -1, this function will not time out. @@ -274,7 +274,7 @@ QT_BEGIN_NAMESPACE The following example waits up to one second for a connection to be closed: - \snippet doc/src/snippets/code/src_network_socket_qlocalsocket_unix.cpp 1 + \snippet code/src_network_socket_qlocalsocket_unix.cpp 1 If \a msecs is -1, this function will not time out. diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index 8fac3613c04..f2e2f692acb 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -494,7 +494,7 @@ qintptr QNativeSocketEngine::socketDescriptor() const waitForWrite(). Example: - \snippet doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp 0 + \snippet code/src_network_socket_qnativesocketengine.cpp 0 Otherwise, error() should be called to determine the cause of the error. @@ -590,7 +590,7 @@ bool QNativeSocketEngine::bind(const QHostAddress &address, quint16 port) the blocking function waitForRead(). Example: - \snippet doc/src/snippets/code/src_network_socket_qnativesocketengine.cpp 1 + \snippet code/src_network_socket_qnativesocketengine.cpp 1 \sa bind(), accept() */ diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp index 42f0056524e..9cca943189f 100644 --- a/src/network/socket/qtcpserver.cpp +++ b/src/network/socket/qtcpserver.cpp @@ -654,7 +654,7 @@ QString QTcpServer::errorString() const To disable the use of a proxy for this socket, use the QNetworkProxy::NoProxy proxy type: - \snippet doc/src/snippets/code/src_network_socket_qtcpserver.cpp 0 + \snippet code/src_network_socket_qtcpserver.cpp 0 \sa proxy(), QNetworkProxy */ diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 23c1956ec5a..8e3c427d455 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -75,7 +75,7 @@ Example: - \snippet doc/src/snippets/code/src_network_socket_qudpsocket.cpp 0 + \snippet code/src_network_socket_qudpsocket.cpp 0 QUdpSocket also supports UDP multicast. Use joinMulticastGroup() and leaveMulticastGroup() to control group membership, and diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 1fc84cbec1f..ba07e7ef06b 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -834,7 +834,7 @@ QByteArray QSslCertificate::toText() const Example: - \snippet doc/src/snippets/code/src_network_ssl_qsslcertificate.cpp 0 + \snippet code/src_network_ssl_qsslcertificate.cpp 0 \sa fromData() */ diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index ec49c0f56e0..bdd10e78348 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -102,7 +102,7 @@ const QSsl::SslOptions QSslConfigurationPrivate::defaultSslOptions = QSsl::SslOp achieve that. The following example illustrates how to change the protocol to TLSv1_0 in a QSslSocket object: - \snippet doc/src/snippets/code/src_network_ssl_qsslconfiguration.cpp 0 + \snippet code/src_network_ssl_qsslconfiguration.cpp 0 \sa QSsl::SslProtocol, QSslCertificate, QSslCipher, QSslKey QSslSocket, QNetworkAccessManager, diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index a041a2aaf17..936f46d95fc 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -71,7 +71,7 @@ This method starts an immediate SSL handshake once the connection has been established. - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 0 + \snippet code/src_network_ssl_qsslsocket.cpp 0 As with a plain QTcpSocket, QSslSocket enters the HostLookupState, ConnectingState, and finally the ConnectedState, if the connection @@ -94,7 +94,7 @@ the existing one passed in. It then initiates the SSL handshake by calling startServerEncryption(). - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 1 + \snippet code/src_network_ssl_qsslsocket.cpp 1 If an error occurs, QSslSocket emits the sslErrors() signal. In this case, if no action is taken to ignore the error(s), the connection @@ -122,7 +122,7 @@ waitForEncrypted(), which will block the calling thread until an encrypted connection has been established. - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 2 + \snippet code/src_network_ssl_qsslsocket.cpp 2 QSslSocket provides an extensive, easy-to-use API for handling cryptographic ciphers, private keys, and local, peer, and @@ -397,7 +397,7 @@ void QSslSocket::resume() If the SSL handshake is successful, QSslSocket emits encrypted(). - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 3 + \snippet code/src_network_ssl_qsslsocket.cpp 3 \b{Note:} The example above shows that text can be written to the socket immediately after requesting the encrypted connection, @@ -1149,7 +1149,7 @@ void QSslSocket::setCiphers(const QList &ciphers) is a colon-separated list of cipher suite names. The ciphers are listed in order of preference, starting with the most preferred cipher. For example: - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 4 + \snippet code/src_network_ssl_qsslsocket.cpp 4 Each cipher name in \a ciphers must be the name of a cipher in the list returned by supportedCiphers(). Restricting the cipher suite @@ -1438,7 +1438,7 @@ bool QSslSocket::waitForConnected(int msecs) The following example waits up to one second for the socket to be encrypted: - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 5 + \snippet code/src_network_ssl_qsslsocket.cpp 5 If msecs is -1, this function will not time out. @@ -1736,7 +1736,7 @@ void QSslSocket::ignoreSslErrors() If, for instance, you want to connect to a server that uses a self-signed certificate, consider the following snippet: - \snippet doc/src/snippets/code/src_network_ssl_qsslsocket.cpp 6 + \snippet code/src_network_ssl_qsslsocket.cpp 6 Multiple calls to this function will replace the list of errors that were passed in previous calls. From a409cebe3d780eaae46e9ce7b19faa949059ec8e Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Mon, 7 May 2012 11:19:53 +0200 Subject: [PATCH 03/13] Doc: Fix typo in QtNetwork qdocconf. Change-Id: I759e8a77b0471d380ffd9f893ae5bb5ed0c5c992 Reviewed-by: Marius Storm-Olsen --- src/network/doc/qtnetwork.qdocconf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/doc/qtnetwork.qdocconf b/src/network/doc/qtnetwork.qdocconf index 2e58ad65c9c..e14fb322329 100644 --- a/src/network/doc/qtnetwork.qdocconf +++ b/src/network/doc/qtnetwork.qdocconf @@ -2,7 +2,7 @@ include(../../../doc/global/qt-cpp-ignore.qdocconf) project = QtNetwork description = Qt Network Reference Documentation -url = http://qt-project.org/doc/qt-5.0/qtsql +url = http://qt-project.org/doc/qt-5.0/qtnetwork version = 5.0.0 sourceencoding = UTF-8 From 4548022ee27259b85a41a8df2ad28a99f1af7eed Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Mon, 7 May 2012 11:33:42 +0200 Subject: [PATCH 04/13] Doc: Modularize QtConcurrent documentation. This change moves the snippets and images to the modularized directories. Change-Id: If52f69c0f8bb4d2df4ee46f5524a82047ec214de Reviewed-by: Marius Storm-Olsen --- src/concurrent/doc/qtconcurrent.qdocconf | 92 +++++++++++++++++++ .../snippets/code/src_concurrent_qfuture.cpp | 0 .../src_concurrent_qfuturesynchronizer.cpp | 0 .../code/src_concurrent_qfuturewatcher.cpp | 0 .../src_concurrent_qtconcurrentexception.cpp | 0 .../src_concurrent_qtconcurrentfilter.cpp | 0 .../code/src_concurrent_qtconcurrentmap.cpp | 0 .../code/src_concurrent_qtconcurrentrun.cpp | 0 src/concurrent/qfuture.cpp | 6 +- src/concurrent/qfuturesynchronizer.cpp | 2 +- src/concurrent/qfuturewatcher.cpp | 2 +- src/concurrent/qtconcurrentexception.cpp | 8 +- src/concurrent/qtconcurrentfilter.cpp | 28 +++--- src/concurrent/qtconcurrentmap.cpp | 32 +++---- src/concurrent/qtconcurrentrun.cpp | 14 +-- 15 files changed, 138 insertions(+), 46 deletions(-) create mode 100644 src/concurrent/doc/qtconcurrent.qdocconf rename doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp => src/concurrent/doc/snippets/code/src_concurrent_qfuture.cpp (100%) rename doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp => src/concurrent/doc/snippets/code/src_concurrent_qfuturesynchronizer.cpp (100%) rename doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp => src/concurrent/doc/snippets/code/src_concurrent_qfuturewatcher.cpp (100%) rename doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp => src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp (100%) rename doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp => src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp (100%) rename doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp => src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp (100%) rename doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp => src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentrun.cpp (100%) diff --git a/src/concurrent/doc/qtconcurrent.qdocconf b/src/concurrent/doc/qtconcurrent.qdocconf new file mode 100644 index 00000000000..d8d66a92c96 --- /dev/null +++ b/src/concurrent/doc/qtconcurrent.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtConcurrent +description = Qt Concurrent Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qtconcurrent +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtConcurrent + +qhp.QtConcurrent.file = qtconcurrent.qhp +qhp.QtConcurrent.namespace = org.qt-project.qtconcurrent.500 +qhp.QtConcurrent.virtualFolder = qdoc +qhp.QtConcurrent.indexTitle = Qt Concurrent Reference Documentation +qhp.QtConcurrent.indexRoot = + +qhp.QtConcurrent.filterAttributes = qtconcurrent 5.0.0 qtrefdoc +qhp.QtConcurrent.customFilters.Qt.name = QtConcurrent 5.0.0 +qhp.QtConcurrent.customFilters.Qt.filterAttributes = qtconcurrent 5.0.0 +qhp.QtConcurrent.subprojects = classes overviews examples +qhp.QtConcurrent.subprojects.classes.title = Classes +qhp.QtConcurrent.subprojects.classes.indexTitle = Qt Concurrent's Classes +qhp.QtConcurrent.subprojects.classes.selectors = class fake:headerfile +qhp.QtConcurrent.subprojects.classes.sortPages = true +qhp.QtConcurrent.subprojects.overviews.title = Overviews +qhp.QtConcurrent.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtConcurrent.subprojects.overviews.selectors = fake:page,group,module +qhp.QtConcurrent.subprojects.examples.title = Qt Concurrent Examples +qhp.QtConcurrent.subprojects.examples.indexTitle = Qt Concurrent Examples +qhp.QtConcurrent.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qtconcurrent +tagfile = ../../../doc/qtconcurrent/qtconcurrent.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qfuture.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qfuture.cpp diff --git a/doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qfuturesynchronizer.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qfuturesynchronizer.cpp diff --git a/doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qfuturewatcher.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qfuturewatcher.cpp diff --git a/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp diff --git a/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentfilter.cpp diff --git a/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentmap.cpp diff --git a/doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentrun.cpp similarity index 100% rename from doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp rename to src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentrun.cpp diff --git a/src/concurrent/qfuture.cpp b/src/concurrent/qfuture.cpp index 9805454cb28..f8151f32280 100644 --- a/src/concurrent/qfuture.cpp +++ b/src/concurrent/qfuture.cpp @@ -374,7 +374,7 @@ QFuture::constBegin() or QFuture::constEnd() before you start iterating. Here's a typical loop that prints all the results available in a future: - \snippet doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp 0 + \snippet code/src_concurrent_qfuture.cpp 0 \sa QFutureIterator, QFuture */ @@ -555,7 +555,7 @@ list (i.e. before the first result). Here's how to iterate over all the results sequentially: - \snippet doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp 1 + \snippet code/src_concurrent_qfuture.cpp 1 The next() function returns the next result (waiting for it to become available, if necessary) from the future and advances the iterator. Unlike @@ -570,7 +570,7 @@ Here's how to iterate over the elements in reverse order: - \snippet doc/src/snippets/code/src_corelib_concurrent_qfuture.cpp 2 + \snippet code/src_concurrent_qfuture.cpp 2 If you want to find all occurrences of a particular value, use findNext() or findPrevious() in a loop. diff --git a/src/concurrent/qfuturesynchronizer.cpp b/src/concurrent/qfuturesynchronizer.cpp index 34b00daf4fe..3bb81e06c4d 100644 --- a/src/concurrent/qfuturesynchronizer.cpp +++ b/src/concurrent/qfuturesynchronizer.cpp @@ -57,7 +57,7 @@ an easy way to ensure that all futures have finished before returning from a function: - \snippet doc/src/snippets/code/src_corelib_concurrent_qfuturesynchronizer.cpp 0 + \snippet code/src_concurrent_qfuturesynchronizer.cpp 0 The behavior of waitForFinished() can be changed using the setCancelOnWait() function. Calling setCancelOnWait(true) will cause diff --git a/src/concurrent/qfuturewatcher.cpp b/src/concurrent/qfuturewatcher.cpp index 9153fe5d406..eb5fb0e18d5 100644 --- a/src/concurrent/qfuturewatcher.cpp +++ b/src/concurrent/qfuturewatcher.cpp @@ -86,7 +86,7 @@ QT_BEGIN_NAMESPACE Example: Starting a computation and getting a slot callback when it's finished: - \snippet doc/src/snippets/code/src_corelib_concurrent_qfuturewatcher.cpp 0 + \snippet code/src_concurrent_qfuturewatcher.cpp 0 Be aware that not all asynchronous computations can be canceled or paused. For example, the future returned by QtConcurrent::run() cannot be diff --git a/src/concurrent/qtconcurrentexception.cpp b/src/concurrent/qtconcurrentexception.cpp index 57eb604d39c..a13ddb3173c 100644 --- a/src/concurrent/qtconcurrentexception.cpp +++ b/src/concurrent/qtconcurrentexception.cpp @@ -56,12 +56,12 @@ QT_BEGIN_NAMESPACE boundaries, provided that the exception inherit from QtConcurrent::Exception and implement two helper functions: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp 0 + \snippet code/src_concurrent_qtconcurrentexception.cpp 0 QtConcurrent::Exception subclasses must be thrown by value and caught by reference: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp 1 + \snippet code/src_concurrent_qtconcurrentexception.cpp 1 If you throw an exception that is not a subclass of QtConcurrent::Exception, the Qt Concurrent functions will throw a QtConcurrent::UnhandledException @@ -80,14 +80,14 @@ QT_BEGIN_NAMESPACE \fn QtConcurrent::Exception::raise() const In your QtConcurrent::Exception subclass, reimplement raise() like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp 2 + \snippet code/src_concurrent_qtconcurrentexception.cpp 2 */ /*! \fn QtConcurrent::Exception::clone() const In your QtConcurrent::Exception subclass, reimplement clone() like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentexception.cpp 3 + \snippet code/src_concurrent_qtconcurrentexception.cpp 3 */ /*! diff --git a/src/concurrent/qtconcurrentfilter.cpp b/src/concurrent/qtconcurrentfilter.cpp index 76ce8ca659d..8a87af28688 100644 --- a/src/concurrent/qtconcurrentfilter.cpp +++ b/src/concurrent/qtconcurrentfilter.cpp @@ -60,7 +60,7 @@ result instead of a QFuture. You use them in the same way as the asynchronous variants. - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 6 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 6 Note that the result types above are not QFuture objects, but real result types (in this case, QStringList and QSet). @@ -73,7 +73,7 @@ The filter function must be of the form: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 0 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 0 T must match the type stored in the sequence. The function returns true if the item should be kept, false if it should be discarded. @@ -81,7 +81,7 @@ This example shows how to keep strings that are all lower-case from a QStringList: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 1 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 1 The results of the filter are made available through QFuture. See the QFuture and QFutureWatcher documentation for more information on how to @@ -89,7 +89,7 @@ If you want to modify a sequence in-place, use QtConcurrent::filter(): - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 2 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 2 Since the sequence is modified in place, QtConcurrent::filter() does not return any results via QFuture. However, you can still use QFuture and @@ -103,7 +103,7 @@ The reduce function must be of the form: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 3 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 3 T is the type of the final result, U is the type of items being filtered. Note that the return value and return type of the reduce function are not @@ -111,7 +111,7 @@ Call QtConcurrent::filteredReduced() like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 4 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 4 The reduce function will be called once for each result kept by the filter function, and should merge the \e{intermediate} into the \e{result} @@ -128,7 +128,7 @@ instead of a sequence. You use them in the same way as the sequence variants: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 5 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 5 \section2 Using Member Functions @@ -137,12 +137,12 @@ QtConcurrent::filteredReduced() accept pointers to member functions. The member function class type must match the type stored in the sequence: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 7 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 7 Note that when using QtConcurrent::filteredReduced(), you can mix the use of normal and member functions freely: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 8 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 8 \section2 Using Function Objects @@ -151,7 +151,7 @@ add state to a function call. The result_type typedef must define the result type of the function call operator: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 13 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 13 \section2 Using Bound Function Arguments @@ -167,7 +167,7 @@ As an example, we use QString::contains(): - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 9 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 9 QString::contains() takes 2 arguments (including the "this" pointer) and can't be used with QtConcurrent::filtered() directly, because @@ -175,17 +175,17 @@ use QString::contains() with QtConcurrent::filtered() we have to provide a value for the \e regexp argument: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 10 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 10 The return value from boost::bind() is a function object (functor) with the following signature: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 11 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 11 This matches what QtConcurrent::filtered() expects, and the complete example becomes: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 12 + \snippet code/src_concurrent_qtconcurrentfilter.cpp 12 */ /*! diff --git a/src/concurrent/qtconcurrentmap.cpp b/src/concurrent/qtconcurrentmap.cpp index 1758cb9e955..c4460643274 100644 --- a/src/concurrent/qtconcurrentmap.cpp +++ b/src/concurrent/qtconcurrentmap.cpp @@ -95,7 +95,7 @@ the final result instead of a QFuture. You use them in the same way as the asynchronous variants. - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 7 + \snippet code/src_concurrent_qtconcurrentmap.cpp 7 Note that the result types above are not QFuture objects, but real result types (in this case, QList and QImage). @@ -108,7 +108,7 @@ The map function must be of the form: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 0 + \snippet code/src_concurrent_qtconcurrentmap.cpp 0 T and U can be any type (and they can even be the same type), but T must match the type stored in the sequence. The function returns the modified @@ -117,7 +117,7 @@ This example shows how to apply a scale function to all the items in a sequence: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 1 + \snippet code/src_concurrent_qtconcurrentmap.cpp 1 The results of the map are made available through QFuture. See the QFuture and QFutureWatcher documentation for more information on how to @@ -126,14 +126,14 @@ If you want to modify a sequence in-place, use QtConcurrent::map(). The map function must then be of the form: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 2 + \snippet code/src_concurrent_qtconcurrentmap.cpp 2 Note that the return value and return type of the map function are not used. Using QtConcurrent::map() is similar to using QtConcurrent::mapped(): - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 3 + \snippet code/src_concurrent_qtconcurrentmap.cpp 3 Since the sequence is modified in place, QtConcurrent::map() does not return any results via QFuture. However, you can still use QFuture and @@ -147,7 +147,7 @@ The reduce function must be of the form: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 4 + \snippet code/src_concurrent_qtconcurrentmap.cpp 4 T is the type of the final result, U is the return type of the map function. Note that the return value and return type of the reduce @@ -155,7 +155,7 @@ Call QtConcurrent::mappedReduced() like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 5 + \snippet code/src_concurrent_qtconcurrentmap.cpp 5 The reduce function will be called once for each result returned by the map function, and should merge the \e{intermediate} into the \e{result} @@ -175,7 +175,7 @@ instead of a sequence. You use them in the same way as the sequence variants: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 6 + \snippet code/src_concurrent_qtconcurrentmap.cpp 6 \section2 Blocking Variants @@ -183,7 +183,7 @@ the final result instead of a QFuture. You use them in the same way as the asynchronous variants. - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 7 + \snippet code/src_concurrent_qtconcurrentmap.cpp 7 Note that the result types above are not QFuture objects, but real result types (in this case, QList and QImage). @@ -194,12 +194,12 @@ QtConcurrent::mappedReduced() accept pointers to member functions. The member function class type must match the type stored in the sequence: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 8 + \snippet code/src_concurrent_qtconcurrentmap.cpp 8 Note that when using QtConcurrent::mappedReduced(), you can mix the use of normal and member functions freely: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 9 + \snippet code/src_concurrent_qtconcurrentmap.cpp 9 \section2 Using Function Objects @@ -208,7 +208,7 @@ add state to a function call. The result_type typedef must define the result type of the function call operator: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 14 + \snippet code/src_concurrent_qtconcurrentmap.cpp 14 \section2 Using Bound Function Arguments @@ -224,7 +224,7 @@ As an example, we'll use QImage::scaledToWidth(): - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 10 + \snippet code/src_concurrent_qtconcurrentmap.cpp 10 scaledToWidth takes three arguments (including the "this" pointer) and can't be used with QtConcurrent::mapped() directly, because @@ -232,17 +232,17 @@ QImage::scaledToWidth() with QtConcurrent::mapped() we have to provide a value for the \e{width} and the \e{transformation mode}: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 11 + \snippet code/src_concurrent_qtconcurrentmap.cpp 11 The return value from boost::bind() is a function object (functor) with the following signature: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 12 + \snippet code/src_concurrent_qtconcurrentmap.cpp 12 This matches what QtConcurrent::mapped() expects, and the complete example becomes: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentmap.cpp 13 + \snippet code/src_concurrent_qtconcurrentmap.cpp 13 */ /*! diff --git a/src/concurrent/qtconcurrentrun.cpp b/src/concurrent/qtconcurrentrun.cpp index 656ecf73706..2cf46ac5a1c 100644 --- a/src/concurrent/qtconcurrentrun.cpp +++ b/src/concurrent/qtconcurrentrun.cpp @@ -57,7 +57,7 @@ To run a function in another thread, use QtConcurrent::run(): - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 0 + \snippet code/src_concurrent_qtconcurrentrun.cpp 0 This will run \e aFunction in a separate thread obtained from the default QThreadPool. You can use the QFuture and QFutureWatcher classes to monitor @@ -68,7 +68,7 @@ Passing arguments to the function is done by adding them to the QtConcurrent::run() call immediately after the function name. For example: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 1 + \snippet code/src_concurrent_qtconcurrentrun.cpp 1 A copy of each argument is made at the point where QtConcurrent::run() is called, and these values are passed to the thread when it begins executing @@ -79,11 +79,11 @@ Any return value from the function is available via QFuture: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 2 + \snippet code/src_concurrent_qtconcurrentrun.cpp 2 As documented above, passing arguments is done like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 3 + \snippet code/src_concurrent_qtconcurrentrun.cpp 3 Note that the QFuture::result() function blocks and waits for the result to become available. Use QFutureWatcher to get notification when the @@ -102,11 +102,11 @@ For example, calling QByteArray::split() (a const member function) in a separate thread is done like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 4 + \snippet code/src_concurrent_qtconcurrentrun.cpp 4 Calling a non-const member function is done like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 5 + \snippet code/src_concurrent_qtconcurrentrun.cpp 5 \section2 Using Bound Function Arguments @@ -131,7 +131,7 @@ Calling a bound function is done like this: - \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentrun.cpp 6 + \snippet code/src_concurrent_qtconcurrentrun.cpp 6 */ /*! From 3b8e6027c2f79bde70f9415f0757df073ef75702 Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Mon, 7 May 2012 14:03:02 +0200 Subject: [PATCH 05/13] Doc: Modularize QtDBus documentation and add missing file to QtNetwork. This change moves the snippets and images to the modularized directories. Change-Id: Idacff866735d00b048d65318bc4c3ee1dfa16310 Reviewed-by: Marius Storm-Olsen --- src/dbus/doc/qtdbus.qdocconf | 92 ++++ .../snippets/code/doc_src_introtodbus.qdoc | 48 ++ .../snippets/code/doc_src_qdbusadaptors.cpp | 293 +++++++++++ src/dbus/doc/snippets/code/doc_src_qtdbus.cpp | 43 ++ src/dbus/doc/snippets/code/doc_src_qtdbus.pro | 43 ++ .../code/src_qdbus_qdbusabstractinterface.cpp | 0 .../snippets/code/src_qdbus_qdbusargument.cpp | 0 .../snippets/code/src_qdbus_qdbuscontext.cpp | 0 .../code/src_qdbus_qdbusinterface.cpp | 0 .../snippets/code/src_qdbus_qdbusmetatype.cpp | 0 .../code/src_qdbus_qdbuspendingcall.cpp | 0 .../code/src_qdbus_qdbuspendingreply.cpp | 0 .../snippets/code/src_qdbus_qdbusreply.cpp | 0 .../qdbusextratypes/qdbusextratypes.cpp | 0 src/dbus/doc/src/dbus-adaptors.qdoc | 481 ++++++++++++++++++ src/dbus/doc/src/dbus-intro.qdoc | 215 ++++++++ src/dbus/doc/src/qdbusxml2cpp.qdoc | 49 ++ .../src/dbus => src/dbus/doc/src}/qtdbus.qdoc | 6 +- src/dbus/qdbusabstractinterface.cpp | 4 +- src/dbus/qdbusargument.cpp | 22 +- src/dbus/qdbuscontext.cpp | 2 +- src/dbus/qdbusextratypes.cpp | 4 +- src/dbus/qdbusinterface.cpp | 2 +- src/dbus/qdbusmetatype.cpp | 2 +- src/dbus/qdbuspendingcall.cpp | 4 +- src/dbus/qdbuspendingreply.cpp | 8 +- src/dbus/qdbusreply.cpp | 4 +- .../doc}/snippets/code/doc_src_qtnetwork.cpp | 0 .../doc}/snippets/code/doc_src_qtnetwork.pro | 0 .../network/doc/src}/qtnetwork.qdoc | 4 +- src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp | 21 - 31 files changed, 1294 insertions(+), 53 deletions(-) create mode 100644 src/dbus/doc/qtdbus.qdocconf create mode 100644 src/dbus/doc/snippets/code/doc_src_introtodbus.qdoc create mode 100644 src/dbus/doc/snippets/code/doc_src_qdbusadaptors.cpp create mode 100644 src/dbus/doc/snippets/code/doc_src_qtdbus.cpp create mode 100644 src/dbus/doc/snippets/code/doc_src_qtdbus.pro rename {doc/src => src/dbus/doc}/snippets/code/src_qdbus_qdbusabstractinterface.cpp (100%) rename {doc/src => src/dbus/doc}/snippets/code/src_qdbus_qdbusargument.cpp (100%) rename {doc/src => src/dbus/doc}/snippets/code/src_qdbus_qdbuscontext.cpp (100%) rename {doc/src => src/dbus/doc}/snippets/code/src_qdbus_qdbusinterface.cpp (100%) rename {doc/src => src/dbus/doc}/snippets/code/src_qdbus_qdbusmetatype.cpp (100%) rename doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp => src/dbus/doc/snippets/code/src_qdbus_qdbuspendingcall.cpp (100%) rename doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp => src/dbus/doc/snippets/code/src_qdbus_qdbuspendingreply.cpp (100%) rename {doc/src => src/dbus/doc}/snippets/code/src_qdbus_qdbusreply.cpp (100%) rename {doc/src => src/dbus/doc}/snippets/qdbusextratypes/qdbusextratypes.cpp (100%) create mode 100644 src/dbus/doc/src/dbus-adaptors.qdoc create mode 100644 src/dbus/doc/src/dbus-intro.qdoc create mode 100644 src/dbus/doc/src/qdbusxml2cpp.qdoc rename {doc/src/dbus => src/dbus/doc/src}/qtdbus.qdoc (92%) rename {doc/src => src/network/doc}/snippets/code/doc_src_qtnetwork.cpp (100%) rename {doc/src => src/network/doc}/snippets/code/doc_src_qtnetwork.pro (100%) rename {doc/src/network => src/network/doc/src}/qtnetwork.qdoc (90%) diff --git a/src/dbus/doc/qtdbus.qdocconf b/src/dbus/doc/qtdbus.qdocconf new file mode 100644 index 00000000000..d33c4370a34 --- /dev/null +++ b/src/dbus/doc/qtdbus.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtDBus +description = Qt DBus Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qtdbus +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtDBus + +qhp.QtDBus.file = qtdbus.qhp +qhp.QtDBus.namespace = org.qt-project.qtdbus.500 +qhp.QtDBus.virtualFolder = qdoc +qhp.QtDBus.indexTitle = Qt DBus Reference Documentation +qhp.QtDBus.indexRoot = + +qhp.QtDBus.filterAttributes = qtdbus 5.0.0 qtrefdoc +qhp.QtDBus.customFilters.Qt.name = QtDBus 5.0.0 +qhp.QtDBus.customFilters.Qt.filterAttributes = qtdbus 5.0.0 +qhp.QtDBus.subprojects = classes overviews examples +qhp.QtDBus.subprojects.classes.title = Classes +qhp.QtDBus.subprojects.classes.indexTitle = Qt DBus' Classes +qhp.QtDBus.subprojects.classes.selectors = class fake:headerfile +qhp.QtDBus.subprojects.classes.sortPages = true +qhp.QtDBus.subprojects.overviews.title = Overviews +qhp.QtDBus.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtDBus.subprojects.overviews.selectors = fake:page,group,module +qhp.QtDBus.subprojects.examples.title = Qt DBus Examples +qhp.QtDBus.subprojects.examples.indexTitle = Qt DBus Examples +qhp.QtDBus.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qtdbus +tagfile = ../../../doc/qtdbus/qtdbus.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/src/dbus/doc/snippets/code/doc_src_introtodbus.qdoc b/src/dbus/doc/snippets/code/doc_src_introtodbus.qdoc new file mode 100644 index 00000000000..5d8833cb168 --- /dev/null +++ b/src/dbus/doc/snippets/code/doc_src_introtodbus.qdoc @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +org.freedesktop.DBus +//! [0] + +//! [QDBUS_DEBUG] +examples/dbus/remotecontrolledcar/controller/controller & +QDBUS_DEBUG=1 examples/dbus/remotecontrolledcar/car/car & +//! [QDBUS_DEBUG] diff --git a/src/dbus/doc/snippets/code/doc_src_qdbusadaptors.cpp b/src/dbus/doc/snippets/code/doc_src_qdbusadaptors.cpp new file mode 100644 index 00000000000..279c10f1e62 --- /dev/null +++ b/src/dbus/doc/snippets/code/doc_src_qdbusadaptors.cpp @@ -0,0 +1,293 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MainApplicationAdaptor: public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.kde.DBus.MainApplication") + Q_PROPERTY(QString caption READ caption WRITE setCaption) + Q_PROPERTY(QString organizationName READ organizationName) + Q_PROPERTY(QString organizationDomain READ organizationDomain) + +private: + QApplication *app; + +public: + MainApplicationAdaptor(QApplication *application) + : QDBusAbstractAdaptor(application), app(application) + { + connect(application, SIGNAL(aboutToQuit()), SIGNAL(aboutToQuit())); + connect(application, SIGNAL(focusChanged(QWidget*, QWidget*)), + SLOT(focusChangedSlot(QWidget*, QWidget*))); + } + + QString caption() + { + if (app->hasMainWindow()) + return app->mainWindow()->caption(); + return QString(""); // must not return a null QString + } + + void setCaption(const QString &newCaption) + { + if (app->hasMainWindow()) + app->mainWindow()->setCaption(newCaption); + } + + QString organizationName() + { + return app->organizationName(); + } + + QString organizationDomain() + { + return app->organizationDomain(); + } + +public slots: + Q_NOREPLY void quit() + { app->quit(); } + + void reparseConfiguration() + { app->reparseConfiguration(); } + + QString mainWindowObject() + { + if (app->hasMainWindow()) + return QString("/%1/mainwindow").arg(app->applicationName()); + return QString(); + } + + void setSessionManagement(bool enable) + { + if (enable) + app->enableSessionManagement(); + else + app->disableSessionManagement(); + } + +private slots: + void focusChangedSlot(QWidget *, QWidget *now) + { + if (now == app->mainWindow()) + emit mainWindowHasFocus(); + } + +signals: + void aboutToQuit(); + void mainWindowHasFocus(); +}; +//! [0] + + +//! [1] +interface org.kde.DBus.MainApplication +{ + property readwrite STRING caption + property read STRING organizationName + property read STRING organizationDomain + + method quit() annotation("org.freedesktop.DBus.Method.NoReply", "true") + method reparseConfiguration() + method mainWindowObject(out STRING) + method disableSessionManagement(in BOOLEAN enable) + + signal aboutToQuit() + signal mainWindowHasFocus() +} +//! [1] + + +//! [2] +int main(int argc, char **argv) +{ + // create the QApplication object + QApplication app(argc, argv); + + // create the MainApplication adaptor: + new MainApplicationAdaptor(app); + + // connect to D-Bus and register as an object: + QDBusConnection::sessionBus().registerObject("/MainApplication", app); + + // add main window, etc. + [...] + + app.exec(); +} +//! [2] + + +//! [3] +class MainApplicationAdaptor: public QDBusAbstractAdaptor +{ + Q_OBJECT + Q_CLASSINFO("D-Bus Interface", "org.kde.DBus.MainApplication") +//! [3] + + +//! [4] + Q_PROPERTY(QString caption READ caption WRITE setCaption) + Q_PROPERTY(QString organizationName READ organizationName) + Q_PROPERTY(QString organizationDomain READ organizationDomain) +//! [4] + + +//! [5] +QString caption() +{ + if (app->hasMainWindow()) + return app->mainWindow()->caption(); + return QString(); +} + +void setCaption(const QString &newCaption) +{ + if (app->hasMainWindow()) + app->mainWindow()->setCaption(newCaption); +} + +QString organizationName() +{ + return app->organizationName(); +} + +QString organizationDomain() +{ + return app->organizationDomain(); +} +//! [5] + + +//! [6] +MyInterfaceAdaptor(QApplication *application) + : QDBusAbstractAdaptor(application), app(application) +{ + connect(application, SIGNAL(aboutToQuit()), SIGNAL(aboutToQuit()); + connect(application, SIGNAL(focusChanged(QWidget*, QWidget*)), + SLOT(focusChangedSlot(QWidget*, QWidget*))); +} +//! [6] + + +//! [7] +public slots: + Q_NOREPLY void quit() + { app->quit(); } + + void reparseConfiguration() + { app->reparseConfiguration(); } + + QString mainWindowObject() + { + if (app->hasMainWindow()) + return QString("/%1/mainwindow").arg(app->applicationName()); + return QString(); + } + + void setSessionManagement(bool enable) + { + if (enable) + app->enableSessionManagement(); + else + app->disableSessionManagement(); + } +//! [7] + + +//! [8] +signals: + void aboutToQuit(); + void mainWindowHasFocus(); +//! [8] + + +//! [9] +private slots: + void focusChangedSlot(QWidget *, QWidget *now) + { + if (now == app->mainWindow()) + emit mainWindowHasFocus(); + } +//! [9] + + +//! [10] +struct RequestData +{ + QString request; + QString processedData; + QDBusMessage reply; +}; + +QString processRequest(const QString &request, const QDBusMessage &message) +{ + RequestData *data = new RequestData; + data->request = request; + message.setDelayedReply(true); + data->reply = message.createReply(); + QDBusConnection::sessionBus().send(data->reply); + + appendRequest(data); + return QString(); +} +//! [10] + + +//! [11] +void sendReply(RequestData *data) +{ + // data->processedData has been initialized with the request's reply + QDBusMessage &reply = &data->reply; + + // send the reply over D-Bus: + reply << data->processedData; + QDBusConnection::sessionBus().send(reply); + + // dispose of the transaction data + delete data; +} +//! [11] + + +//! [12] +Q_NOREPLY void myMethod(); +//! [12] diff --git a/src/dbus/doc/snippets/code/doc_src_qtdbus.cpp b/src/dbus/doc/snippets/code/doc_src_qtdbus.cpp new file mode 100644 index 00000000000..65fc2e716b8 --- /dev/null +++ b/src/dbus/doc/snippets/code/doc_src_qtdbus.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +#include +//! [0] diff --git a/src/dbus/doc/snippets/code/doc_src_qtdbus.pro b/src/dbus/doc/snippets/code/doc_src_qtdbus.pro new file mode 100644 index 00000000000..d0e6c0e837c --- /dev/null +++ b/src/dbus/doc/snippets/code/doc_src_qtdbus.pro @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [1] +QT += dbus +#! [1] diff --git a/doc/src/snippets/code/src_qdbus_qdbusabstractinterface.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbusabstractinterface.cpp similarity index 100% rename from doc/src/snippets/code/src_qdbus_qdbusabstractinterface.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbusabstractinterface.cpp diff --git a/doc/src/snippets/code/src_qdbus_qdbusargument.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp similarity index 100% rename from doc/src/snippets/code/src_qdbus_qdbusargument.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbusargument.cpp diff --git a/doc/src/snippets/code/src_qdbus_qdbuscontext.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp similarity index 100% rename from doc/src/snippets/code/src_qdbus_qdbuscontext.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbuscontext.cpp diff --git a/doc/src/snippets/code/src_qdbus_qdbusinterface.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbusinterface.cpp similarity index 100% rename from doc/src/snippets/code/src_qdbus_qdbusinterface.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbusinterface.cpp diff --git a/doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbusmetatype.cpp similarity index 100% rename from doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbusmetatype.cpp diff --git a/doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbuspendingcall.cpp similarity index 100% rename from doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbuspendingcall.cpp diff --git a/doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbuspendingreply.cpp similarity index 100% rename from doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbuspendingreply.cpp diff --git a/doc/src/snippets/code/src_qdbus_qdbusreply.cpp b/src/dbus/doc/snippets/code/src_qdbus_qdbusreply.cpp similarity index 100% rename from doc/src/snippets/code/src_qdbus_qdbusreply.cpp rename to src/dbus/doc/snippets/code/src_qdbus_qdbusreply.cpp diff --git a/doc/src/snippets/qdbusextratypes/qdbusextratypes.cpp b/src/dbus/doc/snippets/qdbusextratypes/qdbusextratypes.cpp similarity index 100% rename from doc/src/snippets/qdbusextratypes/qdbusextratypes.cpp rename to src/dbus/doc/snippets/qdbusextratypes/qdbusextratypes.cpp diff --git a/src/dbus/doc/src/dbus-adaptors.qdoc b/src/dbus/doc/src/dbus-adaptors.qdoc new file mode 100644 index 00000000000..a41c874c8cc --- /dev/null +++ b/src/dbus/doc/src/dbus-adaptors.qdoc @@ -0,0 +1,481 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page usingadaptors.html + \title Using QtDBus Adaptors + \brief How to create and use DBus adaptors in Qt. + + \ingroup best-practices + + Adaptors are special classes that are attached to any QObject-derived class + and provide the interface to the external world using D-Bus. Adaptors are + intended to be lightweight classes whose main purpose is to relay calls to + and from the real object, possibly validating or converting the input from + the external world and, thus, protecting the real object. + + Unlike multiple inheritance, adaptors can be added at any time to any object + (but not removed), which allows for greater flexibility when exporting + existing classes. Another advantage of adaptors is to provide similar but not + identical functionality in methods of the same name in different interfaces, + a case which can be quite common when adding a new version of a standard + interface to an object. + + In order to use an adaptor, one must create a class which inherits + QDBusAbstractAdaptor. Since that is a standard QObject-derived class, the + Q_OBJECT macro must appear in the declaration and the source file must be + processed with the \l {moc} tool. The class must also contain one + Q_CLASSINFO entry with the \c {"D-Bus Interface"} name, declaring which + interface it is exporting. Only one entry per class is supported. + + Any public slot in the class will be accessible through the bus over messages + of the MethodCall type. (See \l {Declaring Slots in D-Bus Adaptors} for more + information). Signals in the class will be automatically relayed over D-Bus. + However, not all types are allowed signals or slots' parameter lists: see + \l {The QtDBus Type System} for more information. + + Also, any property declared with Q_PROPERTY will be automatically exposed + over the Properties interface on D-Bus. Since the QObject property system + does not allow for non-readable properties, it is not possible to declare + write-only properties using adaptors. + + More information: + \list + \li \l{Declaring Slots in D-Bus Adaptors} + \li \l{Declaring Signals in D-Bus Adaptors} + \li \l{The QtDBus Type System} + \li \l{D-Bus Adaptor Example} + \endlist + + \sa QDBusAbstractAdaptor +*/ + +/*! + \page qdbusadaptorexample.html + \title D-Bus Adaptor Example + + \previouspage The QtDBus Type System + \contentspage Using QtDBus Adaptors + + The following example code shows how a D-Bus interface can be implemented + using an adaptor. + + A sample usage of QDBusAbstractAdaptor is as follows: + \snippet code/doc_src_qdbusadaptors.cpp 0 + + The code above would create an interface that could be represented more or less in the following + canonical representation: + \snippet code/doc_src_qdbusadaptors.cpp 1 + + This adaptor could be used in the application's main function as follows + \snippet code/doc_src_qdbusadaptors.cpp 2 + + Break-down analysis: + \tableofcontents + + \section1 The header + + The header of the example is: + \snippet code/doc_src_qdbusadaptors.cpp 3 + + The code does the following: + \list + \li it declares the adaptor MainApplicationAdaptor, which descends from QDBusAbstractAdaptor + \li it declares the Qt meta-object data using the Q_OBJECT macro + \li it declares the name of the D-Bus interface it implements. + \endlist + + \section1 The properties + + The properties are declared as follows: + \snippet code/doc_src_qdbusadaptors.cpp 4 + + And are implemented as follows: + \snippet code/doc_src_qdbusadaptors.cpp 5 + + The code declares three properties: one of them is a read-write property called "caption" of + string type. The other two are read-only, also of the string type. + + The properties organizationName and organizationDomain are simple relays of the app object's + organizationName and organizationDomain properties. However, the caption property requires + verifying if the application has a main window associated with it: if there isn't any, the + caption property is empty. Note how it is possible to access data defined in other objects + through the getter/setter functions. + + \section1 The constructor + + The constructor: + \snippet code/doc_src_qdbusadaptors.cpp 6 + + The constructor does the following: + \list + \li it initialises its base class (QDBusAbstractAdaptor) with the parent object it is related to. + \li it stores the app pointer in a member variable. Note that it would be possible to access the + same object using the QDBusAbstractAdaptor::object() function, but it would be necessary to + use \a static_cast<> to properly access the methods in QApplication that are not part of + QObject. + \li it connects the application's signal \a aboutToQuit to its own signal \a aboutToQuit. + \li it connects the application's signal \a focusChanged to a private slot to do some further + processing before emitting a D-Bus signal. + \endlist + + Note that there is no destructor in the example. An eventual destructor could be used to emit + one last signal before the object is destroyed, for instance. + + \section1 Slots/methods + + The public slots in the example (which will be exported as D-Bus methods) are the following: + \snippet code/doc_src_qdbusadaptors.cpp 7 + + This snippet of code defines 4 methods with different properties each: + \list 1 + \li \c quit: this method takes no parameters and is defined to be asynchronous. That is, callers + are expected to use "fire-and-forget" mechanism when calling this method, since it provides no + useful reply. This is represented in D-Bus by the use of the + org.freedesktop.DBus.Method.NoReply annotation. See \l Q_NOREPLY for more information on + asynchronous methods + + \li \c reparseConfiguration: this simple method, with no input or output arguments simply relays + the call to the application's reparseConfiguration member function. + + \li \c mainWindowObject: this method takes no input parameter, but returns one string output + argument, containing the path to the main window object (if the application has a main + window), or an empty string if it has no main window. Note that this method could have also + been written: void mainWindowObject(QString &path). + + \li \c setSessionManagement: this method takes one input argument (a boolean) and, depending on + its value, it calls one function or another in the application. + \endlist + + See also: \l Q_NOREPLY. + + \section1 Signals + + The signals in this example are defined as follows: + \snippet code/doc_src_qdbusadaptors.cpp 8 + + However, signal definition isn't enough: signals have to be emitted. One simple way of emitting + signals is to connect another signal to them, so that Qt's signal handling system chains them + automatically. This is what is done for the \a aboutToQuit signal. + + When this is the case, one can use the QDBusAbstractAdaptor::setAutoRelaySignals to + automatically connect every signal from the real object to the adaptor. + + When simple signal-to-signal connection isn't enough, one can use a private slot do do some + work. This is what was done for the mainWindowHasFocus signal: + \snippet code/doc_src_qdbusadaptors.cpp 9 + + This private slot (which will not be exported as a method via D-Bus) was connected to the + \c focusChanged signal in the adaptor's constructor. It is therefore able to shape the + application's signal into what the interface expects it to be. +*/ + +/*! + \page qdbusdeclaringslots.html + \title Declaring Slots in D-Bus Adaptors + + \contentspage Using QtDBus Adaptors + \nextpage Declaring Signals in D-Bus Adaptors + + Slots in D-Bus adaptors are declared just like normal, public slots, but their + parameters must follow certain rules (see \l{The QtDBus Type System} for more + information). Slots whose parameters do not follow those rules or that are not + public will not be accessible via D-Bus. + + Slots can have one parameter of type \c{const QDBusMessage &}, which must + appear at the end of the input parameter list, before any output parameters. + This parameter, if present, will be initialized with a copy of the + current message being processed, which allows the callee to obtain + information about the caller, such as its connection name. + + Slots can be of three kinds: + \list 1 + \li Asynchronous + \li Input-only + \li Input-and-output + \endlist + + \section1 Asynchronous Slots + Asynchronous slots are those that do not normally return any reply to the + caller. For that reason, they cannot take any output parameters. In most + cases, by the time the first line of the slot is run, the caller function + has already resumed working. + + However, slots must not rely on that behavior. Scheduling and message-dispatching + issues could change the order in which the slot is run. Code intending to + synchronize with the caller should provide its own method of synchronization. + + Asynchronous slots are marked by the keyword \l Q_NOREPLY in the method + signature, before the \c void return type and the slot name. (See the + \c quit() slot in the \l{D-Bus Adaptor Example}). + + \section1 Input-Only Slots + + Input-only slots are normal slots that take parameters passed by value or + by constant reference. However, unlike asynchronous slots, the caller is + usually waiting for completion of the callee before resuming operation. + Therefore, non-asynchronous slots should not block or should state it its + documentation that they may do so. + + Input-only slots have no special marking in their signature, except that + they take only parameters passed by value or by constant reference. + Optionally, slots can take a QDBusMessage parameter as a last parameter, + which can be used to perform additional analysis of the method call message. + + \section1 Input and Output Slots + + Like input-only slots, input-and-output slots are those that the caller is + waiting for a reply. Unlike input-only ones, though, this reply will contain + data. Slots that output data may contain non-constant references and may + return a value as well. However, the output parameters must all appear at + the end of the argument list and may not have input arguments interleaved. + Optionally, a QDBusMessage argument may appear between the input and the + output arguments. + + \section1 Automatic Replies + + Method replies are generated automatically with the contents of the output + parameters (if there were any) by the QtDBus implementation. Slots need not + worry about constructing proper QDBusMessage objects and sending them over + the connection. + + However, the possibility of doing so remains there. Should the slot find out + it needs to send a special reply or even an error, it can do so by using + QDBusMessage::createReply() or QDBusMessage::createErrorReply() on the + QDBusMessage parameter and send it with QDBusConnection::send(). The + QtDBus implementation will not generate any reply if the slot did so. + + \warning When a caller places a method call and waits for a reply, it will + only wait for a limited amount of time. Slots intending to take a long time + to complete should make that fact clear in documentation so that callers + properly set higher timeouts. + + \section1 Delayed Replies + + In some circumstances, the called slot may not be able to process + the request immediately. This is frequently the case when the + request involves an I/O or networking operation which may block. + + If this is the case, the slot should return control to the + application's main loop to avoid freezing the user interface, and + resume the process later. To accomplish this, it should make use + of the extra \c QDBusMessage parameter at the end of the input + parameter list and request a delayed reply. + + We do this by writing a slot that stores the request data in a + persistent structure, indicating to the caller using + \l{QDBusMessage::setDelayedReply()}{QDBusMessage::setDelayedReply(true)} + that the response will be sent later. + + \snippet code/doc_src_qdbusadaptors.cpp 10 + + The use of + \l{QDBusConnection::send()}{QDBusConnection::sessionBus().send(data->reply)} + is needed to explicitly inform the caller that the response will be delayed. + In this case, the return value is unimportant; we return an arbitrary value + to satisfy the compiler. + + When the request is processed and a reply is available, it should be sent + using the \c QDBusMessage object that was obtained. In our example, the + reply code could be something as follows: + + \snippet code/doc_src_qdbusadaptors.cpp 11 + + As can be seen in the example, when a delayed reply is in place, + the return value(s) from the slot will be ignored by QtDBus. They + are used only to determine the slot's signature when communicating + the adaptor's description to remote applications, or in case the + code in the slot decides not to use a delayed reply. + + The delayed reply itself is requested from QtDBus by calling + QDBusMessage::reply() on the original message. It then becomes the + resposibility of the called code to eventually send a reply to the + caller. + + \warning When a caller places a method call and waits for a reply, it will + only wait for a limited amount of time. Slots intending to take a long time + to complete should make that fact clear in documentation so that callers + properly set higher timeouts. + + \sa {Using QtDBus Adaptors}, {Declaring Signals in D-Bus Adaptors}, + {The QtDBus Type System}, QDBusConnection, QDBusMessage +*/ + +/*! + \page qdbusdeclaringsignals.html + \title Declaring Signals in D-Bus Adaptors + + \previouspage Declaring Slots in D-Bus Adaptors + \contentspage Using QtDBus Adaptors + \nextpage The QtDBus Type System + + Any signal in a class derived from QDBusAbstractAdaptor will be automatically + relayed into D-Bus, provided that the signal's parameters conform to certain + rules (see \l{The QtDBus Type System} for more information). No special code + is necessary to make this relay. + + However, signals must still be emitted. The easiest way to emit an adaptor + signal is to connect another signal to it, so that Qt's signals and slots + mechanism automatically emits the adaptor signal, too. This can be done in + the adaptor's constructor, as has been done in the + \l{D-Bus Adaptor Example}{D-Bus Adaptor example}. + + The QDBusAbstractAdaptor::setAutoRelaySignals() convenience function can also + be used to make and break connections between signals in the real object and + the corresponding signals in the adaptor. It will inspect the list of signals + in both classes and connect those whose parameters match exactly. + + \sa {Using QtDBus Adaptors}, + {Declaring Slots in D-Bus Adaptors}, + {The QtDBus Type System}, QDBusAbstractAdaptor +*/ + +/*! + \page qdbustypesystem.html + \title The QtDBus Type System + + \previouspage Declaring Signals in D-Bus Adaptors + \contentspage Using QtDBus Adaptors + \nextpage D-Bus Adaptor Example + + D-Bus has an extensible type system based on a few primitives and + composition of the primitives in arrays and structures. QtDBus + implements the interface to that type system through the + QDBusArgument class, allowing user programs to send and receive + practically every C++ type over the bus. + + \section1 Primitive Types + + The primitive types are supported natively by QDBusArgument and + need no special customization to be sent or received. They are + listed below, along with the C++ class they relate to: + + \table + \header + \li Qt type + \li D-Bus equivalent type + \row + \li uchar + \li BYTE + \row + \li bool + \li BOOLEAN + \row + \li short + \li INT16 + \row + \li ushort + \li UINT16 + \row + \li int + \li INT32 + \row + \li uint + \li UINT32 + \row + \li qlonglong + \li INT64 + \row + \li qulonglong + \li UINT64 + \row + \li double + \li DOUBLE + \row + \li QString + \li STRING + \row + \li QDBusVariant + \li VARIANT + \row + \li QDBusObjectPath + \li OBJECT_PATH + \row + \li QDBusSignature + \li SIGNATURE + \endtable + + Aside from the primitive types, QDBusArgument also supports two + non-primitive types natively, due to their widespread use in Qt + applications: QStringList and QByteArray. + + \section1 Compound Types + + D-Bus specifies three types of aggregations of primitive types + that allow one to create compound types. They are \c ARRAY, \c + STRUCT and maps/dictionaries. + + Arrays are sets of zero or more elements of the same type, while + structures are a set of a fixed number of elements, each of any + type. Maps or dictionaries are implemented as arrays of a pair of + elements, so there can be zero or more elements in one map. + + \section1 Extending the Type System + + In order to use one's own type with QtDBus, the type has to be + declared as a Qt meta-type with the Q_DECLARE_METATYPE() macro and + registered with the qDBusRegisterMetaType() function. The + streaming operators \c{operator>>} and \c{operator<<} will be + automatically found by the registration system. + + QtDBus provides template specializations for arrays and maps for + use with Qt's \l{Container classes}{container classes}, such as + QMap and QList, so it is not necessary to write the streaming + operator functions for those. For other types, and specially for + types implementing structures, the operators have to be explicitly + implemented. + + See the documentation for QDBusArgument for examples for + structures, arrays and maps. + + \section1 The Type System in Use + + All of the QtDBus types (primitives and user-defined alike) can be + used to send and receive messages of all types over the bus. + + \warning You may not use any type that is not on the list above, + including \a typedefs to the types listed. This also includes + QList and QMap. +*/ + +/*! + \macro Q_NOREPLY + \relates QDBusAbstractAdaptor + \since 4.2 + + The Q_NOREPLY macro can be used to mark a method to be called and not wait for it to finish + processing before returning from QDBusInterface::call(). The called method cannot return any + output arguments and, if it does, any such arguments will be discarded. + + You can use this macro in your own adaptors by placing it before your method's return value + (which must be "void") in the class declaration, as shown in the example: + \snippet code/doc_src_qdbusadaptors.cpp 12 + + Its presence in the method implementation (outside the class declaration) is optional. + + \sa {Using QtDBus Adaptors} +*/ diff --git a/src/dbus/doc/src/dbus-intro.qdoc b/src/dbus/doc/src/dbus-intro.qdoc new file mode 100644 index 00000000000..b3cf29e1294 --- /dev/null +++ b/src/dbus/doc/src/dbus-intro.qdoc @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page intro-to-dbus.html + \title D-Bus + \brief An introduction to Inter-Process Communication and Remote Procedure Calling with D-Bus. + + \keyword QtDBus + \ingroup technology-apis + + \section1 Introduction + + D-Bus is an Inter-Process Communication (IPC) and Remote Procedure + Calling (RPC) mechanism originally developed for Linux to replace + existing and competing IPC solutions with one unified protocol. It + has also been designed to allow communication between system-level + processes (such as printer and hardware driver services) and + normal user processes. + + It uses a fast, binary message-passing protocol, which is suitable + for same-machine communication due to its low latency and low + overhead. Its specification is currently defined by the + \tt{freedesktop.org} project, and is available to all parties. + + Communication in general happens through a central server + application, called the "bus" (hence the name), but direct + application-to-application communication is also possible. When + communicating on a bus, applications can query which other + applications and services are available, as well as activate one + on demand. + + \section1 The Buses + + D-Bus buses are used to when many-to-many communication is + desired. In order to achieve that, a central server is launched + before any applications can connect to the bus: this server is + responsible for keeping track of the applications that are + connected and for properly routing messages from their source to + their destination. + + In addition, D-Bus defines two well-known buses, called the + system bus and the session bus. These buses are special in the + sense that they have well-defined semantics: some services are + defined to be found in one or both of these buses. + + For example, an application wishing to query the list of hardware + devices attached to the computer will probably communicate to a + service available on the system bus, while the service providing + opening of the user's web browser will be probably found on the + session bus. + + On the system bus, one can also expect to find restrictions on + what services each application is allowed to offer. Therefore, one + can be reasonably certain that, if a certain service is present, + it is being offered by a trusted application. + + \section1 Concepts + + \section2 Messages + + On the low level, applications communicate over D-Bus by sending + messages to one another. Messages are used to relay the remote + procedure calls as well as the replies and errors associated + with them. When used over a bus, messages have a destination, + which means they are routed only to the interested parties, + avoiding congestion due to "swarming" or broadcasting. + + A special kind of message called a "signal message" + (a concept based on Qt's \l {Signals and Slots} mechanism), + however, does not have a pre-defined destination. Since its + purpose is to be used in a one-to-many context, signal messages + are designed to work over an "opt-in" mechanism. + + The QtDBus module fully encapsulates the low-level concept of + messages into a simpler, object-oriented approach familiar to Qt + developers. In most cases, the developer need not worry about + sending or receiving messages. + + \section2 Service Names + + When communicating over a bus, applications obtain what is + called a "service name": it is how that application chooses to be + known by other applications on the same bus. The service names + are brokered by the D-Bus bus daemon and are used to + route messages from one application to another. An analogous + concept to service names are IP addresses and hostnames: a + computer normally has one IP address and may have one or more + hostnames associated with it, according to the services that it + provides to the network. + + On the other hand, if a bus is not used, service names are also + not used. If we compare this to a computer network again, this + would equate to a point-to-point network: since the peer is + known, there is no need to use hostnames to find it or its IP + address. + + The format of a D-Bus service name is in fact very similar to a + host name: it is a dot-separated sequence of letters and + digits. The common practice is even to name one's service name + according to the domain name of the organization that defined + that service. + + For example, the D-Bus service is defined by + \tt{freedesktop.org} and can be found on the bus under the + service name: + + \snippet code/doc_src_introtodbus.qdoc 0 + + \section2 Object Paths + + Like network hosts, applications provide specific services to + other applications by exporting objects. Those objects are + hierarchically organised, much like the parent-child + relationship that classes derived from QObject possess. One + difference, however, is that there is the concept of "root + object", that all objects have as ultimate parent. + + If we continue our analogy with Web services, object paths + equate to the path part of a URL: + + \img qurl-ftppath.png + + Like them, object paths in D-Bus are formed resembling path + names on the filesystem: they are slash-separated labels, each + consisting of letters, digits and the underscore character + ("_"). They must always start with a slash and must not end with + one. + + \section2 Interfaces + + Interfaces are similar to C++ abstract classes and Java's + \c interface keyword and declare the "contract" that is + established between caller and callee. That is, they establish + the names of the methods, signals and properties that are + available as well as the behavior that is expected from either + side when communication is established. + + Qt uses a very similar mechanism in its \l {How to Create Qt + Plugins}{Plugin system}: Base classes in C++ are associated + with a unique identifier by way of the Q_DECLARE_INTERFACE() + macro. + + D-Bus interface names are, in fact, named in a manner similar to + what is suggested by the Qt Plugin System: an identifier usually + constructed from the domain name of the entity that defined that + interface. + + \section2 Cheat Sheet + + To facilitate remembering of the naming formats and their + purposes, the following table can be used: + + \table 90% + \header \li D-Bus Concept \li Analogy \li Name format + \row \li Service name \li Network hostnames \li Dot-separated + ("looks like a hostname") + \row \li Object path \li URL path component \li Slash-separated + ("looks like a path") + \row \li Interface \li Plugin identifier \li Dot-separated + \endtable + + \section1 Debugging + + When developing applications that use D-Bus, it is sometimes useful to be able + to see information about the messages that are sent and received across the + bus by each application. + + This feature can be enabled on a per-application basis by setting the + \c QDBUS_DEBUG environment variable before running each application. + For example, we can enable debugging only for the car in the + \l{D-Bus Remote Controlled Car Example} by running the controller and the + car in the following way: + + \snippet code/doc_src_introtodbus.qdoc QDBUS_DEBUG + + Information about the messages will be written to the console the application + was launched from. + + \section1 Further Reading + + The following documents contain information about Qt's D-Bus integration + features, and provide details about the mechanisms used to send and receive + type information over the bus: + + \list + \li \l{Using QtDBus Adaptors} + \li \l{The QtDBus Type System} + \li \l{QtDBus XML compiler (qdbusxml2cpp)} + \endlist +*/ diff --git a/src/dbus/doc/src/qdbusxml2cpp.qdoc b/src/dbus/doc/src/qdbusxml2cpp.qdoc new file mode 100644 index 00000000000..996b5c78207 --- /dev/null +++ b/src/dbus/doc/src/qdbusxml2cpp.qdoc @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qdbusxml2cpp.html + \title QtDBus XML compiler (qdbusxml2cpp) + \keyword qdbusxml2cpp + + The QtDBus XML compiler is a tool that can be used to parse interface descriptions and produce + static code representing those interfaces, which can then be used to make calls to remote + objects or implement said interfaces. + + \c qdbusxml2cpp has two modes of operation, that correspond to the two possible outputs it can + produce: the interface (proxy) class or the adaptor class. The latter consists of both a C++ + header and a source file, which are meant to be edited and adapted to your needs. + + The \c qdbusxml2cpp tool is not meant to be run every time you compile your + application. Instead, it's meant to be used when developing the code or when the interface + changes. + + The adaptor classes generated by \c qdbusxml2cpp are just a skeleton that must be completed. It + generates, by default, calls to slots with the same name on the object the adaptor is attached + to. However, you may modify those slots or the property accessor functions to suit your needs. +*/ + diff --git a/doc/src/dbus/qtdbus.qdoc b/src/dbus/doc/src/qtdbus.qdoc similarity index 92% rename from doc/src/dbus/qtdbus.qdoc rename to src/dbus/doc/src/qtdbus.qdoc index 8039cc040ba..739502e1fc8 100644 --- a/doc/src/dbus/qtdbus.qdoc +++ b/src/dbus/doc/src/qtdbus.qdoc @@ -48,13 +48,13 @@ To use this module, use the following code in your application: - \snippet doc/src/snippets/code/doc_src_qtdbus.cpp 0 + \snippet code/doc_src_qtdbus.cpp 0 If you're using qmake to build your application, you can add this line to your .pro file to make it link against the QtDBus libraries: - \snippet doc/src/snippets/code/doc_src_qtdbus.pro 1 + \snippet code/doc_src_qtdbus.pro 1 \note The source code for this module is located in the \c{src/qdbus} directory. When installing Qt from source, this module is built when Qt's @@ -62,6 +62,4 @@ See the \l {D-Bus} page for detailed information on how to use this module. - - This module is part of all \l{Qt editions}. */ diff --git a/src/dbus/qdbusabstractinterface.cpp b/src/dbus/qdbusabstractinterface.cpp index ea32e6ead65..51b100839c6 100644 --- a/src/dbus/qdbusabstractinterface.cpp +++ b/src/dbus/qdbusabstractinterface.cpp @@ -650,7 +650,7 @@ void QDBusAbstractInterface::internalPropSet(const char *propname, const QVarian It can be used the following way: - \snippet doc/src/snippets/code/src_qdbus_qdbusabstractinterface.cpp 0 + \snippet code/src_qdbus_qdbusabstractinterface.cpp 0 This example illustrates function calling with 0, 1 and 2 parameters and illustrates different parameter types passed in each (the first call to \c "ProcessWorkUnicode" will contain one @@ -742,7 +742,7 @@ QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &m It can be used the following way: - \snippet doc/src/snippets/code/src_qdbus_qdbusabstractinterface.cpp 1 + \snippet code/src_qdbus_qdbusabstractinterface.cpp 1 This example illustrates function calling with 0, 1 and 2 parameters and illustrates different parameter types passed in each (the first call to \c "ProcessWorkUnicode" will contain one diff --git a/src/dbus/qdbusargument.cpp b/src/dbus/qdbusargument.cpp index 6e6e676daec..0969aef83fb 100644 --- a/src/dbus/qdbusargument.cpp +++ b/src/dbus/qdbusargument.cpp @@ -190,13 +190,13 @@ bool QDBusArgumentPrivate::checkReadAndDetach(QDBusArgumentPrivate *&d) integer and a string can be constructed using the \l {qdbustypesystem.html}{QtDBus type system}: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 0 + \snippet code/src_qdbus_qdbusargument.cpp 0 The type has to be registered with qDBusRegisterMetaType() before it can be used with QDBusArgument. Therefore, somewhere in your program, you should add the following code: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 1 + \snippet code/src_qdbus_qdbusargument.cpp 1 Once registered, a type can be used in outgoing method calls (placed with QDBusAbstractInterface::call()), signal emissions @@ -275,11 +275,11 @@ bool QDBusArgumentPrivate::checkReadAndDetach(QDBusArgumentPrivate *&d) Attempts to demarshall the contents of \a argument into the type \c{T}. For example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 2 + \snippet code/src_qdbus_qdbusargument.cpp 2 Note that it is equivalent to the following: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 3 + \snippet code/src_qdbus_qdbusargument.cpp 3 */ /*! @@ -817,12 +817,12 @@ const QDBusArgument &QDBusArgument::operator>>(QByteArray &arg) const This function is used usually in \c{operator<<} streaming operators, as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 4 + \snippet code/src_qdbus_qdbusargument.cpp 4 Structures can contain other structures, so the following code is also valid: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 5 + \snippet code/src_qdbus_qdbusargument.cpp 5 \sa endStructure(), beginArray(), beginMap() */ @@ -850,7 +850,7 @@ void QDBusArgument::endStructure() This function is used usually in \c{operator<<} streaming operators, as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 6 + \snippet code/src_qdbus_qdbusargument.cpp 6 If the type you want to marshall is a QList, QVector or any of the Qt's \l {Container Classes} that take one template parameter, @@ -889,7 +889,7 @@ void QDBusArgument::endArray() This function is used usually in \c{operator<<} streaming operators, as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 7 + \snippet code/src_qdbus_qdbusargument.cpp 7 If the type you want to marshall is a QMap or QHash, you need not declare an \c{operator<<} function for it, since QtDBus provides @@ -948,7 +948,7 @@ void QDBusArgument::endMapEntry() This function is used usually in \c{operator>>} streaming operators, as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 8 + \snippet code/src_qdbus_qdbusargument.cpp 8 \sa endStructure(), beginArray(), beginMap() */ @@ -977,7 +977,7 @@ void QDBusArgument::endStructure() const This function is used usually in \c{operator>>} streaming operators, as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 9 + \snippet code/src_qdbus_qdbusargument.cpp 9 If the type you want to demarshall is a QList, QVector or any of the Qt's \l {Container Classes} that take one template parameter, you @@ -1013,7 +1013,7 @@ void QDBusArgument::endArray() const This function is used usually in \c{operator>>} streaming operators, as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusargument.cpp 10 + \snippet code/src_qdbus_qdbusargument.cpp 10 If the type you want to demarshall is a QMap or QHash, you need not declare an \c{operator>>} function for it, since QtDBus provides diff --git a/src/dbus/qdbuscontext.cpp b/src/dbus/qdbuscontext.cpp index cc987d14107..0a13fce9ee3 100644 --- a/src/dbus/qdbuscontext.cpp +++ b/src/dbus/qdbuscontext.cpp @@ -90,7 +90,7 @@ QDBusContextPrivate *QDBusContextPrivate::set(QObject *obj, QDBusContextPrivate exported using QDBusConnection::registerObject(). The following example illustrates the usage: - \snippet doc/src/snippets/code/src_qdbus_qdbuscontext.cpp 0 + \snippet code/src_qdbus_qdbuscontext.cpp 0 The example illustrates the two typical uses, that of sending error replies and that of delayed replies. diff --git a/src/dbus/qdbusextratypes.cpp b/src/dbus/qdbusextratypes.cpp index 4438e3c65fc..4b2730c44aa 100644 --- a/src/dbus/qdbusextratypes.cpp +++ b/src/dbus/qdbusextratypes.cpp @@ -73,11 +73,11 @@ void QDBusSignature::doCheck() A D-Bus function that takes an integer, a D-Bus variant and a string as parameters can be called with the following argument list (see QDBusMessage::setArguments()): - \snippet doc/src/snippets/qdbusextratypes/qdbusextratypes.cpp 0 + \snippet qdbusextratypes/qdbusextratypes.cpp 0 When a D-Bus function returns a D-Bus variant, it can be retrieved as follows: - \snippet doc/src/snippets/qdbusextratypes/qdbusextratypes.cpp 1 + \snippet qdbusextratypes/qdbusextratypes.cpp 1 The QVariant within a QDBusVariant is required to distinguish between a normal D-Bus value and a value within a D-Bus variant. diff --git a/src/dbus/qdbusinterface.cpp b/src/dbus/qdbusinterface.cpp index f6a84b99800..844b0b7a4c6 100644 --- a/src/dbus/qdbusinterface.cpp +++ b/src/dbus/qdbusinterface.cpp @@ -196,7 +196,7 @@ QDBusInterfacePrivate::~QDBusInterfacePrivate() mathematical operation of \tt{"2 + 2"} in a remote application called \c com.example.Calculator, accessed via the session bus. - \snippet doc/src/snippets/code/src_qdbus_qdbusinterface.cpp 0 + \snippet code/src_qdbus_qdbusinterface.cpp 0 \sa {QtDBus XML compiler (qdbusxml2cpp)} */ diff --git a/src/dbus/qdbusmetatype.cpp b/src/dbus/qdbusmetatype.cpp index 0359b4da35c..03cad1ee637 100644 --- a/src/dbus/qdbusmetatype.cpp +++ b/src/dbus/qdbusmetatype.cpp @@ -200,7 +200,7 @@ Q_GLOBAL_STATIC(QReadWriteLock, customTypesLock) Q_DECLARE_METATYPE() macro, and then registered as in the following example: - \snippet doc/src/snippets/code/src_qdbus_qdbusmetatype.cpp 0 + \snippet code/src_qdbus_qdbusmetatype.cpp 0 If \c{T} isn't a type derived from one of Qt's \l{container classes}, the \c{operator<<} and diff --git a/src/dbus/qdbuspendingcall.cpp b/src/dbus/qdbuspendingcall.cpp index 9659afa2e5c..dfd31242ccd 100644 --- a/src/dbus/qdbuspendingcall.cpp +++ b/src/dbus/qdbuspendingcall.cpp @@ -97,7 +97,7 @@ QT_BEGIN_NAMESPACE It is usually used like the following example: - \snippet doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp 0 + \snippet code/src_qdbus_qdbuspendingcall.cpp 0 Note that it is not necessary to keep the original QDBusPendingCall object around since QDBusPendingCallWatcher inherits from that class @@ -106,7 +106,7 @@ QT_BEGIN_NAMESPACE The slot connected to by the above code could be something similar to the following: - \snippet doc/src/snippets/code/src.qdbus.qdbuspendingcall.cpp 1 + \snippet code/src_qdbus_qdbuspendingcall.cpp 1 Note the use of QDBusPendingReply to validate the argument types in the reply. If the reply did not contain exactly two arguments diff --git a/src/dbus/qdbuspendingreply.cpp b/src/dbus/qdbuspendingreply.cpp index b9694ca205c..2fd219260d3 100644 --- a/src/dbus/qdbuspendingreply.cpp +++ b/src/dbus/qdbuspendingreply.cpp @@ -69,22 +69,22 @@ Where with QDBusReply you would write: - \snippet doc/src/snippets/code/src_qdbus_qdbusreply.cpp 0 + \snippet code/src_qdbus_qdbusreply.cpp 0 with QDBusPendingReply, the equivalent code (including the blocking wait for the reply) would be: - \snippet doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp 0 + \snippet code/src_qdbus_qdbuspendingreply.cpp 0 For method calls that have more than one output argument, with QDBusReply, you would write: - \snippet doc/src/snippets/code/src_qdbus_qdbusreply.cpp 1 + \snippet code/src_qdbus_qdbusreply.cpp 1 whereas with QDBusPendingReply, all of the output arguments should be template parameters: - \snippet doc/src/snippets/code/src.qdbus.qdbuspendingreply.cpp 2 + \snippet code/src_qdbus_qdbuspendingreply.cpp 2 QDBusPendingReply objects can be associated with QDBusPendingCallWatcher objects, which emit signals when the reply diff --git a/src/dbus/qdbusreply.cpp b/src/dbus/qdbusreply.cpp index c891874d987..9875329a26d 100644 --- a/src/dbus/qdbusreply.cpp +++ b/src/dbus/qdbusreply.cpp @@ -61,10 +61,10 @@ QT_BEGIN_NAMESPACE argument. It can be used in the following manner: - \snippet doc/src/snippets/code/src_qdbus_qdbusreply.cpp 0 + \snippet code/src_qdbus_qdbusreply.cpp 0 If the remote method call cannot fail, you can skip the error checking: - \snippet doc/src/snippets/code/src_qdbus_qdbusreply.cpp 1 + \snippet code/src_qdbus_qdbusreply.cpp 1 However, if it does fail under those conditions, the value returned by QDBusReply::value() is a default-constructed value. It may be indistinguishable from a valid return value. diff --git a/doc/src/snippets/code/doc_src_qtnetwork.cpp b/src/network/doc/snippets/code/doc_src_qtnetwork.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_qtnetwork.cpp rename to src/network/doc/snippets/code/doc_src_qtnetwork.cpp diff --git a/doc/src/snippets/code/doc_src_qtnetwork.pro b/src/network/doc/snippets/code/doc_src_qtnetwork.pro similarity index 100% rename from doc/src/snippets/code/doc_src_qtnetwork.pro rename to src/network/doc/snippets/code/doc_src_qtnetwork.pro diff --git a/doc/src/network/qtnetwork.qdoc b/src/network/doc/src/qtnetwork.qdoc similarity index 90% rename from doc/src/network/qtnetwork.qdoc rename to src/network/doc/src/qtnetwork.qdoc index bd88f797c1c..092880ef59c 100644 --- a/doc/src/network/qtnetwork.qdoc +++ b/src/network/doc/src/qtnetwork.qdoc @@ -36,10 +36,10 @@ To include the definitions of the module's classes, use the following directive: - \snippet doc/src/snippets/code/doc_src_qtnetwork.cpp 1 + \snippet code/doc_src_qtnetwork.cpp 1 To link against the module, add this line to your \l qmake \c .pro file: - \snippet doc/src/snippets/code/doc_src_qtnetwork.pro 0 + \snippet code/doc_src_qtnetwork.pro 0 */ diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp index f9d6864567f..2fbe38b6ee7 100644 --- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp +++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp @@ -1155,24 +1155,3 @@ int main(int argc, char **argv) return 0; } -/*! - \page qdbusxml2cpp.html - \title QtDBus XML compiler (qdbusxml2cpp) - \keyword qdbusxml2cpp - - The QtDBus XML compiler is a tool that can be used to parse interface descriptions and produce - static code representing those interfaces, which can then be used to make calls to remote - objects or implement said interfaces. - - \c qdbusxml2cpp has two modes of operation, that correspond to the two possible outputs it can - produce: the interface (proxy) class or the adaptor class. The latter consists of both a C++ - header and a source file, which are meant to be edited and adapted to your needs. - - The \c qdbusxml2cpp tool is not meant to be run every time you compile your - application. Instead, it's meant to be used when developing the code or when the interface - changes. - - The adaptor classes generated by \c qdbusxml2cpp are just a skeleton that must be completed. It - generates, by default, calls to slots with the same name on the object the adaptor is attached - to. However, you may modify those slots or the property accessor functions to suit your needs. -*/ From cfdc5628b1fc2cbafa2aebca38995e5718fcb0de Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Mon, 7 May 2012 15:50:31 +0200 Subject: [PATCH 06/13] Doc: Modularize QtGui documentation. This change moves the snippets and images to the modularized directories. Change-Id: I5f86f598fbe7c47d632c613b85d94ced89ba2c29 Reviewed-by: Marius Storm-Olsen --- src/gui/accessible/qaccessible.cpp | 2 +- .../gui/doc}/images/brush-outline.png | Bin src/gui/doc/images/brush-styles.png | Bin 0 -> 13980 bytes .../images/coordinatesystem-analogclock.png | Bin .../coordinatesystem-line-antialias.png | Bin .../images/coordinatesystem-line-raster.png | Bin .../gui/doc}/images/coordinatesystem-line.png | Bin .../coordinatesystem-rect-antialias.png | Bin .../images/coordinatesystem-rect-raster.png | Bin .../gui/doc}/images/coordinatesystem-rect.png | Bin .../coordinatesystem-transformations.png | Bin src/gui/doc/images/cursor-arrow.png | Bin 0 -> 171 bytes src/gui/doc/images/cursor-busy.png | Bin 0 -> 201 bytes src/gui/doc/images/cursor-closedhand.png | Bin 0 -> 147 bytes src/gui/doc/images/cursor-cross.png | Bin 0 -> 130 bytes src/gui/doc/images/cursor-forbidden.png | Bin 0 -> 199 bytes src/gui/doc/images/cursor-hand.png | Bin 0 -> 159 bytes src/gui/doc/images/cursor-hsplit.png | Bin 0 -> 155 bytes src/gui/doc/images/cursor-ibeam.png | Bin 0 -> 124 bytes src/gui/doc/images/cursor-openhand.png | Bin 0 -> 160 bytes src/gui/doc/images/cursor-sizeall.png | Bin 0 -> 174 bytes src/gui/doc/images/cursor-sizeb.png | Bin 0 -> 161 bytes src/gui/doc/images/cursor-sizef.png | Bin 0 -> 161 bytes src/gui/doc/images/cursor-sizeh.png | Bin 0 -> 145 bytes src/gui/doc/images/cursor-sizev.png | Bin 0 -> 141 bytes src/gui/doc/images/cursor-uparrow.png | Bin 0 -> 132 bytes src/gui/doc/images/cursor-vsplit.png | Bin 0 -> 161 bytes src/gui/doc/images/cursor-wait.png | Bin 0 -> 172 bytes src/gui/doc/images/cursor-whatsthis.png | Bin 0 -> 191 bytes .../gui/doc}/images/hoverevents.png | Bin .../doc}/images/paintsystem-antialiasing.png | Bin .../gui/doc}/images/paintsystem-core.png | Bin .../gui/doc}/images/paintsystem-devices.png | Bin .../doc}/images/paintsystem-fancygradient.png | Bin .../gui/doc}/images/paintsystem-gradients.png | Bin .../gui/doc}/images/paintsystem-icon.png | Bin .../gui/doc}/images/paintsystem-movie.png | Bin .../doc}/images/paintsystem-painterpath.png | Bin .../doc}/images/paintsystem-stylepainter.png | Bin .../gui/doc}/images/paintsystem-svg.png | Bin .../gui/doc}/images/qcolor-cmyk.png | Bin .../src => src/gui/doc}/images/qcolor-hsv.png | Bin .../src => src/gui/doc}/images/qcolor-hue.png | Bin .../src => src/gui/doc}/images/qcolor-rgb.png | Bin .../gui/doc}/images/qcolor-saturation.png | Bin .../gui/doc}/images/qcolor-value.png | Bin .../gui/doc}/images/qconicalgradient.png | Bin .../gui/doc}/images/qgradient-conical.png | Bin .../gui/doc}/images/qgradient-linear.png | Bin .../gui/doc}/images/qgradient-radial.png | Bin .../gui/doc}/images/qimage-32bit_scaled.png | Bin .../gui/doc}/images/qimage-8bit_scaled.png | Bin src/gui/doc/images/qimage-scaling.png | Bin 0 -> 34785 bytes .../gui/doc}/images/qlineargradient-pad.png | Bin .../doc}/images/qlineargradient-reflect.png | Bin .../doc}/images/qlineargradient-repeat.png | Bin .../images/qmatrix-combinedtransformation.png | Bin .../doc}/images/qmatrix-representation.png | Bin .../images/qmatrix-simpletransformation.png | Bin .../images/qpainter-affinetransformations.png | Bin .../gui/doc}/images/qpainter-arc.png | Bin .../gui/doc}/images/qpainter-basicdrawing.png | Bin .../gui/doc}/images/qpainter-chord.png | Bin .../gui/doc}/images/qpainter-clock.png | Bin .../doc}/images/qpainter-compositiondemo.png | Bin .../doc}/images/qpainter-compositionmode1.png | Bin .../doc}/images/qpainter-compositionmode2.png | Bin .../images/qpainter-concentriccircles.png | Bin .../gui/doc}/images/qpainter-ellipse.png | Bin .../gui/doc}/images/qpainter-gradients.png | Bin .../gui/doc}/images/qpainter-line.png | Bin .../gui/doc}/images/qpainter-painterpaths.png | Bin .../gui/doc}/images/qpainter-path.png | Bin .../gui/doc}/images/qpainter-pathstroking.png | Bin .../gui/doc}/images/qpainter-pie.png | Bin .../gui/doc}/images/qpainter-polygon.png | Bin .../gui/doc}/images/qpainter-rectangle.png | Bin .../gui/doc}/images/qpainter-rotation.png | Bin .../gui/doc}/images/qpainter-roundrect.png | Bin .../gui/doc}/images/qpainter-scale.png | Bin .../gui/doc}/images/qpainter-text.png | Bin .../gui/doc}/images/qpainter-translation.png | Bin .../images/qpainter-vectordeformation.png | Bin .../doc}/images/qpainterpath-addellipse.png | Bin .../doc}/images/qpainterpath-addpolygon.png | Bin .../doc}/images/qpainterpath-addrectangle.png | Bin .../gui/doc}/images/qpainterpath-addtext.png | Bin .../gui/doc}/images/qpainterpath-arcto.png | Bin .../doc}/images/qpainterpath-construction.png | Bin .../gui/doc}/images/qpainterpath-cubicto.png | Bin .../gui/doc}/images/qpainterpath-demo.png | Bin .../gui/doc}/images/qpainterpath-example.png | Bin src/gui/doc/images/qpen-bevel.png | Bin 0 -> 11527 bytes src/gui/doc/images/qpen-custom.png | Bin 0 -> 6254 bytes src/gui/doc/images/qpen-dash.png | Bin 0 -> 8221 bytes src/gui/doc/images/qpen-dashdot.png | Bin 0 -> 5961 bytes src/gui/doc/images/qpen-dashdotdot.png | Bin 0 -> 5999 bytes .../gui/doc}/images/qpen-dashpattern.png | Bin {doc/src => src/gui/doc}/images/qpen-demo.png | Bin src/gui/doc/images/qpen-dot.png | Bin 0 -> 5386 bytes src/gui/doc/images/qpen-flat.png | Bin 0 -> 1885 bytes src/gui/doc/images/qpen-miter.png | Bin 0 -> 11734 bytes .../gui/doc}/images/qpen-miterlimit.png | Bin src/gui/doc/images/qpen-roundcap.png | Bin 0 -> 1920 bytes src/gui/doc/images/qpen-roundjoin.png | Bin 0 -> 11878 bytes src/gui/doc/images/qpen-solid.png | Bin 0 -> 7416 bytes src/gui/doc/images/qpen-square.png | Bin 0 -> 2651 bytes .../gui/doc}/images/qradialgradient-pad.png | Bin .../doc}/images/qradialgradient-reflect.png | Bin .../doc}/images/qradialgradient-repeat.png | Bin .../doc}/images/qstatustipevent-action.png | Bin .../doc}/images/qstatustipevent-widget.png | Bin .../gui/doc}/images/qt-fillrule-oddeven.png | Bin .../gui/doc}/images/qt-fillrule-winding.png | Bin .../gui/doc}/images/qtexttableformat-cell.png | Bin .../qtransform-combinedtransformation.png | Bin .../qtransform-combinedtransformation2.png | Bin .../doc}/images/qtransform-representation.png | Bin .../qtransform-simpletransformation.png | Bin .../gui/doc}/images/texttable-merge.png | Bin .../gui/doc}/images/texttable-split.png | Bin src/gui/doc/qtgui.qdocconf | 92 ++++++++++++++++++ .../gui/doc}/snippets/brush/brush.cpp | 0 .../brush/gradientcreationsnippet.cpp | 0 .../gui/doc}/snippets/code/doc_src_qtgui.pro | 0 .../code/src_gui_accessible_qaccessible.cpp | 0 .../snippets/code/src_gui_image_qimage.cpp | 0 .../code/src_gui_image_qimagereader.cpp | 0 .../code/src_gui_image_qimagewriter.cpp | 0 .../snippets/code/src_gui_image_qmovie.cpp | 0 .../snippets/code/src_gui_image_qpixmap.cpp | 0 .../code/src_gui_image_qpixmapcache.cpp | 0 .../code/src_gui_kernel_qapplication.cpp | 0 .../code/src_gui_kernel_qapplication_x11.cpp | 0 .../code/src_gui_kernel_qclipboard.cpp | 0 .../snippets/code/src_gui_kernel_qevent.cpp | 0 .../code/src_gui_kernel_qkeysequence.cpp | 0 .../code/src_gui_kernel_qshortcutmap.cpp | 0 .../snippets/code/src_gui_painting_qbrush.cpp | 0 .../snippets/code/src_gui_painting_qcolor.cpp | 0 .../code/src_gui_painting_qmatrix.cpp | 0 .../code/src_gui_painting_qpainter.cpp | 0 .../code/src_gui_painting_qpainterpath.cpp | 0 .../snippets/code/src_gui_painting_qpen.cpp | 0 .../code/src_gui_painting_qregion.cpp | 0 .../code/src_gui_painting_qregion_unix.cpp | 0 .../code/src_gui_painting_qtransform.cpp | 0 .../code/src_gui_qopenglshaderprogram.cpp | 0 .../doc}/snippets/code/src_gui_text_qfont.cpp | 0 .../code/src_gui_text_qfontmetrics.cpp | 0 .../code/src_gui_text_qsyntaxhighlighter.cpp | 0 .../code/src_gui_text_qtextcursor.cpp | 0 .../code/src_gui_text_qtextdocument.cpp | 0 .../code/src_gui_text_qtextdocumentwriter.cpp | 0 .../code/src_gui_text_qtextlayout.cpp | 0 .../code/src_gui_util_qdesktopservices.cpp | 0 .../snippets/code/src_gui_util_qvalidator.cpp | 0 .../gui/doc}/snippets/dragging/mainwindow.cpp | 0 .../src => src/gui/doc}/snippets/droparea.cpp | 0 .../gui/doc}/snippets/image/image.cpp | 0 .../doc}/snippets/image/supportedformat.cpp | 0 .../gui/doc}/snippets/matrix/matrix.cpp | 0 .../gui/doc}/snippets/picture/picture.cpp | 0 .../gui/doc}/snippets/polygon/polygon.cpp | 0 .../gui/doc}/snippets/qfontdatabase/main.cpp | 0 .../doc}/snippets/qstatustipevent/main.cpp | 0 .../doc}/snippets/separations/finalwidget.cpp | 0 .../textblock-fragments/xmlwriter.cpp | 0 .../doc}/snippets/textdocument-css/main.cpp | 0 .../textdocument-listitemstyles/main.cpp | 0 .../mainwindow.cpp | 0 .../textdocument-listitemstyles/mainwindow.h | 0 .../textdocument-listitemstyles.pro | 0 .../textdocument-lists/mainwindow.cpp | 0 .../snippets/textdocument-resources/main.cpp | 0 .../textdocument-resources.pro | 0 .../textdocument-tables/mainwindow.cpp | 0 .../snippets/textdocument-texttable/main.cpp | 0 .../doc}/snippets/textdocumentendsnippet.cpp | 0 .../gui/doc}/snippets/transform/main.cpp | 0 .../src/gui => src/gui/doc/src}/coordsys.qdoc | 0 .../gui => src/gui/doc/src}/paintsystem.qdoc | 0 {doc/src/gui => src/gui/doc/src}/qtgui.qdoc | 2 +- src/gui/image/qimage.cpp | 10 +- src/gui/image/qimagereader.cpp | 8 +- src/gui/image/qimagewriter.cpp | 6 +- src/gui/image/qmovie.cpp | 4 +- src/gui/image/qpicture.cpp | 18 ++-- src/gui/image/qpixmap.cpp | 8 +- src/gui/image/qpixmapcache.cpp | 4 +- src/gui/kernel/qclipboard.cpp | 6 +- src/gui/kernel/qdrag.cpp | 4 +- src/gui/kernel/qevent.cpp | 14 +-- src/gui/kernel/qguiapplication.cpp | 4 +- src/gui/kernel/qkeysequence.cpp | 6 +- src/gui/kernel/qpalette.cpp | 2 +- src/gui/kernel/qshortcutmap.cpp | 2 +- src/gui/opengl/qopenglshaderprogram.cpp | 6 +- src/gui/painting/qbrush.cpp | 8 +- src/gui/painting/qcolor.cpp | 2 +- src/gui/painting/qmatrix.cpp | 14 +-- src/gui/painting/qpainter.cpp | 44 ++++----- src/gui/painting/qpainterpath.cpp | 14 +-- src/gui/painting/qpen.cpp | 8 +- src/gui/painting/qpolygon.cpp | 14 +-- src/gui/painting/qregion.cpp | 4 +- src/gui/painting/qtransform.cpp | 14 +-- src/gui/text/qfont.cpp | 10 +- src/gui/text/qfontdatabase.cpp | 4 +- src/gui/text/qfontmetrics.cpp | 4 +- src/gui/text/qsyntaxhighlighter.cpp | 10 +- src/gui/text/qtextcursor.cpp | 10 +- src/gui/text/qtextdocument.cpp | 10 +- src/gui/text/qtextdocumentwriter.cpp | 2 +- src/gui/text/qtextformat.cpp | 2 +- src/gui/text/qtextlayout.cpp | 4 +- src/gui/text/qtextlist.cpp | 2 +- src/gui/text/qtextobject.cpp | 4 +- src/gui/text/qtexttable.cpp | 8 +- src/gui/util/qdesktopservices.cpp | 6 +- src/gui/util/qvalidator.cpp | 10 +- 221 files changed, 249 insertions(+), 157 deletions(-) rename {doc/src => src/gui/doc}/images/brush-outline.png (100%) create mode 100644 src/gui/doc/images/brush-styles.png rename {doc/src => src/gui/doc}/images/coordinatesystem-analogclock.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-line-antialias.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-line-raster.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-line.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-rect-antialias.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-rect-raster.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-rect.png (100%) rename {doc/src => src/gui/doc}/images/coordinatesystem-transformations.png (100%) create mode 100644 src/gui/doc/images/cursor-arrow.png create mode 100644 src/gui/doc/images/cursor-busy.png create mode 100644 src/gui/doc/images/cursor-closedhand.png create mode 100644 src/gui/doc/images/cursor-cross.png create mode 100644 src/gui/doc/images/cursor-forbidden.png create mode 100644 src/gui/doc/images/cursor-hand.png create mode 100644 src/gui/doc/images/cursor-hsplit.png create mode 100644 src/gui/doc/images/cursor-ibeam.png create mode 100644 src/gui/doc/images/cursor-openhand.png create mode 100644 src/gui/doc/images/cursor-sizeall.png create mode 100644 src/gui/doc/images/cursor-sizeb.png create mode 100644 src/gui/doc/images/cursor-sizef.png create mode 100644 src/gui/doc/images/cursor-sizeh.png create mode 100644 src/gui/doc/images/cursor-sizev.png create mode 100644 src/gui/doc/images/cursor-uparrow.png create mode 100644 src/gui/doc/images/cursor-vsplit.png create mode 100644 src/gui/doc/images/cursor-wait.png create mode 100644 src/gui/doc/images/cursor-whatsthis.png rename {doc/src => src/gui/doc}/images/hoverevents.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-antialiasing.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-core.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-devices.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-fancygradient.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-gradients.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-icon.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-movie.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-painterpath.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-stylepainter.png (100%) rename {doc/src => src/gui/doc}/images/paintsystem-svg.png (100%) rename {doc/src => src/gui/doc}/images/qcolor-cmyk.png (100%) rename {doc/src => src/gui/doc}/images/qcolor-hsv.png (100%) rename {doc/src => src/gui/doc}/images/qcolor-hue.png (100%) rename {doc/src => src/gui/doc}/images/qcolor-rgb.png (100%) rename {doc/src => src/gui/doc}/images/qcolor-saturation.png (100%) rename {doc/src => src/gui/doc}/images/qcolor-value.png (100%) rename {doc/src => src/gui/doc}/images/qconicalgradient.png (100%) rename {doc/src => src/gui/doc}/images/qgradient-conical.png (100%) rename {doc/src => src/gui/doc}/images/qgradient-linear.png (100%) rename {doc/src => src/gui/doc}/images/qgradient-radial.png (100%) rename {doc/src => src/gui/doc}/images/qimage-32bit_scaled.png (100%) rename {doc/src => src/gui/doc}/images/qimage-8bit_scaled.png (100%) create mode 100644 src/gui/doc/images/qimage-scaling.png rename {doc/src => src/gui/doc}/images/qlineargradient-pad.png (100%) rename {doc/src => src/gui/doc}/images/qlineargradient-reflect.png (100%) rename {doc/src => src/gui/doc}/images/qlineargradient-repeat.png (100%) rename {doc/src => src/gui/doc}/images/qmatrix-combinedtransformation.png (100%) rename {doc/src => src/gui/doc}/images/qmatrix-representation.png (100%) rename {doc/src => src/gui/doc}/images/qmatrix-simpletransformation.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-affinetransformations.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-arc.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-basicdrawing.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-chord.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-clock.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-compositiondemo.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-compositionmode1.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-compositionmode2.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-concentriccircles.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-ellipse.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-gradients.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-line.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-painterpaths.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-path.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-pathstroking.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-pie.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-polygon.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-rectangle.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-rotation.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-roundrect.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-scale.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-text.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-translation.png (100%) rename {doc/src => src/gui/doc}/images/qpainter-vectordeformation.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-addellipse.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-addpolygon.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-addrectangle.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-addtext.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-arcto.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-construction.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-cubicto.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-demo.png (100%) rename {doc/src => src/gui/doc}/images/qpainterpath-example.png (100%) create mode 100644 src/gui/doc/images/qpen-bevel.png create mode 100644 src/gui/doc/images/qpen-custom.png create mode 100644 src/gui/doc/images/qpen-dash.png create mode 100644 src/gui/doc/images/qpen-dashdot.png create mode 100644 src/gui/doc/images/qpen-dashdotdot.png rename {doc/src => src/gui/doc}/images/qpen-dashpattern.png (100%) rename {doc/src => src/gui/doc}/images/qpen-demo.png (100%) create mode 100644 src/gui/doc/images/qpen-dot.png create mode 100644 src/gui/doc/images/qpen-flat.png create mode 100644 src/gui/doc/images/qpen-miter.png rename {doc/src => src/gui/doc}/images/qpen-miterlimit.png (100%) create mode 100644 src/gui/doc/images/qpen-roundcap.png create mode 100644 src/gui/doc/images/qpen-roundjoin.png create mode 100644 src/gui/doc/images/qpen-solid.png create mode 100644 src/gui/doc/images/qpen-square.png rename {doc/src => src/gui/doc}/images/qradialgradient-pad.png (100%) rename {doc/src => src/gui/doc}/images/qradialgradient-reflect.png (100%) rename {doc/src => src/gui/doc}/images/qradialgradient-repeat.png (100%) rename {doc/src => src/gui/doc}/images/qstatustipevent-action.png (100%) rename {doc/src => src/gui/doc}/images/qstatustipevent-widget.png (100%) rename {doc/src => src/gui/doc}/images/qt-fillrule-oddeven.png (100%) rename {doc/src => src/gui/doc}/images/qt-fillrule-winding.png (100%) rename {doc/src => src/gui/doc}/images/qtexttableformat-cell.png (100%) rename {doc/src => src/gui/doc}/images/qtransform-combinedtransformation.png (100%) rename {doc/src => src/gui/doc}/images/qtransform-combinedtransformation2.png (100%) rename {doc/src => src/gui/doc}/images/qtransform-representation.png (100%) rename {doc/src => src/gui/doc}/images/qtransform-simpletransformation.png (100%) rename {doc/src => src/gui/doc}/images/texttable-merge.png (100%) rename {doc/src => src/gui/doc}/images/texttable-split.png (100%) create mode 100644 src/gui/doc/qtgui.qdocconf rename {doc/src => src/gui/doc}/snippets/brush/brush.cpp (100%) rename {doc/src => src/gui/doc}/snippets/brush/gradientcreationsnippet.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/doc_src_qtgui.pro (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_accessible_qaccessible.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_image_qimage.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_image_qimagereader.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_image_qimagewriter.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_image_qmovie.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_image_qpixmap.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_image_qpixmapcache.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_kernel_qapplication.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_kernel_qapplication_x11.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_kernel_qclipboard.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_kernel_qevent.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_kernel_qkeysequence.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_kernel_qshortcutmap.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qbrush.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qcolor.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qmatrix.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qpainter.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qpainterpath.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qpen.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qregion.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qregion_unix.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_painting_qtransform.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_qopenglshaderprogram.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_text_qfont.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_text_qfontmetrics.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_text_qsyntaxhighlighter.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_text_qtextcursor.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_text_qtextdocument.cpp (100%) rename doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp => src/gui/doc/snippets/code/src_gui_text_qtextdocumentwriter.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_text_qtextlayout.cpp (100%) rename {doc/src => src/gui/doc}/snippets/code/src_gui_util_qdesktopservices.cpp (100%) rename doc/src/snippets/code/src_gui_widgets_qvalidator.cpp => src/gui/doc/snippets/code/src_gui_util_qvalidator.cpp (100%) rename {doc/src => src/gui/doc}/snippets/dragging/mainwindow.cpp (100%) rename {doc/src => src/gui/doc}/snippets/droparea.cpp (100%) rename {doc/src => src/gui/doc}/snippets/image/image.cpp (100%) rename {doc/src => src/gui/doc}/snippets/image/supportedformat.cpp (100%) rename {doc/src => src/gui/doc}/snippets/matrix/matrix.cpp (100%) rename {doc/src => src/gui/doc}/snippets/picture/picture.cpp (100%) rename {doc/src => src/gui/doc}/snippets/polygon/polygon.cpp (100%) rename {doc/src => src/gui/doc}/snippets/qfontdatabase/main.cpp (100%) rename {doc/src => src/gui/doc}/snippets/qstatustipevent/main.cpp (100%) rename {doc/src => src/gui/doc}/snippets/separations/finalwidget.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textblock-fragments/xmlwriter.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-css/main.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-listitemstyles/main.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-listitemstyles/mainwindow.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-listitemstyles/mainwindow.h (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-listitemstyles/textdocument-listitemstyles.pro (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-lists/mainwindow.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-resources/main.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-resources/textdocument-resources.pro (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-tables/mainwindow.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocument-texttable/main.cpp (100%) rename {doc/src => src/gui/doc}/snippets/textdocumentendsnippet.cpp (100%) rename {doc/src => src/gui/doc}/snippets/transform/main.cpp (100%) rename {doc/src/gui => src/gui/doc/src}/coordsys.qdoc (100%) rename {doc/src/gui => src/gui/doc/src}/paintsystem.qdoc (100%) rename {doc/src/gui => src/gui/doc/src}/qtgui.qdoc (95%) diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index 02318468bb3..6f1d505a4e4 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -460,7 +460,7 @@ static void qAccessibleCleanup() This is a typedef for a pointer to a function with the following signature: - \snippet doc/src/snippets/code/src_gui_accessible_qaccessible.cpp 1 + \snippet code/src_gui_accessible_qaccessible.cpp 1 The function receives a QString and a QObject pointer, where the QString is the key identifying the interface. The QObject is used diff --git a/doc/src/images/brush-outline.png b/src/gui/doc/images/brush-outline.png similarity index 100% rename from doc/src/images/brush-outline.png rename to src/gui/doc/images/brush-outline.png diff --git a/src/gui/doc/images/brush-styles.png b/src/gui/doc/images/brush-styles.png new file mode 100644 index 0000000000000000000000000000000000000000..eecb006af141fb50fa8d03e68bbbccdfa964d3ce GIT binary patch literal 13980 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 L)YGU|vyS*bT-6qZ literal 0 HcmV?d00001 diff --git a/doc/src/images/coordinatesystem-analogclock.png b/src/gui/doc/images/coordinatesystem-analogclock.png similarity index 100% rename from doc/src/images/coordinatesystem-analogclock.png rename to src/gui/doc/images/coordinatesystem-analogclock.png diff --git a/doc/src/images/coordinatesystem-line-antialias.png b/src/gui/doc/images/coordinatesystem-line-antialias.png similarity index 100% rename from doc/src/images/coordinatesystem-line-antialias.png rename to src/gui/doc/images/coordinatesystem-line-antialias.png diff --git a/doc/src/images/coordinatesystem-line-raster.png b/src/gui/doc/images/coordinatesystem-line-raster.png similarity index 100% rename from doc/src/images/coordinatesystem-line-raster.png rename to src/gui/doc/images/coordinatesystem-line-raster.png diff --git a/doc/src/images/coordinatesystem-line.png b/src/gui/doc/images/coordinatesystem-line.png similarity index 100% rename from doc/src/images/coordinatesystem-line.png rename to src/gui/doc/images/coordinatesystem-line.png diff --git a/doc/src/images/coordinatesystem-rect-antialias.png b/src/gui/doc/images/coordinatesystem-rect-antialias.png similarity index 100% rename from doc/src/images/coordinatesystem-rect-antialias.png rename to src/gui/doc/images/coordinatesystem-rect-antialias.png diff --git a/doc/src/images/coordinatesystem-rect-raster.png b/src/gui/doc/images/coordinatesystem-rect-raster.png similarity index 100% rename from doc/src/images/coordinatesystem-rect-raster.png rename to src/gui/doc/images/coordinatesystem-rect-raster.png diff --git a/doc/src/images/coordinatesystem-rect.png b/src/gui/doc/images/coordinatesystem-rect.png similarity index 100% rename from doc/src/images/coordinatesystem-rect.png rename to src/gui/doc/images/coordinatesystem-rect.png diff --git a/doc/src/images/coordinatesystem-transformations.png b/src/gui/doc/images/coordinatesystem-transformations.png similarity index 100% rename from doc/src/images/coordinatesystem-transformations.png rename to src/gui/doc/images/coordinatesystem-transformations.png diff --git a/src/gui/doc/images/cursor-arrow.png b/src/gui/doc/images/cursor-arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..a69ef4eb6158503c7c67c916aea86e65fdc81f72 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK&RR$m{!Z_zjR^ED7=p zW^j0RBMrz2@N{tusfe>Zw~@EOfQR+sk_Oou&-fjcEVpj<&$!X3+c~E>J1*JV{%`IM zZgwlFFx}G*?uS>UO1?P#t>x;u4TbmfTg6u$kN3O$qTon=;uum9xAyEt-c|zv=78lpdFvQ2-{H`#GwYbpmwD+D`;ru|4Sly6 z!u|DfH10id;EhPQ?!aC0$4imznq|kzoDQ|k!q4v~%5Ey$Ds|~#XU>6Rfw7|8GuZ2t ub|G literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-closedhand.png b/src/gui/doc/images/cursor-closedhand.png new file mode 100644 index 0000000000000000000000000000000000000000..b78dd1dac5a827fa698f1993718f22c282019505 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6I14-?iy0WWJ3*My{N(AiKtWee z7sn8d^J_1j=3-FbaJl&N|NMQrDg{-+lDl3uEOL6iyxxIhJsV5IbqBU04WsP|EmPEI sG+%tqc!TF=!@MiLH_pW!e7ccq3Qxekuk)up2O7xW>FVdQ&MBb@057mJumAu6 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-cross.png b/src/gui/doc/images/cursor-cross.png new file mode 100644 index 0000000000000000000000000000000000000000..fe38e744805f61abefcc555e07d399725c3fd7e6 GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK&RR$m{!Z_zjR^ED7=p zW^j0RBMrz=_jGX#;h346aDZ1vLF6&ZrWY3kt_3XM>{%UFuy$6%gUPvacWfgV8N9#n V_FPj?S`E~~;OXk;vd$@?2>`R9Dxv@Y literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-forbidden.png b/src/gui/doc/images/cursor-forbidden.png new file mode 100644 index 0000000000000000000000000000000000000000..2b08c4e2a3cafc992459a8f484e6c8e6c3e74857 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK&RR$m{!Z_zjR^ED7=p zW^j0RBMr#O@pN$vsfa5*w~^P`kb@;)w}Ny_&ztDY@kvlRIOU`3qAsV; zTo+`Y{*UQrTXjS>sKxPHd$OYcrG25=M&E9}?0tT1Yy7oqDMB$hU$uYoMqOpDnka4~ qygb6(Z%*F(qx}EZO#W7L6_Nk?#pi+cGI+ZBxvX&}>iqs75rOW+zd6_S+ yS|~6}xHpZ9x7T5rLt)D22WQ%mvv4FO#t=)GwlEX literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-ibeam.png b/src/gui/doc/images/cursor-ibeam.png new file mode 100644 index 0000000000000000000000000000000000000000..097fc5fa7287da71ffd907b3a11adbda4516aca6 GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK)l42QqgTe~DWM4f DkdQT7 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-sizeall.png b/src/gui/doc/images/cursor-sizeall.png new file mode 100644 index 0000000000000000000000000000000000000000..69f13eb347a6c299e06844729a14f657b282fe8f GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK)l42Qq(Z!J(8lD*)YR5__{zaA2hTRnmr4+Dcjj*u+}&-pB%i42~uelF{r5}E+x CJu-a& literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-sizef.png b/src/gui/doc/images/cursor-sizef.png new file mode 100644 index 0000000000000000000000000000000000000000..3b127a05d34b48a2f4f9b9cc77b681c6b43afcdd GIT binary patch literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK)l42QqD?iBlbDB7>)^pUXO@geCxo C3NS_h literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-sizeh.png b/src/gui/doc/images/cursor-sizeh.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f40cbc3d77c566c11c32c0631b4f94f44dd441 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK)l42Qq&V7RQzr9bPir8&?922WQ%mvv4FO#sHOC(Zx> literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-sizev.png b/src/gui/doc/images/cursor-sizev.png new file mode 100644 index 0000000000000000000000000000000000000000..1edbab27a5b05555aaf515931f69ad6bf7e417f0 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK)l42QqM`U1 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-wait.png b/src/gui/doc/images/cursor-wait.png new file mode 100644 index 0000000000000000000000000000000000000000..69056c479e9b2f009e366dfd71999a7c74f97620 GIT binary patch literal 172 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~)3?z59=Y9ZEoB=)|uK&RR$m{!Z_zjR^ED7=p zW^j0RBMrz2^mK6y;h346;J_ZVI&3Y=<%J7po~YS&;ev>WRgqc?pLgqp;N^OZ7kj)9 zt2OYRn)8&w&_Fn;AZ-e>OWiG&j$ap41wJoZG>h5TTvwNMesusN!}2q-U)D!*O8^aL N@O1TaS?83{1OR$JJ0<`C literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/cursor-whatsthis.png b/src/gui/doc/images/cursor-whatsthis.png new file mode 100644 index 0000000000000000000000000000000000000000..b47601c3780eec780fdae43bab7481bbfebdddae GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnH3?%tPCZz)@&H$ef*Z*JuL59RLGuTpf8VsdEq+OT~Tw87C;38om{D5bL fNHFu^21W*zFY5ww!AR=|ny;+`^1mgQ*q26Nqy#qbe}#iIP2%bpqQFbKm? zknsOMoW!j`v2eO{FjS~mcZ2nGcruYZSij(3y2BE5b74#z%$8g#&=Wz;#TTkAmc>K;G$sSxe zQx|+20xrv9r>4!8Z;E(!l{nOr_*VHA(MdvQ_$|9 zDbFWFA)W9q;P>|fl9KH}P9KMZYgy*i37u!Z*e`n(gkdNOE841akrsu3_y+xXhAyc~ zaV-vcfDnASg0GRW1ecK2lGN-CO{P=YFv(nPJRK14uYqCOEJMU5&oN)z!^ zIen-cm4~RQQV9`~_JNcKUQik#frLnG)nVf~blWgPhT7WN-g)OQJv}?n zld!#KGMR~q4EPH#{7e<<38)-c18)^*GN1nv+=e_@_1~rzwDW;Ez_;(k7mp4M{9=53 zJRWai(o*=DXZG*g_d_Y!*toVVSOcTcM#ky(?b+es5r)YGDY%VtB|xE*Cr_dv?b-9~ z+1a^lHaj|ci<0f_n_qqPw_=H!nwqKvtbxPBqbQo>QC4%g*=#oF2qd@F>%oHZAziz+ zQ3aAOw(;;GO-xM9%;ZEvl1Cb&Fo|tPA@K{U09blZ3A{W=SG2Y!W3jcReMpM1X1R51 z0!tBjb%gMzb~GGQ7Oa7A8q2^hzPR4g(|zjHsY8bj@oTX4IGX+BWR|gT+*I>q!Ud|6 z0+oR^aE_Ew=3yL$B(0ZG9td50lKbrBeb1in zy#4l{hlhvj>+6iRU^@PRf+ABI8>6Yzx&S_;`cP1+QBe-nyLuefQ6aYkppKt_s(@B8 zC%t ziKRi**@*L~GGGltAss92599`34!Dhbf*fFwH~TvPeALNQN?8?5mT3G z3{MgRQ8rr4+6o+m zq&&!Qt2_{#0)VDYl2RadPzRM&1xO0Sdw=l3-xG(QgX%48;G zxe$PAq_L^HcRzvtfx;>RewA*Fb;b5c-bv*fZR~)ngRnxJK7IQ7_3M#H!+pMWjm)Y% z@Qf{(0eA1-IW+XAmX;PrAPLiQ6-cB7B{c=81cX!?0j?ej{IV*O&Ype$lTZE?jV{g{ zsS)coT^y`P3cEH`19^tks&XKuz%*Jbu&ikT)QFF@%31-haPLnT1Z9-xfP*fQpQ zDdSn^5`vV`bOnG203sD%d+m2uuU-|$hV6MxOMtFW6lht!CNP<50d*=}x^!t|WP}j` z@f*u4!-3I>bq2))H>n0{Bt4?&t+xh|@%UVsBg?k&R+RW*~0mFeTN*;YXvCdPqZZuRaz)3-|>k)%HvE{|nR?w;4%oMnU5d3ELin0`KcI z)so@5YbkOyUi(KITh$<}#7xWQb1%Pq{NaZ?ySlo>i>n=CQ%}$aObVi;vqFbUb$c1B z3PE_^C`rCwQ<^DhRe(h)GT-0-T?uNCux~prl*v6oC60RFUQsyRvr@fEKub=%l$oT} zHXN!Rz46BD1T{SS>_HZA%a*}hgIzh>_y}s?o}%q?jzA`2@CbCqjwzo@x`~*IcpR}E zg=?*q&lkH$vv`W}OVP@CsVXRFBMS><b-Vu7zqcm8cE~gf-kLz2V*I}SWfsF5n0EWRHMZ% z_&y|0+mtwp19E!K`JD*(v(K29F>%Rs~WV-hVmU? zACmME?Dye^{}><7OioUcw?k=1@Lr>V#p!?YZjzC8xkmiHrrr8h6`+vVLIUhV(lR*V z84;NyGS+tKsn(PwRWfLiJVhrdBVS#^0Vep|9Alz3uI1QxVC9wo`;fd%b~2DE33M_t zoa~v6M(cZfyJRvm(gY)pjZMj^f2xC5q9K_^lTcn&oF&(ggfE>1a#%Q6u5uOC}Oj_}Pbst7|x%K&r3MIOFknQRA#%#tatRWaq6Rk>!#vqpg>Tn#+B4 z?b?4(j5<0tVznc4@#5utezvQtQzo#=NfMFa*77cb$AXY9DwS_kVyQIo52`aj5f$Jz z8aO0^5L~XZ8j>u=*~)(4zyZz$cl7mQCMX|4$41`RgnCvQxMk7TNbVD@C zjRpIN;s21Xnf$({{dM_+@}|h3_ul&(`|X9{eQ8KKC<6mOf9RoYFTM0@QCsaprL0UA zxz)-N$u1_SRAs}VCLh$hJC8ovUEDDyVc*NP@r$e>$wdifav@ba63a$D8O7sXG94Wo z=o%(7`D8MI8_7iDSeqO?7t(-QKqs=I0Lq#a((k_3pmW1zKLK~5`|OJ?NKI#-Gq79s z@RJrZ>tZtc)|Cb|@G(1g?%ctHKSm@A$Jip~vjvs$QF-|-02b^I*7*VHpDP9wRa;J} z(XsXw)F3Ad^!4pMa^%=6ul$DCFxh)+No;f!W2K27G?SSw9^05lEP-QlMh>z3OeC6; z$+*Kxb+C+eajl@B1{+oYDer1`DFXRh>Z%MlfBv6%oeBE}upjahZs&reelecNBdEmKTM9(|T&kE;hH?_` zC!Zb)icJQ@*5h)etENd!Wi_OG!@k2Lda1gj`m9>6Z4J5=5g5=6iB;EDi^-06XJpVa z-+c4+=b!&+cXzj(m=ZukLVlDO5lHxlvWY}2nT*}J(}r8rF+Lag2Uc_h59qwh`Ltqu zNMs=E#WCirg%dO`T)41(`?oqeIwFZ4GnOT)(1J?JmzF5I->1{*{ri7JlpP$qJR2`~Kn*EWj&x26(FTPEMyX5e`Y41%}#R;BRG--VaB85 z@z}a`2}}o+0mRah%`zN0enP-d6?gGy+Q5l^9M{bXmuY~&o1UKG++1~8$70b$q8Sa3 zhN-G_f27mf(i$t^jX)y3BR#32U%M1?dGA&Usd_}%H~Wxw?C3!tiH#^gRl1I`r2VOS z01O6~viM1-H*VO_%Hy=aXP?~|AJ4)U(Hqk+;dtHF8!nuy!paVJ3tJ-;nj|lPxWASz3Pl@zr#?{gFquHZ;^Bdv4qqy?puK z80fcc+ni2!AQkXDeg64PJ^|_U*QiR!mC@00Bo^Wa#uAG&XJw9$PauIdZCa0HLc)!W z;l9bVv@|t0$I-MJ8zb>}lwxQbEPGL+IPjEvDMK4lsU&t7<`*}Pj7%WLHf~HImUz0S zKmsdiveVFH-ZX_1zO^+qJ?%O-$Q`UGhD|R1rIES4-PM=LPVVIx zCl36UgH=4gzmUX&!jM<4e0uZd*pp8_0qe>W;lPU*ufQHnO>ux?CAt7-92X)ZTuQCf zt?o(5bC=ctBBTL?o<0vN?c{bXtnSqkE)#8%KHX)?SJ1F%sknC8)~fCIWwI0S-FN>w zJ9~$7gQ%ynQ_3vSU`Y3ab7`2q6+&TMD6@eLSV3F!N(#iUinm#`eMtXh?>vC>x~@B~ z?*j?eUclY})?Or15>+i(qME(2rHmzyOR`yevMzD5naEBo%Z?R$;?2ggXKgw0dS++W zB@^3mOVOy<%&crRk}9OwDN>}^!48ljL4w%dJAZx$hwlO)@BxG*hj%_cKHPWTefPb4 z&poxch{Ks^W>;hmHChv~_@BFW9T+g6_uRQt=oi?YIdjsmVS{(>BoE41_?wwCtHCQ^ z0%+1bdk##RG!{wy(4kYGetHeK3d3=t0*@U#eB8LI7hl{+1HSz9=@aM9or)N6?b@x| zx9`G?0>pFdSl#T|)gwm^-LT=cHEXue?53L*S67ciO?~VboYTo&yJ~s*uwet|&6@_5 zw|x03#s&_KK%{n9- z6O*D!9mQaoT?2EHtq=tP@l88y;^$7B!Hv{??h-xwv_@k;--7dv`gezYe!1Mn72OAnDQVCQa zIa2@p^J__Fapje>uexeJ(z68%W~^B8%43f`0~2%GZA+(5pUfT&!vtQj4W$4ZM1P`H z*(_dqY2$d->(wx7>1Nb@iBy8+U-W&|GQ936oJyNk6?uSnwpo5@uqZh!l}? z6Wqx{qyl9x+hXtDO)drXohZQszqLj72!jRC>l*3@ld?)fSni$r4N2qBc=$ zPijbsn;4j5Am7lXi1IDZI+X58+%TnyqP>y_aTEhABtg;bLQBq6sg2s&UjeUJV>S0% zqKk#@W)yBW6#}z(=wS|C=ghTuZ=FrjyVr|Ve5LXyzggAxW*|B3U@JFTgbkG~X zhOn-G|K1};3=zS_GL_#l8@+8bJ!)zutXj1Wq_ueQY#z;O-nMNwDl4VIJ$35Luwh6P z2cTP0t`2uU>X1=`G#sRWTefW3pZ@9ncieF&ZUNHVMk_KA*MJtoU<^F8zWxokJ=^0L zZD!NOr|93mF#|0tqE>_ZtqdR14OiznzAY*#g=oPM)uCDjY~2J6f|Kry+4r;0KGV1F zfQb_)vO?5(B-s7jb}^xeyztpE2h#-gK#^UzRyc)+^QSKHMw&-q9bGb;^3xz4BRF~y zzJww>AZfYiuVj_e91YSTNE<6BU^Jzc5u3nWoQmmj45ft$XbAJkIEW&Zt$eM5MJxSB z6Cr+i$)ON~9cf?j{qO%nzkah{8?q{PrYS?G;I71jWI@)t0*l|8dufqck%NC_!vX%ljKn8Rh3B;y2)QcGs zqL5HaU0Imr(^k3{s67$iSvzT$$gb)yzZr%nuRY0XJgP&sv1;PHCQBZ5YfnRLna~aO;*eW z3!#(|Iw%Rv@+QYom6#=GVI0lA;W8h3=nEhH=tmYVT*#c#vJ4K1exU2)j6|0dU$I`V zlho)7>W8@+Jh(4EkO6;)!$6k_R;Z~NH)_;S(^V9}3M@$Ye$)RKSi05KqrnQyESGT6 zL!Jyx*3>kFO8Ug@iA75%ps=As2f#bY`rqtJkF$We1tlxSqO5jC0$!wE(RVQ9;b%Q( zL>|yVSCSL(t}>Yse_ z$@%l=PM$nj;8up&w}knvn|((PKufuq`NLkRe}6v00I36l#IhL^2s8N@m^gpBLs_)@ z=$?=e!DX%3C74emht>YlmmZopangPFz29=M6}!uQjaSi^j9&lxuiMSOBWIv_6=w44 zs56Wu8Z<}#PL+NO|10Gbq$u#VV8PT$lg8B69(m@Om!SzUh){3bg&97?9kvXB@t83q zrc4>{yt!fPQpcAT&Av~beBE!Rr3~hfuzvWJOs!bZGt7t-JQ^J3t#*cuHKXw@b~wfA@Fqj?uo$m=Upn?NC(b zm0sA`Tas{S@!WQ^4*j5hta4Vz-5a=<-;0%+&Y3_g&1sfA9DH zv(yCLOcL{6YqZajbp}CEn3tF_rt=4MBTAtA9N+1u*(DaT9@O- zjo!9x4+4`RLk5X0gYYzoe@@BS0s9bcG^yZ-6)RTt??0ffF0<*1LO+fXEy0tq^{idH zZ{fn}>?06y>IB8v>eZW3XJEL&TSQAOpLm@o0Gx*I*Sk19NC^>ITlJgi=E{g6@}uf} zTy5U>uDkB4sj0CP<}M_3vup}qqxo4muNRtWb9Cnw78L}|t+!sSmhf$h7R|sv>EHi- z6>E&yoH8XdF=wa79F&QMkb;HUv11RU((Kt&G&|F#O<=|HqjT6JsHIu6s)r68xMj=h z%a^Y-wMT(YuDNCbv=^(CHT?3+n?OQFniS*+F>l^fC@TJZ_0`umZQ8*ahVcTW(H=B` z-4K7$ zm5)C9=!p{zM~+B=lv>%j*xc$vJ{KrAsEcFAP8>RPgx`V%(~*lvwiylm`J}5?Z^Cs9 zwh!zJG!>dl(dV~lrTt>G$W^ztEZtBd^6p6#*RDizvXlv1v95Fjigm6dmY}C-$!NAK z{g5Jy?Ta)YMo9 zAdb7`maCC4fBV}%W-l-|*dn$QIM@Q`^bdIm0-&DTK>)PJ^qfvipg#ys#f@$g=k509 zLz0p4tXZ>o79Yd~P~OD9kL--0-Pk5D3&dOyWGT_*p+mk&o0K>JpM1DvGPq zIn37<#KusB{%3l-j(SkUvPlGoV%dI395o|9_`yH0JEQmk z%?G1Ue<&qRbS`&GQQe1$t01I3HTpO#NEXgxk3G#1PUY#RUnY7M3y)<6gFA8J=;g~- z)YqdNIthyda>AcU!5&%FJ9qBq2#tkT!+-&q7!b1>Zegj@?Y@2W8#iu+gP|)H1~?4a zH6)t3Pn?)FYc|+O_I|vbj5F~-$FGiEnB@cmfpsgISMUww4&hKRF$FZZW$V`0@q|Fd z#W%s}s;X)Tj{{$B+VnbP9K$x0lZSd2hloKb!w<=EMorBW!~={(R)~qnEi20R5Yp@pO z_8&PZ|a0Q#{n3_~%r(f6mA?5HSa3~ck zSRn@J1tfqp;E;8L?$Kw9dcrRl30d$?sN{zb9K`0HI@YEFxRUq|89JcORgC4R_Z^&O zpsP7^YUa$D0;vdzCzAnSp4Wkvq${K!a8VmKZl@E7L2i8KJFh~@hj_iJY77YJ`0-P~ zp|80z{E)mDVrz8U@kE90!ItFxS|K@jvCTHTGj)W4SBS+naSi=|H4~b_K1iJnOMYbyt2p*=0rx}VFvsQo}Q29Uv z0Z3!U43~)k69ZB?cI*vc2EvV&vPu{|dN{tTKqF9LX5s}z4McFEC6o>#5r7Rf&wJl{ zGsNKDy$6v(@FyK!am8%pApjMn~#3h&~O%^}BX?W{);UPLXc<|u0*IxVC&p!CBcl{?f`}XZ#bLxJP!byp? zDSELK1iHXaE*O^(0Ke#hPH_Vy3Js$dOD>$KdY}Z5ptu8>fGi?Eif+`JqrxHFfl$7^ zv=Lx$z=;F7pxXIunDjK6{)UA=qvDZ?z#Z$Sw^Xwa~!Q>Q{UxysW`=Q+^` zqmVPr5*fK$Z>CGI9V}OP9V*4L#M?mw&^kSOoJJ|=as@Z_mQs`T3}ymSAmCsfEcHf) zW>8s0=8`rTrJ9vQCWV$DOY<4&bZrr=8jQ2mCx8Zc`oJ)4pz`$Tezbul5^|*_Lq)ik z^Wo)xC#7tHD*pcO{}(-r`|ObBz#G5kJ-;(`>Wshot1kmDyog{;N6n7t?`SF&^MG*R zuC{}ixP1^sEp6!v-)JL_Fy&^1o^oC@o)&u0P(9hULwEKZAEyfgBL2{6JaITm11P8H zUU((f4?`F+Vx(*=9d8P)s6+MbsEvPq;vM-bt3$3hyA!`d!e)7ZjOZI)6!3Ab6CXy` z`XO@4EZW2X+AbaT0!4Pyn1!7zRCCF0;sm0#Chk#-D5@gwc1fT^~ z2$}&QA$EYMq+%xEDwcFiZ0{aU#ylND91Wx( z#DjPO3P5w9km=JWg-2#M%zCH*&?Lw6q_+w{EOkN@pVA&)0eoq`T<1R2JKnK`O34zi zDd!fsOaXwj$pul2u#jSx4*4Ou5Ov+Ub(o_|hLOgH_N_32j5De3E*7CD4I}M9p&3-h zE8r+BT{U(Yb$0H$1A&G2FTzgGYY`l*NkoBuZ_DW)V~Hk$@o`jY@HwG^2a$5p6X~mk zt3MfW46PzwiSa?ah!~|CkI57Ul)Ev8Uh?rc)`>vp$TbN8-lcv>E#o(_M0ItjC<)D6 zXZ{u$j)5Ko3=}f%_1E{ozVOMAO&cwlAq#GZ!l)vSY9l<3(APk-#tS_+T<3{qR?TZ6*)7CI4XHK0ybH_ zu#Q3u2%$q1s|<<@64kM7ZdR&a(+TN%uz5E5r+Fn@-&S{u;<<$xsYN3lgV~p zShgtVkCNwR?4O@T+kz4+VicN@FX#UI|J$cN^+$^rFXquaqJy#Qv_31N{iHxBiY%hS zHd*Iwh5e7@h147Ibz8p zLj(2#SfI?9HD-s1BziAqfgXgkX4?N z{`4n{7hjIUG7svI4k-fE1xt$3(m2i+t#%KZn`(z4yMK zEm$&!L~fsBE@N1~%k)8jYz{(l8Vu)Zse1#vd0s$(7MZ7u9?MQck8Z%~nemwfydO}3 z7Lh6P>G9kU0Eu=b&6$7%!y#>&u_e5e5~I;jR2z>NJa~}06>QsA$R4D<6%hx}yI{dI z2+SY;@G-b0Fc|~j1f4B%zgurzYDom-C)k^-nB)pLwSj5@oiEf%LJV}IXifO%a%)t# zHHgem3R7+d25K>9%*<=j{rcLaqK%u6&&I^NNU$Td0k`mKymHAczfvL=fKwin za@rTZaTO()i>~;2m}I8Zv>g;VT{?v*fK(!nY`(bb?Ac2B;&`w=e!lgqS!HGRCnvt( z^ktkva;g)e@B82X-ko>e0Yd78*?0CSa;ul(Y+TM1FqJL1K&-`*lCfUmROj@O9#V)C zIDYQKcD$x$yi#1QTep>XS{Rp3n>IPd9WTxG$@S}BvoQAkEj0eH*IwHVih_XSoJnC4 z5hP&D4U{3lW?@A1xpwUq4DcpS90M!}80kd4VWj7oc~j4P1JcId|NRet;R~Pt>}Sh2 z`v&X`NvB(ivtp_jGK(aK6LV2^nwI8!JmSSeAK9IfPp4La9*2}~#=4V&~_y(~AC2+A`W zC-m08{L3#EExO|FyYDq^MFqWi|N5RnY=S=h#5)S37;>c;JX?t=qeN*Le${xgdu@w$ zm6B5r=f&zxm(WEK*-@fw)MYQSs7{2TYMDz{Aqjr0RMVI`PjFs{VMiQ&M#Bf-5FiAY zw{6>niCR_Fa04?Go(;hHzI}&jjEDnxlScwG;o?q}lpgdqZNJElBC~Il@Z={Y+P6U6 z_gS$%QCp~z11fhHHT#Y%l@vT5f_^Z9YyyqmFZf0;fw&=_KEMMV=*0mTt@0BmdX-4# ztQqHuT0|RzCoRDyfha2v%tlvwHK~hf!!Y=P7XfJpBtvW*8iidfkzHS|GD6A96x@Z! z2_p*91hM`Rs1chVO#2*RZUc5Jb z1uCLTjY21AYlEViGG#np153Flo_N-R(4Ryn>K#gyFK!q#LpWf_Sqtij;Occuaec4KmAI1up1Qi4aBBux=yh<&Z4r?6&l*m+GjC(%64p{REI z2-%ThpG%0G;##yE0dWyUcBvmy$`2MIb>kz*ReB;wZA7kvb-j0J87p(49;M~TCK3(+ zj|3zhprz}sTZA+NNHekiS)_Rwvm&6Uk^~bHTu`EvCa&F>^FQi2+bOaWw>N3hBvuAA zM>I8Ypwb+RkHS%pNkMa`Cr0pgbzwb&W6?{9zmJER?{ zuRj)}eS5guFcD%FTj0c0 |mD=&~FXgVJlhCCcL>NZTC<8F%{Q1-1jrd}{dKF=7 zV0REUluR(ZxDk{PIerU!XoLEe&7CF3Hbam`++cCjVcSI^G;G)q0Kw+y1P>w%gmx$_ zdhm4v7kb8LPjsTA+n6Oev$JzNx;kn0O>#e0CNQG=z(va$;zy7qh%*(;1>D>oY~6y^#eonk^)kQ zP4S)}kaOh7Q4kT{PJA?)i9!VSfGZS!NI|6+(RirmcCai$QRs0%g&u$|Tx1v| z=O83E8a#Ngj{Om&LOsBM6Bx>QNN)i@mH1sjK!90jUlJXtM8vEw31AP|y!q9!V@CV*|4s`>AQEv3w6ikN2GO}_e-J;I zN!%xUN9?JzeVnuNzTt)|X3UuU$}3xb`OD{+T&NQ;w^&unIoVf)Feg~?;r}pTz&P36 zz<6O|%0#onO1{U;VK>AUEFED4b3bmCXem7tR2uS9zAD57_F1lsq_KQmKp~I?{6HKK$|NQhZ|XV=9tTVb*#K+%_aEWh zWb$aZ8AGMCfYv}#lX}(^V<7z4kACzc5C+eYKMCN^QDS-eq-U4f$&w4Yv!db*l}c^O zBIE>5ILM#@1NzXFW{lSI-a+!jp1`BU**S#TyGIH>u9lXkrE85E3aaxRAP6ONDUY%E z*S<>aN5u`5hI2IR9Gu8i-Jkd)dcT5YSbVLu3SlF%G`K-Qg;_{B~XVP zV|6>s$mN$`{>3kT>Amm08-={*F$<_JdcEntG`4hhRQ7l1We}3W!qUI7)eV3RYnt`p zGl$(gK*HVxHgW_ekrdn#R)v_505h@;g|7!Hrc4>j&b4dTejM7Np5QNmIyN=dCDI-U zSjacM86Or7gOy5JMQ|a~p7rau@pM2HDHGj>gb|IHPyz!Ac*97DWW%#entGIN7l`Fq z=s%!ID~+lXr55G>+J+?HHgnD4v}ELJ)*+(?2_=61^Pg2!jha1s4ise+^5pU*x`Pvgf*@-& z@DNN2^?;jHq$Wj2#*i_oOdR-Q^ypzGfoMW1Yf%T!$lDTqAt=*ME(2!y^R?IZFte_L z0#JZ2g)uY`?m2E;2KC%R8!VOy9|aM^w9-GZ))=8rN=%uCh-LTglfs39w8}@qZ*4^TarFau58RJhfkY(Iy@s@<_;2MQ#2M)Se9 z=8M2Dt#v&iK8(o3pkCeGm@OWbh{z}~BE*{ky0j6FA72H?VW6empJp<+0$Knk5RYwA zMKR#Sh5)r}+O++-=hm9Et#SMI-Pd2g$TDB_1n+PJ0s%L`y~v!e(!hDTnNA!kTJBs5ZP z{w7`3xvoYBNh+j1fqG(Im=xwwq3fB!d+vEBp9{?7F1_lORAD>BDuju6{q5_+S1%P2_ng@_+Y zIkXC33lNC{*?>++(p_CW-X*Kt2;ovFNDy*vCCe=u7@sIvrCevML8qH2O7Lz$r*Q~=f1t$UD7 zL!5ETtXY!*7#fTEHg>*9$WF!vDaSYg)F+>O4$m{tjOe(93#am20EX-#+ybar`xD?i zLQV4s#*cV}2GQs|ay&f!@Zm!r``AZ6{pn9HUAmN)EiW{H_^?7KISxs4-;Mc&C1pdTjbyMO7`_#PR^&f--E}?tjzAr*2+=gS6WN-~+cdcl z>~5psD1*+~p+G|1Yu|jx&YiW8>PFr7mz+UIux~=QD!Cak$MOzR=Ssjjp|Rk?RpGu|RJm7VO==NMMgxPS9aOQ6_uO zq_48Dm(ULYT(@r9k|ndLlx!9q6>#_b^Xq^V85~h*Wa4E|qFfdE4N!mPGoPuiZ@lG} zyCAFd2&h0bh4Ne$qsba0kj;=GgCTw7CCO{jAq$UX;8`MHdub60slYU6DR?>W5 zuv-l;ExDc3g|?!n)~wkKHeyLYRiTgJ$g-0*lHi+Mg=}Gsk`fnap;E5LoFGG!!7C_1 zq5I*SV0RD;KydLCP8{=rDjFKLL)IA@C_p&NYF{Gkq80J`h!Z*C2yq7$W_PbK#1?@K1xc`(viDKR^l=qCI`aK1kU35P zX{aYA0zC&;*+IAktr7?xavQ=N+MiuX+#3_h<1pxDzSv1w3DKi7HE@U7_~a))PPA_j zlJR*xI_QU#o#2XyxVBA`gtn}N1JQXwY?p(kyvd3%I&ehDcEx;BRvOC^a2P018>egt z1Gswi7L?XNxtUX)+`4t=;>B}-M}Jv`m67!UuqkC>zkY*|bC!sP0)z|ThTOt^PH6^5 z3yiqgJ&hsnAd(muAY8H>ZUAiQpP6-|j9>rysR08<+2zNDo>1ZZ=B0NS__ zJbIJ{j24K1I$_=NV?36rhd`S3pj*f@k3%6M5)qVmEx?ur)R-|8n@OdtHkgri;+x+# zk)62LWZbTJNNpmrJtgkP?1GC@ zQOh^Rk$dHp%|^@j^R%;^^Fne!h8RcG!;)gru;5BGT7lKZT9=77=to_#Dg zpJf1v#%3W4EM)|da!@JrspLX3=8;()NRAZ`>n0;+tV@6&DP|OER{nP`D}d^UAp^iT zPg(w^P&#k+jS_y|y!jexDrizswgtpoP@|HenK-^lF>uY;2@vc>A)Hlx{XrT?qXWv} z61$kFX<~~&4)dDYtnJ3W6voaao0JA7j>jpah#FAIL-F<2ka!}fsH!Ua<}x$UAQ`}r zA-$M!tU~YvCw}9iMYA-;dhZx|K%ScrzeL93i42m*!I)Yir8OY%t+4lj?4(_7Lf67mF5cdCwo0}4G^6lmPWNibwl~y!L#wamEw`_5dYS{Yh>yv^|4hja;D~Amz z8-N-?h~l^DaiWAw$n1uoz-)v1XLt+-trZK^Jw~+i@MNE|iy^X0IV8Ps-d!N|Ay6r! zQpXEcmN?LS?o^?Z*f=!;jF}hIiN8@B@5QnG(Z1<;)TmL=p*)92xZOtx<55(C#i+=Q z#UYc^_{4CIrn)EVyTOVW7mgxx*dHZFR-$*m50nrB*ESP1l4v^^#0Qx(Y^H1nZ;AKU zva?q!#&8&VcgQFKEqfZP*1rimU}W-W1GOc7AApZq1SKxx7sV|7`e9|%r!!{X4?p}c z)aZ#5^@{%%oDhndpps26Vu}p?n9KGVXMiLzmz%aWdbV#GNL%U7hGIC-)&Q&8Sv>3o zJ@6pzLUSYkF!_D6sZn?+?YYE_^q@(hXt@p>c2@kB+_OrqCq0quv!j6*5j0W9q?d?s z7^YKveKcf5%Fota9|kLUcBSCfrICde+Y6BOwCcrYiK+n_~LZrt+CzK0JV z&Rc>p>A8(q7%_~H2UrU>DPB^M-FZ8;Sdbhvg-%fY0yyXLoy$#Ci4!A?D}%ea*~tO6 z=jqcG5>&WBO7s&@I!B5^8}PEZO^?qm$c@EcE9cpbu!9qT8s3OWWQ6e*$ae$Wt6Qfb zO4--Et0wpxn02O}>ntQR(+D|#O^vl69$C@Fzx z>-tCyI!QUC&R0^}Q|U1=J?N)~9r=}<%YE9?jjzZ?f4jw0z;vsb7mJ~a5Zvj4| z#*Ebo+67uX`sh>WGuWiyZ}|RFk29?pTyYOE>%drslX@tQhDmo-e6wZ{!DuR|i+q>S z%JD>HfBeUPLImM5qJ2AzoU~#KKs~1}{qb1H#fpyXf!C)Qexqka&^)C@FqM5D2@)0P z&vA1sA~LvY-oaNM$VlUO zb9Ab3bKblxRHLw;(>TqDOODeDUZ))@@;88%eiXmt-J3?e5-N#vxNmgkSc{qiHFOMngVH{$cfb04u6FigQi$6lz&Cwm4Jf3($OiQ?o#i1H`0Yn8(D)5)~a4T0qg( zlA+Ndc1cXD0~E#M`g?CePU3-_)}(*tB}T~;ofAi8w+O7VPG|rfqs5>GRLa_rcSist zyKv-nG}DU*tLDA};q!5PQ$h_SX5U?kkh(*M)IF6^UDQ4uQU{VD)z%(h;}d!1vzRjw zk6Ty-m7Ecg+U7)d9_26%7B2acM?*V0txO_;2e+^R@pou9cR=J%T2HB zys^B|CqD79PkiE2*I$1f%qwu~yKXMcXvFJ*R#2N(E2Azdce_fiS?>1Khu3G#&SSSq zzeMSQ0tQP(kPrcdUwC1CqzD!4Zq}@t`SYjJ3|lW#)c3K7@6N7)NZLxe6VTx zp#;!y2HA^8FXjNYKuN!EZ}hi6d7h(6DN)Ze-Qim*S~(jkke%8t6kb4*Cp&zS>n=- zgM@H$LQsL0o}V#K8R14H>$twYNlVs;gewfzM7Vs*++2JQb_!_Mg(}=MKb;8FxyzUT z>LVZdFVvK6_N`dyt=XQ&q_@HFvO6jT#u`iOl|_dI!!!`onGYF;Gn+T>L@NM(Vhi&? z)E28SOWzC)Zf?%~Xu~85mq*;6K3$a&V@1Nw(^mcYpMM&&ZxB)$X5Ts)I&>(m|1Mk0 zEno)_E!Tv7)X&9wEtkZmuFyU+aUXmOjU@o|hWh#BrZEillOmRbV)-x~*tQXB9V$>> z?Kq6%%#H^km+-v>$mk%axDs2YfRK@_eh)9C%Qf`G3glZJ~dZ@Cz1P&RaWA6Lmk4llDrE-B1}l z2h&RTSa2*QFE>mM#bWYCW}RHGOLCjnr|#1SGj!?Rdr~|}m8Uk2Z|zY8qZz7>G4PDf zk(+&&T`>E`5%tKC!wj`eBATNj5vNe2qkd^QudQla$=9aSlB*0`gz9q*FR-15I2`ps`%y6URAtabd2sKJi`YR;5KXGngC7=g4^77FON zLT~9ES+yX)J$nu+=qEQyIuFojt9PJ|v>7KJfAX-h=vhF04)+@hJ!Y%~mRTfV1eZSY=BQU(K@R))d6 z2;w-NvI6X28)>%qO$ygb90cNVSd^K}%uh3D0)ZZ!kW6racO3rA1Gfm$G9If@Sz$PdBbV_DG$oQ=Pj4pCoO|!8 zUL1J|cq7x}lh|6c@6PLx+-&+kWJ$ThwslAp=sq|knVCg_cx<2J6%#AF$U7=lRm3yR zCrQz6;>a(SOlV-9-X}?)Lm(Lo>)DHd4(Lb`#yYg;3f(B6+>RZ)o_zAzd+xb~6)9hI zJZf3h=F@%z!4cv+g^4te-3D10vxS2BWb(jK8V((O_lzLn!;sncz=1!wd)`X8)eZ%qMXZjoMo6qpPkVo)GOB)X`ha?iqel9);GQs(;Bs3&^TSbMHRZjb;6 zf+nVROi#MZF;*uksew>xu~SB+Kc$;1b<+7t5##&!*Up$R?W1x4?G!XwvS?RcB?X`}Tyhzw3K^cJ7J|EirUY6o;pb_C zKKN{zyc>yWC@S)lB^O#>Ds9EGD_4h9R=HHnrn8<1Y%YCrkzEe$drJI-Vr{-u@=MJ} z--_9Ha!JW_Z+eNl#JFHC3}A3BxK;kjW^fHf5XE&CI?+7m&!3Jx-oO6qQ!l@~i6E-9 zH92xmE^#6ih2(q0e}q6oJ|Np38pBRuf^2*kYFO^-F>oOC8cJ7p?9GepgqmgM*GaSQ z&wS>7qJ7_d^G!rySBRiQm_T_GDsxxU%92BV40h%IQraV;NqTC((;TxPs)alYqK~Tm zL*m$Zvu~sbQ1nuVw<5Bm#P1MMk+x@totBH52#yr?hKdLmDNL1$dku${33#d8o4>koH|AfYH@h(8!N8~I>dSi`y-6S>6T#1Pd)V__6SB7_Le-& z3f>pMqs-x?UzBj7Nr|!)B8yub0WcEG83@0-VZ%1aO4=x*82u=ZFks8i0w_i|N}-L5 zD6%V-d*h|zoKTTt{N>ni;hQvX8?C6;`V$bf65pXkXe`9E2r1Ojrv-87QS$Q1GA9^i}_S^TKSb$?}i(>5yQ zi`t^uSUdNBW+X<$Phq_MLlO&1e_#2^SDt?QH$Ed}mvlP3#uaHP+7NV5M3%LNU?>n; zir=UxJ}ETim?RN-Iq*q}b1hA6w{#H*!?38eJ!Q$}F68)8fH?p?BnL9r#&9lLs7A_F zh>Zd;(#fJlGeH|*8X0r{^r!!4<;wrZ)V%Qq!U+l>Nn615G(Y+mcv57Qr%;MSi`cPa zuS;dz*W!vRX5*4*F%J(TmOp$LpsfQx!4{JYkllmMqaZU7i*XXuwN&Ub9g?5?7F*eM zzEUt>RaI3Ij<=xEjo2tAz4xIh_o5b%h(Y>n$$*EV^KdDY6rRO`=%Jnx8?K+=!PLy1 zJC*dK5-A9B^dLZmC5XqI`kXdx5`i8>m^;wH`_Vz6?Krp4>I z6k%$=o|9xMG@^GYFvJmJ!GalNU_#CYx*~ZP;Riucxdp5UTZ*IrlBFP~L$IdaxP%4y z@#BY~-hjJPr`~WpQ4+ROpg6M-%*gI!Nn|eVy?{YHp8##k0@D~YNxeyGgAXrp#lX83 z>bE~pm{B~Nztj;6MkU#M8H=i0bV!$UNC1Y+zSpf=Utdppv||t=X;`P2fCs|O;&%6S zI8p3jiW%qd%PvR}s^V7E!Ux7mH^*m`J&b#?QFMu;^5C(!l_6W6QalB&=$2cqf{bF# zA=Jj#QjpI>@%HCl3`P+P!1(JC2<|WzSJE(6wzQiB=|Zan8AYW`>F~N`L3<`N9?dy7 znk7$fDhWZ&XrrgM$4t|Q@?R7>m*Iy5$@#g@Jvejb9Ap~KaQM-urh6;f4&4^RHah9! zrq~|nsBIOL?#o$nd(Tu}97! z@mlcN%A^oyoCZ`XT_-ISKtxG<&?$D@I55r7|&UC_4PM5zDT-bx4=YzHtG;$}Y(F^JZNhg43v^ zk#G;pbj*Ol3Pa-p2nn?KlUp3^aTP0Srr*+g521mFEyvXk^J{BWVATqfDF_hJRJkNi zZ@>c!R04&I>48$C{d3Q)fn0jedu{?)ghG}qnYCfVcFcHUoK|2D2mx$zQJ{b~RyK@L zMa3YNFY6oECDt^J0RsUT>sXd@JP4!+Jd}LhJ(zUfdy!#Gm@on0D0@aY-hco70Q1R{ zCuH{BQaou+y1&v-+OEvy)Ys0~w$->-rYv$%*4yoQdRi&o6x%NDJ}C1`vg&WGV4bE>PyVXb4cQ^5)ai_inm zWSz%sWIX^J=tzc5OX{d0i%MS&Og4!~24KhmMOVo} z4bo!kXW=S?xD#uHA)zbs?hGG35yZPnvcWyTIngA6^9d8Ok*GcI#qc26 zFmO;f%N%9oMfRyUb-nV+I>1|?_#b$6d1~W!S;U2-n=g8-ukwq~-dDcz-%;$95r5s$ z0E9f6NFuP=T51cR5nnyA{v}&BRtf?oG%z`gAcMzyeg_FQ|Bu z@@eJEdv*+7?FT>j0q3AB6Azxv5oFTrjvigb>k}KE6!->ud_4tvuV92PzPJI|9e%sO znixK(2JqNDe3;}_bqe*Z#4+-U^|?z_7;g>7*h>frNSi)=>Nmgntq*+QL#&S!Vrk>1 z{ZxPqpio$^vb2#Wqo^vTT#8WmAyy#`N>2E_)dn&LNaJ=RXELKq;FBYON{@1E45nP)Xhloz9MOTxxaexMu?av&R^bD7eKNu^JvjDn6-JUZ@$4FW%T z$`YYNMfkQjTm59F1XTxl2UJ43DNzWW%VG$58aLvRir|iOU=x;zHcEs6cv^1BqEcgk zJV08|d_>-oAzu<>sZ~`R98Y!iSeYXMfSAa7HY~mjatljd-i!B=I9 z4jjnP1#&iEkGrWgRu)gK=qd3q?UCNSC<{`Uu+AdX4&s8lZ)*=suWYgHGgy;i` z7&d)UFA|bRFiu{ywzgr#idUMNX36a?Mm)>8ao_`s9Gnv#Av((Z_3A)r3eZ43fCPu9 z22^UF(f28-Hyn!2DRq4!%E%ZCM1AQ?4}JXOf3$4bGHmwPd}teuq;=n$R4HCl$G3W= zxT{nJT}E(KmNa{@Y)TU_iOE@fX3z0G6mDcoWshd9aumnF#_d)`w!>CpP(uM0lqZ6E zXnYxk>K2)U(5g~^}?Xg=%klu)By*^I5T zR?5I@nBy!x(;s67!FW~?bCc*v1DYu?2Y8Oo5RNf0ftBEzmaJq6Igw}Z;s_*=K+0%a zX^?0TO*~SHfi^q~i3<#wG|+~9GideUvEk5Adz6&BJVG0eUP?Gy;2g-wCO`6Wtvkk+ zYt+!?DDG0xJh`$2@`R~{fRYI&jJ9Hzd7?0rP!+@-^QYWbfdnlJDwR{58i2u4;-3pM z#h%L!!k>Q0@LVNO2ka>mHs=5lmw39hRQ8v%U^~G!w+IG+H~N8d;>Kmmt`XSeT=W%` zL3i;J6d|V8XrcQ6C0!L`2c5-u6c3aV6PozZ3@a+(IB&i6riUN?+hxmc6TFpY_D%7? zMF}R;qu+$e7~S=)U#Sg_S$Ocl&)s?F?eBQUO+F)CUSeeKT!aF*08;d8@PG*z+!OpV zEkfl$p#Tnmn~d%RK5Y7~*OW{`z#{HPLTPK+Q&!_bUCwoh(o&yXwK4Q&5OU%W%cTw# z@J)IAcL^FOG>Unt@*$O!N@F-?406SFxW(D}fpM;xPym&UcABO+I4}Ng& z+_?`t@Bps1Q7R)FUF9-%1`gV^Br`0EDCCU+$LJDrPB zE?L=?U&&leoH&Vq-z+UnnYWFZkeE@^O!k)9kFEM9AtaG_p6LVjMh$>NUn0uQTH5zB zNbunB@=>+;@Mnx}0#dc|1V>83oo&tPQ-k4xCW7`+`{&ZSuoNgVU4x4>`-IkI{5FYiiYemb8SvFETBn{iQ?|$KhjVo5HI(F>j&wjT2 z`0+Y$oIj4cfHUkkh!zGO5|U$74y52CDZnJ!arayI1{(aM+#%OVn0(8sgSW|nwB06JO>C^^8rnrd`toQ<7b{(jgDCn z956jNdGZZ?QpJSMh}!5|{k@#I&Ch&-Fx&b98kz z_v|qDIx{C{&Y5$*1CFDO{E9+F6x0w1R=AVK=uaCrL{vyz(Du=SBO4+ncuUIgBc+Rn zu7cE*Fbfbx@&;mLCk=mgU~8GR+Xi&`+K;n>PeCm>&Uskr$kSq zsZgXds(g1OB&Z^V1L_AN2G|q?O2AsJsj020nGDpQzP<;A_ha&5Q-^IhsK&9=!i96W zRYi~j-7u`Nq{0>ieRVV|K_$}pg1l$&Jo$|RE2Kd3EnK>E368YNN-O!IGtlcL{MXl;J9%EfIvM4%4jq?Kt^r5N1tbxee$IM3L2A>9y=~<2^q&UD&jgW4j3Nhw_Ha>~*J`})= z`9>0J0jB9A>5D+Nv7|S`76Ii=Q7&QGvSpBMYPCRdjGIlHHlYzC>>JTBKWJ{A|LUtp zu3o)Dv~LGMFTJ+=%_B#VlapTI(r1(%TT;qo2GLbuOOxMIb~tN;nN1tVPo}#mw_3I8 z?axSPKwAkp)}BPtmp*ltYL?5L9(NYNWI8ZRrRmeZ3&$Okh2@se>rCif1v1|ek_Ytz zYw7akYj9)0&%tz}QHF$;!dFX$t6H(2cc^dneziq7DSXv}VA+MRZ{3Lj%qyX^YE6$; zJR9tzA}jWCM@Ov^kwjN#{N~Lvu_aeDgPd)qNP?O%FIC5$8ow^QwV(#)d84w`-kuXx}2+(vI#++KD1``0I{%Th9q1PM+(L)&F)8=}i2Sr;$Bt8{PH~f-r&lSm zhIfIPg5m5eix^qMM$smbsn6z}95*b&79R%CGG7V|Kq5gNk%I_d98%5~FK&L}gQ!AJCTu26*8L1 zL&qea_uQC{_e_?PLT&&!1Um_u3C;lqmlMbpCK0^Sa2gS;Bb8-M(uKQs?_RQG$_;5&05K83)GncZV`hUvZ`_gXH*_ek?W!NIF1H+`O4e znTKlFyZ8Bt6DO=$vj!=;Oj5)MtO-k)72uFTuNkNX)=UCXA!R81%5TW><85!uAm*Tw ze34^|cCLaDaXT5pz9&qW@b0^R1!N9u!P)a+SGN7P3yzv^&(pjdJa};K+_^f0k4b^x|HSmi z3HyHi_1^=G3glR>PLg5{kbR}kl$X-accg`cEDy+wk`b{5gh&Eg;qKl024e-aB(9-~ zxk+$jylVo)vnB2knF7e%UOf60?w!ZMKVBz%j$5_3uk@3=_F(W;x)O13&P$7XFf879Y=Xo1zd8K#~PX3A{ z@s^gB>gsPr3;U+PY~H-tGSuQyAf&d$bk=coK}K}qO}2F&PN7I-1U3JvG96SpiXqAD z|H^q@1zlpWky2#`>Dit=droa_9g+*tlWC5SR{cYzA%c|U>exnlY4&jP+)#3+y!Zu4 zaUp^lLQsR4SQGEP_qVZQ$5mC0m(aSktBaMCEy3j_BMGUHSkllmR7g}?mZ;z=7qE(* z@j5uXv{xkC4f;TlOoV-RcK(?-`H-uef*N#pvMfVTLmVb%;rQ|6)22;hJEt+_iMn|4 zBC=s>YE*c|4{8u|q>xUY=ql%KO0Y>x3dW5Is>Fd+$?4~w+e;u+;Cb7)3G6IFTdGK; z_o|vvmK34#J!n|5?81@nwQF4q7PRc!_tKUvKNZ?{X%Pf~R*SsJGT|` zx4!n;(JNQ3gm@Egf2KTNu6gIgIwfobI2S@4$ZQ#DNQks+6#feZHe)2h7Y^KFak-tG zBPQuswqQVOyOp@)|lGSgJTM2bc8qF(B<^BPw z6G)QlCutlSn*MY+cb_SFJ8F~Irdw3&3_k&ho*A&|*obB!L7cj~uQxY;@0C{$u3o(w_6?*e&LMn!3IvOD>(;G5Hl)0+ zTq%uM8fY-l^G^qyvn2!8kb)L$YkR!8x%ruAe%;m8Wk4qT6@wGq>SNuitw)^?6%WZZ z+>fV3Vq5rw_TA~vMwU#qOP9$tg#AcsYb#>yfG>WznH}5E0a-}i z%)0BxfmQW!KR`%JCD%_P!942fx_0~aZF?Mh)eX+%+wYlr18isPSwJSJgqU2?s84$C z+&Lc4N?_yo34x;PWx3 zA2Q#TP-O?^X*#q3A}qz+ETllPBme{Y_S>BZ`vwj?Y-Aqj*}$p1=Ygrmh)e;fU}e&w z>}wZ6Kq}8%Gyt9zNnLXIBqEXHibG6YI(F<>Q&ZEBgnb9%t}9O1H|WTbqo~_`>()(` zi}eZ?j6kNstX)e;c9K)5#X)LLl3bVxdCA;irGezK)2R8G4qU?>_8mysHd+w2@ym8T zm}>K$D^ogvS5op|FIi!v8on(get!}l<#s5`<&(+`DtQX>2jN%|Tz`^exck5uDzxuF zu>Rv?G)P7?@7Ci8Wl9F6MI=`J6)X)&9w}~%7cZVMW9Da{-FNWCareZNq;W)imjyvP zl+z)(9#(}Ez*Uow)py?c%fyM*lO|1KJxxD}wP+J#9TZEwMGM*n$yZX554PwTOc6f` zezx)B$G`dJDFjmxWTAk;KY?U%0?DbqzCMD*sr3MlAC%gZDN`XYns+~AbOa{GX3P_J zU>GAMacn5dK7W5EX*d;92>VVT)O*>oNA0k0KZ&(y z6Jtfr3eJc;WaIhE7|$p$(LRaen>u5CP)Hm(TG;otZQEcZ;ShdE!oEY;H=xsFhJ8Qr z#9BM-dytILk(U^Y`o|QIzp5 zp0Mu__HDs>x>vYBmTOrx`V^1g7Rn=pCTva4(jbA?8brYh%6yXG=k+Q~*moc^*RT>` zEGJc5go}Yjb3T}S1fO?YxiXClTZ4mK5SPJC961O04|$LJNi3B;x~uCy4?o;``0!x> zN5a-Ah9t@m_Pt@lhV|>$uUoe+a@aQjO-uV6eE>Z60jD95qHZ3 zNuV^}V~;II;NsrBFQFdW02ZfgEQKs_Ov*c7l*d04ZStd0G7%_hr2{xLs;jF3d&3ib zGa0<=F@Ma2?s1tKnc5;ZqJ7jhJtE$>TVh5c&v+d*;kpaK@S^d)~ib!)FGjgwbE&-QAz`^xP%{!yu%g3iR>AUNJVHed7?mqvMYz z?E4P4^92lQC~2l5_2SRV`Sa(oQ9yf046H!RL5q{}`SQyLQ9Yrjr^n1l!~^rd^gzKS zF~#}ug|v_YQUkAoSx6<$r2p`9fGi*$p{}kjTG%)5m6erLNb%KMAk}*v5*dkOIs_&! z_&)*F2&9I-zTRTCIB^Y=LJA}oEshpXpZ*hKhmbW*=eWT@2 z1C!Z8pMKi=?6c2r+qV7IE!1G+j3_2H$wqN7%ZA%!7Zg%=cXwOc%6*zc?7L{G017FP!~mk&*LSbC_b%o3fd?K$ zDJ^u!o*9@1&MsAc0)j^c6G1JVIB|j%W0_qGH=sXX1!3whDlKMw`X75|uYxcPMPdJ< zf^?BSiO?Yr(YZs~r9MC&r!@Kioh*H*kbs+Y^8erk(a|^rAzSXZWVj?GaPB$ex<&yC zNIUKO1MLD1_iEDeIlurv2bJz`<-jjQiCzb%20wt(gW`DEw!5MbIL3HdDz(k?0!Q#$ z7+}*hS(g1S`(}(8W0X=@K)jcxDd!yAFSOSF5kw2Ru9H#!3 zd>lc_a$Qvlm#hN}u&y^G`+ljt-|gxALK=o)Z2Vy7j8PZ}fhZd6J%k4qZN^5K19%Ow z^#odYhhP!hY?chzgcR!*A>b)cQb^WX zjWLJ_0Ml~GoHI3l?`NQm^xlOKT5FOiCB_)%{0M-Qa!xL(l%g8-Q|TMQ_uhvPXnNc{ zM0CypK#Xx(E;%ytxsHFA>mXf{FZRwQg<%+op`rIbu&MeJ35e2J#WvI}Pm4i$1Il9J z%+jv+T{eRdxSJj&p|vI{X|JY112GWv`Tze|@yl_ZT(vC)i>|4{c7PKgwQotC6rJ?*AtQ;2!bGpI!F)%LC_0H5ClOG^g!(ewHkhmeW5)IooUQ`9Ok*!`q_ORCkyajC2 zeMfK55LG4q_s=~}v)H0bbH3}+<6e;to86g6Ow{}|qi+nNJS?^gF*M!MNz_6AOc*W? z3f)2d_K{=8=XfCR|M1KIlD}{xw~(*(d?4Htm~BL$kWLebR$uf0G*IF@&d`eQ+6OX| za^E^Q3uJX_C{3zVCsz$Mbh4hhQNObL1_DwIRZ77$Rq})sR?eSJr<2Jf6!yVr4zPYG z?Vf(1X_~sO=kvJ{b$_aXoTqk;;vJ*WsP7ZfY&L^)Z2Z_YKo5%2rGvo$JcKTGsR7D| z!yzgx6!@DRCg?^KBS89@|Is2AZQB~txrOP|K;SMSWk(G#3a-~{mlF~KY94^l$XG$r z3R*l^@jVwV77NT8@6^8iY_(C~D^{Eda~|z@JjMfG1>NN6ZoIUc%?8myn>itYL^afp zRffKq&@7ird!D_js=}yBo{$h9_|D$BgR~h%alB7RAgyg4 zAd=WM4i2J&?IIDhTbB%7gdjL&6$x?3C(laZ!LY; z=i`TeID~u2htQ0k;p2QK=R4=zbM8Io-VEnz6ROxZn@w=_zxjRw+E@YBJw-pk({3BD z;)lnG;)iI8V6$(H2aUVCyW}QjJnK`NDU)DgdG&2DPM*@`+h#&+$6YR$mzS48fYH%W z1|E;cxyn5njnasdl~b)&WrlrjVg;pAiFyFf+}s?uyGoSr2Pps9D*;hR&StaebQ(mj zq|0P7$(@^6=sPyRA+k{XJ{`&RdL3^J4i1|Aetd)FC`Jymp2n;w93LOg&(AC3Og!{n zKLG*}i^X`QV>gvRfpBb)gw@s6#l=MsGCTY<_6C=Hf8eL-5+t$Q_M6M)Ky+u%_VzZ( znn24E6CONj-%HTj`5}&sj9@mMMrF3YOu!vE!PDC}#*Q^ic(s=Wn7!ytBocUA!0Xi1 z6p~G*6iF|jxv{jg1k!4?;HN_C*yJn_sT&_3mkN`g&*$Yp$9^_dj!BvTBm`!-Jma`j zk&lJ2S1Dt%J@A5?;2WsK0>i zC$mrzM3=yJ6-G4NQVh7FUMLiLdU_&}$il*cEl$8O!?!`&1LW&h5iP%SovRc90|Nux zI1a+Wh@Ion(b3Gz46ayPTeAY-|E-ZqrQ|ENiaR?yFm&=mcMB3gj_&R4otT(FzA{3m zf%|kPD1H#f#>Oahp-^ajecgl`zn%edq*oNj363$~WC8X8YN6d|H1PS}-X7_R`v^Fx zZ)|L^0iT?llo^h1`4)tR=tDz8>R7+Ixk;TCGYr0Ar!PqT{rxIPz}D6lhRx2-S~W7^ zqI4Ry?#!ZI}a=o}Q+Z!Vk`b*Dc0cZmc!V0idFN5500K- zbIv)uPx-6rI(6<8HPoH*)9eqY`u6GFy?TZJ3cb(WQubB<2eDW{ww);ssyb3x}`d+jB~HbZq4v9=f9 zfH09D0>;ZjyA?pdOo+!He>{hmAQBLu@m_#6*Ie`b z^Utq{;ahVabIdXJwe!w9!~Nzz?6AX>*Q^M4d;*=ZE&M@)fhwpGvG~uu6h}o(9}>(@kDXu1rT6V4N`$ zng&A?T8Ch_Sl8;e=uL?+RzoTvftDMccG_u{NS%1i-FDke@P5V_XQb-wn#t_2!wx94 zBmEXdyn7XY=$?LL>yNAHyi62Q^Zgk}j1q9{yYIe;=M-^9kAm%?haResxW^uQ=yyv* z4*k@*>#n71_8==i@fR6!BQjxBl#Qtk!Q`J=b1) zt?d|a`Q?}M93=-$bf6p4N{Kvu~d;0%+|--OB`q>0<~ z9~6)RGSI2v#w)J4g3&EpxKP}{3fvOq1{`t35nFD#rP~!4nZwjm8)jdAEgRH>BY=Z! zs1#iXvLHKaKHhFAAUF#n=@yQPC#QYjhQ!Z9`upg2X+b+ zsvqmFyDl6AZP~or85lJsb)66+t*raEy`hhPU7gJk7nMht+pC#++>qY0InC?zzA4o{wZ%!o7QThQyb8` zT^Or|fNVR`>7_?POE$nO0DbTj#J~&8aic%!J=3+3)Oz+cZb;1r?0Tb(Hsa}v(SYyb z#f$BWmxXS83DXj~>YvGw-ZBR+`AZy7nBro0-+lK1kpyR(q`+5^Z_uWne8mCltg{Zp z-(rg`%xr$|v?WA7e(kl_KIx>BU~%3NK5n<&b~FbJQHIk`KfOt`ktd5 zJF=*r98y=u6)=mide5F=6wmEI)2{d4dv5@7!wom!F!(<4#1rj{qb z`s=#|kz?AWw*p`d>^MajWbfwh-P=gQfBu6;0a=vP59pbUC4ed4fFYfWpp$E)pD^8E zu}<%~w<9=Cov_8oOD?%&P>BCP5Th6l$>KRy$Sp{Xb2Y!v&1GFv2`uQRlunFgFvT!A zegaBRyUHr7&`BZy$G&o|qrxecnmo?Qgy{o+Q~8?1aJ#kESYr*b1!kfFg&2P0jW_Z- z=%MrM)L@nQQ$2ljEs^q!BDNlV3x@?&rM*ET;j7Ij&Aig*&V>vUV>1P!P$R`6le)y6gOkd1&5V1hhVJ7Kp? znbwWSGYMe^(3oC7~n6C0;*$=R&A1K394W>Ivc2o*W^3KL;>uYh-gsk6K(YEO*YJF<1~X#} zWI{6;l5oR%X;b}hK|i#Lnd*=S9(bU(SX)0MtiU2BfJX^P)X5EKqbCS%epZSV{B-bI z|AiM`=uf^uUZnx@>gU6fra-uo9oh^~Qz8O_up`kio9}?Zo7~VqMY~;O3L`WmE-^U; zlcsBMU2d#XL{B+I7!_M?-q0$xRK;}xDI}eG>Zzl0>zX@vuB@vzpIZ2W?Y0jJ>lY{W z97bdfvl;sCTwYYC=7Pn-;CkNJs=U8hNFi6 z8n0H-0FKR98r(U@Ka+S-Y$d_e3I5QBw2o&TAk*U*Y#AAqIw1^3jRCZxBTr79fHJyO zS6vk#OnHjgW=PAgvUN5oKu|5o$IJRPFx@9bByR?z-KnFCerS_f4-1J|xTvg7+yv+g z6@^!Hm){bqh_i&}Vv2%azKukMGi;l@3EOhP6Q?D|5{xTZP|6<164cNwH?l^CN8!xR zwke-Ec~HQIB!sEUQELX4mVgFHUTK+*woET+KleCyg+D`lZUbN;%v!TA*>Rb?IJa$U{Hp-G=hH0B@k`+F5ZDqz;75BwZ=E3K3OwQ=(#5n#c`%XIT( z;2RFQu&9|;rQ|DuRxV8sG~w7N46ANTmr1x2f&gdGQ-#Ma>X!k)WqY4Lf4&U0bMl1P zRlZnEAT5Y6+}Lo#4ehAGOV4ex6X@WKnj599`Xn2MR^lNp0VNzHJ)~wmfaj8Z%A4Dx zEmtfm2QolIPlr-mHLYV5XoF=KF4xr0Mr@6zmkMw>VgkGs7-5vStrC;sm@&c#7Zr6c zV%P`~V-cO_qQo2t!lH$S6(qW11#Nc~he_)N4Qxuk-EqU>Fexk%(;lFgdDg(SF~Zns+n!{LC-SCrW<`brYavLtXE z51QMWy;H^XN5m#}A$rvvV`dU>YX&oITc}EjrB=aeCeYKWJZ?5Mth?1sUK@wYfzXK< zf&+;vq7WuHYFO9prb>9DQD>iZ_F3m>*XUaM&L;UEcWNx#&Z*x;QZ>oG&dLjEaAPRJ zlv)=-!vc+DMkz}RNZr*)H_C9SOF;yyR(?sel!gh3&GU#tOGaD8mVK%T2q&q9+i94F zKt7=Kscj2UqPA|@=yW460!bpBw9thx@y_J)-vgK74*Dy<*t^_9KnF5-L18#hU|nir zu(c9L%xSGj$5wyHf{nvzbxo>b1T0Nw=EUpprY7f&P$f_R@rbu6(9bI;I|T;?F&lU9 z6hrt+#Iv7-8=a<2aF|>c1>H!2(Lxhm5Cg%Y*pOF-3sM9kQ@&u&46^FKPyObp?SQ&k zB^<{zB!LeD8XTiE0C#n#p-b2l$xA7Q>yk!rw8W=^Wc7+UORR;`*s)d{ z42y5Z{3kn$pFoUitv0xnSaU^)Nt*I79;@4>p)TZ=!B8F>K>!!dwcB71jI}g9#8qQR zlN-YpT4y8rOXy)Pd0{)vw`=7uF_};!AIZuz+7~NxBQX(l6@|HYNeW38_;MjU0jltsks8?sn_+OWq|>*E>01QYtj?xIunjs*uc%JR z%UTpzUP9Rfg2-!5WQ!h#6te3soy~)uu?1@(vZPiUKj|Ao;1}_Eig;u2uxXn)n;kkF zb{SvcVUmoQpl8g`u{J&wY1yA4Eq|hcA$7c2y(PX+>GZ&KIw7M{(#>_rb_GX7m|z-{ z!k2&H+UC95t8gE*8`Kq`v&t>nps{8l9+`Ie(di8j;av68(=Jd%pFE6{huC0gX$ zl!Fy0K#8x4tf8LqY~G<%SUff|shz{8cEB!16Dszb7hDu7ZSX;UV4D%64R@gb zGWiin2d&6Pp`xgaLGdJRh|xMZ2bv;QIi)k(EM$ry0zmVi3giXcY?bd1>7+iu!pR>2 zxde}bU*F;$CcB+V5Cn(;l${Mo0!CyYzD8lxirlSB%9KHYODw4$g>l|^RT^O|=8OZj zKEtwJCrS^)bUnu%cO3OVIj$<%gI%l7ltL=!-Uu5B6H(sMpV)K5HRvbkR}C8zI#jni z^!VhVr64&fi|WB@Q0uHh+M!>Tg9&Ks8521u2Pr+W7r_lao5ui?l#gP#87Q07&|qzr zBA8%PQlF&8*2t8D#4gB-u`Z%VfFzzTG+0jrn}^&BMa&eDqCg@THv$=?E`J}=vOhzr`Y(+Y zUr=js;ILYMzspf8fLYzebHEFVPN!KfeAED8&_|iB!<9~4nqL(~Oi|S}e*@;+-od8M z9`o;{hfb3*bywJlW@(C`Pow&PoIsmGhol{)NWCi+stQ&qsst>r;z+2PSgg|pM0U{P z5=L=d1kjzVm_Y_G&X5c%?j8p=9^z<^wh#NzW+b6V z5cR79!QXK*K}j^ESr`H@B8*VD()4^O&yesZ*-@J*HItt?tdi4f^Hn{nuFcKROuB)1 zxt(ZTn|C*WIlxeVDmBa6Bh@ia(oDW;eMVwtN4BXh1EjsIBQuesD{!HZt(A3QxPE&? zIrWwqcS_V#Je--fiZ^a_hGd5E*ms?S+dWg-aV!lH%4n!hR{Vt89U*sqi5>(9K?XyJ z#s;0!(3#HLtYw=vBI}}-LW)x77VWW5^?89s1jv~<4@G+hMH|N_7IkFRVV=?=|EghR zl{z6H?=F>enF?r-%S__k1xz&J8v&WNQ$P#vUOBI`Cbv zmdxOOD~8wNdI1GY_bIg0so+k7#o&{_U=Zj@u-q=8L4z2uXFzj8AW~(6_yNQQJNY|B z7zdbK9sCtc$!~mSQ7$OVc#sE}Jiid+2_&n=$MyOBG`0n0&5MA~xun$7Q!0xT4AFwIsEV;~)Yp)u+nAfAWt$*`BmkgSx|^@~~z zu}AFfC|>sI@Ju6lwFIG?(=Fz#2uUs+E&gPvSZ5OZwXVvl&XfURL}m%MbL#c0xEh8S z(uZp;;Q*s2wd66rqJ)#0K)4bzz=4w@BwRHu%%z7V#DrV5kRC!DJ|peLtJd=AEFtJ$ zn%^P0qDs=4N<^nWm2Cl^go9I|OH{(AY^mMZCWW+RsfMq>WhT(0ANYnR+PoKj@?Jd{ zGJaphW8tUVx3EvRjdi5vUa%;7a4)GrTk~5*k)U-Qr{Ms+rg$7cPf6eg=Y-Ela-&+= z_~|iUYe)P+j(nKEPk^r2r7g)$=dC5AkVas;k(~hb3>%#%vK|}ZHTf`uU3sYjP%}_A zn2#A!|U@V(o+k^@OV!NR7;5lA>T!wV;c`@Ttc} zG>jLD@{Sfh-uj@b2;>Eb&%BXaN=bqe-eHwpc%zq3UD&-PqU03yOBV&glOPH}fWSA) zCwB?}f{OlD`bY-h5f&)cuJ)r@5sFW|mPgJfwL;@x;@l_5AW29zNm0!1?BU<2d_t)1 z=&Au-is~eCdoaKmLd9f0*Wxi>b)K_7CZzxET|G;jK@j#M2_{VvgpeYQl|n#~bf&QI zH`x0t{0YH6sRH=}mg$nxLJ%dSFpXf9CZGr+_??djA9xsM_T{`=-#ahN6vy7O%*{SC zJ0JVr&E=I{<)qL+`hW-KaK5l$l(EPSq0z`QwoR1XIJR~^b}!X>tt_&I-7_HZ`=b;| zYnu4WU)VG3BoswmbG>+KEDpEAp_-zE0>^fU5U>#tz@>nMGc0MfLBa0y!Zoos0Rj^1 zY4LF&IN9txg^Vy_90d@V8W&|IxdpCmL2su|2x$AxB;u~&*%^?K#WMh?mxsnqq^M0s zFM3$y`wT4v-=QkxK@lS55Dw=kK$E7LEF=OV!JIZ_fe5PzX}Huy38Ixwq@wq*A&mhE z1c;sK$^Lp1A+g`2`;Ktj-!%K(cO!3l4X5OeP;O#J0K+9 zB;yFz6s(Liz(maZ28cAm>0g!08h{cBB)LT-A)AgM9}R@V84RC394TM{V?c< zK|c)Dl|bJF))n$KKrR8!VUSCZOMqMgf9K0pvEAL-tdhtj{^A9h z^;q@tD5U4-2WvptIgk%~*WTHC*Jnwy>@M&5t@q7Sb?Vx!xnFuT5)udto4ddeav(Vf zhXvvy8!$5A@a+%qe*ho+-CrGHf3U+JY(NT0AV2}a<`R~%F$N0-B7}@CGn$^B>F$}X z>p3UicRj9?rz#_(s?W(hOf}VASx@h%cq`B8ox5`7T6^ua*Iv8w(d60bkVFmXp5~*k z%_r~9NAJwXZ_g)h&kx_8kG|d~kN*13yu9Olzo!QRU^go^=h}Sq89%!I4xn!Q+1=?r z>97Bd`R*?{AEi%ZQqxUh5-P(1b*0AZx&3_ypZJ5r80F<#>WqAJP@fX2nnclAZ8LrS zZ}mI>XHWO&2hJz<92%PhVpTFGS6$rTA`KH~Qplr#n5}r%&vu>1Y%%=_Cx)qFu)J!LJ>C=`UaX&i`_}@-e#u@{&*= zIR|)+XLL8ieD9x6U;W8Ge#hnAUfyMT;B@4vQl99EtePj8PwZpohfeoge#7bBeD9Z! zfBi4c%Li1o;!DCuQeT0!Om*yszt(U5C6C^8y6beuKB7;wwTZSQfHsNUq(KPFYHIo3 zKh0Nu^6-uSD9K9`F0OnO0G<+RpE9>KpL~7#jsInS@THzkHMQp><`bQ8E*p)BMq|*j zvF*wE*y%wp-*dXReCHn=zxmg53NOcMr#_0SniVbOba#I9$NK&+_jJ$cE-OuKXEbU^ zAWdNN!IqY}`-D@Qe5aRpPQLzkj=%nMq_EW_ul%MD1oa%DqOIxqczWxv_Ip3y%Tu8` zt;{cT?4U&q2!U{hkbtE!19Y4!j7=TC`O`VLeQ^7G?OBqP`bw@J5YK9=EjrI%|Ji=` z|2Wmu`5yB_`a~x%Xb5Ye$|gcUBV_JghDb>DQI5a#V>R9$uYcZdkObu;NPYN~Rb>ro z+nL_^-{-e~*6B=BAKFWq(Wn4H2+u;q7>G7F( z>+=`t8nw@GobUXT>8+pc<>|cWbf5Xyo^TE=CLlx}6KK|QCSZsrG_=mlCp{mX`cVB~ zy7LQ1U;ax@N2ETw6K#F?eWkTTwcEvf_n%K+`OBWX>q@Bhu}m;WL;{906ojUW2AYUM zkVG*pc0053p?Z18<(=g>|H<)JehM4-h>Es8%<+d!U&)?jF+cp(`O#AK_${Zq&iCkt z^b%*Z5z0mdTeN5(RIG&1)dGq(P+fp=wwK)}P7hq3E`m?q{<-6?{jVh8x3qcpYM&0+ z{L?1@I+?|M^ws$*e|diJ>#J4GJ?0~ODUAjb0_(L~5h|TPnSyGHqN*T)RKOyHAc#|X zX+QMjZlAn&{FR?szVi>03Zh9!0143Zi=8IHg5lUdwa-1;r{tS0f59sZWg?;5+? zo{s0Q|4hI4|Mc|0`L2D0OPx`)fkwr2LRQq6TBNRKytaBi$Z(k9Y8auYNGYO?Kx`ko z$M*4ANOFGo*3p-LYWW{1LhNZf{ua} zNKyo2r3Pw|TAWI8yiwy}-TvLf;TKkay;j4O)PjtVB0!2HNYT*R^hr-geLB(JoA3YH z@o)S@pWI2+t9*%X#R6~A?Kr>tcl+x<0K z)t~BzUv;|c^1kz#uOtc*5F!fINf^SIy2^MXi|e`ax$!gq!6SW*CpC zE{hh?G&)J5Mhu3CNW%#YbFwU{lQ;i*9lUn%`tP)7NkGowmA zvh#hXd-gF-+Gx-gVw9jNNiQW$l7ZBt=yAqdi<`g6?pO2c&POV`+w^pQ`r2Qa@BGu%zW1H8 zrD{9Jjv7Mb2^mO|F?A*5VHUTtxIKLQ4-en=`{HrckW)xvMtaV8lh6Dar~7^HUw{#X zR_2IGglNYIO=n(0pqlXTE00z_^~L{eIQ*n`KCCh1;m`m1Kd+wmSwEYm3q1S0b$@MJ zYRekBr$^>@e&^?$9=d#w`2oF@scg_9fDkq`btTl{S`J>zcw_k3500Pup-NW`Po)ne z1-+tiqP3MQMgo=WM7}$suQjb?P<6#a?9pK^hKQMm!k5sIx z_gx>?BeEQ>|EA$nf2^*2ycV}IUQZn)BNRyyATfp@V$(ByLLYIKH}j33fA|}Jg`PIO zggnKo_3Mf@i+<&F$V6CnjUQo9NfC{*&hy~015gk zj<`Y3?W3jY|2=>0ul30{R$JT;oR4(^(MHf#1x!eaAz7>}@U0rI)s62NKK&wS1_^qEk{@UM5 z3T)+79C6KBQ|EjC>@->F_-m^W#C@k@dx?!5ObA6$07WV(YLW3^6)C({*S;`(`j6Mu z&s3(WVM8?^^VH$x8it{&(pNwCM;9OaeHpK>4Dw+fM;WUGOp%08imlD#M8^9)-SyXK=L?JINZp=&ARgG zN18fZ|IOt|o(MHh*gWA{RqHTFstCz=_{N`Ny1)F!KSAjRY0XB6(TGu@Ge_t!-R-1~ z>QVH#7PrP5U$mQK-~C|~ouyB{xqS1-`|d9~KVW&s>7g!hDg_M@gdibFhCB}cUeDro z4qh8S^CR{8_Z25qLpA`^O#wf%CP_kuD|PsV`QewG?iuI_1z8~kFl+Z11qe~9?2|ru zd${r4wYc8hNz}dchu2i~d_2GP)873B=Od@b8*nfO#dUZvML27foNc;Y&-hx6H^)!@ zk>T}!d+=GIUX1gGNJhYE>N(&}nh|)9?9|x5d84k0W4u_Bb z!0_=u6y|IQ_1RG6d9Ne^Aoe`o{O&8C{S!I(wk%entt+VkhE5<6BWuyxI@wF-hn}47 zGELw7e~*9TuM&f5UUZOg_zQpGFR($9OFy5(S}mS^MNKl_|JCJNKhr1gxcsKm13l3t z7<8lObxgk=uWC-?4>evNUjKvRr~g>hqAF`;ed=8<7{jJYL9mBwpM#s7lMT2UZw|w?y7k+KNAZX8S{2FgzPV9==diYx-K_!=>?@!8cMm@K z1F35{xK+dTm3usrg0v{KEhx6OF1wGJA2{8cmv@%m_(%QltE9Rc*rRn05RweNyg%Ll z6{dTxgxWp997#wjK&1#-x3i>{8;sX;wUkpZz1l z$G$Jajf|_6PhCkyDj@|FAryhAc6v#l^!y<6!+!AP`R=~}5)y!YS?46tIXOMC+Q)C% z%d@aP&S;_%gajdwq^MQ=VR8L5{CoJ>;n4=%;pf9~GHfwi=R9YH`b?y{Gh8|R+@Cy} z?k(T@d6>01YY{;SF~lf(b{M4QW9Oqx_ojRQa{RX6Q{$l;a8Ke*-K{9|z5lO|zky3# zwsR2d7F49W5g=qF2N|wqxLH>}^+>40weKoVg_;$>w^*oWZIF}LJzRP1>gRuCy!M5a z%HGIuHCa6Ip|BNgB*bpwgiGfm?fKp>_0d-aZDD`THJc25^36Ve2PS(N8@e$epb3(s zB1r}^W;kTLSqI-XeELTo&8*?%eH~y|Y+V$p=bLMR?)i}qb>)pe)xY{b>JpbYVTYE0 zC<(Nklt4R|CwkJ$Z$3(O8?Ju`MBS@%&4Bijo^YmTG#X4;7tIPJMb7eCuGMgL_~gGo zy!Lwr=3y8%Bfy(8D{4Q&?zwyFp3iG2&(v&!R8>-TFK&I$qlBg!Z)doX;gA|-fE1y! zqEbY)<4n)?2|f4m*YTvPUj8`ZMm$dfs@=}oMifLy01zSxNrqJv;!1tu(Ngu_shCsh zsj1X81_0Y=B`P5hHOV^I*Ji8$n+aCyt^m3hAOHRH@jJ&~{xRz+b%axFnIi;*0HUbQ z<=jqqqK&8kynsBnQT?Ffi0jX;sCgpO?*HLU=2o6s0Sq*9Aex$^mX{rkz4Fr~)L zPik{c?K6#8J>ZnkstJv=n|^PE^y2z>;GTef4jp4${X>BmgbZ z4v7)0pvGAi$(R7y%*|8(wZ##~Bp-BKLai#byS0URnl-@)3Pp@iU?@w4q)1r@!*H+| zGaigcQc0e9i%v$C?>;&T*T?TTKV*6!vl@ZM88AuKk;tpljqm35-<{zgnvE@i4d-h% z2i*D{dFLNwx@!hfMMDFmh!IFo#V+kWnWkk81!e;^$p;jdcmewQR0WrA=UGLgn%Jr+ zD5ldng+M|osd30qXhAl=D?k!Rf_>EYe|diJC8xV*xfZe21c;iHsno$L4t(A5cBUx| zm8ARGm`1nla&|~vF{2D5EfEA15djhnZQ*=8EsqDrDxi`8Yn9!DxPQn6C)7*~R;bhn zgK%EKZ&he#r-x4Wdvzf0v@IXCZ}#yw`uJTRd8*5Ac=8QbKXQ48`3Pi1&Y@DN1vMr^ zlC?vZry&VRG-UG^Hp5#l_5N!Bk#h(bFcK=U1{FI%@|3=2g?1o;`RGX*k$d(Dw2A`e zlxE0q5<)8TgYIdhu+@#^ij6Ogf=MN12qDovr_g~U($ElapYlub|nN0nqk*V54KS-9{r(_G@2V z5J@Ekm=HiNAVHzoMj%`U5y-ZgGN*th+dYGb?qhyal1h<*vj>WVi*cv8gh4Jt-14Q$ z84F2LAt3ZF=6(O}lY|BmEDRx%3jvToE`rpURCb4E+oE?ZUknK(T)3+Tq4(=PNfl5M zlB8mYA)puJLL`u|jii#WD^Z~#oQnVzQdB`gNX~Jj0}7D+s-w3SQUC@rR0dKeCKB6o zKpXfV#-qJ;$Ye+cQX~=+!EQIPRY7|1;)sAMn30T9B$w!VumCk zXw2qVA|`=o=(2IC)3Zk(lc+D}`c-8uS4tsgAc7E3jERt_icUOV0Hjph0r%l}+o*-4BLuVH>m5|`M9V)mEjjgTj zmg1@})xNrrB!DCk){qDR0!r&_FSqW$iX;}Kl7Jw{1t`i6m_kV)7aHtV(;fS%>JWQ! zPLgDhp)WWdX^UWNob3}q@d9AI#B8FGxWy==xQ)~(@gisfq8)Upy^rT41?-EqL;`BJ zPB@3&np_eILsG66Pm1TqAQQqa#I0VIAe12rf$ZtM`RACmAOrvoZ*V6T-i#JLg0eY3P2E>)G3>b zsCBn5n;izKYIwvr9t;fQ5J*hS1t6rLdpMIaZdA^X;TFDcVoUdVkz;?v~HS9P5vtn=c6-oQtXeE#$u_D1j`aFAp z0dN<6O-kZUps4#gzh+Fx&TQR#sT2YOCYppusMMw|6NrHjz@D~Orh(L$m>ntTWuW#@ zUnLr!CoNEAN}?i2KUEFUU<_(2?xe38#a#iT^j^-dCgeFoBzVExYa~WPmop)-(`YXT z$zJMf2%_kRhW~$@R#etNdLytQ=#pdo|vbd z^filw#LJX$B2{};haf;!a0yhllW|M8y|%+MPVJH%NOH-_1~v*DA~cU_d;5OQF1%X5rp8^*zOjxEn=KICsq!5J3X=qO8ttx- zRGbs`vi>jyVOIj8Y$XMN>_S2dK%VouCGM*o-W}8y1hbCE6sK&V}Ii!X)Kp5{xK5^Q&-wSBI%LV)%{K)f6% z`)P*-B$qtQvz5!#9u44xJb#jXwZjlDYr3C*ZEtO$YU^k#m!doD={+l#y1F6QAls44 zkX^%ABRe7_^bGE095KVrUakaeYzP-49|)I?5A!NM{Cr7q8Ke=OV|+N^KF5bI0k*;p z8TW0*OLjhKtIs<=Jnv;(!b@FhED6ro&-)IeM0Oz=*$suDGXUAY^XjQp+ZhaIE11h5 z*$$9Pq6rCm7MBpfO96^o30{Iup7X4Msw9fCcX0{z(v~VayV<)EcUwLswc`i`VBPH= z+Tk&&#B8#?#z$@Mc6X|9zRdosyN$K%Wk|vv<_`}5G&^ErljoWcsszGT6p-BzlaM`J z=ZLmOO1d3)K#jP3*)Rj2*b*Ca!duwxyw3iEcqsRCiA4he(=w+{e- zK(T9W()~LcG1_=kQgo)Z6!$=DlzuH=qu3O^C{EG$;t6@YTeBx z#sqpX4hM@Gh9N6}$I@MKTE^{QSR7oDh$}8|N>PQLm#1S{PTjK#xIuSM)1%Q&C(G80 zUE)?Xs^WaI>UQoGKzF}%`ueP5+1T-Z!wxx6#w2bpKn%zx>N%sWU@AL-*lYq>0ld_4M3DgkvW0*IoK?0W5CQ}M zxBl)fq()?Cq7z8=E{@nqky6|aitYB=qhLlYcLjRh|he&Go169I4o>vcm0EP&%6WRGUyu?T@RkgzGv#nVxkT_E1h@K4 zN-hK01yYL*2ad#CK*e63J?vK;5s(3jU}De<0)MU8vwiXWijb6|xGS@^PqP`J6v3DZ zl|*7kd1jC*+IEuc-@Oem+XOR6C20Zy5EAgby?C~f8ZLLP*%{;+)`Ecu#$+@DM4&>m z;m>DnsY$4I-_A+8B8f_dWC#`6dIE;{$uowHU zgceg_NL5m4!g+Trm=FcR#o3!ALoPwZKChtch8<24Ym|c8s4ySa!EcQwq+4d03RG5HIK{RW>+dMcivd7oYKiTDN$v> z4Y330Q#UUHFWdfW5;ma%Ao$c?Y=jhU*7jcN{JiUWOG4O*8o&$7{{@I92Jr+Sd1?`# z@O;!4Hb9Lsc=+NHqIdM-Os-xF?`QqO>+HixEV3s>-w;1Cs5%5-vfquXVY0&l_D4wwqW91TbtBMF8Dte=m?i*`4lv zm21K!5Vz-=B@0vJ6aX6Bk}shjhz>aM;wWDr42nB}M3;gWLP(;8X`+#c_P2Cr214=? zss#U0(N`~Xk=c;i@S^krdn`L4_>sDzuJQtbTn3V@Bi2AAqp3V+hFl7JFa6=m6W!`J zrOFzmLP;~Er_Je?ZjSpY8 zc$Mh+)0Pl0B*Ur|sU!i-w|I9^AY2mJ)A<#JToQ5tRS{Q04MQL%BxO>03aqgEyOK&S zb3F|1Z@ek&PE_0}oz=tuF&aWZ)*wg#v3H9kg<1d*kX>-Or|VZPofA4;u;v6?lf8!K#&smrV0l)yL zCecJ;u<#d zOodk2!+NHWTuxu@B{t;Z+Gv4X45HYvaem)&BtTUKk|4)#{`B&_f2y-R$*di%3Tvkd zLP$uF3Ka}{SbrECN_hSnp1})gC1T@DPxexH-|DN-Atzt^*^{^ab}#Qa9nlju(CFp? zSdg`t2WkLbq`vaeA=FL*^$eUxKm#bM%~^Z@L|@5p{Py2Jdh=)cq%O7(k{E5ZY-iyltTQxpx3ppl#6X7B zBEtdWHR@ov`J3zTGk_}W-8x5rNF~LpRYJ0Hg=o2YhT-w+)MhvWsH)4}PD&sKv~>mp zm7r9e-2E5FzxF@P55MAcr>DEjNAyWMW2YND8!1qP6scq&2dS$y-pF`u@!D@6#+zu8 zz~0&6WUN|rhR&E;&_EZO06|jJKrPNZObC37!PS6>8aqyBiYVxu8s~fe^5|Fohxx&m zneRE>^Hft$bPgS~h$W~YCZxiUS}os1_c-_;#UP~RixSqwe8m?zJ`-MY@O5%!j1ks&ATS-uzb#gw^DUcecd%ybdm;c-8 z{;x3I@8w;mhs-B3Lt{745k$ZQ5{lt~;jqS=84rh>-+krte}cs=dxrSp7+Pj=5q@j@ASQAldc;-g|R$4OIL>@a{bXXP|u<_BNB_s{<8`N6NJhLr{{&&)4~ ziUFb!iULv@I2G#Y_wrF2u7AhjxBt1}+Go2vDPUja3bnX3zW)2WAJ}tOjqM^xa;e15@`Y0A&_hk3ajx{b4b{PL_Rzs9 zHb0B*R$1W&q&yF>8)!sJVeWoNPrB4)_Y89(*aegw6<7;(rKwlX%x@ij=E@s?cD(sr zc0aqG-c!E`SYHKIwYmGY`CMvMlBmz>{aX8Xnp}jnnZ#}q3fhiT0@`*6&>>hxpdjIF zPCd-xCX1W7`l+j*|I>@tzSnM_8phtvuSwJ-yV&_8@0-?ij_VXI7Hq^2sK#`Y2%J4w zVvwYTbVy7pL(Uwf#f>a(4_7{U<#RuB@cQr2EkfO|xIa);TVqD+pKc0uTR}Q@3Oj{Z z2}vgaNdvJ0dHhF_kXn1c^;oE%xca$2cJQ&^t3u8j%s%E11Kqur(C*)Z&Hwj#+})3s zvVM?ORGjy##>q3TzvfZU;XSKB?Fqo5aq*4@zRlm%VLN~C{r+`#ta7; zuhrsK7B?2(_I;05HDpARGKrGxkz8LqHU2AUD(fxPWH{5*RiyCx;_{N{AVWCa( zf+E1LXKrwF7PC__@$gf2 zCzX#N^>QgIDoHY)H8YYSqzRP}I}kf-M=2Q}J4y$)Gv2Bj-+B1$KROyuaJXt$Q&*@1a!@M)cgjFQr3p`h51b11R)(9y^)DR0@n?qXU-U`0z7Sr; z5!ai2c>)%D(uIk{i_q+P(aQMdI z7yk6(*7wk}4)Q>Lp|F?4nt8D{87?x&sC6mNXDyz2R&`?T9 zZ@D-GQ+moFg!Yz@Jb=k_haP(D*=Y&ZcGbmVQBQ>u%i;TwmqiC(er9$&^RL|&(;oIU zqh0aXzP>rv;|FuRFrzEkKa<`>vM?AgQ(K6CGXD&vH_E49vSJp#F&+sMubVg1v~FU_ zpW4WX^F@$3ytVHZW_qXPrS5zXJCNMVIZpGjct^|l+7|Pw)->4X(pP|a9lZ#@wxnI( z0n&O`{c_nrhM%j0nOlB$Pv5HLWBU9f)!Y=HY&j3c)3w>yB^!r6V$-vYrES^aL`@yO z?x&`z{S)){(jMK*S3TB2F_P>1#|^; t1#|^|zXCoOd@#UV9mvB#Jq+jyzX2-p@Z-ji>{9>$002ovPDHLkV1keEPM!b& literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-custom.png b/src/gui/doc/images/qpen-custom.png new file mode 100644 index 0000000000000000000000000000000000000000..a2a038abe09eee78308369f1a4083836e2b229bf GIT binary patch literal 6254 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 Y51`dV#>W~YLI3~&07*qoM6N<$g5Uuv>i_@% literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-dash.png b/src/gui/doc/images/qpen-dash.png new file mode 100644 index 0000000000000000000000000000000000000000..67082c375870fa9aefa8246ebfbdd411c3d14a55 GIT binary patch literal 8221 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 Qw?7i(qq1~`q)G7q0IF2gKmY&$ literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-dashdot.png b/src/gui/doc/images/qpen-dashdot.png new file mode 100644 index 0000000000000000000000000000000000000000..64b384660f7b5e32c0c5e282770ca41f8545a0d8 GIT binary patch literal 5961 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 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-dashdotdot.png b/src/gui/doc/images/qpen-dashdotdot.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1b2e69cd1f5e99a4bf871554f342599e3c45a0 GIT binary patch literal 5999 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 dnM^zAs_p8=u%9 z+t}8zl2+2{T1l&Wwf8x*GxN>#{l3|mot;Z-Te}+B-`du*-W|>Pe!t)QyT7EWDzUs& z%ggp(*Uz25tG}`Sw0-WnvCqr7rPpz7mtgzK^}TH~uk-ZZkN++5I74JEWIE+>UMqH_JrM3!6jl+n;h;t*Z)HpZd zFyb)cFyb)cFyb)cFyb)c20ypdxWUh1#9_n@ey-FwH{vkjFyb)c6q|D+&W-MDitY8N zIE*-q8iJAWKLu~NG~$-pEpj6rL&o0Coe<8AIK^%RMpy?L5Tvnha>DFj{9sO)!>Wy)m=+nx^`W8X&qaS8%U&j` zqA}{tDfV5>jog;IVz6dczmW>@6U%l=O38EqSnms$Mt7-Fvuv#3j}CVBx#lLHYIYe> ziO(J3FuIFiWN0f@Q6#t(E0sztbGcYa=qND-jN`%-LjrLxHs?mhOHmY6){^v>7A1ThGa~RzeH!|PT1*vGVL{i0=P$`;z z7E`;e4;Yy#i{?q2-XL#S*tg^`x>;#d-53%`*5bLbtFhmo9D6mEzDgy%+bRt-j2I47 z9YeArFnkcx{o@|qCv`M}!{`=ZR9$`wDGI6nh5d(y{$_h<)6TxfE>HhPmJ~`liR;nX z?*z(HGh-JzhO)xU<=A`Ena?a4LY~UbHIa=|?8Yg!ev>t#&17yI8U}{G+Sa`R{*=SR z-%k~$K}2=4#uA7mwo|fFsI|A$^ss!QG;(U}wY>vReLVbw#X?BGNbhy%Ql7?Pbn})P z<<+8ChUJUAn$6w!ZR>q#Z}`bb{HOsVl~{8}Rjni?62*v2DgiS1O?eY944xeQ2ME=z zy$@hn08d#V<|U2%Q~EiK8i$c7kmfR>j-lsv^gXs`;4eC--ihZ&6s1n&7c24c)6-FjXC=ZfI?|l2Yi8rE& zi=tSe&@xDcuG&Tt$M%Q6jYw2`@5Vj--x^IEXE0I%;Wx4^6r-m`?eA(0hhSP}tOqVB-nhZq&@`MEC z>vQjGENQUS(#U5ynr95+HkZ4OD=|a&TpG2&{b)m#EvBY_Se8;q&N(~rGjOA0BYz)S z+`i(euD;*M3Jd31R#mk%YtdK-97fHK@LT=8&itIZW2p)XZv;785SL1oM5|#`Zx`6b zpySHjcfw)R%Irs*aI%GIb<5utW@tJ$vIdX|sg**zZlE^&;@qe;X=~2)Z+fxUCc+Q* zx+s+;Nuse;!xpfG&%ENSTpHcgDgCu11Vs@=;l}L$_RMX8+mzG?|2T|zN`E6tjW%iM zUDyWC5d5T&1}g2* zwt*|Pz)B-)POS|e&hu=6G}65enG2I|0X-}sf5XncufYS67Z;qgnoFYqN+ZUp?deCY zPol*?8Qyf%av&9dN9a+cB`g&Ns@WifbE6UKu z-7fA&E{y^rjjE4qbotbQ!DkK(e&_7O8MKZ6Na6J{o#%I(h%N-cOwP4782ikw=sKWyu|XKU|+ zD1OhCmd%c2&B}hPg<#zB;+)vxFbXn^Xqr*3>*VOGNCHE)+K#?W*JnRaB-PCJZz7E9 z!!ETvaFx#tS(gSsNfxHM=e8g@n^5Ni-&?x6HT>rOlVe2 z&D5p}sa%Qu7R3X|$rt5=3qE~L@z#?)>eM%C`-fR0{&i9Y%J!cT{n_8AFl97aKhk^jz}U#+H6GxkV1&|*Gx zH1ZOv=1_?OXT$N)A60vO)*5l_FTm*~-H18WiOW7ld(DCb5u#f@0kF)dYyp`#`u z9>Yt=L{YSqU^hRB)+!jyJ?M!k-2J#Nlp3qHP^5~C&PGTGL!myb?9QoolZ8nFo>&Wsxcf24(uj@FP)C+eVvr%?uX;C*j-h8KQA=Ck@4&uBqBCH0Y4X1-RIe$n(=wW()SOOF+a5W^UKdJjbomT=l%a?Hk;o6x z3X*kzl$&nwtB!s-x7KZq!)R?SHMLrdN-eeJ+&KCsP9!cM9BcNAZmy+PYv%x_Pg~t6 zM0M9ST&V?9soD0Xw>1_k0v3&Xw%%{kX<|1E zM&_5wQ%02g?28DIzj?r1uMrUpg zqcw+-ncvLZj9Q_bzA^j3Y`TkOGfFRPvD&nV;zu49Pbv7s9@lVG8sZdUt z9E~frASkt3elyXE)(AH;DjRh;E6(;M97X}5*c2s< z8inR}L8G;^vCk()f1JoiY0-zJ?raTUWDka@#F_OSC>X7%V%9H=8jPJw6{%~k4RbZX zV&l1pEo!y~6njO*A3!g*wduCiXW{VVu0L*My&SdHpvVp{s5Vr9jV6x4X>84r4|)sH z7Q@JOSFZQe%*Jv(`E>*%*UER>z=pc+b~GBPc=XL~G}9)fGT23!Sup8(BmPvDSL)!6VyE)UUZD zW-*%=xe&VJ#3wZ>;M~Z1<}3>yDezLFFj0{zisFw#(jXmddSyuc{jK&cGQKh=H;@)k zZ2d;*pA^K!<>IijtDF%Hkb$1T#f}rBFL%whCG(SttPzDcCv*iLMz%1SN^|mOuEzdw zV(iB==^NGo^XhGM>2Es4wgqc+r5i5}qIYq91>J2awMJZptcXBDPp9trw&SBOe=_zH zj7M?i^6E7-%lRmLxNy6}=sgm7A-vcjR0?Xnpk5bB&2mZ#yuRbh=Z;4H4&KF`p~pTM z`zeARY#IXb39kl7si{VZ6KWj?mUe#}c@c@2bGa^4U*6UCL}-2oCJrg}9_m(0qeft4E^(Y{qA-4O@;_0Sf~Sa84v~;5P1v4_tDDEQ z2+3oWD<0yI=yl&6L*GT?fVS>?w}m!ho;-#%X~rz}DyHe}o<249Dk~4aAF*Uq_f91{ zHHZ5|R~4>jxF#@iMYgrd4C*U1zjJ5* zLq{V&gr;cghNJy~Jp)f(o%tV`h_33)IZw?d3F-#c(2_Sr=Uuio@>Zxpsa=S^i5e@E z$ZQWi`f=oinamYiw=TS?RD@Xi+WCn$F?IquQV>O$WJ1Scs>HG|h@%H#UErz3O3jrQ z+YB`PffhSG{x1N~?*4Cn8vR8)Hv-Y?b=pB3J)ZKHeH;NWXX1LYa@zi>KtYrW0vJ-)4z;muh^#5s*H3~SAe1kLOGhabb0!{ z`E0MMc$&xf6+z1A(7J^s(%aZG$482rSR)jBRe~*^%nERX;=XIv# zOjUN4<7wW56P(38-Y}|DLm1PUC`MG*yhP22bx4&$ImwDTh%?F&+zCcjxe8>+Lmd)H;aWVdtE<^7{I5bEf)I0w|4YBzN`O<<0C&BO&&LQ=xj4*eLAj@K35iH+uqqE zABM|Z?nc-A{~uTG7>c4p%B z^U;4FOPtoH^sxyQ#1i^}KS#w_cnr>>18aIVfcJFGen>wiit6aQRjVVecPH9nYS#0t z8aee(RA1bBsZH;~R!lhAO!I>uq{HWvCsfC5L)~kopEKPR(Y;WLs|2bqz)+Z6RJ^4T z)zq;}C)^VlHjT9e`)gonk5)fx#kM?jap~n62rf5r^%k0K)awsG-)DtsO|vOTqc*n`N=EVi?tjt~z_pIc-KZOI$4osk0NW zLlkYLEx#T*H1s@%h`V;!HK#OT18Cv0P+-Z`(>1zO=ts)|CSdNx6Z&H2Pk@ljl7j0V zCp$M-A7>{1b#M4dTU&=nocUhe(|8@U94a=UdBqId z;#lI$a(-N3qeZQ^Xw}o!>O*hzD@>uB%U#D@%2@Vu-8D}f4de9}1`Wbt#zfb~qa!b6 ziVHRmg|U29K`a^x?2o{MbvF7laCx?K7fT+W48=P-2A@3~`N5^BwW|;u7Tpaph_7CSK{_Vu*E9m_mUOYf;RmP2+D@k`H(7!~V=cTABX&#L1&QEJ1 zUX_g4IWT|zvkoR=}qb8-TsYde(3LGY5s%Jx7f?4KpNFU#BGb%&8(x+UDE_5NAD=&r@ z52Ee@A&8S>uZ0%cZEhqR3l1%|!$cko7!3-L*>G zYLU8Lr)vXm|6-tK6d2hYr>=LuN|;!?OQ}L6S%60aR-5}RGA=w*o&x1s$oD2oV+AqJ zW^uS&awDPHK*OjRO3nH(tP3=-l_B2sIxdrbm>)=~exv$@W}P?CKflrI+q+t+`Gl6% zUAd!=NbtEu)i9CS6v`4kb&cGu)v$-aNuxWpPR+%2N$O@-dPyT^Ifqj)t7|=aCb-h* zPA$G(@#gq^+n{V-m(qyCh)*!$Fyb)c+=$okb8f_?5tl|>8gXe9_|Pne5r+|n5r+|n o5r+|{*qmZ>ip{0b-7Ag$A8Qu)dDDeLJpcdz07*qoM6N<$f_vJH5C8xG literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-flat.png b/src/gui/doc/images/qpen-flat.png new file mode 100644 index 0000000000000000000000000000000000000000..06e2195f7332adf167cfc1398539d9c98f93ddcb GIT binary patch literal 1885 zcmV-j2cr0iP))@ZfbX}8&Pz~Fzx-jK%Q zjFiAR%jB5M;G@mqqt4=|(dVO?$3D{Iu+!tQqtHj<>eA)w*yr=n`TF*$(^cp4(BSFL z#NLm#+iRoHNa^#`x!HKfc9?i@e%@>Gaj> z^w-_z$KCF|-ssAv(@eqLh|}n($mEZ$)L!4{ z%&F5e08@bIISEwAyFo@ypHOrKHhEx7%&E+ivOe)2Y-^+ULTv)@j@4!pGm2+w8d9 z=f>RV#<|&d*yX*=<(#qBX4&hsxY%{T;DFBNp6m75yxw@W*m2$H$KCC`q|!*O)Lq}` z%e~uwsnS!+<(0hKe$wcr!{LUk)>ydNb=2vp)#SFQ)KKE^#p3YBeZmmMXl6Z z*XFy|>aV5IO1#~7v)60L-aE1xk-Ob?wAXFo>C(&Pmaf-ZlfOB&*KM!WVW!efz1xAk-g@Kk$K&zI{{;DOWRvy;F%tJGPc&qek3^7#Am zr_)W<>8sW0tP@hkJOBU$Gf6~2RCr$P+tb(eI26b6-#!m*8?SBKwr%?z+qP}nwr$(C zuIJ*cSu;Cr)8w@2dDfbI{(|pS+r5*5S|{6OyMnP@w##6G4|tt(yhOsna-{N*bAM@jdZR?xLQA5O zbQQzbo{f=rl|n_gh`SoHpyr22yNaRgx9GaoY=ydSBkTGcS|aK?>vZU;h@`6vbajiO z>sCl)<&Pio#J(fIjf|k{0C+k2i>oP)Hhl`FzwxddxXYe3oaMjIx*jpy)!YNF=6^&2 zFy&^u_J*sh)#LzXu+gsj;AUB8a_SGJ+GN*GxEV-prh)m%VAlq?sPdREjs$a&xvm3C z;53>%fFpBVhrsDi@(=@am$|M#;Ix6f;xTY18tVELqBBY2WN-y!rt1udW|Bl51pArkx(cG{B+~@0 zfQ)oCKvY69cR)~QrfVxi<4EEH2!@c6uGb;ji)0}B#7I{RqBSHl6@oG{(shg0gNxQd zP}|o?*F6yQAerqDRgjUcB@nD8iJlM@kddyX5OmagUDcAAuFJsXkieNLMT?ciqdnT1d@c*_^Rr zI$Y(FMptU^X^T6kH{9isPS@M4YZV2wu@D|clUCO?tSd%=^vj2r$4ReiH|rWp0lb&jucC3#m%-0hI+)3Tc`23gnhG zBsdR2u;fir)N|n3@Kc=doc0X_@0=7PKMzd0av1!59b~SBi+5|5le;aWiqIWd8jMCvo&iOhafYiksjoq`VAB)61 z_1sRw_c0Hxg|3`qPmSVU?UzHLF7x~Aqr11Ac11g-rjETLzvuq+s1KUpsomUdvzwE5 z|9)Z7v$?;#h<{*@2@lV`?Wl@Pt>(Xg`kT&M-t~X_ABF9*UAD`1*)H2z literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-miter.png b/src/gui/doc/images/qpen-miter.png new file mode 100644 index 0000000000000000000000000000000000000000..025e00397990335ec512b5a9cdb9f2ba9f1a67ca GIT binary patch literal 11734 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

Y?aA4^!l*hFm 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qscrollarea-onescrollbar.png b/src/widgets/doc/images/qscrollarea-onescrollbar.png new file mode 100644 index 0000000000000000000000000000000000000000..b4f7976bc4f89b5f2645ea6d15097497e2640bf6 GIT binary patch literal 77476 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ð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⁣PUE?o4-S~d^v`hoHHDeyMF6^@4R{W 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 Y1+ky_83%7l%>V!Z07*qoM6N<$f+Xj+?EnA( literal 0 HcmV?d00001 diff --git a/doc/src/images/qscrollbar-picture.png b/src/widgets/doc/images/qscrollbar-picture.png similarity index 100% rename from doc/src/images/qscrollbar-picture.png rename to src/widgets/doc/images/qscrollbar-picture.png diff --git a/src/widgets/doc/images/qscrollbar-values.png b/src/widgets/doc/images/qscrollbar-values.png new file mode 100644 index 0000000000000000000000000000000000000000..cea744b3be3d83b966370c6d3bac0282a111929e GIT binary patch literal 15902 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 AM*si- literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qspinbox-plusminus.png b/src/widgets/doc/images/qspinbox-plusminus.png new file mode 100644 index 0000000000000000000000000000000000000000..3b35a408a0048b0053169513182a948d093090bc GIT binary patch literal 375 zcmV--0f_#IP) z7Z(>87#P&h$e^I00s;c@@$vHV@-Q$k{{H?kF)_+sF@*pC0H{esK~#8N?Ul6-!%z?e z_kj_@%*^@!-^+D&VJVH@DpuYU(@t^HEffs{1rmw0U?{k0UFuMdTL9Y8@-0;Pm)8E> zJB=*mUa=0M&3Zs-b#l=%doWtzSXAK1X!WNei)#}tRZH2r%|$OP8c2QJl+{dRkuo+V zoQMh>7@N|~MXA0sTCpBR+jGF#%H1=Qzroz)R<=|X-}>Qu`4(YQO5AQr!otAt_yDFw VV_n%a%2xmY002ovPDHLkV1j+Gr_cZZ literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qspinbox-updown.png b/src/widgets/doc/images/qspinbox-updown.png new file mode 100644 index 0000000000000000000000000000000000000000..a6caa4419ba4bd86641ae5c5e672163d63df04d5 GIT binary patch literal 402 zcmV;D0d4+?P)X$1_lOdYHFXKpU20?&(F{4=i>zh1t=&eGBPr8ad8(H7vJCC2L}fV3JPp& zY%wu0b8~ZdcXx}6i;azql9G~^mX@5HoC^yJprD|prlzW@sOdV`CT?81eD(^78Tm0s{X2{xC2w6%`e5aB#sErsDtr0K-W{K~#8N?bgSt!!Q(t z;gRHC(|hmb-uHjKD1>kzF$97&5b(b^+ixQnLDAAsAQj&&P05Y5t4e)mH5Pal0G5S& z91D*a7M{IZt8S~vO??)mS1U^VaQ@e!y!mZr&%`@1th8rOi4DVQ59~3R)nTd1#5#}c zxnNua^>I_CLwgJY#-^lwdrGVso3hXB36dkjijx0uaqu~tvb=glZhmvWl;qqJjIk*~ w5w=n&mzH3>zm01ChfX#{a=a-qD-F%-21QU>gqnSpIsgCw07*qoM6N<$g0hXW?EnA( literal 0 HcmV?d00001 diff --git a/doc/src/images/qstyle-comboboxes.png b/src/widgets/doc/images/qstyle-comboboxes.png similarity index 100% rename from doc/src/images/qstyle-comboboxes.png rename to src/widgets/doc/images/qstyle-comboboxes.png diff --git a/doc/src/images/qstyleoptiontoolbar-position.png b/src/widgets/doc/images/qstyleoptiontoolbar-position.png similarity index 100% rename from doc/src/images/qstyleoptiontoolbar-position.png rename to src/widgets/doc/images/qstyleoptiontoolbar-position.png diff --git a/src/widgets/doc/images/qtableview-resized.png b/src/widgets/doc/images/qtableview-resized.png new file mode 100644 index 0000000000000000000000000000000000000000..813256ee9eeebf1e8b0ac031f6beac511c951c93 GIT binary patch literal 42232 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qtwizard-classic2.png b/src/widgets/doc/images/qtwizard-classic2.png new file mode 100644 index 0000000000000000000000000000000000000000..165f569d1dc2247c10e6c74d76a542811e3a02f9 GIT binary patch literal 8616 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qtwizard-mac1.png b/src/widgets/doc/images/qtwizard-mac1.png new file mode 100644 index 0000000000000000000000000000000000000000..bc8cd9b7158b72e186dda358f6e7737e274c408a GIT binary patch literal 25478 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qtwizard-modern2.png b/src/widgets/doc/images/qtwizard-modern2.png new file mode 100644 index 0000000000000000000000000000000000000000..d66c374a4c8cced09446beeb4ec9f22a4b6d2fc7 GIT binary patch literal 15081 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 F{ufcb>{b8( literal 0 HcmV?d00001 diff --git a/doc/src/images/qtwizard-nonmacpage.png b/src/widgets/doc/images/qtwizard-nonmacpage.png similarity index 100% rename from doc/src/images/qtwizard-nonmacpage.png rename to src/widgets/doc/images/qtwizard-nonmacpage.png diff --git a/doc/src/images/qundoview.png b/src/widgets/doc/images/qundoview.png similarity index 100% rename from doc/src/images/qundoview.png rename to src/widgets/doc/images/qundoview.png diff --git a/doc/src/images/qvboxlayout-with-5-children.png b/src/widgets/doc/images/qvboxlayout-with-5-children.png similarity index 100% rename from doc/src/images/qvboxlayout-with-5-children.png rename to src/widgets/doc/images/qvboxlayout-with-5-children.png diff --git a/src/widgets/doc/images/simpleanchorlayout-example.png b/src/widgets/doc/images/simpleanchorlayout-example.png new file mode 100644 index 0000000000000000000000000000000000000000..1d5c8ac048580f5a6d15b60f86c22e40fcda673d GIT binary patch literal 13463 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/stylesheet-border-image-normal.png b/src/widgets/doc/images/stylesheet-border-image-normal.png similarity index 100% rename from doc/src/images/stylesheet-border-image-normal.png rename to src/widgets/doc/images/stylesheet-border-image-normal.png diff --git a/src/widgets/doc/images/stylesheet-border-image-stretched.png b/src/widgets/doc/images/stylesheet-border-image-stretched.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9ca92dd338d03eb040a1d9d7e54d3ebcd240a2 GIT binary patch literal 12170 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 M07*qoM6N<$f^s_eZ2$lO literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/stylesheet-border-image-wrong.png b/src/widgets/doc/images/stylesheet-border-image-wrong.png new file mode 100644 index 0000000000000000000000000000000000000000..19d6e449f4a68a42b5fb2c4786160245dd2ba387 GIT binary patch literal 12887 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 BQQ!ao literal 0 HcmV?d00001 diff --git a/doc/src/images/stylesheet-boxmodel.png b/src/widgets/doc/images/stylesheet-boxmodel.png similarity index 100% rename from doc/src/images/stylesheet-boxmodel.png rename to src/widgets/doc/images/stylesheet-boxmodel.png diff --git a/src/widgets/doc/images/stylesheet-branch-closed.png b/src/widgets/doc/images/stylesheet-branch-closed.png new file mode 100644 index 0000000000000000000000000000000000000000..213ffdd88fc52bcb674966e4c0c197d0dadffc8f GIT binary patch literal 334 zcmeAS@N?(olHy`uVBq!ia0vp^96-#&!3HGb=lz)rq*#ibJVQ8upoSx*1IXtr@Q5sC zU|>`RVa6iI@_Rr*$r9IylHmNblJdl&REF~Ma=pyF?Be9af>gcyqV(DCY@~pSPJ6mI zhDe0hPVnSnG8Ay#>@BKtaj$~j9w(s-y&U)43SM7g=9uRYo+omIGq>;v=W^$*_Zc%6 zmVVR>`nuwO@FDG0Vl4{{cwFbST;H;F)~uZ>OOqLwXR>E>T7BS*>|y?Pfh#)A@8St* zz4X=zfe#qgE}R)^QZ}pFukfz%@_7xRpE@40&9ZhDzVVf@G+_3Nr>(}HzHoFMXPRZV zDdKGGjjeGF&x%zt8V+8N%B#^~h*{*g_t~j%k2SmZHM3ni5p>5q-|zG`?|^657iRtU bt7V@QK7VHCk;;`oZ!vhf`njxgN@xNAh82K! literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/stylesheet-branch-end.png b/src/widgets/doc/images/stylesheet-branch-end.png new file mode 100644 index 0000000000000000000000000000000000000000..54915b3b01438f0221eb5c6b9bef022c63e751d8 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^fk14t<7pB(0k2XUTw^BAa@ zyCldjn4v~I(#klsLO;e{w&G|gP}tJb#WBR=cyhu4mcAxNo+FKcQx|KwhxVyV?Ve)L zz*IK1wMoLE!Dwo3=Hy<(2FAl060D08M0g?@7(yn?%xc=$H6LgQgQu&X%Q~loCIF7Q BI8p!r literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/stylesheet-branch-more.png b/src/widgets/doc/images/stylesheet-branch-more.png new file mode 100644 index 0000000000000000000000000000000000000000..664ad44740ef5729cfa2ca5ca8395ebdf8cb2277 GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^5;M1%lf!(`5Nmw&E1&}Q zk|4ie1}`^bv!LK9&GY?$Leictjv*Y;$tetsZa>)*y2R$Br1%LGR;@U~$WV7luyf{a R_C-Kt44$rjF6*2UngE&%B+>u? literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/stylesheet-branch-open.png b/src/widgets/doc/images/stylesheet-branch-open.png new file mode 100644 index 0000000000000000000000000000000000000000..e8cad95ccf686d088e8856578271c36be41d4b92 GIT binary patch literal 346 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

_-5TB79?16lf~D9UUF&d3I6GO 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/stylesheet-coffee-xp.png b/src/widgets/doc/images/stylesheet-coffee-xp.png new file mode 100644 index 0000000000000000000000000000000000000000..8bedd80ee9702931339cd60be14371785347732a GIT binary patch literal 14200 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/stylesheet-pagefold-mac.png b/src/widgets/doc/images/stylesheet-pagefold-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..5c061b9cfd5b13a6ed7be0ff44a9c986eddcbb9c GIT binary patch literal 20618 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/stylesheet-pagefold.png b/src/widgets/doc/images/stylesheet-pagefold.png similarity index 100% rename from doc/src/images/stylesheet-pagefold.png rename to src/widgets/doc/images/stylesheet-pagefold.png diff --git a/doc/src/images/stylesheet-redbutton1.png b/src/widgets/doc/images/stylesheet-redbutton1.png similarity index 100% rename from doc/src/images/stylesheet-redbutton1.png rename to src/widgets/doc/images/stylesheet-redbutton1.png diff --git a/doc/src/images/stylesheet-redbutton2.png b/src/widgets/doc/images/stylesheet-redbutton2.png similarity index 100% rename from doc/src/images/stylesheet-redbutton2.png rename to src/widgets/doc/images/stylesheet-redbutton2.png diff --git a/doc/src/images/stylesheet-redbutton3.png b/src/widgets/doc/images/stylesheet-redbutton3.png similarity index 100% rename from doc/src/images/stylesheet-redbutton3.png rename to src/widgets/doc/images/stylesheet-redbutton3.png diff --git a/doc/src/images/stylesheet-scrollbar1.png b/src/widgets/doc/images/stylesheet-scrollbar1.png similarity index 100% rename from doc/src/images/stylesheet-scrollbar1.png rename to src/widgets/doc/images/stylesheet-scrollbar1.png diff --git a/doc/src/images/stylesheet-scrollbar2.png b/src/widgets/doc/images/stylesheet-scrollbar2.png similarity index 100% rename from doc/src/images/stylesheet-scrollbar2.png rename to src/widgets/doc/images/stylesheet-scrollbar2.png diff --git a/doc/src/images/stylesheet-treeview.png b/src/widgets/doc/images/stylesheet-treeview.png similarity index 100% rename from doc/src/images/stylesheet-treeview.png rename to src/widgets/doc/images/stylesheet-treeview.png diff --git a/src/widgets/doc/images/stylesheet-vline.png b/src/widgets/doc/images/stylesheet-vline.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0c336fd8c07b851766be334a0b3ab2744afaff GIT binary patch literal 124 zcmeAS@N?(olHy`uVBq!ia0vp^fk14<#0(_2UW&B=Qak}ZA+G=b|4$C{g`lg;Rdj*k zEG0pH!3;H4#wCm%2Z4NPPZ!4!3;*PV2F7y|Y&r=cB@k%Q#l#>uQ|xhh=&~H3G6qjq KKbLh*2~7Z6M5uIfGyVF$EE| zuqvemK@KtE5j++lB2?rkmkJt7DWU=jN>##;Zl=?}`iF1k9p8Ju_j~i^`{ok{1^8;I zo2UZ-poRE(hY|EigA*(u zLiFG$il8`Ak*mNcL5$<59774gP!J;kgbD?!1{A|^3|GqKIEoQU;8e4*i7_;u7;JVR zBw(w$nU21Nq1GyEO)C>XLz_xbqpdKY8$o&uU9vIhL7kQd06@-&H#_uj^mN(ot)s9` zzCTTbh;l6;zsZ7x?_QsY9(bix+DqGbrftC;1~K-j8kl%sHqAV~*Zk=tu3^>hEf-ri z-07~SNu=D&L(dmR57k;feA+pwo|a#G4!k z|H=eLeWJ$Y*aue}>d36Og=J8tcN2cCgFerq^AiNm=4EiRR{5rj8`tpr?1HHe-98h} zR>PeJ2hH_D+o94Q%_Lb73DeJeB;0MaJC-GzPkorKjGZgZANoQU+>_xX%S-wpTDt03 z4scwcQ=fQS&We1}IpGC`EuYsNydP7X)v(Lbb>~P-`;2j8y}fJADI|o#DTH2@xO8{1 zvaKwkSN7$KqrRh3&(js|VD^*5xrw`K?<1D!^U9c9m&h5hpQo>3clMt|1GzN z|B=#A<8#u3-TXi&{0$bZfK z2A>}>OWAZGp}2zEXBodBY*RZcDV_5ajp4gHAAY2c|6qD4$QDkMiANSg%z2}sSNt}+ zo8nw-`+zyG6ySM6a&>Bk5X?*NDc6M%&&I>!#D~q+7O# zMQSs1t9{b)n+nsCY8)KYN)WiR5ioDn*CH+HY9zkVDVI{E`JVMmLADuo)i1r7 Q?5+AF5l(=2qvuZkKeq;9BLDyZ literal 0 HcmV?d00001 diff --git a/doc/src/images/windowsxp-progressbar.png b/src/widgets/doc/images/windowsxp-progressbar.png similarity index 100% rename from doc/src/images/windowsxp-progressbar.png rename to src/widgets/doc/images/windowsxp-progressbar.png diff --git a/doc/src/images/windowsxp-pushbutton.png b/src/widgets/doc/images/windowsxp-pushbutton.png similarity index 100% rename from doc/src/images/windowsxp-pushbutton.png rename to src/widgets/doc/images/windowsxp-pushbutton.png diff --git a/doc/src/images/windowsxp-radiobutton.png b/src/widgets/doc/images/windowsxp-radiobutton.png similarity index 100% rename from doc/src/images/windowsxp-radiobutton.png rename to src/widgets/doc/images/windowsxp-radiobutton.png diff --git a/doc/src/images/windowsxp-slider.png b/src/widgets/doc/images/windowsxp-slider.png similarity index 100% rename from doc/src/images/windowsxp-slider.png rename to src/widgets/doc/images/windowsxp-slider.png diff --git a/doc/src/images/windowsxp-spinbox.png b/src/widgets/doc/images/windowsxp-spinbox.png similarity index 100% rename from doc/src/images/windowsxp-spinbox.png rename to src/widgets/doc/images/windowsxp-spinbox.png diff --git a/doc/src/images/windowsxp-tableview.png b/src/widgets/doc/images/windowsxp-tableview.png similarity index 100% rename from doc/src/images/windowsxp-tableview.png rename to src/widgets/doc/images/windowsxp-tableview.png diff --git a/doc/src/images/windowsxp-tabwidget.png b/src/widgets/doc/images/windowsxp-tabwidget.png similarity index 100% rename from doc/src/images/windowsxp-tabwidget.png rename to src/widgets/doc/images/windowsxp-tabwidget.png diff --git a/doc/src/images/windowsxp-textedit.png b/src/widgets/doc/images/windowsxp-textedit.png similarity index 100% rename from doc/src/images/windowsxp-textedit.png rename to src/widgets/doc/images/windowsxp-textedit.png diff --git a/doc/src/images/windowsxp-timeedit.png b/src/widgets/doc/images/windowsxp-timeedit.png similarity index 100% rename from doc/src/images/windowsxp-timeedit.png rename to src/widgets/doc/images/windowsxp-timeedit.png diff --git a/doc/src/images/windowsxp-toolbox.png b/src/widgets/doc/images/windowsxp-toolbox.png similarity index 100% rename from doc/src/images/windowsxp-toolbox.png rename to src/widgets/doc/images/windowsxp-toolbox.png diff --git a/doc/src/images/windowsxp-toolbutton.png b/src/widgets/doc/images/windowsxp-toolbutton.png similarity index 100% rename from doc/src/images/windowsxp-toolbutton.png rename to src/widgets/doc/images/windowsxp-toolbutton.png diff --git a/doc/src/images/windowsxp-treeview.png b/src/widgets/doc/images/windowsxp-treeview.png similarity index 100% rename from doc/src/images/windowsxp-treeview.png rename to src/widgets/doc/images/windowsxp-treeview.png diff --git a/src/widgets/doc/qtwidgets.qdocconf b/src/widgets/doc/qtwidgets.qdocconf new file mode 100644 index 00000000000..c90f25338ed --- /dev/null +++ b/src/widgets/doc/qtwidgets.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtWidgets +description = Qt Widgets Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qtwidgets +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtWidgets + +qhp.QtWidgets.file = qtwidgets.qhp +qhp.QtWidgets.namespace = org.qt-project.qtwidgets.500 +qhp.QtWidgets.virtualFolder = qdoc +qhp.QtWidgets.indexTitle = Qt Widgets Reference Documentation +qhp.QtWidgets.indexRoot = + +qhp.QtWidgets.filterAttributes = qtwidgets 5.0.0 qtrefdoc +qhp.QtWidgets.customFilters.Qt.name = QtWidgets 5.0.0 +qhp.QtWidgets.customFilters.Qt.filterAttributes = qtwidgets 5.0.0 +qhp.QtWidgets.subprojects = classes overviews examples +qhp.QtWidgets.subprojects.classes.title = Classes +qhp.QtWidgets.subprojects.classes.indexTitle = Qt Widgets' Classes +qhp.QtWidgets.subprojects.classes.selectors = class fake:headerfile +qhp.QtWidgets.subprojects.classes.sortPages = true +qhp.QtWidgets.subprojects.overviews.title = Overviews +qhp.QtWidgets.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtWidgets.subprojects.overviews.selectors = fake:page,group,module +qhp.QtWidgets.subprojects.examples.title = Qt Widgets Examples +qhp.QtWidgets.subprojects.examples.indexTitle = Qt Widgets Examples +qhp.QtWidgets.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qtwidgets +tagfile = ../../../doc/qtwidgets/qtwidgets.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore qtgui + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/doc/src/snippets/code/doc_src_layout.cpp b/src/widgets/doc/snippets/code/doc_src_layout.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_layout.cpp rename to src/widgets/doc/snippets/code/doc_src_layout.cpp diff --git a/doc/src/snippets/code/doc_src_qt4-styles.cpp b/src/widgets/doc/snippets/code/doc_src_qt4-styles.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_qt4-styles.cpp rename to src/widgets/doc/snippets/code/doc_src_qt4-styles.cpp diff --git a/src/widgets/doc/snippets/code/doc_src_qtwidgets.cpp b/src/widgets/doc/snippets/code/doc_src_qtwidgets.cpp new file mode 100644 index 00000000000..74888e38917 --- /dev/null +++ b/src/widgets/doc/snippets/code/doc_src_qtwidgets.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] +#include +//! [1] diff --git a/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro b/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro new file mode 100644 index 00000000000..7e3c633dd51 --- /dev/null +++ b/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [0] +QT += widgets +#! [0] diff --git a/doc/src/snippets/code/doc_src_styles.cpp b/src/widgets/doc/snippets/code/doc_src_styles.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_styles.cpp rename to src/widgets/doc/snippets/code/doc_src_styles.cpp diff --git a/doc/src/snippets/code/doc_src_stylesheet.cpp b/src/widgets/doc/snippets/code/doc_src_stylesheet.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_stylesheet.cpp rename to src/widgets/doc/snippets/code/doc_src_stylesheet.cpp diff --git a/doc/src/snippets/code/doc_src_stylesheet.qdoc b/src/widgets/doc/snippets/code/doc_src_stylesheet.qdoc similarity index 100% rename from doc/src/snippets/code/doc_src_stylesheet.qdoc rename to src/widgets/doc/snippets/code/doc_src_stylesheet.qdoc diff --git a/doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp b/src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp rename to src/widgets/doc/snippets/code/src_gui_dialogs_qfiledialog.cpp diff --git a/doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp b/src/widgets/doc/snippets/code/src_gui_dialogs_qfontdialog.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp rename to src/widgets/doc/snippets/code/src_gui_dialogs_qfontdialog.cpp diff --git a/src/widgets/doc/snippets/code/src_gui_dialogs_qmessagebox.cpp b/src/widgets/doc/snippets/code/src_gui_dialogs_qmessagebox.cpp new file mode 100644 index 00000000000..90bc2e9b0a2 --- /dev/null +++ b/src/widgets/doc/snippets/code/src_gui_dialogs_qmessagebox.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +int ret = QMessageBox::warning(this, tr("My Application"), + tr("The document has been modified.\n" + "Do you want to save your changes?"), + QMessageBox::Save | QMessageBox::Discard + | QMessageBox::Cancel, + QMessageBox::Save); +//! [0] + + +//! [1] +QMessageBox msgBox; +msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No); +switch (msgBox.exec()) { +case QMessageBox::Yes: + // yes was clicked + break; +case QMessageBox::No: + // no was clicked + break; +default: + // should never be reached + break; +} +//! [1] + + +//! [2] +QMessageBox msgBox; +QPushButton *connectButton = msgBox.addButton(tr("Connect"), QMessageBox::ActionRole); +QPushButton *abortButton = msgBox.addButton(QMessageBox::Abort); + +msgBox.exec(); + +if (msgBox.clickedButton() == connectButton) { + // connect +} else if (msgBox.clickedButton() == abortButton) { + // abort +} +//! [2] + + +//! [3] +QMessageBox messageBox(this); +QAbstractButton *disconnectButton = + messageBox.addButton(tr("Disconnect"), QMessageBox::ActionRole); +... +messageBox.exec(); +if (messageBox.clickedButton() == disconnectButton) { + ... +} +//! [3] + + +//! [4] +#include +#include + +int main(int argc, char *argv[]) +{ + QT_REQUIRE_VERSION(argc, argv, "4.0.2") + + QApplication app(argc, argv); + ... + return app.exec(); +} +//! [4] + +//! [5] +QMessageBox msgBox; +msgBox.setText("The document has been modified."); +msgBox.exec(); +//! [5] + +//! [6] +QMessageBox msgBox; +msgBox.setText("The document has been modified."); +msgBox.setInformativeText("Do you want to save your changes?"); +msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); +msgBox.setDefaultButton(QMessageBox::Save); +int ret = msgBox.exec(); +//! [6] + +//! [7] +switch (ret) { + case QMessageBox::Save: + // Save was clicked + break; + case QMessageBox::Discard: + // Don't Save was clicked + break; + case QMessageBox::Cancel: + // Cancel was clicked + break; + default: + // should never be reached + break; +} +//! [7] + +//! [9] +QMessageBox msgBox(this); +msgBox.setText(tr("The document has been modified.\n" + "Do you want to save your changes?")); +msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard + | QMessageBox::Cancel); +msgBox.setDefaultButton(QMessageBox::Save); +//! [9] diff --git a/doc/src/snippets/code/src_gui_dialogs_qwizard.cpp b/src/widgets/doc/snippets/code/src_gui_dialogs_qwizard.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_dialogs_qwizard.cpp rename to src/widgets/doc/snippets/code/src_gui_dialogs_qwizard.cpp diff --git a/doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp b/src/widgets/doc/snippets/code/src_gui_effects_qgraphicseffect.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp rename to src/widgets/doc/snippets/code/src_gui_effects_qgraphicseffect.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsview.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicsview.cpp diff --git a/doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp b/src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp rename to src/widgets/doc/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp diff --git a/doc/src/snippets/code/src_gui_image_qicon.cpp b/src/widgets/doc/snippets/code/src_gui_image_qicon.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qicon.cpp rename to src/widgets/doc/snippets/code/src_gui_image_qicon.cpp diff --git a/doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp b/src/widgets/doc/snippets/code/src_gui_image_qpixmapfilter.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp rename to src/widgets/doc/snippets/code/src_gui_image_qpixmapfilter.cpp diff --git a/doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp b/src/widgets/doc/snippets/code/src_gui_itemviews_qabstractitemview.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp rename to src/widgets/doc/snippets/code/src_gui_itemviews_qabstractitemview.cpp diff --git a/doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp b/src/widgets/doc/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp rename to src/widgets/doc/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp diff --git a/doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp b/src/widgets/doc/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp rename to src/widgets/doc/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp diff --git a/doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp b/src/widgets/doc/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp rename to src/widgets/doc/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp diff --git a/doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp b/src/widgets/doc/snippets/code/src_gui_itemviews_qtablewidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp rename to src/widgets/doc/snippets/code/src_gui_itemviews_qtablewidget.cpp diff --git a/doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp b/src/widgets/doc/snippets/code/src_gui_itemviews_qtreewidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp rename to src/widgets/doc/snippets/code/src_gui_itemviews_qtreewidget.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qaction.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qaction.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qaction.cpp rename to src/widgets/doc/snippets/code/src_gui_kernel_qaction.cpp diff --git a/src/widgets/doc/snippets/code/src_gui_kernel_qapplication.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qapplication.cpp new file mode 100644 index 00000000000..b32e8c3f398 --- /dev/null +++ b/src/widgets/doc/snippets/code/src_gui_kernel_qapplication.cpp @@ -0,0 +1,183 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +int main(int argc, char **argv) +{ +#ifdef Q_WS_X11 + bool useGUI = getenv("DISPLAY") != 0; +#else + bool useGUI = true; +#endif + QApplication app(argc, argv, useGUI); + + if (useGUI) { + // start GUI version + ... + } else { + // start non-GUI version + ... + } + return app.exec(); +} +//! [0] + + +//! [1] +QApplication::setStyle(new QWindowsStyle); +//! [1] + + +//! [2] +int main(int argc, char *argv[]) +{ + QApplication::setColorSpec(QApplication::ManyColor); + QApplication app(argc, argv); + ... + return app.exec(); +} +//! [2] + + +//! [3] +QSize MyWidget::sizeHint() const +{ + return QSize(80, 25).expandedTo(QApplication::globalStrut()); +} +//! [3] + + +//! [4] +void showAllHiddenTopLevelWidgets() +{ + foreach (QWidget *widget, QApplication::topLevelWidgets()) { + if (widget->isHidden()) + widget->show(); + } +} +//! [4] + + +//! [5] +void updateAllWidgets() +{ + foreach (QWidget *widget, QApplication::allWidgets()) + widget->update(); +} +//! [5] + + +//! [6] +int main(int argc, char *argv[]) +{ + QApplication::setDesktopSettingsAware(false); + QApplication app(argc, argv); + ... + return app.exec(); +} +//! [6] + + +//! [7] +if ((startPos - currentPos).manhattanLength() >= + QApplication::startDragDistance()) + startTheDrag(); +//! [7] + + +//! [8] +void MyApplication::commitData(QSessionManager& manager) +{ + if (manager.allowsInteraction()) { + int ret = QMessageBox::warning( + mainWindow, + tr("My Application"), + tr("Save changes to document?"), + QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); + + switch (ret) { + case QMessageBox::Save: + manager.release(); + if (!saveDocument()) + manager.cancel(); + break; + case QMessageBox::Discard: + break; + case QMessageBox::Cancel: + default: + manager.cancel(); + } + } else { + // we did not get permission to interact, then + // do something reasonable instead + } +} +//! [8] + + +//! [9] +appname -session id +//! [9] + + +//! [10] +foreach (const QString &command, mySession.restartCommand()) + do_something(command); +//! [10] + + +//! [11] +foreach (const QString &command, mySession.discardCommand()) + do_something(command); +//! [11] + + +//! [12] +QWidget *widget = qApp->widgetAt(x, y); +if (widget) + widget = widget->window(); +//! [12] + + +//! [13] +QWidget *widget = qApp->widgetAt(point); +if (widget) + widget = widget->window(); +//! [13] diff --git a/doc/src/snippets/code/src_gui_kernel_qformlayout.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qformlayout.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qformlayout.cpp rename to src/widgets/doc/snippets/code/src_gui_kernel_qformlayout.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qlayout.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qlayout.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qlayout.cpp rename to src/widgets/doc/snippets/code/src_gui_kernel_qlayout.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qlayoutitem.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp rename to src/widgets/doc/snippets/code/src_gui_kernel_qlayoutitem.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qshortcut.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qshortcut.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qshortcut.cpp rename to src/widgets/doc/snippets/code/src_gui_kernel_qshortcut.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qwidget.cpp b/src/widgets/doc/snippets/code/src_gui_kernel_qwidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qwidget.cpp rename to src/widgets/doc/snippets/code/src_gui_kernel_qwidget.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qdrawutil.cpp b/src/widgets/doc/snippets/code/src_gui_painting_qdrawutil.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qdrawutil.cpp rename to src/widgets/doc/snippets/code/src_gui_painting_qdrawutil.cpp diff --git a/doc/src/snippets/code/src_gui_qproxystyle.cpp b/src/widgets/doc/snippets/code/src_gui_qproxystyle.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_qproxystyle.cpp rename to src/widgets/doc/snippets/code/src_gui_qproxystyle.cpp diff --git a/doc/src/snippets/code/src_gui_styles_qstyle.cpp b/src/widgets/doc/snippets/code/src_gui_styles_qstyle.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_styles_qstyle.cpp rename to src/widgets/doc/snippets/code/src_gui_styles_qstyle.cpp diff --git a/doc/src/snippets/code/src_gui_styles_qstyleoption.cpp b/src/widgets/doc/snippets/code/src_gui_styles_qstyleoption.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_styles_qstyleoption.cpp rename to src/widgets/doc/snippets/code/src_gui_styles_qstyleoption.cpp diff --git a/doc/src/snippets/code/src_gui_util_qcompleter.cpp b/src/widgets/doc/snippets/code/src_gui_util_qcompleter.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_util_qcompleter.cpp rename to src/widgets/doc/snippets/code/src_gui_util_qcompleter.cpp diff --git a/doc/src/snippets/code/src_gui_util_qundostack.cpp b/src/widgets/doc/snippets/code/src_gui_util_qundostack.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_util_qundostack.cpp rename to src/widgets/doc/snippets/code/src_gui_util_qundostack.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qabstractbutton.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qabstractbutton.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qabstractspinbox.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qabstractspinbox.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qcalendarwidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qcalendarwidget.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qcheckbox.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qcheckbox.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qdatetimeedit.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qdatetimeedit.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qdockwidget.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qdockwidget.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qframe.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qframe.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qframe.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qframe.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qgroupbox.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qgroupbox.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qlabel.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qlabel.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qlabel.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qlabel.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qlineedit.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qlineedit.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qlineedit.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qlineedit.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qmainwindow.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qmainwindow.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qmenu.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qmenu.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qmenu.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qmenu.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qmenubar.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qmenubar.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qmenubar.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qmenubar.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qplaintextedit.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qplaintextedit.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qpushbutton.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qpushbutton.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qradiobutton.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qradiobutton.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qrubberband.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qrubberband.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qrubberband.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qrubberband.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qscrollarea.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qscrollarea.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qspinbox.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qspinbox.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qspinbox.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qspinbox.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qsplashscreen.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qsplashscreen.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qsplitter.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qsplitter.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qsplitter.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qsplitter.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qstatusbar.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qstatusbar.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qtextbrowser.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qtextbrowser.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qtextedit.cpp b/src/widgets/doc/snippets/code/src_gui_widgets_qtextedit.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qtextedit.cpp rename to src/widgets/doc/snippets/code/src_gui_widgets_qtextedit.cpp diff --git a/doc/src/snippets/customstyle/customstyle.cpp b/src/widgets/doc/snippets/customstyle/customstyle.cpp similarity index 100% rename from doc/src/snippets/customstyle/customstyle.cpp rename to src/widgets/doc/snippets/customstyle/customstyle.cpp diff --git a/doc/src/snippets/customstyle/customstyle.h b/src/widgets/doc/snippets/customstyle/customstyle.h similarity index 100% rename from doc/src/snippets/customstyle/customstyle.h rename to src/widgets/doc/snippets/customstyle/customstyle.h diff --git a/src/widgets/doc/snippets/customstyle/customstyle.pro b/src/widgets/doc/snippets/customstyle/customstyle.pro new file mode 100644 index 00000000000..af0ee4e1412 --- /dev/null +++ b/src/widgets/doc/snippets/customstyle/customstyle.pro @@ -0,0 +1,2 @@ +HEADERS += customstyle.h +SOURCES += customstyle.cpp main.cpp diff --git a/src/widgets/doc/snippets/customstyle/main.cpp b/src/widgets/doc/snippets/customstyle/main.cpp new file mode 100644 index 00000000000..b3bea3bd7b0 --- /dev/null +++ b/src/widgets/doc/snippets/customstyle/main.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [using a custom style] +#include + +#include "customstyle.h" + +int main(int argc, char *argv[]) +{ + QApplication::setStyle(new CustomStyle); + QApplication app(argc, argv); + QSpinBox spinBox; + spinBox.show(); + return app.exec(); +} +//! [using a custom style] diff --git a/doc/src/snippets/customviewstyle.cpp b/src/widgets/doc/snippets/customviewstyle.cpp similarity index 100% rename from doc/src/snippets/customviewstyle.cpp rename to src/widgets/doc/snippets/customviewstyle.cpp diff --git a/doc/src/snippets/dialogs/dialogs.cpp b/src/widgets/doc/snippets/dialogs/dialogs.cpp similarity index 100% rename from doc/src/snippets/dialogs/dialogs.cpp rename to src/widgets/doc/snippets/dialogs/dialogs.cpp diff --git a/doc/src/snippets/filedialogurls.cpp b/src/widgets/doc/snippets/filedialogurls.cpp similarity index 100% rename from doc/src/snippets/filedialogurls.cpp rename to src/widgets/doc/snippets/filedialogurls.cpp diff --git a/doc/src/snippets/graphicssceneadditemsnippet.cpp b/src/widgets/doc/snippets/graphicssceneadditemsnippet.cpp similarity index 100% rename from doc/src/snippets/graphicssceneadditemsnippet.cpp rename to src/widgets/doc/snippets/graphicssceneadditemsnippet.cpp diff --git a/doc/src/snippets/javastyle.cpp b/src/widgets/doc/snippets/javastyle.cpp similarity index 100% rename from doc/src/snippets/javastyle.cpp rename to src/widgets/doc/snippets/javastyle.cpp diff --git a/doc/src/snippets/layouts/layouts.cpp b/src/widgets/doc/snippets/layouts/layouts.cpp similarity index 100% rename from doc/src/snippets/layouts/layouts.cpp rename to src/widgets/doc/snippets/layouts/layouts.cpp diff --git a/doc/src/snippets/mainwindowsnippet.cpp b/src/widgets/doc/snippets/mainwindowsnippet.cpp similarity index 100% rename from doc/src/snippets/mainwindowsnippet.cpp rename to src/widgets/doc/snippets/mainwindowsnippet.cpp diff --git a/doc/src/snippets/mdiareasnippets.cpp b/src/widgets/doc/snippets/mdiareasnippets.cpp similarity index 100% rename from doc/src/snippets/mdiareasnippets.cpp rename to src/widgets/doc/snippets/mdiareasnippets.cpp diff --git a/doc/src/snippets/myscrollarea.cpp b/src/widgets/doc/snippets/myscrollarea.cpp similarity index 100% rename from doc/src/snippets/myscrollarea.cpp rename to src/widgets/doc/snippets/myscrollarea.cpp diff --git a/doc/src/snippets/qlistwidget-using/mainwindow.cpp b/src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp similarity index 100% rename from doc/src/snippets/qlistwidget-using/mainwindow.cpp rename to src/widgets/doc/snippets/qlistwidget-using/mainwindow.cpp diff --git a/doc/src/snippets/qmacnativewidget/main.mm b/src/widgets/doc/snippets/qmacnativewidget/main.mm similarity index 100% rename from doc/src/snippets/qmacnativewidget/main.mm rename to src/widgets/doc/snippets/qmacnativewidget/main.mm diff --git a/doc/src/snippets/qsplashscreen/main.cpp b/src/widgets/doc/snippets/qsplashscreen/main.cpp similarity index 100% rename from doc/src/snippets/qsplashscreen/main.cpp rename to src/widgets/doc/snippets/qsplashscreen/main.cpp diff --git a/doc/src/snippets/qstackedlayout/main.cpp b/src/widgets/doc/snippets/qstackedlayout/main.cpp similarity index 100% rename from doc/src/snippets/qstackedlayout/main.cpp rename to src/widgets/doc/snippets/qstackedlayout/main.cpp diff --git a/doc/src/snippets/qstackedwidget/main.cpp b/src/widgets/doc/snippets/qstackedwidget/main.cpp similarity index 100% rename from doc/src/snippets/qstackedwidget/main.cpp rename to src/widgets/doc/snippets/qstackedwidget/main.cpp diff --git a/doc/src/snippets/qstyleoption/main.cpp b/src/widgets/doc/snippets/qstyleoption/main.cpp similarity index 100% rename from doc/src/snippets/qstyleoption/main.cpp rename to src/widgets/doc/snippets/qstyleoption/main.cpp diff --git a/doc/src/snippets/qstyleplugin/main.cpp b/src/widgets/doc/snippets/qstyleplugin/main.cpp similarity index 100% rename from doc/src/snippets/qstyleplugin/main.cpp rename to src/widgets/doc/snippets/qstyleplugin/main.cpp diff --git a/doc/src/snippets/qtablewidget-resizing/mainwindow.cpp b/src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp similarity index 100% rename from doc/src/snippets/qtablewidget-resizing/mainwindow.cpp rename to src/widgets/doc/snippets/qtablewidget-resizing/mainwindow.cpp diff --git a/doc/src/snippets/qtablewidget-using/mainwindow.cpp b/src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp similarity index 100% rename from doc/src/snippets/qtablewidget-using/mainwindow.cpp rename to src/widgets/doc/snippets/qtablewidget-using/mainwindow.cpp diff --git a/doc/src/snippets/qtreewidget-using/mainwindow.cpp b/src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp similarity index 100% rename from doc/src/snippets/qtreewidget-using/mainwindow.cpp rename to src/widgets/doc/snippets/qtreewidget-using/mainwindow.cpp diff --git a/doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp b/src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp similarity index 100% rename from doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp rename to src/widgets/doc/snippets/qtreewidgetitemiterator-using/mainwindow.cpp diff --git a/doc/src/snippets/shareddirmodel/main.cpp b/src/widgets/doc/snippets/shareddirmodel/main.cpp similarity index 100% rename from doc/src/snippets/shareddirmodel/main.cpp rename to src/widgets/doc/snippets/shareddirmodel/main.cpp diff --git a/doc/src/snippets/splitter/splitter.cpp b/src/widgets/doc/snippets/splitter/splitter.cpp similarity index 100% rename from doc/src/snippets/splitter/splitter.cpp rename to src/widgets/doc/snippets/splitter/splitter.cpp diff --git a/doc/src/snippets/splitterhandle/splitter.cpp b/src/widgets/doc/snippets/splitterhandle/splitter.cpp similarity index 100% rename from doc/src/snippets/splitterhandle/splitter.cpp rename to src/widgets/doc/snippets/splitterhandle/splitter.cpp diff --git a/doc/src/snippets/splitterhandle/splitter.h b/src/widgets/doc/snippets/splitterhandle/splitter.h similarity index 100% rename from doc/src/snippets/splitterhandle/splitter.h rename to src/widgets/doc/snippets/splitterhandle/splitter.h diff --git a/doc/src/snippets/styles/styles.cpp b/src/widgets/doc/snippets/styles/styles.cpp similarity index 100% rename from doc/src/snippets/styles/styles.cpp rename to src/widgets/doc/snippets/styles/styles.cpp diff --git a/doc/src/snippets/stylesheet/common-mistakes.cpp b/src/widgets/doc/snippets/stylesheet/common-mistakes.cpp similarity index 100% rename from doc/src/snippets/stylesheet/common-mistakes.cpp rename to src/widgets/doc/snippets/stylesheet/common-mistakes.cpp diff --git a/doc/src/snippets/textdocument-imagedrop/textedit.cpp b/src/widgets/doc/snippets/textdocument-imagedrop/textedit.cpp similarity index 100% rename from doc/src/snippets/textdocument-imagedrop/textedit.cpp rename to src/widgets/doc/snippets/textdocument-imagedrop/textedit.cpp diff --git a/doc/src/snippets/timeline/main.cpp b/src/widgets/doc/snippets/timeline/main.cpp similarity index 100% rename from doc/src/snippets/timeline/main.cpp rename to src/widgets/doc/snippets/timeline/main.cpp diff --git a/doc/src/snippets/whatsthis/whatsthis.cpp b/src/widgets/doc/snippets/whatsthis/whatsthis.cpp similarity index 100% rename from doc/src/snippets/whatsthis/whatsthis.cpp rename to src/widgets/doc/snippets/whatsthis/whatsthis.cpp diff --git a/doc/src/snippets/widget-mask/main.cpp b/src/widgets/doc/snippets/widget-mask/main.cpp similarity index 100% rename from doc/src/snippets/widget-mask/main.cpp rename to src/widgets/doc/snippets/widget-mask/main.cpp diff --git a/doc/src/snippets/widgetdelegate.cpp b/src/widgets/doc/snippets/widgetdelegate.cpp similarity index 100% rename from doc/src/snippets/widgetdelegate.cpp rename to src/widgets/doc/snippets/widgetdelegate.cpp diff --git a/doc/src/widgets/qtwidgets.qdoc b/src/widgets/doc/src/qtwidgets.qdoc similarity index 90% rename from doc/src/widgets/qtwidgets.qdoc rename to src/widgets/doc/src/qtwidgets.qdoc index 4be460a2ab4..9267b0fb441 100644 --- a/doc/src/widgets/qtwidgets.qdoc +++ b/src/widgets/doc/src/qtwidgets.qdoc @@ -35,11 +35,11 @@ To include the definitions of the module's classes, use the following directive: - \snippet doc/src/snippets/code/doc_src_qtwidgets.cpp 1 + \snippet code/doc_src_qtwidgets.cpp 1 To link against the module, add this line to your \l qmake \c .pro file: - \snippet doc/src/snippets/code/doc_src_qtwidgets.pro 0 + \snippet code/doc_src_qtwidgets.pro 0 */ diff --git a/doc/src/widgets/widgets-and-layouts/focus.qdoc b/src/widgets/doc/src/widgets-and-layouts/focus.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/focus.qdoc rename to src/widgets/doc/src/widgets-and-layouts/focus.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-cde.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-cde.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-cde.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-cde.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-cleanlooks.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-cleanlooks.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-gtk.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-gtk.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-gtk.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-gtk.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-macintosh.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-macintosh.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-macintosh.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-motif.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-motif.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-motif.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-motif.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-plastique.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-plastique.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-plastique.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-plastique.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-windows.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-windows.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-windows.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-windowsvista.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-windowsvista.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery-windowsxp.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery-windowsxp.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/gallery.qdoc b/src/widgets/doc/src/widgets-and-layouts/gallery.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/gallery.qdoc rename to src/widgets/doc/src/widgets-and-layouts/gallery.qdoc diff --git a/doc/src/widgets/widgets-and-layouts/layout.qdoc b/src/widgets/doc/src/widgets-and-layouts/layout.qdoc similarity index 91% rename from doc/src/widgets/widgets-and-layouts/layout.qdoc rename to src/widgets/doc/src/widgets-and-layouts/layout.qdoc index 6e1a5f70e13..807f9ae8f97 100644 --- a/doc/src/widgets/widgets-and-layouts/layout.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/layout.qdoc @@ -118,25 +118,25 @@ The following code creates a QHBoxLayout that manages the geometry of five \l{QPushButton}{QPushButtons}, as shown on the first screenshot above: - \snippet doc/src/snippets/layouts/layouts.cpp 0 - \snippet doc/src/snippets/layouts/layouts.cpp 1 - \snippet doc/src/snippets/layouts/layouts.cpp 2 + \snippet layouts/layouts.cpp 0 + \snippet layouts/layouts.cpp 1 + \snippet layouts/layouts.cpp 2 \codeline - \snippet doc/src/snippets/layouts/layouts.cpp 3 - \snippet doc/src/snippets/layouts/layouts.cpp 4 - \snippet doc/src/snippets/layouts/layouts.cpp 5 + \snippet layouts/layouts.cpp 3 + \snippet layouts/layouts.cpp 4 + \snippet layouts/layouts.cpp 5 The code for QVBoxLayout is identical, except the line where the layout is created. The code for QGridLayout is a bit different, because we need to specify the row and column position of the child widget: - \snippet doc/src/snippets/layouts/layouts.cpp 12 - \snippet doc/src/snippets/layouts/layouts.cpp 13 - \snippet doc/src/snippets/layouts/layouts.cpp 14 + \snippet layouts/layouts.cpp 12 + \snippet layouts/layouts.cpp 13 + \snippet layouts/layouts.cpp 14 \codeline - \snippet doc/src/snippets/layouts/layouts.cpp 15 - \snippet doc/src/snippets/layouts/layouts.cpp 16 - \snippet doc/src/snippets/layouts/layouts.cpp 17 + \snippet layouts/layouts.cpp 15 + \snippet layouts/layouts.cpp 16 + \snippet layouts/layouts.cpp 17 The third QPushButton spans 2 columns. This is possible by specifying 2 as the fifth argument to QGridLayout::addWidget(). @@ -147,13 +147,13 @@ QFormLayout to place three \l{QPushButton}{QPushButtons} and a corresponding QLineEdit on a row. - \snippet doc/src/snippets/layouts/layouts.cpp 18 - \snippet doc/src/snippets/layouts/layouts.cpp 19 - \snippet doc/src/snippets/layouts/layouts.cpp 20 + \snippet layouts/layouts.cpp 18 + \snippet layouts/layouts.cpp 19 + \snippet layouts/layouts.cpp 20 \codeline - \snippet doc/src/snippets/layouts/layouts.cpp 21 - \snippet doc/src/snippets/layouts/layouts.cpp 22 - \snippet doc/src/snippets/layouts/layouts.cpp 23 + \snippet layouts/layouts.cpp 21 + \snippet layouts/layouts.cpp 22 + \snippet layouts/layouts.cpp 23 \section2 Tips for Using Layouts @@ -319,16 +319,16 @@ \section2 The Header File (\c card.h) - \snippet doc/src/snippets/code/doc_src_layout.cpp 0 + \snippet code/doc_src_layout.cpp 0 \section2 The Implementation File (\c card.cpp) - \snippet doc/src/snippets/code/doc_src_layout.cpp 1 + \snippet code/doc_src_layout.cpp 1 First we define \c{count()} to fetch the number of items in the list. - \snippet doc/src/snippets/code/doc_src_layout.cpp 2 + \snippet code/doc_src_layout.cpp 2 Then we define two functions that iterate over the layout: \c{itemAt()} and \c{takeAt()}. These functions are used internally by the layout system @@ -341,7 +341,7 @@ structure, we may have to spend more effort defining a linear order for the items. - \snippet doc/src/snippets/code/doc_src_layout.cpp 3 + \snippet code/doc_src_layout.cpp 3 \c{addItem()} implements the default placement strategy for layout items. This function must be implemented. It is used by QLayout::add(), by the @@ -351,26 +351,26 @@ QGridLayout::addItem(), QGridLayout::addWidget(), and QGridLayout::addLayout(). - \snippet doc/src/snippets/code/doc_src_layout.cpp 4 + \snippet code/doc_src_layout.cpp 4 The layout takes over responsibility of the items added. Since QLayoutItem does not inherit QObject, we must delete the items manually. In the destructor, we remove each item from the list using \c{takeAt()}, and then delete it. - \snippet doc/src/snippets/code/doc_src_layout.cpp 5 + \snippet code/doc_src_layout.cpp 5 The \c{setGeometry()} function actually performs the layout. The rectangle supplied as an argument does not include \c{margin()}. If relevant, use \c{spacing()} as the distance between items. - \snippet doc/src/snippets/code/doc_src_layout.cpp 6 + \snippet code/doc_src_layout.cpp 6 \c{sizeHint()} and \c{minimumSize()} are normally very similar in implementation. The sizes returned by both functions should include \c{spacing()}, but not \c{margin()}. - \snippet doc/src/snippets/code/doc_src_layout.cpp 7 + \snippet code/doc_src_layout.cpp 7 \section2 Further Notes diff --git a/doc/src/widgets/widgets-and-layouts/styles.qdoc b/src/widgets/doc/src/widgets-and-layouts/styles.qdoc similarity index 99% rename from doc/src/widgets/widgets-and-layouts/styles.qdoc rename to src/widgets/doc/src/widgets-and-layouts/styles.qdoc index b9e3a303339..d6706d7994c 100644 --- a/doc/src/widgets/widgets-and-layouts/styles.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/styles.qdoc @@ -283,21 +283,21 @@ pointer type is correct. If the object isn't of the right type, qstyleoption_cast() returns 0. For example: - \snippet doc/src/snippets/code/doc_src_qt4-styles.cpp 0 + \snippet code/doc_src_qt4-styles.cpp 0 The following code snippet illustrates how to use QStyle to draw the focus rectangle from a custom widget's paintEvent(): - \snippet doc/src/snippets/code/doc_src_qt4-styles.cpp 1 + \snippet code/doc_src_qt4-styles.cpp 1 The next example shows how to derive from an existing style to customize the look of a graphical element: - \snippet doc/src/snippets/customstyle/customstyle.h 0 + \snippet customstyle/customstyle.h 0 \codeline - \snippet doc/src/snippets/customstyle/customstyle.cpp 2 - \snippet doc/src/snippets/customstyle/customstyle.cpp 3 - \snippet doc/src/snippets/customstyle/customstyle.cpp 4 + \snippet customstyle/customstyle.cpp 2 + \snippet customstyle/customstyle.cpp 3 + \snippet customstyle/customstyle.cpp 4 \section2 QStyle Functions @@ -542,7 +542,7 @@ We start with a look at how QCheckBox builds it style option, which is QStyleOptionButton for checkboxes: - \snippet doc/src/snippets/code/doc_src_styles.cpp 0 + \snippet code/doc_src_styles.cpp 0 First we let QStyleOption set up the option with the information that is common for all widgets with \c initFrom(). We will look at @@ -561,7 +561,7 @@ attributes that are common for all widgets. We print its implementation here: - \snippet doc/src/snippets/code/doc_src_styles.cpp 1 + \snippet code/doc_src_styles.cpp 1 The State_Enabled is set when the widget is enabled. When the widget has focus the State_HasFocus flag is set. Equally, the @@ -625,7 +625,7 @@ notably, it wraps the methods in QStyle used for painting. The QCheckBox draws itself as follows: - \snippet doc/src/snippets/code/doc_src_styles.cpp 2 + \snippet code/doc_src_styles.cpp 2 QCommonStyle handles the CE_CheckBox element. The QCheckBox has two sub elements: SE_CheckBoxIndicator (the checked indicator) @@ -633,7 +633,7 @@ checkbox label). QCommonStyle also implements these sub element bounding rectangles. We have a look at the QCommonStyle code: - \snippet doc/src/snippets/code/doc_src_styles.cpp 3 + \snippet code/doc_src_styles.cpp 3 As can be seen from the code extract, the common style gets the bounding rectangles of the two sub elements of @@ -644,7 +644,7 @@ handles CE_CheckboxLabel. We will examine each implementation and start with CE_CheckBoxLabel: - \snippet doc/src/snippets/code/doc_src_styles.cpp 4 + \snippet code/doc_src_styles.cpp 4 \l{QStyle::}{visualAlignment()} adjusts the alignment of text according to the layout direction. We then draw an icon if it @@ -663,7 +663,7 @@ We take a look at the java implementation of CE_CheckBoxIndicator in \c drawControl(): - \snippet doc/src/snippets/javastyle.cpp 0 + \snippet javastyle.cpp 0 We first save the state of the painter. This is not always necessary but in this case the QWindowsStyle needs the painter in @@ -682,7 +682,7 @@ here if the widget is disabled. We would then have to use another image with the indicator in the disabled color. - \snippet doc/src/snippets/javastyle.cpp 1 + \snippet javastyle.cpp 1 We have seen how check boxes are styled in the java style from the widget gets a paint request to the style is finished painting. To diff --git a/doc/src/widgets/widgets-and-layouts/stylesheet.qdoc b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc similarity index 92% rename from doc/src/widgets/widgets-and-layouts/stylesheet.qdoc rename to src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc index eaedb847c88..3b31efbdfc1 100644 --- a/doc/src/widgets/widgets-and-layouts/stylesheet.qdoc +++ b/src/widgets/doc/src/widgets-and-layouts/stylesheet.qdoc @@ -73,7 +73,7 @@ \l{QLineEdit}s should use yellow as their background color, and all \l{QCheckBox}es should use red as the text color: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 0 + \snippet code/doc_src_stylesheet.qdoc 0 For this kind of customization, style sheets are much more powerful than QPalette. For example, it might be tempting to set @@ -157,7 +157,7 @@ the \e{declaration} specifies which properties should be set on the widget. For example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 1 + \snippet code/doc_src_stylesheet.qdoc 1 In the above style rule, \c QPushButton is the selector and \c{{ color: red }} is the declaration. The rule specifies that @@ -174,17 +174,17 @@ using commas (\c{,}) to separate the selectors. For example, the rule - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 2 + \snippet code/doc_src_stylesheet.qdoc 2 is equivalent to this sequence of three rules: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 3 + \snippet code/doc_src_stylesheet.qdoc 3 The declaration part of a style rule is a list of \tt{\e{property}: \e{value}} pairs, enclosed in braces (\c{{}}) and separated with semicolons. For example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 4 + \snippet code/doc_src_stylesheet.qdoc 4 See the \l{List of Properties} section below for the list of properties provided by Qt widgets. @@ -271,7 +271,7 @@ possible to restrict the application of a rule to specific widget subcontrols. For example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 5 + \snippet code/doc_src_stylesheet.qdoc 5 The above rule styles the drop-down button of all \l{QComboBox}es. Although the double-colon (\c{::}) syntax is reminiscent of CSS3 @@ -295,7 +295,7 @@ rectangle of the QComboBox instead of the default Padding rectangle, we can specify: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 6 + \snippet code/doc_src_stylesheet.qdoc 6 The alignment of the drop-down within the Margin rectangle is changed using \l{Qt Style Sheets Reference#subcontrol-position-prop} @@ -314,7 +314,7 @@ pressed, we might like the arrow inside to be offset to give a "pressed" effect. To achieve this, we can specify: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 7 + \snippet code/doc_src_stylesheet.qdoc 7 The absolute positioning scheme (\l{Qt Style Sheets Reference#position-prop}{position} : absolute), @@ -340,34 +340,34 @@ (\c{:}) in between. For example, the following rule applies when the mouse hovers over a QPushButton: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 8 + \snippet code/doc_src_stylesheet.qdoc 8 Pseudo-states can be negated using the exclamation operator. For example, the following rule applies when the mouse does not hover over a QRadioButton: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 9 + \snippet code/doc_src_stylesheet.qdoc 9 Pseudo-states can be chained, in which case a logical AND is implied. For example, the following rule applies to when the mouse hovers over a checked QCheckBox: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 10 + \snippet code/doc_src_stylesheet.qdoc 10 Negated Pseudo-states may appear in Pseudo-state chains. For example, the following rule applies when the mouse hovers over a QPushButton that is not pressed: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 11 + \snippet code/doc_src_stylesheet.qdoc 11 If needed, logical OR can be expressed using the comma operator: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 12 + \snippet code/doc_src_stylesheet.qdoc 12 Pseudo-states can appear in combination with subcontrols. For example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 13 + \snippet code/doc_src_stylesheet.qdoc 13 See the \l{List of Pseudo-States} section below for the list of pseudo-states provided by Qt widgets. @@ -378,7 +378,7 @@ properties with different values. Consider the following style sheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 14 + \snippet code/doc_src_stylesheet.qdoc 14 Both rules match QPushButton instances called \c okButton and there is a conflict for the \c color property. To resolve this @@ -393,27 +393,27 @@ sheet specifies that a \l{QPushButton} should have white text when the mouse is hovering over it, otherwise red text: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 15 + \snippet code/doc_src_stylesheet.qdoc 15 Here's a tricky one: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 16 + \snippet code/doc_src_stylesheet.qdoc 16 Here, both selectors have the same specificity, so if the mouse hovers over the button while it is enabled, the second rule takes precedence. If we want the text to be white in that case, we can reorder the rules like this: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 17 + \snippet code/doc_src_stylesheet.qdoc 17 Alternatively, we can make the first rule more specific: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 18 + \snippet code/doc_src_stylesheet.qdoc 18 A similar issue arises in conjunction with Type Selectors. Consider the following example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 19 + \snippet code/doc_src_stylesheet.qdoc 19 Both rules apply to QPushButton instances (since QPushButton inherits QAbstractButton) and there is a conflict for the @@ -447,7 +447,7 @@ \e{Some examples:} - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 20 + \snippet code/doc_src_stylesheet.qdoc 20 \endquotation \section1 Cascading @@ -469,11 +469,11 @@ sheet. Consider the following example. First, we set a style sheet on the QApplication: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 21 + \snippet code/doc_src_stylesheet.cpp 21 Then we set a style sheet on a QPushButton object: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 22 + \snippet code/doc_src_stylesheet.cpp 22 The style sheet on the QPushButton forces the QPushButton (and any child widget) to have blue text, in spite of the more @@ -481,7 +481,7 @@ The result would have been the same if we had written - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 23 + \snippet code/doc_src_stylesheet.cpp 23 except that if the QPushButton had children (which is unlikely), the style sheet would have no impact on them. @@ -500,14 +500,14 @@ For example, consider a QPushButton inside a QGroupBox: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 24 + \snippet code/doc_src_stylesheet.cpp 24 The QPushButton does not have an explicit color set. Hence, instead of inheriting color of its parent QGroupBox, it has the system color. If we want to set the color on a QGroupBox and its children, we can write: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 25 + \snippet code/doc_src_stylesheet.cpp 25 In contrast, setting a font and propagate using QWidget::setFont() and QWidget::setPalette() propagates to child widgets. @@ -517,7 +517,7 @@ The Type Selector can be used to style widgets of a particular type. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 26 + \snippet code/doc_src_stylesheet.cpp 26 Qt Style Sheet uses QObject::className() of the widget to determine when to apply the Type Selector. When custom widgets are inside namespaces, @@ -526,7 +526,7 @@ when using the Type Selector for widgets inside namespaces, we must replace the "::" with "--". For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 27 + \snippet code/doc_src_stylesheet.cpp 27 \section1 Setting QObject properties @@ -534,7 +534,7 @@ can be set using the qproperty- syntax. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 28 + \snippet code/doc_src_stylesheet.qdoc 28 If the property references an enum declared with Q_ENUMS, you should reference its constants by name, i.e., not their numeric value. @@ -982,7 +982,7 @@ because, by default, the QPushButton draws a native border which completely overlaps the background-color. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 30 + \snippet code/doc_src_stylesheet.qdoc 30 See \l{Qt Style Sheets Examples#Customizing QPushButton}{Customizing QPushButton} for an example. @@ -1260,7 +1260,7 @@ because, by default, the QToolButton draws a native border which completely overlaps the background-color. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 31 + \snippet code/doc_src_stylesheet.qdoc 31 See \l{Qt Style Sheets Examples#Customizing QToolButton}{Customizing QToolButton} for an example. @@ -1328,7 +1328,7 @@ If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 32 + \snippet code/doc_src_stylesheet.cpp 32 The above code is a no-operation if there is no stylesheet set. @@ -1364,7 +1364,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 33 + \snippet code/doc_src_stylesheet.qdoc 33 See also \l{Qt Style Sheets Reference#background-prop}{background} and \l{#selection-background-color-prop}{selection-background-color}. @@ -1384,7 +1384,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 34 + \snippet code/doc_src_stylesheet.qdoc 34 Often, it is required to set a fill pattern similar to the styles @@ -1395,7 +1395,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 35 + \snippet code/doc_src_stylesheet.qdoc 35 See also \l{#background-origin-prop}{background-origin}, \l{#selection-background-color-prop}{selection-background-color}, @@ -1410,7 +1410,7 @@ Examples: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 36 + \snippet code/doc_src_stylesheet.qdoc 36 \row \li \c background-image \target background-image-prop @@ -1421,7 +1421,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 37 + \snippet code/doc_src_stylesheet.qdoc 37 \row \li \c background-repeat \target background-repeat-prop @@ -1434,7 +1434,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 38 + \snippet code/doc_src_stylesheet.qdoc 38 \row \li \c background-position @@ -1447,7 +1447,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 39 + \snippet code/doc_src_stylesheet.qdoc 39 \row \li \b{\c background-attachment} \target background-attachment-prop @@ -1458,7 +1458,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 40 + \snippet code/doc_src_stylesheet.qdoc 40 See also \l{Qt Style Sheets Reference#background-prop}{background} @@ -1481,7 +1481,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 41 + \snippet code/doc_src_stylesheet.qdoc 41 See also \l{Qt Style Sheets Reference#background-prop}{background}, \l{#background-origin-prop}{background-origin} and \l{The Box Model}. @@ -1503,7 +1503,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 42 + \snippet code/doc_src_stylesheet.qdoc 42 See also \l{Qt Style Sheets Reference#background-prop}{background} and \l{The Box Model}. @@ -1523,7 +1523,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 43 + \snippet code/doc_src_stylesheet.qdoc 43 \row \li \c border-top @@ -1573,7 +1573,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 44 + \snippet code/doc_src_stylesheet.qdoc 44 See also \l{Qt Style Sheets Reference#border-style-prop}{border-style}, \l{Qt Style Sheets Reference#border-width-prop}{border-width}, @@ -1638,7 +1638,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 45 + \snippet code/doc_src_stylesheet.qdoc 45 See also \l{Qt Style Sheets Reference#border-width-prop}{border-width} and \l{The Box Model}. @@ -1681,7 +1681,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 46 + \snippet code/doc_src_stylesheet.qdoc 46 See also \l{#border-color-prop}{border-color}, \l{Qt Style Sheets Reference#border-style-prop}{border-style}, @@ -1722,7 +1722,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 47 + \snippet code/doc_src_stylesheet.qdoc 47 See also \l{#border-color-prop}{border-color}, \l{#border-radius-prop}{border-radius}, @@ -1766,7 +1766,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 48 + \snippet code/doc_src_stylesheet.qdoc 48 See also \l{Qt Style Sheets Reference#left-prop}{left}, \l{#right-prop}{right}, and \l{Qt Style Sheets Reference#top-prop}{top}. @@ -1787,7 +1787,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 49 + \snippet code/doc_src_stylesheet.qdoc 49 \row \li \b{\c color} \target color-prop @@ -1803,7 +1803,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 50 + \snippet code/doc_src_stylesheet.qdoc 50 See also \l{Qt Style Sheets Reference#background-prop}{background} and \l{#selection-color-prop}{selection-color}. @@ -1819,7 +1819,7 @@ See the \l{Qt Style Sheets Reference#list of icons}{List of Icons} section for information on how to set icons. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 51 + \snippet code/doc_src_stylesheet.qdoc 51 \note Styles defining this property must be applied before the QDialogButtonBox is created; this means that you must apply the @@ -1837,7 +1837,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 52 + \snippet code/doc_src_stylesheet.qdoc 52 \endomit \row @@ -1855,7 +1855,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 53 + \snippet code/doc_src_stylesheet.qdoc 53 \row \li \c font-family @@ -1864,7 +1864,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 54 + \snippet code/doc_src_stylesheet.qdoc 54 \row \li \c font-size @@ -1874,7 +1874,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 55 + \snippet code/doc_src_stylesheet.qdoc 55 \row \li \c font-style @@ -1883,7 +1883,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 56 + \snippet code/doc_src_stylesheet.qdoc 56 \row \li \c font-weight @@ -1901,7 +1901,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 57 + \snippet code/doc_src_stylesheet.qdoc 57 \row \li \b{\c height} \target height-prop @@ -1918,7 +1918,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 58 + \snippet code/doc_src_stylesheet.qdoc 58 See also \l{#width-prop}{width}. @@ -1966,7 +1966,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 59 + \snippet code/doc_src_stylesheet.qdoc 59 \row \li \b{\c image-position} \target image-position-prop @@ -1990,7 +1990,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 60 + \snippet code/doc_src_stylesheet.qdoc 60 See also \l{#right-prop}{right}, \l{Qt Style Sheets Reference#top-prop}{top}, and \l{#bottom-prop}{bottom}. @@ -2006,7 +2006,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 61 + \snippet code/doc_src_stylesheet.qdoc 61 \row \li \b{\c margin} \target margin-prop @@ -2025,7 +2025,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 62 + \snippet code/doc_src_stylesheet.qdoc 62 See also \l{Qt Style Sheets Reference#padding-prop}{padding}, \l{#spacing-prop}{spacing}, and \l{The Box Model}. @@ -2066,7 +2066,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 63 + \snippet code/doc_src_stylesheet.qdoc 63 See also \l{#max-width-prop}{max-width}. @@ -2086,7 +2086,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 64 + \snippet code/doc_src_stylesheet.qdoc 64 See also \l{#max-height-prop}{max-height}. @@ -2104,7 +2104,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 65 + \snippet code/doc_src_stylesheet.qdoc 65 \row \li \b{\c min-height} \target min-height-prop @@ -2125,7 +2125,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 66 + \snippet code/doc_src_stylesheet.qdoc 66 See also \l{#min-width-prop}{min-width}. @@ -2148,7 +2148,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 67 + \snippet code/doc_src_stylesheet.qdoc 67 See also \l{#min-height-prop}{min-height}. @@ -2165,7 +2165,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 68 + \snippet code/doc_src_stylesheet.qdoc 68 \row \li \b{\c padding} \target padding-prop @@ -2184,7 +2184,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 69 + \snippet code/doc_src_stylesheet.qdoc 69 See also \l{#margin-prop}{margin}, \l{#spacing-prop}{spacing}, and \l{The Box Model}. @@ -2243,7 +2243,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 70 + \snippet code/doc_src_stylesheet.qdoc 70 See also \l{Qt Style Sheets Reference#left-prop}{left}, \l{Qt Style Sheets Reference#top-prop}{top}, and \l{#bottom-prop}{bottom}. @@ -2262,7 +2262,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 71 + \snippet code/doc_src_stylesheet.qdoc 71 See also \l{#selection-color-prop}{selection-color} and \l{Qt Style Sheets Reference#background-prop}{background}. @@ -2281,7 +2281,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 72 + \snippet code/doc_src_stylesheet.qdoc 72 See also \l{#selection-background-color-prop}{selection-background-color} @@ -2300,7 +2300,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 73 + \snippet code/doc_src_stylesheet.qdoc 73 \row \li \b{\c spacing*} \target spacing-prop @@ -2315,7 +2315,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 74 + \snippet code/doc_src_stylesheet.qdoc 74 See also \l{Qt Style Sheets Reference#padding-prop}{padding} and \l{#margin-prop}{margin}. @@ -2331,7 +2331,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 75 + \snippet code/doc_src_stylesheet.qdoc 75 See also \l{Qt Style Sheets Reference#subcontrol-position-prop}{subcontrol-position}. @@ -2348,7 +2348,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 76 + \snippet code/doc_src_stylesheet.qdoc 76 See also \l{Qt Style Sheets Reference#subcontrol-origin-prop}{subcontrol-origin}. @@ -2363,7 +2363,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 77 + \snippet code/doc_src_stylesheet.qdoc 77 This property is currently supported only by QPushButton and QProgressBar. @@ -2392,7 +2392,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 78 + \snippet code/doc_src_stylesheet.qdoc 78 See also \l{Qt Style Sheets Reference#left-prop}{left}, \l{#right-prop}{right}, and \l{#bottom-prop}{bottom}. @@ -2412,7 +2412,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 79 + \snippet code/doc_src_stylesheet.qdoc 79 See also \l{#height-prop}{height}. @@ -2671,7 +2671,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 80 + \snippet code/doc_src_stylesheet.qdoc 80 \row \li \b Attachment \target Attachment @@ -2695,7 +2695,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 81 + \snippet code/doc_src_stylesheet.qdoc 81 \row \li \b Border \target Border @@ -2750,7 +2750,7 @@ Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 82 + \snippet code/doc_src_stylesheet.qdoc 82 \row \li \b{Box Lengths} \target Box Lengths @@ -2765,7 +2765,7 @@ Examples: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 83 + \snippet code/doc_src_stylesheet.qdoc 83 \row \li \b{Brush} \target Brush @@ -2791,7 +2791,7 @@ Examples: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 84 + \snippet code/doc_src_stylesheet.qdoc 84 \note The RGB colors allowed are the same as those allowed with CSS 2.1, as listed @@ -2852,7 +2852,7 @@ Examples: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 85 + \snippet code/doc_src_stylesheet.qdoc 85 \row \li \b{Icon} \target Icon @@ -2861,7 +2861,7 @@ \li A list of url, QIcon::Mode and QIcon::State. Example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 86 + \snippet code/doc_src_stylesheet.qdoc 86 \row \li \b{Length} \target Length @@ -2930,7 +2930,7 @@ in the widget's QPalette. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 87 + \snippet code/doc_src_stylesheet.qdoc 87 \row \li \b{Radius} \target Radius @@ -3373,35 +3373,35 @@ \l{QLineEdit}s in an application. This could be achieved like this: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 88 + \snippet code/doc_src_stylesheet.cpp 88 If we want the property to apply only to the \l{QLineEdit}s that are children (or grandchildren or grand-grandchildren) of a specific dialog, we would rather do this: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 89 + \snippet code/doc_src_stylesheet.cpp 89 If we want the property to apply only to one specific QLineEdit, we can give it a name using QObject::setObjectName() and use an ID Selector to refer to it: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 90 + \snippet code/doc_src_stylesheet.cpp 90 Alternatively, we can set the \l{Qt Style Sheets Reference#background-prop}{background-color} property directly on the QLineEdit, omitting the selector: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 91 + \snippet code/doc_src_stylesheet.cpp 91 To ensure a good contrast, we should also specify a suitable color for the text: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 92 + \snippet code/doc_src_stylesheet.cpp 92 It might be a good idea to change the colors used for selected text as well: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 93 + \snippet code/doc_src_stylesheet.cpp 93 \section2 Customizing Using Dynamic Properties @@ -3413,7 +3413,7 @@ turns out this is very easy to implement using Qt Style Sheets. First, we would use the following application-wide style sheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 94 + \snippet code/doc_src_stylesheet.qdoc 94 This means that every widget whose \c mandatoryField Qt property is set to true would have a yellow background. @@ -3422,7 +3422,7 @@ \c mandatoryField property on the fly and set it to true. For example: - \snippet doc/src/snippets/code/doc_src_stylesheet.cpp 95 + \snippet code/doc_src_stylesheet.cpp 95 \section2 Customizing a QPushButton Using the Box Model @@ -3432,7 +3432,7 @@ First, we are tempted to use this style sheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 96 + \snippet code/doc_src_stylesheet.qdoc 96 However, the result is a boring, flat button with no borders: @@ -3453,7 +3453,7 @@ Let's improve the situation by specifying a border: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 97 + \snippet code/doc_src_stylesheet.qdoc 97 \image stylesheet-redbutton2.png A red button with a beige border @@ -3463,7 +3463,7 @@ enforce a minimum width, round the corners, and specify a larger font to make the button look nicer: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 98 + \snippet code/doc_src_stylesheet.qdoc 98 \image stylesheet-redbutton3.png A red button with a round beige border and big, bold text @@ -3471,7 +3471,7 @@ press it. We can fix this by specifying a slightly different background color and use a different border style. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 99 + \snippet code/doc_src_stylesheet.qdoc 99 \section2 Customizing the QPushButton's Menu Indicator Sub-Control @@ -3480,7 +3480,7 @@ QPushButton::setMenu()) has a menu indicator. Let's customize the menu indicator for the red push button: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 100 + \snippet code/doc_src_stylesheet.qdoc 100 By default, the menu indicator is located at the bottom-right corner of the padding rectangle. We can change this by specifying @@ -3490,7 +3490,7 @@ \l{Qt Style Sheets Reference#left-prop}{left} to move the indicator by a few pixels. For example: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 101 + \snippet code/doc_src_stylesheet.qdoc 101 This positions the \c myindicator.png to the center right of the QPushButton's \l{Qt Style Sheets Reference#padding-prop}{padding} rectangle (see @@ -3503,24 +3503,24 @@ QLineEdit red by setting the following application-wide stylesheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 102 + \snippet code/doc_src_stylesheet.qdoc 102 However, we would like to give a visual indication that a QLineEdit is read-only by making it appear gray: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 103 + \snippet code/doc_src_stylesheet.qdoc 103 At some point, our design team comes with the requirement that all \l{QLineEdit}s in the registration form (with the \l{QObject::objectName}{object name} \c registrationDialog) to be brown: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 104 + \snippet code/doc_src_stylesheet.qdoc 104 A few UI design meetings later, we decide that all our \l{QDialog}s should have brown colored \l{QLineEdit}s: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 105 + \snippet code/doc_src_stylesheet.qdoc 105 Quiz: What happens if we have a read-only QLineEdit in a QDialog? [Hint: The \l{The Style Sheet Syntax#Conflict Resolution}{Conflict Resolution} section above explains @@ -3535,40 +3535,40 @@ The background of any QAbstractScrollArea (Item views, QTextEdit and QTextBrowser) can be set using the background properties. For example, to set a background-image that scrolls with the scroll bar: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 106 + \snippet code/doc_src_stylesheet.qdoc 106 If the background-image is to be fixed with the viewport: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 107 + \snippet code/doc_src_stylesheet.qdoc 107 \section2 Customizing QCheckBox Styling of a QCheckBox is almost identical to styling a QRadioButton. The main difference is that a tristate QCheckBox has an indeterminate state. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 108 + \snippet code/doc_src_stylesheet.qdoc 108 \section2 Customizing QComboBox We will look at an example where the drop down button of a QComboBox appears "merged" with the combo box frame. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 109 + \snippet code/doc_src_stylesheet.qdoc 109 The pop-up of the QComboBox is a QAbstractItemView and is styled using the descendant selector: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 110 + \snippet code/doc_src_stylesheet.qdoc 110 \section2 Customizing QDockWidget The title bar and the buttons of a QDockWidget can be customized as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 111 + \snippet code/doc_src_stylesheet.qdoc 111 If one desires to move the dock widget buttons to the left, the following style sheet can be used: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 112 + \snippet code/doc_src_stylesheet.qdoc 112 \note To customize the separator (resize handle) of a QDockWidget, use QMainWindow::separator. @@ -3577,73 +3577,73 @@ A QFrame is styled using the \l{The Box Model}. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 113 + \snippet code/doc_src_stylesheet.qdoc 113 \section2 Customizing QGroupBox Let us look at an example that moves the QGroupBox's title to the center. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 114 + \snippet code/doc_src_stylesheet.qdoc 114 For a checkable QGroupBox, use the \{#indicator-sub}{::indicator} subcontrol and style it exactly like a QCheckBox (i.e) - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 115 + \snippet code/doc_src_stylesheet.qdoc 115 \section2 Customizing QHeaderView QHeaderView is customized as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 116 + \snippet code/doc_src_stylesheet.qdoc 116 \section2 Customizing QLineEdit The frame of a QLineEdit is styled using the \l{The Box Model}. To create a line edit with rounded corners, we can set: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 117 + \snippet code/doc_src_stylesheet.qdoc 117 The password character of line edits that have QLineEdit::Password echo mode can be set using: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 118 + \snippet code/doc_src_stylesheet.qdoc 118 The background of a read only QLineEdit can be modified as below: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 119 + \snippet code/doc_src_stylesheet.qdoc 119 \section2 Customizing QListView The background color of alternating rows can be customized using the following style sheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 120 + \snippet code/doc_src_stylesheet.qdoc 120 To provide a special background when you hover over items, we can use the \l{item-sub}{::item} subcontrol. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 121 + \snippet code/doc_src_stylesheet.qdoc 121 \section2 Customizing QMainWindow The separator of a QMainWindow can be styled as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 122 + \snippet code/doc_src_stylesheet.qdoc 122 \section2 Customizing QMenu Individual items of a QMenu are styled using the 'item' subcontrol as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 123 + \snippet code/doc_src_stylesheet.qdoc 123 For a more advanced customization, use a style sheet as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 124 + \snippet code/doc_src_stylesheet.qdoc 124 \section2 Customizing QMenuBar QMenuBar is styled as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 125 + \snippet code/doc_src_stylesheet.qdoc 125 \section2 Customizing QProgressBar @@ -3659,13 +3659,13 @@ {border} to grey and the \l{stylesheet-reference.html#chunk-sub}{chunk} to cerulean. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 126 + \snippet code/doc_src_stylesheet.qdoc 126 This leaves the \l{stylesheet-reference.html#text-align-prop} {text-align}, which we customize by positioning the text in the center of the progress bar. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 127 + \snippet code/doc_src_stylesheet.qdoc 127 A \l{stylesheet-reference.html#margin-prop}{margin} can be included to obtain more visible chunks. @@ -3675,18 +3675,18 @@ In the screenshot above, we use a \l{stylesheet-reference.html#margin-prop}{margin} of 0.5 pixels. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 128 + \snippet code/doc_src_stylesheet.qdoc 128 \section2 Customizing QPushButton A QPushButton is styled as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 129 + \snippet code/doc_src_stylesheet.qdoc 129 For a QPushButton with a menu, use the \l{Qt Style Sheets Reference#menu-indicator-sub}{::menu-indicator} subcontrol. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 130 + \snippet code/doc_src_stylesheet.qdoc 130 Checkable QPushButton have the \l{Qt Style Sheets Reference#checked-ps} {:checked} pseudo state set. @@ -3694,7 +3694,7 @@ \section2 Customizing QRadioButton The indicator of a QRadioButton can be changed using: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 131 + \snippet code/doc_src_stylesheet.qdoc 131 \section2 Customizing QScrollBar @@ -3710,52 +3710,52 @@ The scroll bar above has been styled in aquamarine with a solid grey border. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 132 + \snippet code/doc_src_stylesheet.qdoc 132 - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 133 + \snippet code/doc_src_stylesheet.qdoc 133 - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 134 + \snippet code/doc_src_stylesheet.qdoc 134 The \l{stylesheet-reference.html#left-arrow-sub}{left-arrow} and \l{stylesheet-reference.html#right-arrow-sub}{right-arrow} have a solid grey border with a white background. As an alternative, you could also embed the image of an arrow. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 135 + \snippet code/doc_src_stylesheet.qdoc 135 If you want the scroll buttons of the scroll bar to be placed together (instead of the edges) like on Mac OS X, you can use the following stylesheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 136 + \snippet code/doc_src_stylesheet.qdoc 136 The scroll bar using the above stylesheet looks like this: \image stylesheet-scrollbar2.png To customize a vertical scroll bar use a style sheet similar to the following: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 137 + \snippet code/doc_src_stylesheet.qdoc 137 \section2 Customizing QSizeGrip QSizeGrip is usually styled by just setting an image. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 138 + \snippet code/doc_src_stylesheet.qdoc 138 \section2 Customizing QSlider You can style horizontal slider as below: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 139 + \snippet code/doc_src_stylesheet.qdoc 139 If you want to change the color of the slider parts before and after the handle, you can use the add-page and sub-page subcontrols. For example, for a vertical slider: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 140 + \snippet code/doc_src_stylesheet.qdoc 140 \section2 Customizing QSpinBox QSpinBox can be completely customized as below (the style sheet has commentary inline): - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 141 + \snippet code/doc_src_stylesheet.qdoc 141 \section2 Customizing QSplitter @@ -3764,17 +3764,17 @@ The grip or the handle is customized using the \l{Qt Style Sheets Reference#handle-sub}{::handle} subcontrol. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 142 + \snippet code/doc_src_stylesheet.qdoc 142 \section2 Customizing QStatusBar We can provide a background for the status bar and a border for items inside the status bar as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 143 + \snippet code/doc_src_stylesheet.qdoc 143 Note that widgets that have been added to the QStatusBar can be styled using the descendant declaration (i.e) - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 144 + \snippet code/doc_src_stylesheet.qdoc 144 \section2 Customizing QTabWidget and QTabBar @@ -3782,7 +3782,7 @@ For the screenshot above, we need a stylesheet as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 145 + \snippet code/doc_src_stylesheet.qdoc 145 Often we require the tabs to overlap to look like below: \image tabWidget-stylesheet2.png @@ -3791,18 +3791,18 @@ \l{http://www.communitymx.com/content/article.cfm?cid=B0029} {negative margins}. The resulting stylesheet looks like this: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 146 + \snippet code/doc_src_stylesheet.qdoc 146 To move the tab bar to the center (as below), we require the following stylesheet: \image tabWidget-stylesheet3.png - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 147 + \snippet code/doc_src_stylesheet.qdoc 147 The tear indicator and the scroll buttons can be further customized as follows: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 148 + \snippet code/doc_src_stylesheet.qdoc 148 Since Qt 4.6 the close button can be customized as follow: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 159 + \snippet code/doc_src_stylesheet.qdoc 159 \section2 Customizing QTableView @@ -3815,22 +3815,22 @@ \l{stylesheet-reference.html#selection-background-color-prop} {selection-background-color} property and the syntax required is: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 149 + \snippet code/doc_src_stylesheet.qdoc 149 The corner widget can be customized using the following style sheet - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 150 + \snippet code/doc_src_stylesheet.qdoc 150 \section2 Customizing QToolBar The background and the handle of a QToolBar is customized as below: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 151 + \snippet code/doc_src_stylesheet.qdoc 151 \section2 Customizing QToolBox The tabs of the QToolBox are customized using the 'tab' subcontrol. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 152 + \snippet code/doc_src_stylesheet.qdoc 152 \section2 Customizing QToolButton @@ -3851,7 +3851,7 @@ QToolButton::MenuButtonPopup. In this case, we style it as follows: \endlist - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 153 + \snippet code/doc_src_stylesheet.qdoc 153 \section2 Customizing QToolTip @@ -3860,25 +3860,25 @@ that support it, the opacity property may be set to adjust the opacity. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 154 + \snippet code/doc_src_stylesheet.qdoc 154 \section2 Customizing QTreeView The background color of alternating rows can be customized using the following style sheet: - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 155 + \snippet code/doc_src_stylesheet.qdoc 155 To provide a special background when you hover over items, we can use the \l{item-sub}{::item} subcontrol. For example, - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 156 + \snippet code/doc_src_stylesheet.qdoc 156 The branches of a QTreeView are styled using the \l{Qt Style Sheets Reference#branch-sub}{::branch} subcontrol. The following stylesheet color codes the various states when drawing a branch. - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 157 + \snippet code/doc_src_stylesheet.qdoc 157 Colorful, though it is, a more useful example can be made using the following images: @@ -3898,7 +3898,7 @@ \li branch-open.png \endtable - \snippet doc/src/snippets/code/doc_src_stylesheet.qdoc 158 + \snippet code/doc_src_stylesheet.qdoc 158 The resulting tree view looks like this: @@ -3932,7 +3932,7 @@ Consider the following snippet: - \snippet doc/src/snippets/stylesheet/common-mistakes.cpp 1 + \snippet stylesheet/common-mistakes.cpp 1 This will produce a button looking like this: diff --git a/doc/src/widgets/widgets-and-layouts/widgets.qdoc b/src/widgets/doc/src/widgets-and-layouts/widgets.qdoc similarity index 100% rename from doc/src/widgets/widgets-and-layouts/widgets.qdoc rename to src/widgets/doc/src/widgets-and-layouts/widgets.qdoc diff --git a/src/widgets/effects/qgraphicseffect.cpp b/src/widgets/effects/qgraphicseffect.cpp index 80c0aff492d..5bfa8cc5e53 100644 --- a/src/widgets/effects/qgraphicseffect.cpp +++ b/src/widgets/effects/qgraphicseffect.cpp @@ -243,7 +243,7 @@ void QGraphicsEffectSource::draw(QPainter *painter) For example: - \snippet doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp 0 + \snippet code/src_gui_effects_qgraphicseffect.cpp 0 \sa QGraphicsEffect::draw() */ @@ -545,7 +545,7 @@ void QGraphicsEffect::updateBoundingRect() For example: - \snippet doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp 1 + \snippet code/src_gui_effects_qgraphicseffect.cpp 1 This function should not be called explicitly by the user, since it is meant for reimplementation purposes only. @@ -1154,7 +1154,7 @@ void QGraphicsOpacityEffect::setOpacity(qreal opacity) For example: - \snippet doc/src/snippets/code/src_gui_effects_qgraphicseffect.cpp 2 + \snippet code/src_gui_effects_qgraphicseffect.cpp 2 There is no opacity mask by default. diff --git a/src/widgets/effects/qpixmapfilter.cpp b/src/widgets/effects/qpixmapfilter.cpp index a141fa9e55f..7e42eefef2e 100644 --- a/src/widgets/effects/qpixmapfilter.cpp +++ b/src/widgets/effects/qpixmapfilter.cpp @@ -198,7 +198,7 @@ QRectF QPixmapFilter::boundingRectFor(const QRectF &rect) const \endomit Example: - \snippet doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp 1 + \snippet code/src_gui_image_qpixmapfilter.cpp 1 \sa {Pixmap Filters Example}, QPixmapColorizeFilter, QPixmapDropShadowFilter @@ -1011,7 +1011,7 @@ static void grayscale(const QImage &image, QImage &dest, const QRect& rect = QRe chosen color. The alpha-channel is not changed. Example: - \snippet doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp 0 + \snippet code/src_gui_image_qpixmapfilter.cpp 0 \sa QPainter::CompositionMode @@ -1194,7 +1194,7 @@ public: radius of 1 at an offset of 8 pixels towards the lower right. Example: - \snippet doc/src/snippets/code/src_gui_image_qpixmapfilter.cpp 2 + \snippet code/src_gui_image_qpixmapfilter.cpp 2 \sa QPixmapColorizeFilter, QPixmapConvolutionFilter diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout.cpp b/src/widgets/graphicsview/qgraphicsanchorlayout.cpp index 348d8f2d091..06db3826ea8 100644 --- a/src/widgets/graphicsview/qgraphicsanchorlayout.cpp +++ b/src/widgets/graphicsview/qgraphicsanchorlayout.cpp @@ -64,7 +64,7 @@ Anchors are always set up between edges of an item, where the "center" is also considered to be an edge. Consider the following example: - \snippet examples/graphicsview/simpleanchorlayout/main.cpp adding anchors + \snippet graphicsview/simpleanchorlayout/main.cpp adding anchors Here, the right edge of item \c a is anchored to the left edge of item \c b and the bottom edge of item \c a is anchored to the top edge of item \c b, with the result that @@ -75,7 +75,7 @@ above. Here, we see how a widget can be anchored to the top-left corner of the enclosing layout: - \snippet examples/graphicsview/simpleanchorlayout/main.cpp adding a corner anchor + \snippet graphicsview/simpleanchorlayout/main.cpp adding a corner anchor In cases where anchors are used to match the widths or heights of widgets, it is convenient to use the addAnchors() function. As with the other functions for specifying @@ -299,11 +299,11 @@ QGraphicsAnchorLayout::anchor(QGraphicsLayoutItem *firstItem, Qt::AnchorPoint fi This is a convenience function, since anchoring corners can be expressed as anchoring two edges. For instance: - \snippet examples/graphicsview/simpleanchorlayout/main.cpp adding a corner anchor in two steps + \snippet graphicsview/simpleanchorlayout/main.cpp adding a corner anchor in two steps This can also be achieved with the following line of code: - \snippet examples/graphicsview/simpleanchorlayout/main.cpp adding a corner anchor + \snippet graphicsview/simpleanchorlayout/main.cpp adding a corner anchor If there is already an anchor between the edge pairs, it will be replaced by the anchors that this function specifies. @@ -341,11 +341,11 @@ void QGraphicsAnchorLayout::addCornerAnchors(QGraphicsLayoutItem *firstItem, For example, the following example anchors the left and right edges of two items to match their widths: - \snippet examples/graphicsview/simpleanchorlayout/main.cpp adding anchors to match sizes in two steps + \snippet graphicsview/simpleanchorlayout/main.cpp adding anchors to match sizes in two steps This can also be achieved using the following line of code: - \snippet examples/graphicsview/simpleanchorlayout/main.cpp adding anchors to match sizes + \snippet graphicsview/simpleanchorlayout/main.cpp adding anchors to match sizes \sa addAnchor(), addCornerAnchors() */ diff --git a/src/widgets/graphicsview/qgraphicsgridlayout.cpp b/src/widgets/graphicsview/qgraphicsgridlayout.cpp index c5e7e83cf43..53d7cbd4beb 100644 --- a/src/widgets/graphicsview/qgraphicsgridlayout.cpp +++ b/src/widgets/graphicsview/qgraphicsgridlayout.cpp @@ -54,7 +54,7 @@ QGraphicsWidget::setLayout(). QGraphicsGridLayout automatically computes the dimensions of the grid as you add items. - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicsgridlayout.cpp 0 The layout takes ownership of the items. In some cases when the layout item also inherits from QGraphicsItem (such as QGraphicsWidget) there will be a diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp index dab1965da5c..1ce914b2199 100644 --- a/src/widgets/graphicsview/qgraphicsitem.cpp +++ b/src/widgets/graphicsview/qgraphicsitem.cpp @@ -90,7 +90,7 @@ by the item, and paint(), which implements the actual painting. For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 0 The boundingRect() function has many different purposes. QGraphicsScene bases its item index on boundingRect(), and @@ -277,7 +277,7 @@ classes in Qt are associated with a unique value for Type, e.g. the value returned by QGraphicsPathItem::type() is 2. - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 18 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 18 */ /*! @@ -288,7 +288,7 @@ used in conjunction with a reimplementation of QGraphicsItem::type() and declaring a Type enum value. Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 1 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 1 \note UserType = 65536 */ @@ -2133,7 +2133,7 @@ void QGraphicsItem::setToolTip(const QString &toolTip) An editor item might want to use an I-beam cursor: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 2 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 2 If no cursor has been set, the cursor of the item beneath is used. @@ -2153,7 +2153,7 @@ QCursor QGraphicsItem::cursor() const An editor item might want to use an I-beam cursor: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 3 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 3 If no cursor has been set, the cursor of the item beneath is used. @@ -4146,7 +4146,7 @@ QMatrix QGraphicsItem::sceneMatrix() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 4 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 4 Unlike transform(), which returns only an item's local transformation, this function includes the item's (and any parents') position, and all the transfomation properties. @@ -4171,7 +4171,7 @@ QTransform QGraphicsItem::sceneTransform() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 5 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 5 This function is the same as combining this item's scene transform with the view's viewport transform, but it also understands the @@ -4474,7 +4474,7 @@ void QGraphicsItem::resetTransform() Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 6 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 6 \sa setTransform(), transform(), scale(), shear(), translate() */ @@ -4500,7 +4500,7 @@ void QGraphicsItem::rotate(qreal angle) Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 7 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 7 \sa setTransform(), transform() */ @@ -4787,7 +4787,7 @@ QRectF QGraphicsItem::childrenBoundingRect() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 8 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 8 \sa boundingRegion(), shape(), contains(), {The Graphics View Coordinate System}, prepareGeometryChange() @@ -4835,7 +4835,7 @@ QRectF QGraphicsItem::sceneBoundingRect() const may choose to return an elliptic shape for better collision detection. For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 9 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 9 The outline of a shape can vary depending on the width and style of the pen used when drawing. If you want to include this outline in the item's @@ -5327,7 +5327,7 @@ void QGraphicsItem::setBoundingRegionGranularity(qreal granularity) provided, it points to the widget that is being painted on; otherwise, it is 0. For cached painting, \a widget is always 0. - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 10 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 10 The painter's pen is 0-width by default, and its pen is initialized to the QPalette::Text brush from the paint device's palette. The brush is @@ -5736,7 +5736,7 @@ void QGraphicsItem::update(const QRectF &rect) by other items, you can map the \a rect to viewport coordinates and scroll the viewport. - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 19 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 19 \sa boundingRect() */ @@ -6515,7 +6515,7 @@ bool QGraphicsItem::isUnderMouse() const Custom item data is useful for storing arbitrary properties in any item. Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 11 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 11 Qt does not use this feature for storing data; it is provided solely for the convenience of the user. @@ -6572,7 +6572,7 @@ void QGraphicsItem::setData(int key, const QVariant &value) For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp QGraphicsItem type + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp QGraphicsItem type \sa UserType */ @@ -6589,7 +6589,7 @@ int QGraphicsItem::type() const To filter another item's events, install this item as an event filter for the other item. Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 12 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 12 An item can only filter events for other items in the same scene. Also, an item cannot filter its own events; instead, you @@ -6805,7 +6805,7 @@ bool QGraphicsItem::sceneEvent(QEvent *event) It's common to open a QMenu in response to receiving a context menu event. Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 13 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 13 The default implementation ignores the event. @@ -6830,7 +6830,7 @@ void QGraphicsItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) A common implementation of dragEnterEvent accepts or ignores \a event depending on the associated mime data in \a event. Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 14 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 14 Items do not receive drag and drop events by default; to enable this feature, call \c setAcceptDrops(true). @@ -7424,7 +7424,7 @@ void QGraphicsItem::updateMicroFocus() Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 15 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 15 The default implementation does nothing, and returns \a value. @@ -7519,7 +7519,7 @@ void QGraphicsItem::removeFromIndex() Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 16 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 16 \sa boundingRect() */ @@ -10613,11 +10613,11 @@ Qt::TextInteractionFlags QGraphicsTextItem::textInteractionFlags() const /*! \since 4.5 - If \a b is true, the \gui Tab key will cause the widget to change focus; + If \a b is true, the \uicontrol Tab key will cause the widget to change focus; otherwise, the tab key will insert a tab into the document. In some occasions text edits should not allow the user to input tabulators - or change indentation using the \gui Tab key, as this breaks the focus + or change indentation using the \uicontrol Tab key, as this breaks the focus chain. The default is false. \sa tabChangesFocus(), ItemIsFocusable, textInteractionFlags() @@ -10630,7 +10630,7 @@ void QGraphicsTextItem::setTabChangesFocus(bool b) /*! \since 4.5 - Returns true if the \gui Tab key will cause the widget to change focus; + Returns true if the \uicontrol Tab key will cause the widget to change focus; otherwise, false is returned. By default, this behavior is disabled, and this function will return false. @@ -11010,7 +11010,7 @@ QVariant QGraphicsSimpleTextItem::extension(const QVariant &variant) const QGraphicsScene::destroyItemGroup(), or you can manually remove all items from the group by calling removeFromGroup(). - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp 17 + \snippet code/src_gui_graphicsview_qgraphicsitem.cpp 17 The operation of adding and removing items preserves the items' scene-relative position and transformation, as opposed to calling diff --git a/src/widgets/graphicsview/qgraphicsitemanimation.cpp b/src/widgets/graphicsview/qgraphicsitemanimation.cpp index f21220b3b18..bb90337c5e7 100644 --- a/src/widgets/graphicsview/qgraphicsitemanimation.cpp +++ b/src/widgets/graphicsview/qgraphicsitemanimation.cpp @@ -70,7 +70,7 @@ An example animation with a timeline follows: - \snippet doc/src/snippets/timeline/main.cpp 0 + \snippet timeline/main.cpp 0 Note that steps lie between 0.0 and 1.0. It may be necessary to use \l{QTimeLine::}{setUpdateInterval()}. The default update interval diff --git a/src/widgets/graphicsview/qgraphicslinearlayout.cpp b/src/widgets/graphicsview/qgraphicslinearlayout.cpp index 535e2ddf599..f312e2e7ba5 100644 --- a/src/widgets/graphicsview/qgraphicslinearlayout.cpp +++ b/src/widgets/graphicsview/qgraphicslinearlayout.cpp @@ -56,7 +56,7 @@ and finally assign the layout to a widget by calling QGraphicsWidget::setLayout(). - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicslinearlayout.cpp 0 You can add widgets, layouts, stretches (addStretch(), insertStretch() or setStretchFactor()), and spacings (setItemSpacing()) to a linear diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.cpp b/src/widgets/graphicsview/qgraphicsproxywidget.cpp index 4cda3e51fb0..b09ddbab41b 100644 --- a/src/widgets/graphicsview/qgraphicsproxywidget.cpp +++ b/src/widgets/graphicsview/qgraphicsproxywidget.cpp @@ -84,7 +84,7 @@ QT_BEGIN_NAMESPACE Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicsproxywidget.cpp 0 QGraphicsProxyWidget takes care of automatically embedding popup children of embedded widgets through creating a child proxy for each popup. This @@ -104,7 +104,7 @@ QT_BEGIN_NAMESPACE For example, in the code snippet below, we embed a group box into the proxy: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp 1 + \snippet code/src_gui_graphicsview_qgraphicsproxywidget.cpp 1 The image below is the output obtained with its contents margin and contents rect labeled. @@ -131,7 +131,7 @@ QT_BEGIN_NAMESPACE Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp 2 + \snippet code/src_gui_graphicsview_qgraphicsproxywidget.cpp 2 QGraphicsProxyWidget maintains symmetry for the following states: diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp index 583e6da90a8..282c6a2a2ab 100644 --- a/src/widgets/graphicsview/qgraphicsscene.cpp +++ b/src/widgets/graphicsview/qgraphicsscene.cpp @@ -60,7 +60,7 @@ Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicsscene.cpp 0 Note that QGraphicsScene has no visual appearance of its own; it only manages the items. You need to create a QGraphicsView widget to visualize @@ -1715,7 +1715,7 @@ void QGraphicsScene::setSceneRect(const QRectF &rect) device, such as a QImage (e.g., to take a screenshot), or for printing with QPrinter. For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp 1 + \snippet code/src_gui_graphicsview_qgraphicsscene.cpp 1 If \a source is a null rect, this function will use sceneRect() to determine what to render. If \a target is a null rect, the dimensions of \a @@ -1866,7 +1866,7 @@ void QGraphicsScene::setItemIndexMethod(ItemIndexMethod method) granularity of the scene's partitioning. The size of each scene segment is determined by the following algorithm: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp 2 + \snippet code/src_gui_graphicsview_qgraphicsscene.cpp 2 The BSP tree has an optimal size when each segment contains between 0 and 10 items. @@ -3146,7 +3146,7 @@ QGraphicsItem *QGraphicsScene::mouseGrabberItem() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp 3 + \snippet code/src_gui_graphicsview_qgraphicsscene.cpp 3 QGraphicsScene::render() calls drawBackground() to draw the scene background. For more detailed control over how the background is drawn, @@ -3181,7 +3181,7 @@ void QGraphicsScene::setBackgroundBrush(const QBrush &brush) Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp 4 + \snippet code/src_gui_graphicsview_qgraphicsscene.cpp 4 QGraphicsScene::render() calls drawForeground() to draw the scene foreground. For more detailed control over how the foreground is @@ -3295,7 +3295,7 @@ void QGraphicsScene::update(const QRectF &rect) Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp 5 + \snippet code/src_gui_graphicsview_qgraphicsscene.cpp 5 Note that QGraphicsView currently supports background caching only (see QGraphicsView::CacheBackground). This function is equivalent to calling @@ -5340,7 +5340,7 @@ void QGraphicsScenePrivate::processDirtyItemsRecursive(QGraphicsItem *item, bool Example: - \snippet doc/src/snippets/graphicssceneadditemsnippet.cpp 0 + \snippet graphicssceneadditemsnippet.cpp 0 Since Qt 4.6, this function is not called anymore unless the QGraphicsView::IndirectPainting flag is given as an Optimization diff --git a/src/widgets/graphicsview/qgraphicssceneevent.cpp b/src/widgets/graphicsview/qgraphicssceneevent.cpp index 91b6fb08da3..580380e19a9 100644 --- a/src/widgets/graphicsview/qgraphicssceneevent.cpp +++ b/src/widgets/graphicsview/qgraphicssceneevent.cpp @@ -1461,7 +1461,7 @@ void QGraphicsSceneDragDropEvent::setProposedAction(Qt::DropAction action) Sets the proposed action as accepted, i.e, the drop action is set to the proposed action. This is equal to: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicssceneevent.cpp 0 When using this function, one should not call \c accept(). diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp index cabf2eb5a5e..3629341d9e9 100644 --- a/src/widgets/graphicsview/qgraphicsview.cpp +++ b/src/widgets/graphicsview/qgraphicsview.cpp @@ -62,7 +62,7 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime < center of the scene and display any items that are visible at this point. For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 0 You can explicitly scroll to any position on the scene by using the scroll bars, or by calling centerOn(). By passing a point to centerOn(), @@ -1189,7 +1189,7 @@ QSize QGraphicsView::sizeHint() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 1 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 1 */ QPainter::RenderHints QGraphicsView::renderHints() const { @@ -1472,7 +1472,7 @@ void QGraphicsView::setRubberBandSelectionMode(Qt::ItemSelectionMode mode) especially with a transformed view. The CacheBackground flag enables caching of the view's background. For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 2 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 2 The cache is invalidated every time the view is transformed. However, when scrolling, only partial invalidation is required. @@ -1727,7 +1727,7 @@ QMatrix QGraphicsView::matrix() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 3 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 3 To simplify interation with items using a transformed view, QGraphicsView provides mapTo... and mapFrom... functions that can translate between @@ -2030,7 +2030,7 @@ void QGraphicsView::fitInView(const QGraphicsItem *item, Qt::AspectRatioMode asp onto a paint device, such as a QImage (e.g., to take a screenshot), or for printing to QPrinter. For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 4 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 4 If \a source is a null rect, this function will use viewport()->rect() to determine what to draw. If \a target is a null rect, the full dimensions @@ -2155,7 +2155,7 @@ QList QGraphicsView::items() const a subclass in QGraphicsView. \a pos is in untransformed viewport coordinates, just like QMouseEvent::pos(). - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 5 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 5 \sa QGraphicsScene::items(), {QGraphicsItem#Sorting}{Sorting} */ @@ -2270,7 +2270,7 @@ QList QGraphicsView::items(const QPainterPath &path, Qt::ItemSe Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 6 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 6 \sa items(), {QGraphicsItem#Sorting}{Sorting} */ @@ -3792,7 +3792,7 @@ bool QGraphicsView::isTransformed() const Example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicsview.cpp 7 + \snippet code/src_gui_graphicsview_qgraphicsview.cpp 7 To simplify interation with items using a transformed view, QGraphicsView provides mapTo... and mapFrom... functions that can translate between diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp index 1f455824426..267d70104d4 100644 --- a/src/widgets/graphicsview/qgraphicswidget.cpp +++ b/src/widgets/graphicsview/qgraphicswidget.cpp @@ -677,7 +677,7 @@ QRectF QGraphicsWidget::windowFrameRect() const For example: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp 0 + \snippet code/src_gui_graphicsview_qgraphicswidget.cpp 0 \sa QStyleOption::initFrom() */ @@ -2098,11 +2098,11 @@ QList QGraphicsWidget::actions() const Note that since the tab order of the \a second widget is changed, you should order a chain like this: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp 1 + \snippet code/src_gui_graphicsview_qgraphicswidget.cpp 1 \e not like this: - \snippet doc/src/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp 2 + \snippet code/src_gui_graphicsview_qgraphicswidget.cpp 2 If \a first is 0, this indicates that \a second should be the first widget to receive input focus should the scene gain Tab focus (i.e., the user diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp index 125beab91b3..890eba3407e 100644 --- a/src/widgets/itemviews/qabstractitemdelegate.cpp +++ b/src/widgets/itemviews/qabstractitemdelegate.cpp @@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE We create the \c WidgetDelegate class, which inherits from QStyledItemDelegate. We do the drawing in the paint() function: - \snippet doc/src/snippets/widgetdelegate.cpp 0 + \snippet widgetdelegate.cpp 0 Notice that we use a QStyleOptionProgressBar and initialize its members. We can then use the current QStyle to draw it. diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 2ff039595aa..777767ee70f 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -308,7 +308,7 @@ void QAbstractItemViewPrivate::_q_scrollerStateChanged() setVerticalScrollMode(). To set the range of the scroll bars, you can, for example, reimplement the view's resizeEvent() function: - \snippet doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp 0 + \snippet code/src_gui_itemviews_qabstractitemview.cpp 0 Note that the range is not updated until the widget is shown. @@ -654,7 +654,7 @@ QAbstractItemView::~QAbstractItemView() views. We recommend that you delete the old selection model if it is no longer required. This is done with the following code: - \snippet doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp 2 + \snippet code/src_gui_itemviews_qabstractitemview.cpp 2 If both the old model and the old selection model do not have parents, or if their parents are long-lived objects, it may be preferable to call their @@ -3124,7 +3124,7 @@ void QAbstractItemView::closePersistentEditor(const QModelIndex &index) deleted. For example, in the code snippet below, the QLineEdit object will be deleted. - \snippet doc/src/snippets/code/src_gui_itemviews_qabstractitemview.cpp 1 + \snippet code/src_gui_itemviews_qabstractitemview.cpp 1 This function should only be used to display static content within the visible area corresponding to an item of data. If you want to display diff --git a/src/widgets/itemviews/qdatawidgetmapper.cpp b/src/widgets/itemviews/qdatawidgetmapper.cpp index 2f7b1f7ecb0..4396519810f 100644 --- a/src/widgets/itemviews/qdatawidgetmapper.cpp +++ b/src/widgets/itemviews/qdatawidgetmapper.cpp @@ -289,7 +289,7 @@ void QDataWidgetMapperPrivate::_q_modelDestroyed() The following code will map the columns of the model to widgets called \c mySpinBox, \c myLineEdit and \c{myCountryChooser}: - \snippet doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp 0 + \snippet code/src_gui_itemviews_qdatawidgetmapper.cpp 0 After the call to toFirst(), \c mySpinBox displays the value \c{1}, \c myLineEdit displays \c{Qt Norway} and \c myCountryChooser displays \c{Oslo}. The @@ -476,7 +476,7 @@ QModelIndex QDataWidgetMapper::rootIndex() const is mapped to the QLineEdit \c nameLineEdit, and the second is mapped to the QSpinBox \c{ageSpinBox}: - \snippet doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp 1 + \snippet code/src_gui_itemviews_qdatawidgetmapper.cpp 1 \b{Notes:} \list @@ -737,7 +737,7 @@ int QDataWidgetMapper::currentIndex() const with new data whenever the selection of a QTableView named \c myTableView changes: - \snippet doc/src/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp 2 + \snippet code/src_gui_itemviews_qdatawidgetmapper.cpp 2 \sa currentIndex() */ diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index bd9f4510f7a..68d31c7dd2e 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -400,7 +400,7 @@ QString QItemDelegatePrivate::valueToText(const QVariant &value, const QStyleOpt For example, a selected item may need to be displayed differently to unselected items, as shown in the following code: - \snippet examples/itemviews/pixelator/pixeldelegate.cpp 2 + \snippet itemviews/pixelator/pixeldelegate.cpp 2 \dots After painting, you should ensure that the painter is returned to its @@ -1136,21 +1136,21 @@ QRect QItemDelegate::textRectangle(QPainter * /*painter*/, const QRect &rect, key press events are handled by default: \list - \li \gui Tab - \li \gui Backtab - \li \gui Enter - \li \gui Return - \li \gui Esc + \li \uicontrol Tab + \li \uicontrol Backtab + \li \uicontrol Enter + \li \uicontrol Return + \li \uicontrol Esc \endlist - In the case of \gui Tab, \gui Backtab, \gui Enter and \gui Return + In the case of \uicontrol Tab, \uicontrol Backtab, \uicontrol Enter and \uicontrol Return key press events, the \a editor's data is comitted to the model - and the editor is closed. If the \a event is a \gui Tab key press + and the editor is closed. If the \a event is a \uicontrol Tab key press the view will open an editor on the next item in the - view. Likewise, if the \a event is a \gui Backtab key press the + view. Likewise, if the \a event is a \uicontrol Backtab key press the view will open an editor on the \e previous item in the view. - If the event is a \gui Esc key press event, the \a editor is + If the event is a \uicontrol Esc key press event, the \a editor is closed \e without committing its data. \sa commitData(), closeEditor() diff --git a/src/widgets/itemviews/qitemeditorfactory.cpp b/src/widgets/itemviews/qitemeditorfactory.cpp index b4180c18dd1..f970a77ab4f 100644 --- a/src/widgets/itemviews/qitemeditorfactory.cpp +++ b/src/widgets/itemviews/qitemeditorfactory.cpp @@ -339,7 +339,7 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory) editing data. A property is set as the user property with the USER keyword: - \snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 0 + \snippet code/src_gui_itemviews_qitemeditorfactory.cpp 0 If the editor does not provide a user property, it must return the name of the property from valuePropertyName(); delegates will then @@ -405,7 +405,7 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory) This way, it is not necessary to subclass QItemEditorCreatorBase. - \snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 1 + \snippet code/src_gui_itemviews_qitemeditorfactory.cpp 1 The constructor takes the name of the property that contains the editing data. QItemDelegate can then access the property by name @@ -456,7 +456,7 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory) Example: - \snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 2 + \snippet code/src_gui_itemviews_qitemeditorfactory.cpp 2 Setting the \c editorFactory created above in an item delegate via QItemDelegate::setItemEditorFactory() makes sure that all values of type @@ -468,7 +468,7 @@ void QItemEditorFactory::setDefaultFactory(QItemEditorFactory *factory) System}{meta-object system}). You set the user property with the USER keyword: - \snippet doc/src/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp 3 + \snippet code/src_gui_itemviews_qitemeditorfactory.cpp 3 \sa QItemEditorCreatorBase, QItemEditorCreator, QItemEditorFactory, QItemDelegate, {Color Editor Factory Example} diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp index 01cb7b42355..4a17b653281 100644 --- a/src/widgets/itemviews/qlistwidget.cpp +++ b/src/widgets/itemviews/qlistwidget.cpp @@ -474,7 +474,7 @@ Qt::DropActions QListModel::supportedDropActions() const List items can be inserted automatically into a list, when they are constructed, by specifying the list widget: - \snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 2 + \snippet qlistwidget-using/mainwindow.cpp 2 Alternatively, list items can also be created without a parent widget, and later inserted into a list using QListWidget::insertItem(). @@ -1154,7 +1154,7 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, List widgets are constructed in the same way as other widgets: - \snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 0 + \snippet qlistwidget-using/mainwindow.cpp 0 The selectionMode() of a list widget determines how many of the items in the list can be selected at the same time, and whether complex selections @@ -1166,15 +1166,15 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, parent widget and added to the list later. If a list widget already exists when the items are constructed, the first method is easier to use: - \snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 1 + \snippet qlistwidget-using/mainwindow.cpp 1 If you need to insert a new item into the list at a particular position, then it should be constructed without a parent widget. The insertItem() function should then be used to place it within the list. The list widget will take ownership of the item. - \snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 6 - \snippet doc/src/snippets/qlistwidget-using/mainwindow.cpp 7 + \snippet qlistwidget-using/mainwindow.cpp 6 + \snippet qlistwidget-using/mainwindow.cpp 7 For multiple items, insertItems() can be used instead. The number of items in the list is found with the count() function. To remove items from the @@ -1258,7 +1258,7 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, This signal is emitted when the \a item is activated. The \a item is activated when the user clicks or double clicks on it, depending on the system configuration. It is also activated when the user presses the - activation key (on Windows and X11 this is the \gui Return key, on Mac OS + activation key (on Windows and X11 this is the \uicontrol Return key, on Mac OS X it is \key{Ctrl+0}). */ diff --git a/src/widgets/itemviews/qstandarditemmodel.cpp b/src/widgets/itemviews/qstandarditemmodel.cpp index 5616d76c4a0..4f488993f8c 100644 --- a/src/widgets/itemviews/qstandarditemmodel.cpp +++ b/src/widgets/itemviews/qstandarditemmodel.cpp @@ -1989,11 +1989,11 @@ QDataStream &operator<<(QDataStream &out, const QStandardItem &item) An example usage of QStandardItemModel to create a table: - \snippet doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp 0 + \snippet code/src_gui_itemviews_qstandarditemmodel.cpp 0 An example usage of QStandardItemModel to create a tree: - \snippet doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp 1 + \snippet code/src_gui_itemviews_qstandarditemmodel.cpp 1 After setting the model on a view, you typically want to react to user actions, such as an item being clicked. Since a QAbstractItemView provides @@ -2005,19 +2005,19 @@ QDataStream &operator<<(QDataStream &out, const QStandardItem &item) a QAbstractItemView signal, such as QAbstractItemView::clicked(). First you connect the view's signal to a slot in your class: - \snippet doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp 2 + \snippet code/src_gui_itemviews_qstandarditemmodel.cpp 2 When you receive the signal, you call itemFromIndex() on the given model index to get a pointer to the item: - \snippet doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp 3 + \snippet code/src_gui_itemviews_qstandarditemmodel.cpp 3 Conversely, you must obtain the QModelIndex of an item when you want to invoke a model/view function that takes an index as argument. You can obtain the index either by using the model's indexFromItem() function, or, equivalently, by calling QStandardItem::index(): - \snippet doc/src/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp 4 + \snippet code/src_gui_itemviews_qstandarditemmodel.cpp 4 You are, of course, not required to use the item-based approach; you could instead rely entirely on the QAbstractItemModel interface when working with diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index 119692531fd..fc2d18a4598 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -602,21 +602,21 @@ void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory) key press events are handled by default: \list - \li \gui Tab - \li \gui Backtab - \li \gui Enter - \li \gui Return - \li \gui Esc + \li \uicontrol Tab + \li \uicontrol Backtab + \li \uicontrol Enter + \li \uicontrol Return + \li \uicontrol Esc \endlist - In the case of \gui Tab, \gui Backtab, \gui Enter and \gui Return + In the case of \uicontrol Tab, \uicontrol Backtab, \uicontrol Enter and \uicontrol Return key press events, the \a editor's data is comitted to the model - and the editor is closed. If the \a event is a \gui Tab key press + and the editor is closed. If the \a event is a \uicontrol Tab key press the view will open an editor on the next item in the - view. Likewise, if the \a event is a \gui Backtab key press the + view. Likewise, if the \a event is a \uicontrol Backtab key press the view will open an editor on the \e previous item in the view. - If the event is a \gui Esc key press event, the \a editor is + If the event is a \uicontrol Esc key press event, the \a editor is closed \e without committing its data. \sa commitData(), closeEditor() diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp index 7ae74640d6c..a50b6f3111d 100644 --- a/src/widgets/itemviews/qtablewidget.cpp +++ b/src/widgets/itemviews/qtablewidget.cpp @@ -979,7 +979,7 @@ QTableWidgetSelectionRange::~QTableWidgetSelectionRange() Top-level items are constructed without a parent then inserted at the position specified by a pair of row and column numbers: - \snippet doc/src/snippets/qtablewidget-using/mainwindow.cpp 3 + \snippet qtablewidget-using/mainwindow.cpp 3 Each item can have its own background brush which is set with the setBackground() function. The current background brush can be @@ -1504,18 +1504,18 @@ QTableWidgetItem &QTableWidgetItem::operator=(const QTableWidgetItem &other) Table widgets can be constructed with the required numbers of rows and columns: - \snippet doc/src/snippets/qtablewidget-using/mainwindow.cpp 0 + \snippet qtablewidget-using/mainwindow.cpp 0 Alternatively, tables can be constructed without a given size and resized later: - \snippet doc/src/snippets/qtablewidget-resizing/mainwindow.cpp 0 - \snippet doc/src/snippets/qtablewidget-resizing/mainwindow.cpp 1 + \snippet qtablewidget-resizing/mainwindow.cpp 0 + \snippet qtablewidget-resizing/mainwindow.cpp 1 Items are created ouside the table (with no parent widget) and inserted into the table with setItem(): - \snippet doc/src/snippets/qtablewidget-resizing/mainwindow.cpp 2 + \snippet qtablewidget-resizing/mainwindow.cpp 2 If you want to enable sorting in your table widget, do so after you have populated it with items, otherwise sorting may interfere with @@ -1530,7 +1530,7 @@ QTableWidgetItem &QTableWidgetItem::operator=(const QTableWidgetItem &other) construct a table item with an icon and aligned text, and use it as the header for a particular column: - \snippet doc/src/snippets/qtablewidget-using/mainwindow.cpp 2 + \snippet qtablewidget-using/mainwindow.cpp 2 The number of rows in the table can be found with rowCount(), and the number of columns with columnCount(). The table can be cleared with the @@ -2267,7 +2267,7 @@ QWidget *QTableWidget::cellWidget(int row, int column) const deleted. For example, in the code snippet below, the QLineEdit object will be deleted. - \snippet doc/src/snippets/code/src_gui_itemviews_qtablewidget.cpp 0 + \snippet code/src_gui_itemviews_qtablewidget.cpp 0 \sa cellWidget() */ diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 04835b63b42..44dd4b0761d 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -85,8 +85,8 @@ QT_BEGIN_NAMESPACE model. In the following example, the contents of a directory are supplied by a QFileSystemModel and displayed as a tree: - \snippet doc/src/snippets/shareddirmodel/main.cpp 3 - \snippet doc/src/snippets/shareddirmodel/main.cpp 6 + \snippet shareddirmodel/main.cpp 3 + \snippet shareddirmodel/main.cpp 6 The model/view architecture ensures that the contents of the tree view are updated as the model changes. diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index e2d84825f0e..d9d6c1434cd 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -901,12 +901,12 @@ void QTreeModel::timerEvent(QTimerEvent *ev) to represent cities of the world, and adds a entry for Oslo as a child item: - \snippet doc/src/snippets/qtreewidget-using/mainwindow.cpp 3 + \snippet qtreewidget-using/mainwindow.cpp 3 Items can be added in a particular order by specifying the item they follow when they are constructed: - \snippet doc/src/snippets/qtreewidget-using/mainwindow.cpp 5 + \snippet qtreewidget-using/mainwindow.cpp 5 Each column in an item can have its own background brush which is set with the setBackground() function. The current background brush can be @@ -2355,7 +2355,7 @@ void QTreeWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, In its simplest form, a tree widget can be constructed in the following way: - \snippet doc/src/snippets/code/src_gui_itemviews_qtreewidget.cpp 0 + \snippet code/src_gui_itemviews_qtreewidget.cpp 0 Before items can be added to the tree widget, the number of columns must be set with setColumnCount(). This allows each item to have one or more diff --git a/src/widgets/itemviews/qtreewidgetitemiterator.cpp b/src/widgets/itemviews/qtreewidgetitemiterator.cpp index 116860ce89c..45fddc73336 100644 --- a/src/widgets/itemviews/qtreewidgetitemiterator.cpp +++ b/src/widgets/itemviews/qtreewidgetitemiterator.cpp @@ -62,7 +62,7 @@ QT_BEGIN_NAMESPACE For example, the following code examples each item in a tree, checking the text in the first column against a user-specified search string: - \snippet doc/src/snippets/qtreewidgetitemiterator-using/mainwindow.cpp 0 + \snippet qtreewidgetitemiterator-using/mainwindow.cpp 0 It is also possible to filter out certain types of node by passing certain \l{IteratorFlag}{flags} to the constructor of QTreeWidgetItemIterator. diff --git a/src/widgets/kernel/qaction.cpp b/src/widgets/kernel/qaction.cpp index c4f79950874..f3455d34ad2 100644 --- a/src/widgets/kernel/qaction.cpp +++ b/src/widgets/kernel/qaction.cpp @@ -235,10 +235,10 @@ void QActionPrivate::setShortcutEnabled(bool enable, QShortcutMap &map) menu and toolbar, then connected to the slot which will perform the action. For example: - \snippet examples/mainwindows/application/mainwindow.cpp 19 + \snippet mainwindows/application/mainwindow.cpp 19 \codeline - \snippet examples/mainwindows/application/mainwindow.cpp 28 - \snippet examples/mainwindows/application/mainwindow.cpp 31 + \snippet mainwindows/application/mainwindow.cpp 28 + \snippet mainwindows/application/mainwindow.cpp 31 We recommend that actions are created as children of the window they are used in. In most cases actions will be children of @@ -1037,7 +1037,7 @@ bool QAction::isChecked() const which indicates that they are unavailable. For example, they might be displayed using only shades of gray. - \gui{What's This?} help on disabled actions is still available, provided + \uicontrol{What's This?} help on disabled actions is still available, provided that the QAction::whatsThis property is set. An action will be disabled when all widgets to which it is added @@ -1328,7 +1328,7 @@ QAction::SoftKeyRole QAction::softKeyRole() const the presence (or abscence) of the attribute. For example: - \snippet doc/src/snippets/code/src_gui_kernel_qaction.cpp 0 + \snippet code/src_gui_kernel_qaction.cpp 0 \sa QAction::icon QApplication::setAttribute() */ diff --git a/src/widgets/kernel/qactiongroup.cpp b/src/widgets/kernel/qactiongroup.cpp index 46ca378bbec..2cf8932859a 100644 --- a/src/widgets/kernel/qactiongroup.cpp +++ b/src/widgets/kernel/qactiongroup.cpp @@ -109,15 +109,15 @@ void QActionGroupPrivate::_q_actionHovered() \inmodule QtWidgets In some situations it is useful to group QAction objects together. - For example, if you have a \gui{Left Align} action, a \gui{Right - Align} action, a \gui{Justify} action, and a \gui{Center} action, + For example, if you have a \uicontrol{Left Align} action, a \uicontrol{Right + Align} action, a \uicontrol{Justify} action, and a \uicontrol{Center} action, only one of these actions should be active at any one time. One simple way of achieving this is to group the actions together in an action group. Here's a example (from the \l{mainwindows/menus}{Menus} example): - \snippet examples/mainwindows/menus/mainwindow.cpp 6 + \snippet mainwindows/menus/mainwindow.cpp 6 Here we create a new action group. Since the action group is exclusive by default, only one of the actions in the group is diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 734c737e84f..381aa29eba7 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -575,7 +575,7 @@ QApplication::QApplication(int &argc, char **argv, int _internal) \obsolete - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 0 + \snippet code/src_gui_kernel_qapplication.cpp 0 */ QApplication::QApplication(int &argc, char **argv, bool GUIenabled , int _internal) @@ -1106,7 +1106,7 @@ QStyle *QApplication::style() still the parent of the application object. Example usage: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 1 + \snippet code/src_gui_kernel_qapplication.cpp 1 When switching application styles, the color palette is set back to the initial colors or the system defaults. This is necessary since certain @@ -1298,7 +1298,7 @@ int QApplication::colorSpec() Example: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 2 + \snippet code/src_gui_kernel_qapplication.cpp 2 \sa colorSpec() */ @@ -1322,7 +1322,7 @@ void QApplication::setColorSpec(int spec) Example: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 3 + \snippet code/src_gui_kernel_qapplication.cpp 3 By default, this property contains a QSize object with zero width and height. */ @@ -1675,7 +1675,7 @@ void QApplication::setWindowIcon(const QIcon &icon) Example: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 4 + \snippet code/src_gui_kernel_qapplication.cpp 4 \sa allWidgets(), QWidget::isWindow(), QWidget::isHidden() */ @@ -1700,7 +1700,7 @@ QWidgetList QApplication::topLevelWidgets() \note Some of the widgets may be hidden. Example: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 5 + \snippet code/src_gui_kernel_qapplication.cpp 5 \sa topLevelWidgets(), QWidget::isVisible() */ @@ -1810,10 +1810,10 @@ QFontMetrics QApplication::fontMetrics() Closes all top-level windows. This function is particularly useful for applications with many top-level - windows. It could, for example, be connected to a \gui{Exit} entry in the - \gui{File} menu: + windows. It could, for example, be connected to a \uicontrol{Exit} entry in the + \uicontrol{File} menu: - \snippet examples/mainwindows/mdi/mainwindow.cpp 0 + \snippet mainwindows/mdi/mainwindow.cpp 0 The windows are closed in random order, until one window does not accept the close event. The application quits when the last window was @@ -1850,7 +1850,7 @@ void QApplication::closeAllWindows() Displays a simple message box about Qt. The message includes the version number of Qt being used by the application. - This is useful for inclusion in the \gui Help menu of an application, as + This is useful for inclusion in the \uicontrol Help menu of an application, as shown in the \l{mainwindows/menus}{Menus} example. This function is a convenience slot for QMessageBox::aboutQt(). @@ -2873,7 +2873,7 @@ void QApplication::setStartDragDistance(int l) and the current position (e.g. in the mouse move event) is \c currentPos, you can find out if a drag should be started with code like this: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 7 + \snippet code/src_gui_kernel_qapplication.cpp 7 Qt uses this value internally, e.g. in QFileDialog. @@ -3722,7 +3722,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) Here's an example of how an application's QApplication::commitData() might be implemented: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 8 + \snippet code/src_gui_kernel_qapplication.cpp 8 If an error occurred within the application while saving its data, you may want to try allowsErrorInteraction() instead. @@ -3794,7 +3794,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) If the session manager is capable of restoring sessions it will execute \a command in order to restore the application. The command defaults to - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 9 + \snippet code/src_gui_kernel_qapplication.cpp 9 The \c -session option is mandatory; otherwise QApplication cannot tell whether it has been restored or what the current session identifier is. @@ -3818,7 +3818,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) To iterate over the list, you can use the \l foreach pseudo-keyword: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 10 + \snippet code/src_gui_kernel_qapplication.cpp 10 \sa setRestartCommand(), restartHint() */ @@ -3839,7 +3839,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) To iterate over the list, you can use the \l foreach pseudo-keyword: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 11 + \snippet code/src_gui_kernel_qapplication.cpp 11 \sa setDiscardCommand(), restartCommand(), setRestartCommand() */ @@ -3967,7 +3967,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) Use the two-argument widgetAt() overload to get the child widget. To get the top-level widget do this: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 12 + \snippet code/src_gui_kernel_qapplication.cpp 12 */ /*! @@ -3976,7 +3976,7 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) Use the single-argument widgetAt() overload to get the child widget. To get the top-level widget do this: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 13 + \snippet code/src_gui_kernel_qapplication.cpp 13 */ bool QApplicationPrivate::inPopupMode() const @@ -4098,7 +4098,7 @@ bool QApplication::keypadNavigationEnabled() flash time, then hidden for the same amount of time, but this may vary. The default value on X11 is 1000 milliseconds. On Windows, the - \gui{Control Panel} value is used and setting this property sets the cursor + \uicontrol{Control Panel} value is used and setting this property sets the cursor flash time for all applications. We recommend that widgets do not cache this value as it may change at any diff --git a/src/widgets/kernel/qboxlayout.cpp b/src/widgets/kernel/qboxlayout.cpp index 7ea77d211c7..46c51d1d37c 100644 --- a/src/widgets/kernel/qboxlayout.cpp +++ b/src/widgets/kernel/qboxlayout.cpp @@ -1239,13 +1239,13 @@ QBoxLayout::Direction QBoxLayout::direction() const The simplest use of the class is like this: - \snippet doc/src/snippets/layouts/layouts.cpp 0 - \snippet doc/src/snippets/layouts/layouts.cpp 1 - \snippet doc/src/snippets/layouts/layouts.cpp 2 + \snippet layouts/layouts.cpp 0 + \snippet layouts/layouts.cpp 1 + \snippet layouts/layouts.cpp 2 \codeline - \snippet doc/src/snippets/layouts/layouts.cpp 3 - \snippet doc/src/snippets/layouts/layouts.cpp 4 - \snippet doc/src/snippets/layouts/layouts.cpp 5 + \snippet layouts/layouts.cpp 3 + \snippet layouts/layouts.cpp 4 + \snippet layouts/layouts.cpp 5 First, we create the widgets we want in the layout. Then, we create the QHBoxLayout object and add the widgets into the @@ -1302,13 +1302,13 @@ QHBoxLayout::~QHBoxLayout() The simplest use of the class is like this: - \snippet doc/src/snippets/layouts/layouts.cpp 6 - \snippet doc/src/snippets/layouts/layouts.cpp 7 - \snippet doc/src/snippets/layouts/layouts.cpp 8 + \snippet layouts/layouts.cpp 6 + \snippet layouts/layouts.cpp 7 + \snippet layouts/layouts.cpp 8 \codeline - \snippet doc/src/snippets/layouts/layouts.cpp 9 - \snippet doc/src/snippets/layouts/layouts.cpp 10 - \snippet doc/src/snippets/layouts/layouts.cpp 11 + \snippet layouts/layouts.cpp 9 + \snippet layouts/layouts.cpp 10 + \snippet layouts/layouts.cpp 11 First, we create the widgets we want in the layout. Then, we create the QVBoxLayout object and add the widgets into the diff --git a/src/widgets/kernel/qformlayout.cpp b/src/widgets/kernel/qformlayout.cpp index 440f3f1dc20..bc4527a1e07 100644 --- a/src/widgets/kernel/qformlayout.cpp +++ b/src/widgets/kernel/qformlayout.cpp @@ -1038,11 +1038,11 @@ QStyle* QFormLayoutPrivate::getStyle() const creates a QLabel behind the scenes and automatically set up its buddy. We can then write code like this: - \snippet doc/src/snippets/code/src_gui_kernel_qformlayout.cpp 0 + \snippet code/src_gui_kernel_qformlayout.cpp 0 Compare this with the following code, written using QGridLayout: - \snippet doc/src/snippets/code/src_gui_kernel_qformlayout.cpp 1 + \snippet code/src_gui_kernel_qformlayout.cpp 1 \endlist The table below shows the default appearance in different styles. @@ -1083,7 +1083,7 @@ QStyle* QFormLayoutPrivate::getStyle() const appearance of QMacStyle on all platforms, but with left-aligned labels, you could write: - \snippet doc/src/snippets/code/src_gui_kernel_qformlayout.cpp 2 + \snippet code/src_gui_kernel_qformlayout.cpp 2 \sa QGridLayout, QBoxLayout, QStackedLayout */ diff --git a/src/widgets/kernel/qicon.cpp b/src/widgets/kernel/qicon.cpp index 62c99a64c8c..dc506b780c9 100644 --- a/src/widgets/kernel/qicon.cpp +++ b/src/widgets/kernel/qicon.cpp @@ -467,11 +467,11 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, resource, and then use it, allowing Qt to work out all the required icon styles and sizes. For example: - \snippet doc/src/snippets/code/src_gui_image_qicon.cpp 0 + \snippet code/src_gui_image_qicon.cpp 0 To undo a QIcon, simply set a null icon in its place: - \snippet doc/src/snippets/code/src_gui_image_qicon.cpp 1 + \snippet code/src_gui_image_qicon.cpp 1 Use the QImageReader::supportedImageFormats() and QImageWriter::supportedImageFormats() functions to retrieve a @@ -500,7 +500,7 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, Provide a method to set a QIcon, and when you draw the icon, choose whichever pixmap is appropriate for the current state of your widget. For example: - \snippet doc/src/snippets/code/src_gui_image_qicon.cpp 2 + \snippet code/src_gui_image_qicon.cpp 2 You might also make use of the \c Active mode, perhaps making your widget \c Active when the mouse is over the widget (see \l @@ -947,12 +947,12 @@ QString QIcon::themeName() To fetch an icon from the current icon theme: - \snippet doc/src/snippets/code/src_gui_image_qicon.cpp 3 + \snippet code/src_gui_image_qicon.cpp 3 Or if you want to provide a guaranteed fallback for platforms that do not support theme icons, you can use the second argument: - \snippet doc/src/snippets/code/src_gui_image_qicon.cpp 4 + \snippet code/src_gui_image_qicon.cpp 4 \note By default, only X11 will support themed icons. In order to use themed icons on Mac and Windows, you will have to bundle a diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp index 8c4e9884118..a7760711b69 100644 --- a/src/widgets/kernel/qlayout.cpp +++ b/src/widgets/kernel/qlayout.cpp @@ -1117,7 +1117,7 @@ bool QLayout::activate() This function can be used to iterate over a layout. The following code will draw a rectangle for each layout item in the layout structure of the widget. - \snippet doc/src/snippets/code/src_gui_kernel_qlayout.cpp 0 + \snippet code/src_gui_kernel_qlayout.cpp 0 \sa count(), takeAt() */ @@ -1134,7 +1134,7 @@ bool QLayout::activate() The following code fragment shows a safe way to remove all items from a layout: - \snippet doc/src/snippets/code/src_gui_kernel_qlayout.cpp 1 + \snippet code/src_gui_kernel_qlayout.cpp 1 \sa itemAt(), count() */ diff --git a/src/widgets/kernel/qlayoutitem.cpp b/src/widgets/kernel/qlayoutitem.cpp index 6cf3e1fe428..cf220796c51 100644 --- a/src/widgets/kernel/qlayoutitem.cpp +++ b/src/widgets/kernel/qlayoutitem.cpp @@ -392,7 +392,7 @@ int QLayoutItem::minimumHeightForWidth(int w) const Reimplement this function in layout managers that support height for width. A typical implementation will look like this: - \snippet doc/src/snippets/code/src_gui_kernel_qlayoutitem.cpp 0 + \snippet code/src_gui_kernel_qlayoutitem.cpp 0 Caching is strongly recommended; without it layout will take exponential time. diff --git a/src/widgets/kernel/qshortcut.cpp b/src/widgets/kernel/qshortcut.cpp index 92f6fbafba8..23487073f8d 100644 --- a/src/widgets/kernel/qshortcut.cpp +++ b/src/widgets/kernel/qshortcut.cpp @@ -284,17 +284,17 @@ static bool correctActionContext(Qt::ShortcutContext context, QAction *a, QWidge objects can be informed when a shortcut is executed. The shortcut can be set up to contain all the key presses necessary to describe a keyboard shortcut, including the states of modifier - keys such as \gui Shift, \gui Ctrl, and \gui Alt. + keys such as \uicontrol Shift, \uicontrol Ctrl, and \uicontrol Alt. \target mnemonic On certain widgets, using '&' in front of a character will automatically create a mnemonic (a shortcut) for that character, - e.g. "E&xit" will create the shortcut \gui Alt+X (use '&&' to + e.g. "E&xit" will create the shortcut \uicontrol Alt+X (use '&&' to display an actual ampersand). The widget might consume and perform an action on a given shortcut. On X11 the ampersand will not be shown and the character will be underlined. On Windows, shortcuts - are normally not displayed until the user presses the \gui Alt + are normally not displayed until the user presses the \uicontrol Alt key, but this is a setting the user can change. On Mac, shortcuts are disabled by default. Call qt_set_sequence_auto_mnemonic() to enable them. However, because mnemonic shortcuts do not fit in @@ -310,7 +310,7 @@ static bool correctActionContext(Qt::ShortcutContext context, QAction *a, QWidge The simplest way to create a shortcut for a particular widget is to construct the shortcut with a key sequence. For example: - \snippet doc/src/snippets/code/src_gui_kernel_qshortcut.cpp 0 + \snippet code/src_gui_kernel_qshortcut.cpp 0 When the user types the \l{QKeySequence}{key sequence} for a given shortcut, the shortcut's activated() signal is @@ -449,7 +449,7 @@ QShortcut::~QShortcut() This is a key sequence with an optional combination of Shift, Ctrl, and Alt. The key sequence may be supplied in a number of ways: - \snippet doc/src/snippets/code/src_gui_kernel_qshortcut.cpp 1 + \snippet code/src_gui_kernel_qshortcut.cpp 1 By default, this property contains an empty key sequence. */ diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp index 0d2e7716e5e..7db317e2bb5 100644 --- a/src/widgets/kernel/qstackedlayout.cpp +++ b/src/widgets/kernel/qstackedlayout.cpp @@ -74,17 +74,17 @@ public: A QStackedLayout can be populated with a number of child widgets ("pages"). For example: - \snippet doc/src/snippets/qstackedlayout/main.cpp 0 + \snippet qstackedlayout/main.cpp 0 \codeline - \snippet doc/src/snippets/qstackedlayout/main.cpp 2 - \snippet doc/src/snippets/qstackedlayout/main.cpp 3 + \snippet qstackedlayout/main.cpp 2 + \snippet qstackedlayout/main.cpp 3 QStackedLayout provides no intrinsic means for the user to switch page. This is typically done through a QComboBox or a QListWidget that stores the titles of the QStackedLayout's pages. For example: - \snippet doc/src/snippets/qstackedlayout/main.cpp 1 + \snippet qstackedlayout/main.cpp 1 When populating a layout, the widgets are added to an internal list. The indexOf() function returns the index of a widget in that diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp index 5df69be0207..9f4d8571b33 100644 --- a/src/widgets/kernel/qwhatsthis.cpp +++ b/src/widgets/kernel/qwhatsthis.cpp @@ -102,7 +102,7 @@ QT_BEGIN_NAMESPACE simple method to determine whether the text can be rendered as plain text. See Qt::mightBeRichText() for details. - \snippet doc/src/snippets/whatsthis/whatsthis.cpp 0 + \snippet whatsthis/whatsthis.cpp 0 An alternative way to enter "What's This?" mode is to call createAction(), and add the returned QAction to either a menu or diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 9abba543902..6d5bdf92cdf 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -2737,12 +2737,12 @@ void QWidget::overrideWindowState(Qt::WindowStates newstate) windows, the change is immediate. For example, to toggle between full-screen and normal mode, use the following code: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 0 + \snippet code/src_gui_kernel_qwidget.cpp 0 In order to restore and activate a minimized window (while preserving its maximized and/or full-screen state), use the following: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 1 + \snippet code/src_gui_kernel_qwidget.cpp 1 Calling this function will hide the widget. You must call show() to make the widget visible again. @@ -3535,7 +3535,7 @@ QSize QWidget::maximumSize() const sizeIncrement.height() pixels vertically, with baseSize() as the basis. Preferred widget sizes are for non-negative integers \e i and \e j: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 2 + \snippet code/src_gui_kernel_qwidget.cpp 2 Note that while you can set the size increment for all widgets, it only affects windows. @@ -3946,7 +3946,7 @@ QPoint QWidget::mapFromParent(const QPoint &pos) const Typical usage is changing the window title: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 3 + \snippet code/src_gui_kernel_qwidget.cpp 3 \sa isWindow() */ @@ -4546,7 +4546,7 @@ void QWidget::unsetLayoutDirection() objects\endlink for a range of useful shapes. An editor widget might use an I-beam cursor: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 6 + \snippet code/src_gui_kernel_qwidget.cpp 6 If no cursor has been set, or after a call to unsetCursor(), the parent's cursor is used. @@ -4638,7 +4638,7 @@ void QWidget::unsetCursor() using \a renderFlags to determine how to render. Rendering starts at \a targetOffset in the \a target. For example: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 7 + \snippet code/src_gui_kernel_qwidget.cpp 7 If \a sourceRegion is a null region, this function will use QWidget::rect() as the region, i.e. the entire widget. @@ -4646,7 +4646,7 @@ void QWidget::unsetCursor() Ensure that you call QPainter::end() for the \a target device's active painter (if any) before rendering. For example: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 8 + \snippet code/src_gui_kernel_qwidget.cpp 8 \note To obtain the contents of an OpenGL widget, use QGLWidget::grabFrameBuffer() or QGLWidget::renderPixmap() instead. @@ -6267,11 +6267,11 @@ bool QWidget::isActiveWindow() const Note that since the tab order of the \a second widget is changed, you should order a chain like this: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 9 + \snippet code/src_gui_kernel_qwidget.cpp 9 \e not like this: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 10 + \snippet code/src_gui_kernel_qwidget.cpp 10 If \a first or \a second has a focus proxy, setTabOrder() correctly substitutes the proxy. @@ -6532,7 +6532,7 @@ void QWidget::setGeometry(const QRect &r) To save the geometry when the window closes, you can implement a close event like this: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 11 + \snippet code/src_gui_kernel_qwidget.cpp 11 See the \l{Window Geometry} documentation for an overview of geometry issues with windows. @@ -6591,7 +6591,7 @@ QByteArray QWidget::saveGeometry() const To restore geometry saved using QSettings, you can use code like this: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 12 + \snippet code/src_gui_kernel_qwidget.cpp 12 See the \l{Window Geometry} documentation for an overview of geometry issues with windows. @@ -6917,7 +6917,7 @@ void QWidget::setFocusPolicy(Qt::FocusPolicy policy) widgets. Disabling updates solves this. Example: - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 13 + \snippet code/src_gui_kernel_qwidget.cpp 13 Disabling a widget implicitly disables all its children. Enabling a widget enables all child widgets \e except top-level widgets or those that @@ -8663,7 +8663,7 @@ void QWidget::leaveEvent(QEvent *) \b{Note for the X11 platform}: It is possible to toggle global double buffering by calling \c qt_x11_set_global_double_buffer(). For example, - \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 14 + \snippet code/src_gui_kernel_qwidget.cpp 14 \note Generally, you should refrain from calling update() or repaint() \b{inside} a paintEvent(). For example, calling update() or repaint() on @@ -9124,7 +9124,7 @@ QLayout *QWidget::layout() const Example: - \snippet examples/uitools/textfinder/textfinder.cpp 3b + \snippet uitools/textfinder/textfinder.cpp 3b An alternative to calling this function is to pass this widget to the layout's constructor. @@ -11363,7 +11363,7 @@ void QWidget::setMask(const QRegion &newMask) The following code shows how an image with an alpha channel can be used to generate a mask for a widget: - \snippet doc/src/snippets/widget-mask/main.cpp 0 + \snippet widget-mask/main.cpp 0 The label shown by this code is masked using the image it contains, giving the appearance that an irregularly-shaped image is being drawn diff --git a/src/widgets/styles/qdrawutil.cpp b/src/widgets/styles/qdrawutil.cpp index 15788e34f56..5c1d0ce098a 100644 --- a/src/widgets/styles/qdrawutil.cpp +++ b/src/widgets/styles/qdrawutil.cpp @@ -86,7 +86,7 @@ QT_BEGIN_NAMESPACE Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded line: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 0 + \snippet code/src_gui_painting_qdrawutil.cpp 0 \sa qDrawShadeRect(), qDrawShadePanel(), QStyle */ @@ -199,7 +199,7 @@ void qDrawShadeLine(QPainter *p, int x1, int y1, int x2, int y2, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded rectangle: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 1 + \snippet code/src_gui_painting_qdrawutil.cpp 1 \sa qDrawShadeLine(), qDrawShadePanel(), qDrawPlainRect(), QStyle */ @@ -300,7 +300,7 @@ void qDrawShadeRect(QPainter *p, int x, int y, int w, int h, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded panel: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 2 + \snippet code/src_gui_painting_qdrawutil.cpp 2 \sa qDrawWinPanel(), qDrawShadeLine(), qDrawShadeRect(), QStyle */ @@ -471,7 +471,7 @@ void qDrawWinButton(QPainter *p, int x, int y, int w, int h, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded panel: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 3 + \snippet code/src_gui_painting_qdrawutil.cpp 3 \sa qDrawShadePanel(), qDrawWinButton(), QStyle */ @@ -507,7 +507,7 @@ void qDrawWinPanel(QPainter *p, int x, int y, int w, int h, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a plain rectangle: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 4 + \snippet code/src_gui_painting_qdrawutil.cpp 4 \sa qDrawShadeRect(), QStyle */ @@ -566,7 +566,7 @@ void qDrawPlainRect(QPainter *p, int x, int y, int w, int h, const QColor &c, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded line: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 5 + \snippet code/src_gui_painting_qdrawutil.cpp 5 \sa qDrawShadeRect(), qDrawShadePanel(), QStyle */ @@ -605,7 +605,7 @@ void qDrawShadeLine(QPainter *p, const QPoint &p1, const QPoint &p2, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded rectangle: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 6 + \snippet code/src_gui_painting_qdrawutil.cpp 6 \sa qDrawShadeLine(), qDrawShadePanel(), qDrawPlainRect(), QStyle */ @@ -642,7 +642,7 @@ void qDrawShadeRect(QPainter *p, const QRect &r, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded panel: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 7 + \snippet code/src_gui_painting_qdrawutil.cpp 7 \sa qDrawWinPanel(), qDrawShadeLine(), qDrawShadeRect(), QStyle */ @@ -703,7 +703,7 @@ void qDrawWinButton(QPainter *p, const QRect &r, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a shaded panel: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 8 + \snippet code/src_gui_painting_qdrawutil.cpp 8 \sa qDrawShadePanel(), qDrawWinButton(), QStyle */ @@ -730,7 +730,7 @@ void qDrawWinPanel(QPainter *p, const QRect &r, Alternatively you can use a QFrame widget and apply the QFrame::setFrameStyle() function to display a plain rectangle: - \snippet doc/src/snippets/code/src_gui_painting_qdrawutil.cpp 9 + \snippet code/src_gui_painting_qdrawutil.cpp 9 \sa qDrawShadeRect(), QStyle */ diff --git a/src/widgets/styles/qproxystyle.cpp b/src/widgets/styles/qproxystyle.cpp index 5bcd83a6ea8..80124872a66 100644 --- a/src/widgets/styles/qproxystyle.cpp +++ b/src/widgets/styles/qproxystyle.cpp @@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE The following example shows how to override the shortcut underline behavior on any platform: - \snippet doc/src/snippets/code/src_gui_qproxystyle.cpp 1 + \snippet code/src_gui_qproxystyle.cpp 1 Warning: The \l {QCommonStyle} {common styles} provided by Qt will respect this hint, because they call QStyle::proxy(), but there is diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index d78a2ee2fb1..b4f24acf84c 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -107,7 +107,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C QApplication::setStyle() function. It can also be specified by the user of the application, using the \c -style command-line option: - \snippet doc/src/snippets/code/src_gui_styles_qstyle.cpp 0 + \snippet code/src_gui_styles_qstyle.cpp 0 If no style is specified, Qt will choose the most appropriate style for the user's platform or desktop environment. @@ -133,7 +133,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C For example, if you want to draw a focus rectangle on your widget, you can write: - \snippet doc/src/snippets/styles/styles.cpp 1 + \snippet styles/styles.cpp 1 QStyle gets all the information it needs to render the graphical element from QStyleOption. The widget is passed as the last @@ -154,15 +154,15 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C combines a QStyle, a QPainter, and a QWidget. This makes it possible to write - \snippet doc/src/snippets/styles/styles.cpp 5 + \snippet styles/styles.cpp 5 \dots - \snippet doc/src/snippets/styles/styles.cpp 7 + \snippet styles/styles.cpp 7 instead of - \snippet doc/src/snippets/styles/styles.cpp 2 + \snippet styles/styles.cpp 2 \dots - \snippet doc/src/snippets/styles/styles.cpp 3 + \snippet styles/styles.cpp 3 \section1 Creating a Custom Style @@ -190,16 +190,16 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C function, so we need to reimplement that function. We need the following class declaration: - \snippet doc/src/snippets/customstyle/customstyle.h 0 + \snippet customstyle/customstyle.h 0 To draw its up and down arrows, QSpinBox uses the PE_IndicatorSpinUp and PE_IndicatorSpinDown primitive elements. Here's how to reimplement the drawPrimitive() function to draw them differently: - \snippet doc/src/snippets/customstyle/customstyle.cpp 2 - \snippet doc/src/snippets/customstyle/customstyle.cpp 3 - \snippet doc/src/snippets/customstyle/customstyle.cpp 4 + \snippet customstyle/customstyle.cpp 2 + \snippet customstyle/customstyle.cpp 3 + \snippet customstyle/customstyle.cpp 4 Notice that we don't use the \c widget argument, except to pass it on to the QWindowStyle::drawPrimitive() function. As mentioned @@ -211,9 +211,9 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C information, be careful to ensure that it isn't 0 and that it is of the correct type before using it. For example: - \snippet doc/src/snippets/customstyle/customstyle.cpp 0 + \snippet customstyle/customstyle.cpp 0 \dots - \snippet doc/src/snippets/customstyle/customstyle.cpp 1 + \snippet customstyle/customstyle.cpp 1 When implementing a custom style, you cannot assume that the widget is a QSpinBox just because the enum value is called @@ -233,7 +233,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C QApplication::setStyle() static function before creating the QApplication object: - \snippet snippets/customstyle/main.cpp using a custom style + \snippet customstyle/main.cpp using a custom style You can call QApplication::setStyle() at any time, but by calling it before the constructor, you ensure that the user's preference, @@ -252,7 +252,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C automatically. To use your new style with existing applications, simply start the application with the following argument: - \snippet doc/src/snippets/code/src_gui_styles_qstyle.cpp 1 + \snippet code/src_gui_styles_qstyle.cpp 1 The application will use the look and feel from the custom style you implemented. @@ -306,7 +306,7 @@ static int unpackControlTypes(QSizePolicy::ControlTypes controls, QSizePolicy::C We include a small example where we customize the drawing of item backgrounds. - \snippet doc/src/snippets/customviewstyle.cpp 0 + \snippet customviewstyle.cpp 0 The primitive element PE_PanelItemViewItem is responsible for painting the background of items, and is called from diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index 0b0c6e23931..1da5d786c70 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -74,7 +74,7 @@ QT_BEGIN_NAMESPACE The following code snippet shows how to use a specific QStyleOption subclass to paint a push button: - \snippet doc/src/snippets/qstyleoption/main.cpp 0 + \snippet qstyleoption/main.cpp 0 In our example, the control is a QStyle::CE_PushButton, and according to the QStyle::drawControl() documentation the @@ -85,7 +85,7 @@ QT_BEGIN_NAMESPACE For safety, you can use qstyleoption_cast() to ensure that the pointer type is correct. For example: - \snippet doc/src/snippets/qstyleoption/main.cpp 4 + \snippet qstyleoption/main.cpp 4 The qstyleoption_cast() function will return 0 if the object to which \c option points is not of the correct type. @@ -3240,7 +3240,7 @@ QStyleOptionViewItem::QStyleOptionViewItem(int version) Example: - \snippet doc/src/snippets/qstyleoption/main.cpp 4 + \snippet qstyleoption/main.cpp 4 \sa QStyleOption::type, QStyleOption::version */ @@ -3958,7 +3958,7 @@ QStyleHintReturnVariant::QStyleHintReturnVariant() : QStyleHintReturn(Version, T Example: - \snippet doc/src/snippets/code/src_gui_styles_qstyleoption.cpp 0 + \snippet code/src_gui_styles_qstyleoption.cpp 0 \sa QStyleHintReturn::type, QStyleHintReturn::version */ diff --git a/src/widgets/styles/qstylepainter.cpp b/src/widgets/styles/qstylepainter.cpp index b15b9d1a38e..ff7db790098 100644 --- a/src/widgets/styles/qstylepainter.cpp +++ b/src/widgets/styles/qstylepainter.cpp @@ -65,13 +65,13 @@ QT_BEGIN_NAMESPACE Example using QStyle directly: - \snippet doc/src/snippets/styles/styles.cpp 1 + \snippet styles/styles.cpp 1 Example using QStylePainter: - \snippet doc/src/snippets/styles/styles.cpp 0 - \snippet doc/src/snippets/styles/styles.cpp 4 - \snippet doc/src/snippets/styles/styles.cpp 6 + \snippet styles/styles.cpp 0 + \snippet styles/styles.cpp 4 + \snippet styles/styles.cpp 6 \sa QStyle, QStyleOption */ diff --git a/src/widgets/styles/qstyleplugin.cpp b/src/widgets/styles/qstyleplugin.cpp index 74c29f39c82..b36ffcf181d 100644 --- a/src/widgets/styles/qstyleplugin.cpp +++ b/src/widgets/styles/qstyleplugin.cpp @@ -83,10 +83,10 @@ QT_BEGIN_NAMESPACE The style key is usually the class name of the required style. Note that the keys are case insensitive. For example: - \snippet doc/src/snippets/qstyleplugin/main.cpp 0 + \snippet qstyleplugin/main.cpp 0 \codeline - \snippet doc/src/snippets/qstyleplugin/main.cpp 1 - \snippet doc/src/snippets/qstyleplugin/main.cpp 2 + \snippet qstyleplugin/main.cpp 1 + \snippet qstyleplugin/main.cpp 2 \sa keys() */ diff --git a/src/widgets/util/qcompleter.cpp b/src/widgets/util/qcompleter.cpp index 91e4a9c3c19..245857b3c3c 100644 --- a/src/widgets/util/qcompleter.cpp +++ b/src/widgets/util/qcompleter.cpp @@ -62,12 +62,12 @@ For example, here's how to provide auto completions from a simple word list in a QLineEdit: - \snippet doc/src/snippets/code/src_gui_util_qcompleter.cpp 0 + \snippet code/src_gui_util_qcompleter.cpp 0 A QFileSystemModel can be used to provide auto completion of file names. For example: - \snippet doc/src/snippets/code/src_gui_util_qcompleter.cpp 1 + \snippet code/src_gui_util_qcompleter.cpp 1 To set the model on which QCompleter should operate, call setModel(). By default, QCompleter will attempt to match the \l @@ -100,7 +100,7 @@ currentCompletion(). You can iterate through the list of completions as below: - \snippet doc/src/snippets/code/src_gui_util_qcompleter.cpp 2 + \snippet code/src_gui_util_qcompleter.cpp 2 completionCount() returns the total number of completions for the current prefix. completionCount() should be avoided when possible, diff --git a/src/widgets/util/qundostack.cpp b/src/widgets/util/qundostack.cpp index 5392dd2f8e9..3951017f892 100644 --- a/src/widgets/util/qundostack.cpp +++ b/src/widgets/util/qundostack.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE a change to the document with redo() and undo the change with undo(). The implementations for these functions must be provided in a derived class. - \snippet doc/src/snippets/code/src_gui_util_qundostack.cpp 0 + \snippet code/src_gui_util_qundostack.cpp 0 A QUndoCommand has an associated text(). This is a short string describing what the command does. It is used to update the text @@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE QUndoCommand objects are owned by the stack they were pushed on. QUndoStack deletes a command if it has been undone and a new command is pushed. For example: -\snippet doc/src/snippets/code/src_gui_util_qundostack.cpp 1 +\snippet code/src_gui_util_qundostack.cpp 1 In effect, when a command is pushed, it becomes the top-most command on the stack. @@ -93,7 +93,7 @@ QT_BEGIN_NAMESPACE redo() on all its children. The parent should, however, have a meaningful text(). - \snippet doc/src/snippets/code/src_gui_util_qundostack.cpp 2 + \snippet code/src_gui_util_qundostack.cpp 2 Another way to create macros is to use the convenience functions QUndoStack::beginMacro() and QUndoStack::endMacro(). @@ -182,7 +182,7 @@ int QUndoCommand::id() const The default implementation returns false. - \snippet doc/src/snippets/code/src_gui_util_qundostack.cpp 3 + \snippet code/src_gui_util_qundostack.cpp 3 \sa id() QUndoStack::push() */ @@ -943,11 +943,11 @@ QAction *QUndoStack::createRedoAction(QObject *parent, const QString &prefix) co The stack becomes enabled and appropriate signals are emitted when endMacro() is called for the outermost macro. - \snippet doc/src/snippets/code/src_gui_util_qundostack.cpp 4 + \snippet code/src_gui_util_qundostack.cpp 4 This code is equivalent to: - \snippet doc/src/snippets/code/src_gui_util_qundostack.cpp 5 + \snippet code/src_gui_util_qundostack.cpp 5 \sa endMacro() */ diff --git a/src/widgets/widgets/qabstractbutton.cpp b/src/widgets/widgets/qabstractbutton.cpp index 4e85eae3ff6..0c22576f7f5 100644 --- a/src/widgets/widgets/qabstractbutton.cpp +++ b/src/widgets/widgets/qabstractbutton.cpp @@ -86,7 +86,7 @@ Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets; ampersand ('&'), QAbstractButton automatically creates a shortcut key. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp 0 + \snippet code/src_gui_widgets_qabstractbutton.cpp 0 The \key Alt+C shortcut is assigned to the button, i.e., when the user presses \key Alt+C the button will call animateClick(). See @@ -97,7 +97,7 @@ Q_WIDGETS_EXPORT extern bool qt_tab_all_widgets; function. This is useful mostly for buttons that do not have any text, because they have no automatic shortcut. - \snippet doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp 1 + \snippet code/src_gui_widgets_qabstractbutton.cpp 1 All of the buttons provided by Qt (QPushButton, QToolButton, QCheckBox, and QRadioButton) can display both \l text and \l{icon}{icons}. @@ -1361,7 +1361,7 @@ For example, a slot that reacts to signals emitted by newly checked buttons but which ignores signals from buttons that have been unchecked can be implemented using the following pattern: -\snippet doc/src/snippets/code/src_gui_widgets_qabstractbutton.cpp 2 +\snippet code/src_gui_widgets_qabstractbutton.cpp 2 Button groups can be created using the QButtonGroup class, and updates to the button states monitored with the diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index dc963215999..d97b03128ed 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -130,13 +130,13 @@ QT_BEGIN_NAMESPACE QWidget::move(). When the area contents or the viewport size changes, we do the following: - \snippet doc/src/snippets/myscrollarea.cpp 1 + \snippet myscrollarea.cpp 1 When the scroll bars change value, we need to update the widget position, i.e., find the part of the widget that is to be drawn in the viewport: - \snippet doc/src/snippets/myscrollarea.cpp 0 + \snippet myscrollarea.cpp 0 In order to track scroll bar movements, reimplement the virtual function scrollContentsBy(). In order to fine-tune scrolling diff --git a/src/widgets/widgets/qabstractspinbox.cpp b/src/widgets/widgets/qabstractspinbox.cpp index 6c556dc870b..4d55c9f0aff 100644 --- a/src/widgets/widgets/qabstractspinbox.cpp +++ b/src/widgets/widgets/qabstractspinbox.cpp @@ -230,7 +230,7 @@ QString QAbstractSpinBox::text() const to automatically choose one that will enable the image to fit completely within the display window, you can set up the spin box like this: - \snippet examples/widgets/spinboxes/window.cpp 3 + \snippet widgets/spinboxes/window.cpp 3 The user will then be able to choose a scale from 1% to 1000% or select "Auto" to leave it up to the application to choose. Your code @@ -275,7 +275,7 @@ void QAbstractSpinBox::setSpecialValueText(const QString &specialValueText) to the minimum() value and vica versa. Wrapping only make sense if you have minimum() and maximum() values set. - \snippet doc/src/snippets/code/src_gui_widgets_qabstractspinbox.cpp 0 + \snippet code/src_gui_widgets_qabstractspinbox.cpp 0 \sa QSpinBox::minimum(), QSpinBox::maximum() */ diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp index 427af68b645..acd07d2a5bf 100644 --- a/src/widgets/widgets/qcalendarwidget.cpp +++ b/src/widgets/widgets/qcalendarwidget.cpp @@ -2004,7 +2004,7 @@ void QCalendarWidgetPrivate::_q_editingFinished() \row \li \image qcalendarwidget-grid.png \row \li - \snippet doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp 0 + \snippet code/src_gui_widgets_qcalendarwidget.cpp 0 \endtable Finally, the day in the first column can be altered using the @@ -2421,7 +2421,7 @@ void QCalendarWidget::showToday() \li \image qcalendarwidget-minimum.png \row \li - \snippet doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp 1 + \snippet code/src_gui_widgets_qcalendarwidget.cpp 1 \endtable By default, the minimum date is the earliest date that the QDate @@ -2472,7 +2472,7 @@ void QCalendarWidget::setMinimumDate(const QDate &date) \li \image qcalendarwidget-maximum.png \row \li - \snippet doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp 2 + \snippet code/src_gui_widgets_qcalendarwidget.cpp 2 \endtable By default, the maximum date is the last day the QDate class can @@ -2518,11 +2518,11 @@ void QCalendarWidget::setMaximumDate(const QDate &date) The date range restricts the user selection, i.e. the user can only select dates within the specified date range. Note that - \snippet doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp 3 + \snippet code/src_gui_widgets_qcalendarwidget.cpp 3 is analogous to - \snippet doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp 4 + \snippet code/src_gui_widgets_qcalendarwidget.cpp 4 If either the \a min or \a max parameters are not valid QDate objects, this function does nothing. @@ -2641,7 +2641,7 @@ void QCalendarWidget::setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFor \li \inlineimage qcalendarwidget-grid.png \row \li - \snippet doc/src/snippets/code/src_gui_widgets_qcalendarwidget.cpp 5 + \snippet code/src_gui_widgets_qcalendarwidget.cpp 5 \endtable The default value is false. diff --git a/src/widgets/widgets/qcheckbox.cpp b/src/widgets/widgets/qcheckbox.cpp index 13440ac104d..a0093800a5e 100644 --- a/src/widgets/widgets/qcheckbox.cpp +++ b/src/widgets/widgets/qcheckbox.cpp @@ -107,7 +107,7 @@ public: constructor or with setText(). A shortcut key can be specified by preceding the preferred character with an ampersand. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qcheckbox.cpp 0 + \snippet code/src_gui_widgets_qcheckbox.cpp 0 In this example the shortcut is \e{Alt+A}. See the \l{QShortcut#mnemonic} {QShortcut} documentation for details (to display an actual ampersand, diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 0cdb2d1176c..4c418bde9e9 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -83,7 +83,7 @@ QT_BEGIN_NAMESPACE QDateTimeEdit box. Dates and times appear in accordance with the format set; see setDisplayFormat(). - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 0 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 0 Here we've created a new QDateTimeEdit object initialized with today's date, and restricted the valid date range to today plus or @@ -397,11 +397,11 @@ void QDateTimeEdit::setMaximumDateTime(const QDateTime &dt) function call. \since 4.4 - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 1 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 1 is analogous to: - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 2 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 2 If either \a min or \a max are not valid, this function does nothing. @@ -560,11 +560,11 @@ void QDateTimeEdit::clearMaximumTime() Convenience function to set minimum and maximum date with one function call. - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 3 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 3 is analogous to: - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 4 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 4 If either \a min or \a max are not valid, this function does nothing. @@ -587,11 +587,11 @@ void QDateTimeEdit::setDateRange(const QDate &min, const QDate &max) Convenience function to set minimum and maximum time with one function call. - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 5 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 5 is analogous to: - \snippet doc/src/snippets/code/src_gui_widgets_qdatetimeedit.cpp 6 + \snippet code/src_gui_widgets_qdatetimeedit.cpp 6 If either \a min or \a max are not valid, this function does nothing. diff --git a/src/widgets/widgets/qdialogbuttonbox.cpp b/src/widgets/widgets/qdialogbuttonbox.cpp index b787522a503..bcf0753d33b 100644 --- a/src/widgets/widgets/qdialogbuttonbox.cpp +++ b/src/widgets/widgets/qdialogbuttonbox.cpp @@ -86,19 +86,19 @@ QT_BEGIN_NAMESPACE destructive results. Most dialogs have buttons that can almost be considered standard (e.g. - \gui OK and \gui Cancel buttons). It is sometimes convenient to create these + \uicontrol OK and \uicontrol Cancel buttons). It is sometimes convenient to create these buttons in a standard way. There are a couple ways of using QDialogButtonBox. One ways is to create the buttons (or button texts) yourself and add them to the button box, specifying their role. - \snippet examples/dialogs/extension/finddialog.cpp 1 + \snippet dialogs/extension/finddialog.cpp 1 Alternatively, QDialogButtonBox provides several standard buttons (e.g. OK, Cancel, Save) that you can use. They exist as flags so you can OR them together in the constructor. - \snippet examples/dialogs/tabdialog/tabdialog.cpp 2 + \snippet dialogs/tabdialog/tabdialog.cpp 2 You can mix and match normal buttons and standard buttons. @@ -133,6 +133,8 @@ QT_BEGIN_NAMESPACE \table \row \li modeless horizontal MacLayout \li \inlineimage buttonbox-mac-modeless-horizontal.png Screenshot of modeless horizontal MacLayout + \row \li modeless vertical MacLayout + \li \inlineimage buttonbox-mac-modeless-vertical.png Screenshot of modeless vertical MacLayout \endtable When a button is clicked in the button box, the clicked() signal is emitted diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index e40b1094554..db45bf4e460 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -1547,7 +1547,7 @@ QAction * QDockWidget::toggleViewAction() const \li When DockWidgetVerticalTitleBar is set on QDockWidget, the title bar widget is repositioned accordingly. In resizeEvent(), the title bar should check what orientation it should assume: - \snippet doc/src/snippets/code/src_gui_widgets_qdockwidget.cpp 0 + \snippet code/src_gui_widgets_qdockwidget.cpp 0 \li The title bar widget must have a valid QWidget::sizeHint() and QWidget::minimumSizeHint(). These functions should take into account diff --git a/src/widgets/widgets/qframe.cpp b/src/widgets/widgets/qframe.cpp index b69f65828b8..d11ff09a306 100644 --- a/src/widgets/widgets/qframe.cpp +++ b/src/widgets/widgets/qframe.cpp @@ -79,7 +79,7 @@ inline void QFramePrivate::init() screen. QProgressBar has a "sunken" look. QLabel has a flat look. The frames of widgets like these can be changed. - \snippet doc/src/snippets/code/src_gui_widgets_qframe.cpp 0 + \snippet code/src_gui_widgets_qframe.cpp 0 The QFrame class can also be used directly for creating simple placeholder frames without any contents. diff --git a/src/widgets/widgets/qgroupbox.cpp b/src/widgets/widgets/qgroupbox.cpp index d8ad04cd847..343fc85bc93 100644 --- a/src/widgets/widgets/qgroupbox.cpp +++ b/src/widgets/widgets/qgroupbox.cpp @@ -169,7 +169,7 @@ void QGroupBoxPrivate::click() widgets). The following example shows how we can set up a QGroupBox with a layout: - \snippet examples/widgets/groupbox/window.cpp 2 + \snippet widgets/groupbox/window.cpp 2 \table 100% \row \li \inlineimage windowsxp-groupbox.png Screenshot of a Windows XP style group box @@ -261,7 +261,7 @@ void QGroupBox::setTitle(const QString &title) The group box title text will have a keyboard shortcut if the title contains an ampersand ('&') followed by a letter. - \snippet doc/src/snippets/code/src_gui_widgets_qgroupbox.cpp 0 + \snippet code/src_gui_widgets_qgroupbox.cpp 0 In the example above, \key Alt+U moves the keyboard focus to the group box. See the \l {QShortcut#mnemonic}{QShortcut} diff --git a/src/widgets/widgets/qlabel.cpp b/src/widgets/widgets/qlabel.cpp index 4450066df44..99deca4709f 100644 --- a/src/widgets/widgets/qlabel.cpp +++ b/src/widgets/widgets/qlabel.cpp @@ -115,7 +115,7 @@ QT_BEGIN_NAMESPACE the bottom right corner (both lines being flush with the right side of the label): - \snippet doc/src/snippets/code/src_gui_widgets_qlabel.cpp 0 + \snippet code/src_gui_widgets_qlabel.cpp 0 The properties and functions QLabel inherits from QFrame can also be used to specify the widget frame to be used for any given label. @@ -125,7 +125,7 @@ QT_BEGIN_NAMESPACE mnemonic (see QKeySequence) that will set the keyboard focus to the other widget (called the QLabel's "buddy"). For example: - \snippet doc/src/snippets/code/src_gui_widgets_qlabel.cpp 1 + \snippet code/src_gui_widgets_qlabel.cpp 1 In this example, keyboard focus is transferred to the label's buddy (the QLineEdit) when the user presses Alt+P. If the buddy @@ -1150,7 +1150,7 @@ void QLabelPrivate::updateLabel() In a dialog, you might create two data entry widgets and a label for each, and set up the geometry layout so each label is just to the left of its data entry widget (its "buddy"), for example: - \snippet doc/src/snippets/code/src_gui_widgets_qlabel.cpp 2 + \snippet code/src_gui_widgets_qlabel.cpp 2 With the code above, the focus jumps to the Name field when the user presses Alt+N, and to the Phone field when the user presses diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp index 1ea636ffb21..bbf34b9853e 100644 --- a/src/widgets/widgets/qlineedit.cpp +++ b/src/widgets/widgets/qlineedit.cpp @@ -1980,7 +1980,7 @@ void QLineEdit::dropEvent(QDropEvent* e) to extend the standard context menu, reimplement this function, call createStandardContextMenu() and extend the menu returned. - \snippet doc/src/snippets/code/src_gui_widgets_qlineedit.cpp 0 + \snippet code/src_gui_widgets_qlineedit.cpp 0 The \a event parameter is used to obtain the position where the mouse cursor was when the event was generated. diff --git a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm index 1c8e6ba0e85..3aff6ee5d9e 100644 --- a/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm +++ b/src/widgets/widgets/qmaccocoaviewcontainer_mac.mm @@ -85,7 +85,7 @@ developer to provide the autorelease pool. The following is a snippet of subclassing QMacCocoaViewContainer to wrap a NSSearchField. - \snippet examples/mainwindows/macmainwindow/macmainwindow.mm 0 + \snippet mainwindows/macmainwindow/macmainwindow.mm 0 */ diff --git a/src/widgets/widgets/qmacnativewidget_mac.mm b/src/widgets/widgets/qmacnativewidget_mac.mm index 7974e93d884..e608b4a7564 100644 --- a/src/widgets/widgets/qmacnativewidget_mac.mm +++ b/src/widgets/widgets/qmacnativewidget_mac.mm @@ -70,11 +70,11 @@ Here is an example of putting a QPushButton into a NSWindow: - \snippet doc/src/snippets/qmacnativewidget/main.mm 0 + \snippet qmacnativewidget/main.mm 0 On Carbon, this would do the equivalent: - \snippet doc/src/snippets/qmacnativewidget/main.mm 1 + \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 diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 7607f2f238c..efd5db07ab4 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -261,7 +261,7 @@ void QMainWindowPrivate::init() An example of how to create menus follows: - \snippet examples/mainwindows/application/mainwindow.cpp 26 + \snippet mainwindows/application/mainwindow.cpp 26 The \c createPopupMenu() function creates popup menus when the main window receives context menu events. The default @@ -288,7 +288,7 @@ void QMainWindowPrivate::init() An example of toolbar creation follows: - \snippet examples/mainwindows/application/mainwindow.cpp 29 + \snippet mainwindows/application/mainwindow.cpp 29 \section2 Creating Dock Widgets @@ -312,7 +312,7 @@ void QMainWindowPrivate::init() We give an example of how to create and add dock widgets to a main window: - \snippet doc/src/snippets/mainwindowsnippet.cpp 0 + \snippet mainwindowsnippet.cpp 0 \section2 The Status Bar @@ -485,7 +485,7 @@ void QMainWindow::setToolButtonStyle(Qt::ToolButtonStyle toolButtonStyle) can then share among all the Mac windows. Create a parent-less menu bar this way: - \snippet doc/src/snippets/code/src_gui_widgets_qmenubar.cpp 1 + \snippet code/src_gui_widgets_qmenubar.cpp 1 \sa setMenuBar() */ @@ -1213,7 +1213,7 @@ Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const To save the geometry when the window closes, you can implement a close event like this: - \snippet doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp 0 + \snippet code/src_gui_widgets_qmainwindow.cpp 0 \sa restoreState(), QWidget::saveGeometry(), QWidget::restoreGeometry() */ @@ -1237,7 +1237,7 @@ QByteArray QMainWindow::saveState(int version) const To restore geometry saved using QSettings, you can use code like this: - \snippet doc/src/snippets/code/src_gui_widgets_qmainwindow.cpp 1 + \snippet code/src_gui_widgets_qmainwindow.cpp 1 \sa saveState(), QWidget::saveGeometry(), QWidget::restoreGeometry(), restoreDockWidget() diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index eb483ac0fed..b859fc437e8 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -53,7 +53,7 @@ applications, but can also be placed in any layout. The following code adds an area to a main window: - \snippet doc/src/snippets/mdiareasnippets.cpp 0 + \snippet mdiareasnippets.cpp 0 Unlike the window managers for top-level windows, all window flags (Qt::WindowFlags) are supported by QMdiArea as long as the flags @@ -1929,7 +1929,7 @@ void QMdiArea::activatePreviousSubWindow() \note Once the subwindow has been added, its parent will be the \e{viewport widget} of the QMdiArea. - \snippet doc/src/snippets/mdiareasnippets.cpp 1 + \snippet mdiareasnippets.cpp 1 When you create your own subwindow, you must set the Qt::WA_DeleteOnClose widget attribute if you want the window to be diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 2abd4ceef71..fccb062e07b 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -1990,11 +1990,11 @@ void QMenu::popup(const QPoint &p, QAction *atAction) In most situations you'll want to specify the position yourself, for example, the current mouse position: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 0 + \snippet code/src_gui_widgets_qmenu.cpp 0 or aligned to a widget: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 1 + \snippet code/src_gui_widgets_qmenu.cpp 1 or in reaction to a QMouseEvent *e: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 2 + \snippet code/src_gui_widgets_qmenu.cpp 2 */ QAction *QMenu::exec() { @@ -2022,11 +2022,11 @@ QAction *QMenu::exec() Common usage is to position the menu at the current mouse position: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 3 + \snippet code/src_gui_widgets_qmenu.cpp 3 or aligned to a widget: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 4 + \snippet code/src_gui_widgets_qmenu.cpp 4 or in reaction to a QMouseEvent *e: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 5 + \snippet code/src_gui_widgets_qmenu.cpp 5 When positioning a menu with exec() or popup(), bear in mind that you cannot rely on the menu's current size(). For performance @@ -2074,7 +2074,7 @@ QAction *QMenu::exec(const QPoint &p, QAction *action) (normally because the user pressed Esc). This is equivalent to: - \snippet doc/src/snippets/code/src_gui_widgets_qmenu.cpp 6 + \snippet code/src_gui_widgets_qmenu.cpp 6 \sa popup(), QWidget::mapToGlobal() */ diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index c9818e056c8..104424cabf3 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -586,7 +586,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti menu items with addMenu(). For example, asuming that \c menubar is a pointer to a QMenuBar and \c fileMenu is a pointer to a QMenu, the following statement inserts the menu into the menu bar: - \snippet doc/src/snippets/code/src_gui_widgets_qmenubar.cpp 0 + \snippet code/src_gui_widgets_qmenubar.cpp 0 The ampersand in the menu item's text sets Alt+F as a shortcut for this menu. (You can use "\&\&" to get a real ampersand in the menu @@ -605,7 +605,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti Example (from the \l{mainwindows/menus}{Menus} example): - \snippet examples/mainwindows/menus/mainwindow.cpp 9 + \snippet mainwindows/menus/mainwindow.cpp 9 Menu items may be removed with removeAction(). @@ -619,7 +619,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti of menu bars and their behavior when the user interacts with them. For example, Windows systems are often configured so that the underlined character mnemonics that indicate keyboard shortcuts - for items in the menu bar are only shown when the \gui{Alt} key is + for items in the menu bar are only shown when the \uicontrol{Alt} key is pressed. \table @@ -628,13 +628,13 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti Plastique widget style. \li The \l{QPlastiqueStyle}{Plastique widget style}, like most - other styles, handles the \gui{Help} menu in the same way as it + other styles, handles the \uicontrol{Help} menu in the same way as it handles any other menu. \row \li \inlineimage motif-menubar.png A menu bar shown in the Motif widget style. - \li The \l{QMotifStyle}{Motif widget style} treats \gui{Help} menus + \li The \l{QMotifStyle}{Motif widget style} treats \uicontrol{Help} menus in a special way, placing them at right-hand end of the menu bar. \endtable @@ -677,7 +677,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti bar, you must create a menu bar that does not have a parent. Create a parent-less menu bar this way: - \snippet doc/src/snippets/code/src_gui_widgets_qmenubar.cpp 1 + \snippet code/src_gui_widgets_qmenubar.cpp 1 \b{Note:} Do \e{not} call QMainWindow::menuBar() to create the shared menu bar, because that menu bar will have the QMainWindow diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index fad2d4e7473..dad0a6b7b61 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -2039,7 +2039,7 @@ bool QPlainTextEdit::focusNextPrevChild(bool next) Information about the event is passed in the \a event object. - \snippet doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp 0 + \snippet code/src_gui_widgets_qplaintextedit.cpp 0 */ void QPlainTextEdit::contextMenuEvent(QContextMenuEvent *e) { @@ -2479,7 +2479,7 @@ QTextCharFormat QPlainTextEdit::currentCharFormat() const It is equivalent to - \snippet doc/src/snippets/code/src_gui_widgets_qplaintextedit.cpp 1 + \snippet code/src_gui_widgets_qplaintextedit.cpp 1 */ void QPlainTextEdit::insertPlainText(const QString &text) { @@ -2528,10 +2528,10 @@ void QPlainTextEdit::print(QPagedPaintDevice *printer) const #endif /*! \property QPlainTextEdit::tabChangesFocus - \brief whether \gui Tab changes focus or is accepted as input + \brief whether \uicontrol Tab changes focus or is accepted as input In some occasions text edits should not allow the user to input - tabulators or change indentation using the \gui Tab key, as this breaks + tabulators or change indentation using the \uicontrol Tab key, as this breaks the focus chain. The default is false. */ diff --git a/src/widgets/widgets/qpushbutton.cpp b/src/widgets/widgets/qpushbutton.cpp index 291e3548a24..98539241829 100644 --- a/src/widgets/widgets/qpushbutton.cpp +++ b/src/widgets/widgets/qpushbutton.cpp @@ -91,7 +91,7 @@ QT_BEGIN_NAMESPACE preceding the preferred character with an ampersand in the text. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qpushbutton.cpp 0 + \snippet code/src_gui_widgets_qpushbutton.cpp 0 In this example the shortcut is \e{Alt+D}. See the \l {QShortcut#mnemonic}{QShortcut} documentation for details (to diff --git a/src/widgets/widgets/qradiobutton.cpp b/src/widgets/widgets/qradiobutton.cpp index 11cd89bca20..15dbdd4284d 100644 --- a/src/widgets/widgets/qradiobutton.cpp +++ b/src/widgets/widgets/qradiobutton.cpp @@ -105,7 +105,7 @@ void QRadioButtonPrivate::init() can be specified by preceding the preferred character with an ampersand in the text. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qradiobutton.cpp 0 + \snippet code/src_gui_widgets_qradiobutton.cpp 0 In this example the shortcut is \e{Alt+c}. See the \l {QShortcut#mnemonic}{QShortcut} documentation for details (to diff --git a/src/widgets/widgets/qrubberband.cpp b/src/widgets/widgets/qrubberband.cpp index 0f95f0188a3..8173ffe657a 100644 --- a/src/widgets/widgets/qrubberband.cpp +++ b/src/widgets/widgets/qrubberband.cpp @@ -112,7 +112,7 @@ void QRubberBand::initStyleOption(QStyleOptionRubberBand *option) const setGeometry(), move() or resize() to position and size it. A common pattern is to do this in conjunction with mouse events. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qrubberband.cpp 0 + \snippet code/src_gui_widgets_qrubberband.cpp 0 If you pass a parent to QRubberBand's constructor, the rubber band will display only inside its parent, but stays on top of other child widgets. diff --git a/src/widgets/widgets/qscrollarea.cpp b/src/widgets/widgets/qscrollarea.cpp index 84be2d569bc..99b4151d8cd 100644 --- a/src/widgets/widgets/qscrollarea.cpp +++ b/src/widgets/widgets/qscrollarea.cpp @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE widget can be viewed. The child widget must be specified with setWidget(). For example: - \snippet doc/src/snippets/code/src_gui_widgets_qscrollarea.cpp 0 + \snippet code/src_gui_widgets_qscrollarea.cpp 0 The code above creates a scroll area (shown in the images below) containing an image label. When scaling the image, the scroll area diff --git a/src/widgets/widgets/qspinbox.cpp b/src/widgets/widgets/qspinbox.cpp index 7dcaead2f44..cb88ca1b79c 100644 --- a/src/widgets/widgets/qspinbox.cpp +++ b/src/widgets/widgets/qspinbox.cpp @@ -168,9 +168,9 @@ public: for a custom spin box that allows the user to enter icon sizes (e.g., "32 x 32"): - \snippet examples/widgets/icons/iconsizespinbox.cpp 1 + \snippet widgets/icons/iconsizespinbox.cpp 1 \codeline - \snippet examples/widgets/icons/iconsizespinbox.cpp 2 + \snippet widgets/icons/iconsizespinbox.cpp 2 See the \l{widgets/icons}{Icons} example for the full source code. @@ -238,7 +238,7 @@ void QSpinBox::setValue(int value) Typical use is to display a unit of measurement or a currency symbol. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 0 + \snippet code/src_gui_widgets_qspinbox.cpp 0 To turn off the prefix display, set this property to an empty string. The default is no prefix. The prefix is not displayed when @@ -274,7 +274,7 @@ void QSpinBox::setPrefix(const QString &prefix) use is to display a unit of measurement or a currency symbol. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 1 + \snippet code/src_gui_widgets_qspinbox.cpp 1 To turn off the suffix display, set this property to an empty string. The default is no suffix. The suffix is not displayed for @@ -405,9 +405,9 @@ void QSpinBox::setMaximum(int maximum) Convenience function to set the \a minimum, and \a maximum values with a single function call. - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 2 + \snippet code/src_gui_widgets_qspinbox.cpp 2 is equivalent to: - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 3 + \snippet code/src_gui_widgets_qspinbox.cpp 3 \sa minimum maximum */ @@ -610,7 +610,7 @@ void QDoubleSpinBox::setValue(double value) Typical use is to display a unit of measurement or a currency symbol. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 4 + \snippet code/src_gui_widgets_qspinbox.cpp 4 To turn off the prefix display, set this property to an empty string. The default is no prefix. The prefix is not displayed when @@ -644,7 +644,7 @@ void QDoubleSpinBox::setPrefix(const QString &prefix) use is to display a unit of measurement or a currency symbol. For example: - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 5 + \snippet code/src_gui_widgets_qspinbox.cpp 5 To turn off the suffix display, set this property to an empty string. The default is no suffix. The suffix is not displayed for @@ -784,9 +784,9 @@ void QDoubleSpinBox::setMaximum(double maximum) Note: The maximum and minimum values will be rounded to match the decimals property. - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 6 + \snippet code/src_gui_widgets_qspinbox.cpp 6 is equivalent to: - \snippet doc/src/snippets/code/src_gui_widgets_qspinbox.cpp 7 + \snippet code/src_gui_widgets_qspinbox.cpp 7 \sa minimum maximum */ diff --git a/src/widgets/widgets/qsplashscreen.cpp b/src/widgets/widgets/qsplashscreen.cpp index 5a7d6376cad..f3a19c88ecb 100644 --- a/src/widgets/widgets/qsplashscreen.cpp +++ b/src/widgets/widgets/qsplashscreen.cpp @@ -94,9 +94,9 @@ public: some initialization tasks are performed before the application's main window is shown: - \snippet doc/src/snippets/qsplashscreen/main.cpp 0 + \snippet qsplashscreen/main.cpp 0 \dots - \snippet doc/src/snippets/qsplashscreen/main.cpp 1 + \snippet qsplashscreen/main.cpp 1 The user can hide the splash screen by clicking on it with the mouse. Since the splash screen is typically displayed before the @@ -107,7 +107,7 @@ public: for example, announcing connections established or modules loaded as the application starts up: - \snippet doc/src/snippets/code/src_gui_widgets_qsplashscreen.cpp 0 + \snippet code/src_gui_widgets_qsplashscreen.cpp 0 QSplashScreen supports this with the showMessage() function. If you wish to do your own drawing you can get a pointer to the pixmap diff --git a/src/widgets/widgets/qsplitter.cpp b/src/widgets/widgets/qsplitter.cpp index 17e1c39cee8..126f819541e 100644 --- a/src/widgets/widgets/qsplitter.cpp +++ b/src/widgets/widgets/qsplitter.cpp @@ -84,12 +84,12 @@ QT_BEGIN_NAMESPACE reimplement QSplitter::createHandle() to instantiate the custom splitter handle. For example, a minimum QSplitter subclass might look like this: - \snippet doc/src/snippets/splitterhandle/splitter.h 0 + \snippet splitterhandle/splitter.h 0 The \l{QSplitter::}{createHandle()} implementation simply constructs a custom splitter handle, called \c Splitter in this example: - \snippet doc/src/snippets/splitterhandle/splitter.cpp 1 + \snippet splitterhandle/splitter.cpp 1 Information about a given handle can be obtained using functions like orientation() and opaqueResize(), and is retrieved from its parent splitter. @@ -100,7 +100,7 @@ QT_BEGIN_NAMESPACE needs to perform. A simple subclass might only provide a paintEvent() implementation: - \snippet doc/src/snippets/splitterhandle/splitter.cpp 0 + \snippet splitterhandle/splitter.cpp 0 In this example, a predefined gradient is set up differently depending on the orientation of the handle. QSplitterHandle provides a reasonable @@ -888,7 +888,7 @@ QSplitterLayoutStruct *QSplitterPrivate::insertWidget(int index, QWidget *w) The following example will show a QListView, QTreeView, and QTextEdit side by side, with two splitter handles: - \snippet doc/src/snippets/splitter/splitter.cpp 0 + \snippet splitter/splitter.cpp 0 If a widget is already inside a QSplitter when insertWidget() or addWidget() is called, it will move to the new position. This can be used @@ -1569,7 +1569,7 @@ static const qint32 SplitterMagic = 0xff; for a future session. A version number is stored as part of the data. Here is an example: - \snippet doc/src/snippets/splitter/splitter.cpp 1 + \snippet splitter/splitter.cpp 1 \sa restoreState() */ @@ -1604,7 +1604,7 @@ QByteArray QSplitter::saveState() const Restore the splitters's state: - \snippet doc/src/snippets/splitter/splitter.cpp 2 + \snippet splitter/splitter.cpp 2 A failure to restore the splitter's layout may result from either invalid or out-of-date data in the supplied byte array. @@ -1657,7 +1657,7 @@ bool QSplitter::restoreState(const QByteArray &state) This function is provided for convenience. It is equivalent to - \snippet doc/src/snippets/code/src_gui_widgets_qsplitter.cpp 0 + \snippet code/src_gui_widgets_qsplitter.cpp 0 \sa setSizes(), widget() */ diff --git a/src/widgets/widgets/qstackedwidget.cpp b/src/widgets/widgets/qstackedwidget.cpp index 5406f5dcf5b..e239f863457 100644 --- a/src/widgets/widgets/qstackedwidget.cpp +++ b/src/widgets/widgets/qstackedwidget.cpp @@ -74,16 +74,16 @@ public: Like QStackedLayout, QStackedWidget can be constructed and populated with a number of child widgets ("pages"): - \snippet doc/src/snippets/qstackedwidget/main.cpp 0 - \snippet doc/src/snippets/qstackedwidget/main.cpp 2 - \snippet doc/src/snippets/qstackedwidget/main.cpp 3 + \snippet qstackedwidget/main.cpp 0 + \snippet qstackedwidget/main.cpp 2 + \snippet qstackedwidget/main.cpp 3 QStackedWidget provides no intrinsic means for the user to switch page. This is typically done through a QComboBox or a QListWidget that stores the titles of the QStackedWidget's pages. For example: - \snippet doc/src/snippets/qstackedwidget/main.cpp 1 + \snippet qstackedwidget/main.cpp 1 When populating a stacked widget, the widgets are added to an internal list. The indexOf() function returns the index of a diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp index 4b9242499cd..2b17d7fb831 100644 --- a/src/widgets/widgets/qstatusbar.cpp +++ b/src/widgets/widgets/qstatusbar.cpp @@ -186,12 +186,12 @@ QRect QStatusBarPrivate::messageRect() const Use the showMessage() slot to display a \e temporary message: - \snippet examples/mainwindows/dockwidgets/mainwindow.cpp 8 + \snippet mainwindows/dockwidgets/mainwindow.cpp 8 To remove a temporary message, use the clearMessage() slot, or set a time limit when calling showMessage(). For example: - \snippet examples/mainwindows/dockwidgets/mainwindow.cpp 3 + \snippet mainwindows/dockwidgets/mainwindow.cpp 3 Use the currentMessage() function to retrieve the temporary message currently shown. The QStatusBar class also provide the @@ -205,7 +205,7 @@ QRect QStatusBarPrivate::messageRect() const addPermanentWidget() function. Use the removeWidget() function to remove such messages from the status bar. - \snippet doc/src/snippets/code/src_gui_widgets_qstatusbar.cpp 0 + \snippet code/src_gui_widgets_qstatusbar.cpp 0 By default QStatusBar provides a QSizeGrip in the lower-right corner. You can disable it using the setSizeGripEnabled() diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp index 261b96f8af3..b8ffced6bba 100644 --- a/src/widgets/widgets/qtextbrowser.cpp +++ b/src/widgets/widgets/qtextbrowser.cpp @@ -1170,7 +1170,7 @@ QUrl QTextBrowser::historyUrl(int i) const \row \li \a{i} > 0 \li \l forward() history \endtable - \snippet doc/src/snippets/code/src_gui_widgets_qtextbrowser.cpp 0 + \snippet code/src_gui_widgets_qtextbrowser.cpp 0 \since 4.4 */ diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 217fda61dc2..7a7b977b894 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -472,12 +472,12 @@ void QTextEditPrivate::_q_ensureVisible(const QRectF &_rect) For example, to allow the user to drag and drop an image onto a QTextEdit, you could the implement these functions in the following way: - \snippet doc/src/snippets/textdocument-imagedrop/textedit.cpp 0 + \snippet textdocument-imagedrop/textedit.cpp 0 We add support for image MIME types by returning true. For all other MIME types, we use the default implementation. - \snippet doc/src/snippets/textdocument-imagedrop/textedit.cpp 1 + \snippet textdocument-imagedrop/textedit.cpp 1 We unpack the image from the QVariant held by the MIME source and insert it into the document as a resource. @@ -1583,7 +1583,7 @@ bool QTextEdit::focusNextPrevChild(bool next) Information about the event is passed in the \a event object. - \snippet doc/src/snippets/code/src_gui_widgets_qtextedit.cpp 0 + \snippet code/src_gui_widgets_qtextedit.cpp 0 */ void QTextEdit::contextMenuEvent(QContextMenuEvent *e) { @@ -2143,7 +2143,7 @@ void QTextEdit::setAutoFormatting(AutoFormatting features) It is equivalent to - \snippet doc/src/snippets/code/src_gui_widgets_qtextedit.cpp 1 + \snippet code/src_gui_widgets_qtextedit.cpp 1 */ void QTextEdit::insertPlainText(const QString &text) { @@ -2157,7 +2157,7 @@ void QTextEdit::insertPlainText(const QString &text) It is equivalent to: - \snippet doc/src/snippets/code/src_gui_widgets_qtextedit.cpp 2 + \snippet code/src_gui_widgets_qtextedit.cpp 2 \note When using this function with a style sheet, the style sheet will only apply to the current block in the document. In order to apply a style @@ -2273,10 +2273,10 @@ void QTextEdit::print(QPagedPaintDevice *printer) const #endif /*! \property QTextEdit::tabChangesFocus - \brief whether \gui Tab changes focus or is accepted as input + \brief whether \uicontrol Tab changes focus or is accepted as input In some occasions text edits should not allow the user to input - tabulators or change indentation using the \gui Tab key, as this breaks + tabulators or change indentation using the \uicontrol Tab key, as this breaks the focus chain. The default is false. */ From 03d81b0100af4bb9d44a9fa9de55bb4e9e6a0f5d Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Tue, 8 May 2012 10:28:29 +0200 Subject: [PATCH 08/13] Doc: Modularize QtOpenGL documentation. This change moves the snippets to the modularized directories. Change-Id: Ifcf22fa3f234681f851d1e7eed5fe44e2e223ffd Reviewed-by: Marius Storm-Olsen --- src/opengl/doc/qtopengl.qdocconf | 92 +++++++++++++++++++ .../doc/snippets/code/doc_src_qtopengl.cpp | 43 +++++++++ .../doc/snippets/code/doc_src_qtopengl.pro | 43 +++++++++ .../doc}/snippets/code/src_opengl_qgl.cpp | 0 .../snippets/code/src_opengl_qglcolormap.cpp | 0 .../code/src_opengl_qglpixelbuffer.cpp | 0 .../code/src_opengl_qglshaderprogram.cpp | 0 src/opengl/doc/src/qtopengl.qdoc | 70 ++++++++++++++ src/opengl/qgl.cpp | 18 ++-- src/opengl/qglcolormap.cpp | 2 +- src/opengl/qglpixelbuffer.cpp | 4 +- src/opengl/qglshaderprogram.cpp | 6 +- 12 files changed, 263 insertions(+), 15 deletions(-) create mode 100644 src/opengl/doc/qtopengl.qdocconf create mode 100644 src/opengl/doc/snippets/code/doc_src_qtopengl.cpp create mode 100644 src/opengl/doc/snippets/code/doc_src_qtopengl.pro rename {doc/src => src/opengl/doc}/snippets/code/src_opengl_qgl.cpp (100%) rename {doc/src => src/opengl/doc}/snippets/code/src_opengl_qglcolormap.cpp (100%) rename {doc/src => src/opengl/doc}/snippets/code/src_opengl_qglpixelbuffer.cpp (100%) rename {doc/src => src/opengl/doc}/snippets/code/src_opengl_qglshaderprogram.cpp (100%) create mode 100644 src/opengl/doc/src/qtopengl.qdoc diff --git a/src/opengl/doc/qtopengl.qdocconf b/src/opengl/doc/qtopengl.qdocconf new file mode 100644 index 00000000000..f631f03b90e --- /dev/null +++ b/src/opengl/doc/qtopengl.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtOpenGL +description = Qt OpenGL Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qtopengl +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtOpenGL + +qhp.QtOpenGL.file = qtopengl.qhp +qhp.QtOpenGL.namespace = org.qt-project.qtopengl.500 +qhp.QtOpenGL.virtualFolder = qdoc +qhp.QtOpenGL.indexTitle = Qt OpenGL Reference Documentation +qhp.QtOpenGL.indexRoot = + +qhp.QtOpenGL.filterAttributes = qtopengl 5.0.0 qtrefdoc +qhp.QtOpenGL.customFilters.Qt.name = QtOpenGL 5.0.0 +qhp.QtOpenGL.customFilters.Qt.filterAttributes = qtopengl 5.0.0 +qhp.QtOpenGL.subprojects = classes overviews examples +qhp.QtOpenGL.subprojects.classes.title = Classes +qhp.QtOpenGL.subprojects.classes.indexTitle = Qt OpenGL's Classes +qhp.QtOpenGL.subprojects.classes.selectors = class fake:headerfile +qhp.QtOpenGL.subprojects.classes.sortPages = true +qhp.QtOpenGL.subprojects.overviews.title = Overviews +qhp.QtOpenGL.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtOpenGL.subprojects.overviews.selectors = fake:page,group,module +qhp.QtOpenGL.subprojects.examples.title = Qt OpenGL Examples +qhp.QtOpenGL.subprojects.examples.indexTitle = Qt OpenGL Examples +qhp.QtOpenGL.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qtopengl +tagfile = ../../../doc/qtopengl/qtopengl.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore qtgui qtwidgets + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/src/opengl/doc/snippets/code/doc_src_qtopengl.cpp b/src/opengl/doc/snippets/code/doc_src_qtopengl.cpp new file mode 100644 index 00000000000..d14a1ede1af --- /dev/null +++ b/src/opengl/doc/snippets/code/doc_src_qtopengl.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +#include +//! [0] diff --git a/src/opengl/doc/snippets/code/doc_src_qtopengl.pro b/src/opengl/doc/snippets/code/doc_src_qtopengl.pro new file mode 100644 index 00000000000..8c12b35abd3 --- /dev/null +++ b/src/opengl/doc/snippets/code/doc_src_qtopengl.pro @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [1] +QT += opengl +#! [1] diff --git a/doc/src/snippets/code/src_opengl_qgl.cpp b/src/opengl/doc/snippets/code/src_opengl_qgl.cpp similarity index 100% rename from doc/src/snippets/code/src_opengl_qgl.cpp rename to src/opengl/doc/snippets/code/src_opengl_qgl.cpp diff --git a/doc/src/snippets/code/src_opengl_qglcolormap.cpp b/src/opengl/doc/snippets/code/src_opengl_qglcolormap.cpp similarity index 100% rename from doc/src/snippets/code/src_opengl_qglcolormap.cpp rename to src/opengl/doc/snippets/code/src_opengl_qglcolormap.cpp diff --git a/doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp b/src/opengl/doc/snippets/code/src_opengl_qglpixelbuffer.cpp similarity index 100% rename from doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp rename to src/opengl/doc/snippets/code/src_opengl_qglpixelbuffer.cpp diff --git a/doc/src/snippets/code/src_opengl_qglshaderprogram.cpp b/src/opengl/doc/snippets/code/src_opengl_qglshaderprogram.cpp similarity index 100% rename from doc/src/snippets/code/src_opengl_qglshaderprogram.cpp rename to src/opengl/doc/snippets/code/src_opengl_qglshaderprogram.cpp diff --git a/src/opengl/doc/src/qtopengl.qdoc b/src/opengl/doc/src/qtopengl.qdoc new file mode 100644 index 00000000000..0fa28eed8c6 --- /dev/null +++ b/src/opengl/doc/src/qtopengl.qdoc @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \module QtOpenGL + \title QtOpenGL Module + \ingroup modules + \ingroup technology-apis + + \brief The QtOpenGL module offers classes that make it easy to + use OpenGL in Qt applications. + + OpenGL is a standard API for rendering 3D graphics. OpenGL only + deals with 3D rendering and provides little or no support for GUI + programming issues. The user interface for an OpenGL application + must be created with another toolkit, such as Motif on the X + platform, Microsoft Foundation Classes (MFC) under Windows, or Qt + on both platforms. + + \note OpenGL is a trademark of Silicon Graphics, Inc. in + the United States and other countries. + + The Qt OpenGL module makes it easy to use OpenGL in Qt applications. + It provides an OpenGL widget class that can be used just like any + other Qt widget, except that it opens an OpenGL display buffer where + you can use the OpenGL API to render the contents. + + To include the definitions of the module's classes, use the + following directive: + + \snippet code/doc_src_qtopengl.cpp 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet code/doc_src_qtopengl.pro 1 + + The Qt OpenGL module is implemented as a platform-independent Qt/C++ + wrapper around the platform-dependent GLX (version 1.3 or later), + WGL, or AGL C APIs. Although the basic functionality provided is very + similar to Mark Kilgard's GLUT library, applications using the Qt + OpenGL module can take advantage of the whole Qt API for + non-OpenGL-specific GUI functionality. +*/ + + diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index e306ea44760..2801d241ee3 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -208,15 +208,15 @@ QGLSignalProxy *QGLSignalProxy::instance() There are different ways to define the display characteristics of a rendering context. One is to create a QGLFormat and make it the default for the entire application: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 0 + \snippet code/src_opengl_qgl.cpp 0 Or you can specify the desired format when creating an object of your QGLWidget subclass: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 1 + \snippet code/src_opengl_qgl.cpp 1 After the widget has been created, you can find out which of the requested features the system was able to provide: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 2 + \snippet code/src_opengl_qgl.cpp 2 \legalese OpenGL is a trademark of Silicon Graphics, Inc. in the @@ -305,7 +305,7 @@ QGLFormat::QGLFormat() This constructor makes it easy to specify a certain desired format in classes derived from QGLWidget, for example: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 3 + \snippet code/src_opengl_qgl.cpp 3 Note that there are QGL::FormatOption values to turn format settings both on and off, e.g. QGL::DepthBuffer and QGL::NoDepthBuffer, @@ -1323,7 +1323,7 @@ QGLFormat QGLFormat::defaultFormat() Sets a new default QGLFormat for the application to \a f. For example, to set single buffering as the default instead of double buffering, your main() might contain code like this: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 4 + \snippet code/src_opengl_qgl.cpp 4 \sa defaultFormat() */ @@ -1368,13 +1368,13 @@ QGLFormat QGLFormat::defaultOverlayFormat() For example, to get a double buffered overlay context (if available), use code like this: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 5 + \snippet code/src_opengl_qgl.cpp 5 As usual, you can find out after widget creation whether the underlying OpenGL system was able to provide the requested specification: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 6 + \snippet code/src_opengl_qgl.cpp 6 \sa defaultOverlayFormat() */ @@ -2808,7 +2808,7 @@ int QGLContext::textureCacheLimit() Call create() to create a new GL context that tries to match the new format. - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 7 + \snippet code/src_opengl_qgl.cpp 7 \sa format(), reset(), create() */ @@ -3226,7 +3226,7 @@ void QGLContextPrivate::setCurrentContext(QGLContext *context) Here is a rough outline of how a QGLWidget subclass might look: - \snippet doc/src/snippets/code/src_opengl_qgl.cpp 8 + \snippet code/src_opengl_qgl.cpp 8 If you need to trigger a repaint from places other than paintGL() (a typical example is when using \link QTimer timers\endlink to diff --git a/src/opengl/qglcolormap.cpp b/src/opengl/qglcolormap.cpp index 6698de52b2e..92552fe41cf 100644 --- a/src/opengl/qglcolormap.cpp +++ b/src/opengl/qglcolormap.cpp @@ -69,7 +69,7 @@ optimization. Example of use: - \snippet doc/src/snippets/code/src_opengl_qglcolormap.cpp 0 + \snippet code/src_opengl_qglcolormap.cpp 0 \sa QGLWidget::setColormap(), QGLWidget::colormap() */ diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp index bccac7e9a09..ca7568d78e8 100644 --- a/src/opengl/qglpixelbuffer.cpp +++ b/src/opengl/qglpixelbuffer.cpp @@ -257,7 +257,7 @@ bool QGLPixelBuffer::doneCurrent() Example: - \snippet doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp 0 + \snippet code/src_opengl_qglpixelbuffer.cpp 0 \warning This function uses the \c {render_texture} extension, which is currently not supported under X11. An alternative that @@ -292,7 +292,7 @@ bool QGLPixelBuffer::doneCurrent() Example: - \snippet doc/src/snippets/code/src_opengl_qglpixelbuffer.cpp 1 + \snippet code/src_opengl_qglpixelbuffer.cpp 1 An alternative on Windows and Mac OS X systems that support the \c render_texture extension is to use bindToDynamicTexture() to diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp index ab5fa6a7479..e73e63f6a3e 100644 --- a/src/opengl/qglshaderprogram.cpp +++ b/src/opengl/qglshaderprogram.cpp @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE program is activated in the current QGLContext by calling QGLShaderProgram::bind(): - \snippet doc/src/snippets/code/src_opengl_qglshaderprogram.cpp 0 + \snippet code/src_opengl_qglshaderprogram.cpp 0 \section1 Writing portable shaders @@ -97,12 +97,12 @@ QT_BEGIN_NAMESPACE \section1 Simple shader example - \snippet doc/src/snippets/code/src_opengl_qglshaderprogram.cpp 1 + \snippet code/src_opengl_qglshaderprogram.cpp 1 With the above shader program active, we can draw a green triangle as follows: - \snippet doc/src/snippets/code/src_opengl_qglshaderprogram.cpp 2 + \snippet code/src_opengl_qglshaderprogram.cpp 2 \section1 Binary shaders and programs From 1794c3b7a1f2b27aaadfc20cea587284e336080e Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Tue, 8 May 2012 11:13:18 +0200 Subject: [PATCH 09/13] Doc: Modularize QtPrintSupport documentation. This change moves the snippets and images to the modularized directories. Change-Id: Ib8f8556bcef13593ee40ac1122d765ed307ecb93 Reviewed-by: Marius Storm-Olsen --- .../dialogs/qabstractprintdialog.cpp | 2 +- .../plastique-printdialog-properties.png | Bin 0 -> 27720 bytes .../doc/images/plastique-printdialog.png | Bin 0 -> 44150 bytes src/printsupport/doc/images/printer-rects.png | Bin 0 -> 30319 bytes src/printsupport/doc/qtprintsupport.qdocconf | 92 ++++++++++++++++++ .../snippets/code/doc_src_qtprintsupport.cpp | 43 ++++++++ .../snippets/code/doc_src_qtprintsupport.pro | 43 ++++++++ .../src_gui_dialogs_qabstractprintdialog.cpp | 0 .../snippets/printing-qprinter/errors.cpp | 0 .../snippets/printing-qprinter/object.cpp | 0 .../doc}/snippets/widgetprinting.cpp | 0 .../printsupport/doc/src}/printing.qdoc | 6 +- .../printsupport/doc/src}/qtprintsupport.qdoc | 4 +- src/printsupport/kernel/qprinter.cpp | 2 +- 14 files changed, 185 insertions(+), 7 deletions(-) create mode 100644 src/printsupport/doc/images/plastique-printdialog-properties.png create mode 100644 src/printsupport/doc/images/plastique-printdialog.png create mode 100644 src/printsupport/doc/images/printer-rects.png create mode 100644 src/printsupport/doc/qtprintsupport.qdocconf create mode 100644 src/printsupport/doc/snippets/code/doc_src_qtprintsupport.cpp create mode 100644 src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro rename {doc/src => src/printsupport/doc}/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp (100%) rename {doc/src => src/printsupport/doc}/snippets/printing-qprinter/errors.cpp (100%) rename {doc/src => src/printsupport/doc}/snippets/printing-qprinter/object.cpp (100%) rename {doc/src => src/printsupport/doc}/snippets/widgetprinting.cpp (100%) rename {doc/src/printsupport => src/printsupport/doc/src}/printing.qdoc (97%) rename {doc/src/printsupport => src/printsupport/doc/src}/qtprintsupport.qdoc (90%) diff --git a/src/printsupport/dialogs/qabstractprintdialog.cpp b/src/printsupport/dialogs/qabstractprintdialog.cpp index 4e3586f646f..841a9e688e7 100644 --- a/src/printsupport/dialogs/qabstractprintdialog.cpp +++ b/src/printsupport/dialogs/qabstractprintdialog.cpp @@ -379,7 +379,7 @@ void QAbstractPrintDialogPrivate::setPrinter(QPrinter *newPrinter) Typically, QPrintDialog objects are constructed with a QPrinter object, and executed using the exec() function. - \snippet doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp 0 + \snippet code/src_gui_dialogs_qabstractprintdialog.cpp 0 If the dialog is accepted by the user, the QPrinter object is correctly configured for printing. diff --git a/src/printsupport/doc/images/plastique-printdialog-properties.png b/src/printsupport/doc/images/plastique-printdialog-properties.png new file mode 100644 index 0000000000000000000000000000000000000000..38c1ae70385fc8a5228f6569c81abf073c82ef16 GIT binary patch literal 27720 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 TfG85L00000NkvXXu0mjf#)}bW literal 0 HcmV?d00001 diff --git a/src/printsupport/doc/images/plastique-printdialog.png b/src/printsupport/doc/images/plastique-printdialog.png new file mode 100644 index 0000000000000000000000000000000000000000..3f8af01790644eecedd5f2bea2849e893309001a GIT binary patch literal 44150 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 z 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 D1R0Tm literal 0 HcmV?d00001 diff --git a/src/printsupport/doc/images/printer-rects.png b/src/printsupport/doc/images/printer-rects.png new file mode 100644 index 0000000000000000000000000000000000000000..8ebea60da8d3db2f58ece10d6e29612e04dc5ab3 GIT binary patch literal 30319 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%0A~;&@@o+84aEDx!FI9! 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 literal 0 HcmV?d00001 diff --git a/src/printsupport/doc/qtprintsupport.qdocconf b/src/printsupport/doc/qtprintsupport.qdocconf new file mode 100644 index 00000000000..a21639bbc90 --- /dev/null +++ b/src/printsupport/doc/qtprintsupport.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtPrintSupport +description = Qt Print Support Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qtprintsupport +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtPrintSupport + +qhp.QtPrintSupport.file = qtprintsupport.qhp +qhp.QtPrintSupport.namespace = org.qt-project.qtprintsupport.500 +qhp.QtPrintSupport.virtualFolder = qdoc +qhp.QtPrintSupport.indexTitle = Qt Print Support Reference Documentation +qhp.QtPrintSupport.indexRoot = + +qhp.QtPrintSupport.filterAttributes = qtprintsupport 5.0.0 qtrefdoc +qhp.QtPrintSupport.customFilters.Qt.name = QtPrintSupport 5.0.0 +qhp.QtPrintSupport.customFilters.Qt.filterAttributes = qtprintsupport 5.0.0 +qhp.QtPrintSupport.subprojects = classes overviews examples +qhp.QtPrintSupport.subprojects.classes.title = Classes +qhp.QtPrintSupport.subprojects.classes.indexTitle = Qt Print Support's Classes +qhp.QtPrintSupport.subprojects.classes.selectors = class fake:headerfile +qhp.QtPrintSupport.subprojects.classes.sortPages = true +qhp.QtPrintSupport.subprojects.overviews.title = Overviews +qhp.QtPrintSupport.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtPrintSupport.subprojects.overviews.selectors = fake:page,group,module +qhp.QtPrintSupport.subprojects.examples.title = Qt Print Support Examples +qhp.QtPrintSupport.subprojects.examples.indexTitle = Qt Print Support Examples +qhp.QtPrintSupport.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qtprintsupport +tagfile = ../../../doc/qtprintsupport/qtprintsupport.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore qtgui qtwidgets + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.cpp b/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.cpp new file mode 100644 index 00000000000..ca022c4cd5d --- /dev/null +++ b/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [1] +#include +//! [1] diff --git a/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro b/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro new file mode 100644 index 00000000000..05cdbf3841a --- /dev/null +++ b/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [0] +QT += printsupport +#! [0] diff --git a/doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp b/src/printsupport/doc/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp rename to src/printsupport/doc/snippets/code/src_gui_dialogs_qabstractprintdialog.cpp diff --git a/doc/src/snippets/printing-qprinter/errors.cpp b/src/printsupport/doc/snippets/printing-qprinter/errors.cpp similarity index 100% rename from doc/src/snippets/printing-qprinter/errors.cpp rename to src/printsupport/doc/snippets/printing-qprinter/errors.cpp diff --git a/doc/src/snippets/printing-qprinter/object.cpp b/src/printsupport/doc/snippets/printing-qprinter/object.cpp similarity index 100% rename from doc/src/snippets/printing-qprinter/object.cpp rename to src/printsupport/doc/snippets/printing-qprinter/object.cpp diff --git a/doc/src/snippets/widgetprinting.cpp b/src/printsupport/doc/snippets/widgetprinting.cpp similarity index 100% rename from doc/src/snippets/widgetprinting.cpp rename to src/printsupport/doc/snippets/widgetprinting.cpp diff --git a/doc/src/printsupport/printing.qdoc b/src/printsupport/doc/src/printing.qdoc similarity index 97% rename from doc/src/printsupport/printing.qdoc rename to src/printsupport/doc/src/printing.qdoc index 5447032a2be..cc79b417047 100644 --- a/doc/src/printsupport/printing.qdoc +++ b/src/printsupport/doc/src/printing.qdoc @@ -74,7 +74,7 @@ a QPrintDialog, allowing the user to specify the printer to use, paper size, and other printing properties. - \snippet examples/richtext/orderform/mainwindow.cpp 18 + \snippet richtext/orderform/mainwindow.cpp 18 It is also possible to set certain default properties by modifying the QPrinter before it is supplied to the print dialog. For example, applications that @@ -88,7 +88,7 @@ to perform painting operations on it. We can construct and set up a painter in the following way: - \snippet doc/src/snippets/printing-qprinter/object.cpp 0 + \snippet printing-qprinter/object.cpp 0 Since the QPrinter starts with a blank page, we only need to call the \l{QPrinter::}{newPage()} function after drawing each page, except for the @@ -143,7 +143,7 @@ will have to scale the painter. You may also want to position the widget on the page. The following code sample shows how this may look. - \snippet doc/src/snippets/widgetprinting.cpp 0 + \snippet widgetprinting.cpp 0 This will center the widget on the page and scale it so that it fits the page. diff --git a/doc/src/printsupport/qtprintsupport.qdoc b/src/printsupport/doc/src/qtprintsupport.qdoc similarity index 90% rename from doc/src/printsupport/qtprintsupport.qdoc rename to src/printsupport/doc/src/qtprintsupport.qdoc index 7eea8203aaa..d6ba0c88f0e 100644 --- a/doc/src/printsupport/qtprintsupport.qdoc +++ b/src/printsupport/doc/src/qtprintsupport.qdoc @@ -36,11 +36,11 @@ To include the definitions of the module's classes, use the following directive: - \snippet doc/src/snippets/code/doc_src_qtprintsupport.cpp 1 + \snippet code/doc_src_qtprintsupport.cpp 1 To link against the module, add this line to your \l qmake \c .pro file: - \snippet doc/src/snippets/code/doc_src_qtprintsupport.pro 0 + \snippet code/doc_src_qtprintsupport.pro 0 */ diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp index 66825508497..fef96d73eb7 100644 --- a/src/printsupport/kernel/qprinter.cpp +++ b/src/printsupport/kernel/qprinter.cpp @@ -740,7 +740,7 @@ void QPrinter::setPrinterName(const QString &name) To detect other failures check the output of QPainter::begin() or QPrinter::newPage(). - \snippet doc/src/snippets/printing-qprinter/errors.cpp 0 + \snippet printing-qprinter/errors.cpp 0 \sa setPrinterName() */ From 6d4f2486d55d706863508fdcae9a5368692de494 Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Tue, 8 May 2012 11:33:17 +0200 Subject: [PATCH 10/13] Doc: Modularize QtTest documentation. This change moves the snippets to the modularized directories. Change-Id: I917dd1dae5ee5d4b6bd5a0390783a8b9a99edc06 Reviewed-by: Marius Storm-Olsen --- src/testlib/doc/qttest.qdocconf | 92 ++ .../doc}/snippets/code/doc_src_qsignalspy.cpp | 0 .../doc}/snippets/code/doc_src_qtestevent.cpp | 0 .../doc/snippets/code/doc_src_qtestlib.cpp | 88 ++ .../doc/snippets/code/doc_src_qtestlib.pro | 47 + .../doc/snippets/code/doc_src_qtestlib.qdoc | 87 ++ .../doc/snippets/code/doc_src_qttest.cpp | 43 + .../doc/snippets/code/doc_src_qttest.pro | 43 + .../snippets/code/src_qtestlib_qtestcase.cpp | 0 src/testlib/doc/src/qttest.qdoc | 54 ++ src/testlib/doc/src/qttestlib-manual.qdoc | 840 ++++++++++++++++++ src/testlib/qsignalspy.qdoc | 10 +- src/testlib/qtestcase.cpp | 54 +- src/testlib/qtestevent.qdoc | 2 +- 14 files changed, 1327 insertions(+), 33 deletions(-) create mode 100644 src/testlib/doc/qttest.qdocconf rename {doc/src => src/testlib/doc}/snippets/code/doc_src_qsignalspy.cpp (100%) rename {doc/src => src/testlib/doc}/snippets/code/doc_src_qtestevent.cpp (100%) create mode 100644 src/testlib/doc/snippets/code/doc_src_qtestlib.cpp create mode 100644 src/testlib/doc/snippets/code/doc_src_qtestlib.pro create mode 100644 src/testlib/doc/snippets/code/doc_src_qtestlib.qdoc create mode 100644 src/testlib/doc/snippets/code/doc_src_qttest.cpp create mode 100644 src/testlib/doc/snippets/code/doc_src_qttest.pro rename {doc/src => src/testlib/doc}/snippets/code/src_qtestlib_qtestcase.cpp (100%) create mode 100644 src/testlib/doc/src/qttest.qdoc create mode 100644 src/testlib/doc/src/qttestlib-manual.qdoc diff --git a/src/testlib/doc/qttest.qdocconf b/src/testlib/doc/qttest.qdocconf new file mode 100644 index 00000000000..5f9ea96a284 --- /dev/null +++ b/src/testlib/doc/qttest.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtTest +description = Qt Test Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qttest +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtTest + +qhp.QtTest.file = qttest.qhp +qhp.QtTest.namespace = org.qt-project.qttest.500 +qhp.QtTest.virtualFolder = qdoc +qhp.QtTest.indexTitle = Qt Test Reference Documentation +qhp.QtTest.indexRoot = + +qhp.QtTest.filterAttributes = qttest 5.0.0 qtrefdoc +qhp.QtTest.customFilters.Qt.name = QtTest 5.0.0 +qhp.QtTest.customFilters.Qt.filterAttributes = qttest 5.0.0 +qhp.QtTest.subprojects = classes overviews examples +qhp.QtTest.subprojects.classes.title = Classes +qhp.QtTest.subprojects.classes.indexTitle = Qt Test's Classes +qhp.QtTest.subprojects.classes.selectors = class fake:headerfile +qhp.QtTest.subprojects.classes.sortPages = true +qhp.QtTest.subprojects.overviews.title = Overviews +qhp.QtTest.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtTest.subprojects.overviews.selectors = fake:page,group,module +qhp.QtTest.subprojects.examples.title = Qt Test Examples +qhp.QtTest.subprojects.examples.indexTitle = Qt Test Examples +qhp.QtTest.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qttest +tagfile = ../../../doc/qttest/qttest.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/doc/src/snippets/code/doc_src_qsignalspy.cpp b/src/testlib/doc/snippets/code/doc_src_qsignalspy.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_qsignalspy.cpp rename to src/testlib/doc/snippets/code/doc_src_qsignalspy.cpp diff --git a/doc/src/snippets/code/doc_src_qtestevent.cpp b/src/testlib/doc/snippets/code/doc_src_qtestevent.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_qtestevent.cpp rename to src/testlib/doc/snippets/code/doc_src_qtestevent.cpp diff --git a/src/testlib/doc/snippets/code/doc_src_qtestlib.cpp b/src/testlib/doc/snippets/code/doc_src_qtestlib.cpp new file mode 100644 index 00000000000..8bad7cca481 --- /dev/null +++ b/src/testlib/doc/snippets/code/doc_src_qtestlib.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +class MyFirstTest: public QObject +{ + Q_OBJECT +private slots: + void initTestCase() + { qDebug("called before everything else"); } + void myFirstTest() + { QVERIFY(1 == 1); } + void mySecondTest() + { QVERIFY(1 != 2); } + void cleanupTestCase() + { qDebug("called after myFirstTest and mySecondTest"); } +}; +//! [0] + + +//! [8] +void TestQString::toUpper() +{ + QString str = "Hello"; + QVERIFY(str.toUpper() == "HELLO"); +} +//! [8] + + +//! [11] +QCOMPARE(QString("hello").toUpper(), QString("HELLO")); +QCOMPARE(QString("Hello").toUpper(), QString("HELLO")); +QCOMPARE(QString("HellO").toUpper(), QString("HELLO")); +QCOMPARE(QString("HELLO").toUpper(), QString("HELLO")); +//! [11] + +//! [12] +class MyFirstBenchmark: public QObject +{ + Q_OBJECT +private slots: + void myFirstBenchmark() + { + QString string1; + QString string2; + QBENCHMARK { + string1.localeAwareCompare(string2); + } + } +}; +//! [12] diff --git a/src/testlib/doc/snippets/code/doc_src_qtestlib.pro b/src/testlib/doc/snippets/code/doc_src_qtestlib.pro new file mode 100644 index 00000000000..e6de136bec0 --- /dev/null +++ b/src/testlib/doc/snippets/code/doc_src_qtestlib.pro @@ -0,0 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [1] +QT += testlib +#! [1] + +#! [2] +CONFIG += testcase +#! [2] diff --git a/src/testlib/doc/snippets/code/doc_src_qtestlib.qdoc b/src/testlib/doc/snippets/code/doc_src_qtestlib.qdoc new file mode 100644 index 00000000000..05759b0ccba --- /dev/null +++ b/src/testlib/doc/snippets/code/doc_src_qtestlib.qdoc @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [2] +testname [options] [testfunctions[:testdata]]... +//! [2] + + +//! [3] +/myTestDirectory$ testQString toUpper +//! [3] + + +//! [4] +/myTestDirectory$ testQString toUpper toInt:zero +//! [4] + + +//! [5] +/myTestDirectory$ testMyWidget -vs -eventdelay 500 +//! [5] + + +//! [6] +cetest [options] ... +//! [6] + + +//! [7] +set INCLUDE=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Inc;%INCLUDE% +set LIB=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Lib;%LIB% +//! [7] + + +//! [9] +/myTestDirectory$ qmake -project "QT += testlib" +/myTestDirectory$ qmake +/myTestDirectory$ make +//! [9] + + +//! [10] +********* Start testing of TestQString ********* +Config: Using QTest library %VERSION%, Qt %VERSION% +PASS : TestQString::initTestCase() +PASS : TestQString::toUpper() +PASS : TestQString::cleanupTestCase() +Totals: 3 passed, 0 failed, 0 skipped +********* Finished testing of TestQString ********* +//! [10] diff --git a/src/testlib/doc/snippets/code/doc_src_qttest.cpp b/src/testlib/doc/snippets/code/doc_src_qttest.cpp new file mode 100644 index 00000000000..21860fd7c40 --- /dev/null +++ b/src/testlib/doc/snippets/code/doc_src_qttest.cpp @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +#include +//! [0] diff --git a/src/testlib/doc/snippets/code/doc_src_qttest.pro b/src/testlib/doc/snippets/code/doc_src_qttest.pro new file mode 100644 index 00000000000..15cbfc56947 --- /dev/null +++ b/src/testlib/doc/snippets/code/doc_src_qttest.pro @@ -0,0 +1,43 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#! [1] +QT += testlib +#! [1] diff --git a/doc/src/snippets/code/src_qtestlib_qtestcase.cpp b/src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp similarity index 100% rename from doc/src/snippets/code/src_qtestlib_qtestcase.cpp rename to src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp diff --git a/src/testlib/doc/src/qttest.qdoc b/src/testlib/doc/src/qttest.qdoc new file mode 100644 index 00000000000..b1242202a8b --- /dev/null +++ b/src/testlib/doc/src/qttest.qdoc @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \module QtTest + \title QtTest Module + \ingroup modules + + \keyword QtTest + + \brief The QtTest module provides classes for unit testing Qt applications and libraries. + + Applications that use Qt's unit testing classes need to + be configured to be built against the QtTest module. + To include the definitions of the module's classes, use the + following directive: + + \snippet code/doc_src_qttest.cpp 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet code/doc_src_qttest.pro 1 + + See the \l{QTestLib Manual} for a detailed introduction on how to use + Qt's unit testing features with your applications. + + The QtTest module is part of all \l{Qt editions}. +*/ + diff --git a/src/testlib/doc/src/qttestlib-manual.qdoc b/src/testlib/doc/src/qttestlib-manual.qdoc new file mode 100644 index 00000000000..06b1ea78616 --- /dev/null +++ b/src/testlib/doc/src/qttestlib-manual.qdoc @@ -0,0 +1,840 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qtestlib-manual.html + \title QTestLib Manual + \brief An overview of Qt's unit testing framework. + + \ingroup frameworks-technologies + \ingroup qt-basic-concepts + + \keyword qtestlib + + The QTestLib framework, provided by Nokia, is a tool for unit + testing Qt based applications and libraries. QTestLib provides + all the functionality commonly found in unit testing frameworks as + well as extensions for testing graphical user interfaces. + + \section1 QTestLib Features + + QTestLib is designed to ease the writing of unit tests for Qt + based applications and libraries: + + \table + \header \li Feature \li Details + \row + \li \b Lightweight + \li QTestLib consists of about 6000 lines of code and 60 + exported symbols. + \row + \li \b Self-contained + \li QTestLib requires only a few symbols from the Qt Core library + for non-gui testing. + \row + \li \b {Rapid testing} + \li QTestLib needs no special test-runners; no special + registration for tests. + \row + \li \b {Data-driven testing} + \li A test can be executed multiple times with different test data. + \row + \li \b {Basic GUI testing} + \li QTestLib offers functionality for mouse and keyboard simulation. + \row + \li \b {Benchmarking} + \li QTestLib supports benchmarking and provides several measurement back-ends. + \row + \li \b {IDE friendly} + \li QTestLib outputs messages that can be interpreted by Visual + Studio and KDevelop. + \row + \li \b Thread-safety + \li The error reporting is thread safe and atomic. + \row + \li \b Type-safety + \li Extensive use of templates prevent errors introduced by + implicit type casting. + \row + \li \b {Easily extendable} + \li Custom types can easily be added to the test data and test output. + \endtable + + \note For higher-level GUI and application testing needs, please + see the \l{Partner Directory} for Qt testing products provided by + Nokia partners. + + + \section1 QTestLib API + + All public methods are in the \l QTest namespace. In addition, the + \l QSignalSpy class provides easy introspection for Qt's signals and slots. + + + \section1 Using QTestLib + + \section2 Creating a Test + + To create a test, subclass QObject and add one or more private slots to it. Each + private slot is a testfunction in your test. QTest::qExec() can be used to execute + all testfunctions in the test object. + + In addition, there are four private slots that are \e not treated as testfunctions. + They will be executed by the testing framework and can be used to initialize and + clean up either the entire test or the current test function. + + \list + \li \c{initTestCase()} will be called before the first testfunction is executed. + \li \c{cleanupTestCase()} will be called after the last testfunction was executed. + \li \c{init()} will be called before each testfunction is executed. + \li \c{cleanup()} will be called after every testfunction. + \endlist + + If \c{initTestCase()} fails, no testfunction will be executed. If \c{init()} fails, + the following testfunction will not be executed, the test will proceed to the next + testfunction. + + Example: + \snippet code/doc_src_qtestlib.cpp 0 + + For more examples, refer to the \l{QTestLib Tutorial}. + + \section2 Building a Test + + If you are using \c qmake as your build tool, just add the + following to your project file: + + \snippet code/doc_src_qtestlib.pro 1 + + If you would like to run the test via \c{make check}, add the + additional line: + + \snippet code/doc_src_qtestlib.pro 2 + + See \l{qmake Common Projects#building-a-testcase}{the qmake manual} for + more information about \c{make check}. + + If you are using other build tools, make sure that you add the location + of the QTestLib header files to your include path (usually \c{include/QtTest} + under your Qt installation directory). If you are using a release build + of Qt, link your test to the \c QtTest library. For debug builds, use + \c{QtTest_debug}. + + See \l {Chapter 1: Writing a Unit Test}{Writing a Unit Test} for a step by + step explanation. + + \section2 QTestLib Command Line Arguments + + \section3 Syntax + + The syntax to execute an autotest takes the following simple form: + + \snippet code/doc_src_qtestlib.qdoc 2 + + Substitute \c testname with the name of your executable. \c + testfunctions can contain names of test functions to be + executed. If no \c testfunctions are passed, all tests are run. If you + append the name of an entry in \c testdata, the test function will be + run only with that test data. + + For example: + + \snippet code/doc_src_qtestlib.qdoc 3 + + Runs the test function called \c toUpper with all available test data. + + \snippet code/doc_src_qtestlib.qdoc 4 + + Runs the \c toUpper test function with all available test data, + and the \c toInt test function with the testdata called \c + zero (if the specified test data doesn't exist, the associated test + will fail). + + \snippet code/doc_src_qtestlib.qdoc 5 + + Runs the testMyWidget function test, outputs every signal + emission and waits 500 milliseconds after each simulated + mouse/keyboard event. + + \section3 Options + + \section4 Logging Options + + The following command line options determine how test results are reported: + + \list + \li \c -o \e{filename,format} \BR + write output to the specified file, in the specified format (one of + \c txt, \c xml, \c lightxml or \c xunitxml). The special filename \c - + may be used to log to standard output. + \li \c -o \e filename \BR + write output to the specified file. + \li \c -txt \BR + outputs results in plain text. + \li \c -xml \BR + outputs results as an XML document. + \li \c -lightxml \BR + outputs results as a stream of XML tags. + \li \c -xunitxml \BR + outputs results as an Xunit XML document. + \endlist + + The first version of the \c -o option may be repeated in order to log + test results in multiple formats, but no more than one instance of this + option can log test results to standard output. + + If the first version of the \c -o option is used, neither the second version + of the \c -o option nor the \c -txt, \c -xml, \c -lightxml or \c -xunitxml + options should be used. + + If neither version of the \c -o option is used, test results will be logged to + standard output. If no format option is used, test results will be logged in + plain text. + + \section4 Test Log Detail Options + + The following command line options control how much detail is reported + in test logs: + + \list + \li \c -silent \BR + silent output, only shows fatal errors, test failures and minimal status messages. + \li \c -v1 \BR + verbose output; shows when each test function is entered. + (This option only affects plain text output.) + \li \c -v2 \BR + extended verbose output; shows each \l QCOMPARE() and \l QVERIFY(). + (This option affects all output formats and implies \c -v1 for plain text output.) + \li \c -vs \BR + shows every signal that gets emitted and the slot invocations resulting from those signals. + (This option affects all output formats.) + \endlist + + \section4 Testing Options + + The following command-line options influence how tests are run: + + \list + \li \c -functions \BR + outputs all test functions available in the test, then quits. + \li \c -datatags \BR + outputs all data tags available in the test. + A global data tag is preceded by ' __global__ '. + \li \c -eventdelay \e ms \BR + if no delay is specified for keyboard or mouse simulation + (\l QTest::keyClick(), + \l QTest::mouseClick() etc.), the value from this parameter + (in milliseconds) is substituted. + \li \c -keydelay \e ms \BR + like -eventdelay, but only influences keyboard simulation and not mouse + simulation. + \li \c -mousedelay \e ms \BR + like -eventdelay, but only influences mouse simulation and not keyboard + simulation. + \li \c -maxwarnings \e number\BR + sets the maximum number of warnings to output. 0 for unlimited, defaults to 2000. + \li \c -nocrashhandler \BR + disables the crash handler on Unix platforms. + \endlist + + \section4 Benchmarking Options + + The following command line options control benchmark testing: + + \list + \li \c -callgrind \BR + use callgrind to time benchmarks (Linux only). + \li \c -tickcounter \BR + use CPU tick counters to time benchmarks. + \li \c -eventcounter \BR + counts events received during benchmarks. + \li \c -minimumvalue \e n \BR + sets the minimum acceptable measurement value. + \li \c -iterations \e n \BR + sets the number of accumulation iterations. + \li \c -median \e n \BR + sets the number of median iterations. + \li \c -vb \BR + output verbose benchmarking information. + \endlist + + \section4 Miscellaneous Options + + \list + \li \c -help \BR + outputs the possible command line arguments and give some useful help. + \endlist + + \section2 Creating a Benchmark + + To create a benchmark, follow the instructions for creating a test and then add a + QBENCHMARK macro to the test function that you want to benchmark. + + \snippet code/doc_src_qtestlib.cpp 12 + + The code inside the QBENCHMARK macro will be measured, and possibly also repeated + several times in order to get an accurate measurement. This depends on the selected + measurement back-end. Several back-ends are available. They can be selected on the + command line: + + \target testlib-benchmarking-measurement + + \table + \header \li Name + \li Commmand-line Argument + \li Availability + \row \li Walltime + \li (default) + \li All platforms + \row \li CPU tick counter + \li -tickcounter + \li Windows, Mac OS X, Linux, many UNIX-like systems. + \row \li Valgrind/Callgrind + \li -callgrind + \li Linux (if installed) + \row \li Event Counter + \li -eventcounter + \li All platforms + \endtable + + In short, walltime is always available but requires many repetitions to + get a useful result. + Tick counters are usually available and can provide + results with fewer repetitions, but can be susceptible to CPU frequency + scaling issues. + Valgrind provides exact results, but does not take + I/O waits into account, and is only available on a limited number of + platforms. + Event counting is available on all platforms and it provides the number of events + that were received by the event loop before they are sent to their corresponding + targets (this might include non-Qt events). + + \note Depending on the device configuration, Tick counters on the + Windows CE platform may not be as fine-grained, compared to other platforms. + Devices that do not support high-resolution timers default to + one-millisecond granularity. + + See the chapter 5 in the \l{QTestLib Tutorial} for more benchmarking examples. + + \section1 Using QTestLib remotely on Windows CE + \c cetest is a convenience application which helps the user to launch an + application remotely on a Windows CE device or emulator. + + It needs to be executed after the unit test has been successfully compiled. + + Prior to launching, the following files are copied to the device: + + \list + \li all Qt libraries the project links to + \li \l {QtRemote}{QtRemote.dll} + \li the c runtime library specified during installation + \li all files specified in the \c .pro file following the \l DEPLOYMENT rules. + \endlist + + \section2 Using \c cetest + \section3 Syntax + The syntax to execute an autotest takes the following simple form: + + \snippet code/doc_src_qtestlib.qdoc 6 + + \section3 Options + \c cetest provides the same options as those for unit-testing on non cross-compiled + platforms. See \l {QTestLib Command Line Arguments} {Command Line Arguments} for + more information. + + The following commands are also included: + + \list + \li \c -debug \BR + Test version compiled in debug mode. + \li \c -release \BR + Test version compiled in release mode. + \li \c -libpath \e path \BR + Target path to copy Qt libraries to. + \li \c -qt-delete \BR + Delete Qt libraries after execution. + \li \c -project-delete \BR + Delete project files after execution. + \li \c -delete \BR + Delete project and Qt libraries after execution. + \li \c -conf \BR + Specifies a qt.conf file to be deployed to remote directory. + \endlist + + \note \c{debug} is the default build option. + + \section2 QtRemote + \c QtRemote is a small library which is build after QTestLib. It allows the host + system to create a process on a remote device and waits until its execution has + been finished. + + \section2 Requirements + \c cetest uses Microsoft ActiveSync to establish a remote connection between the + host computer and the device. Thus header files and libraries are needed to compile + cetest and QtRemote successfully. + + Prior to \l{Installing Qt for Windows CE}{installation} of Qt, you need to set your + \c INCLUDE and \c LIB environment variables properly. + + A default installation of Windows Mobile 5 for Pocket PC can be obtained by: + + \snippet code/doc_src_qtestlib.qdoc 7 + + Note that Qt will remember the path, so you do not need to set it again + after switching the environments for cross-compilation. + + \section1 3rd Party Code + + The CPU tick counters used for benchmarking is licensed under the following + license: (from src/testlib/3rdparty/cycle.h) + + \legalese + Copyright (c) 2003, 2006 Matteo Frigo\br + Copyright (c) 2003, 2006 Massachusetts Institute of Technology + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + \endlegalese +*/ + +/*! + \page qtestlib-tutorial.html + \brief A short introduction to testing with QTestLib. + \contentspage QTestLib Manual + \nextpage {Chapter 1: Writing a Unit Test}{Chapter 1} + \ingroup best-practices + + \title QTestLib Tutorial + + This tutorial gives a short introduction to how to use some of the + features of the QTestLib framework. It is divided into five + chapters: + + \list 1 + \li \l {Chapter 1: Writing a Unit Test}{Writing a Unit Test} + \li \l {Chapter 2: Data Driven Testing}{Data Driven Testing} + \li \l {Chapter 3: Simulating GUI Events}{Simulating GUI Events} + \li \l {Chapter 4: Replaying GUI Events}{Replaying GUI Events} + \li \l {Chapter 5: Writing a Benchmark}{Writing a Benchmark} + \endlist + +*/ + + +/*! + \example qtestlib/tutorial1 + + \contentspage {QTestLib Tutorial}{Contents} + \nextpage {Chapter 2: Data Driven Testing}{Chapter 2} + + \title Chapter 1: Writing a Unit Test + + In this first chapter we will see how to write a simple unit test + for a class, and how to execute it. + + \section1 Writing a Test + + Let's assume you want to test the behavior of our QString class. + First, you need a class that contains your test functions. This class + has to inherit from QObject: + + \snippet qtestlib/tutorial1/testqstring.cpp 0 + + Note that you need to include the QTest header, and that the + test functions have to be declared as private slots so the + test framework finds and executes it. + + Then you need to implement the test function itself. The + implementation could look like this: + + \snippet code/doc_src_qtestlib.cpp 8 + + The \l QVERIFY() macro evaluates the expression passed as its + argument. If the expression evaluates to true, the execution of + the test function continues. Otherwise, a message describing the + failure is appended to the test log, and the test function stops + executing. + + But if you want a more verbose output to the test log, you should + use the \l QCOMPARE() macro instead: + + \snippet qtestlib/tutorial1/testqstring.cpp 1 + + If the strings are not equal, the contents of both strings is + appended to the test log, making it immediately visible why the + comparison failed. + + Finally, to make our test case a stand-alone executable, the + following two lines are needed: + + \snippet qtestlib/tutorial1/testqstring.cpp 2 + + The \l QTEST_MAIN() macro expands to a simple \c main() + method that runs all the test functions. Note that if both the + declaration and the implementation of our test class are in a \c + .cpp file, we also need to include the generated moc file to make + Qt's introspection work. + + \section1 Executing a Test + + Now that we finished writing our test, we want to execute + it. Assuming that our test was saved as \c testqstring.cpp in an + empty directory: we build the test using qmake to create a project + and generate a makefile. + + \snippet code/doc_src_qtestlib.qdoc 9 + + \b {Note:}If you're using windows, replace \c make with \c + nmake or whatever build tool you use. + + Running the resulting executable should give you the following + output: + + \snippet code/doc_src_qtestlib.qdoc 10 + + Congratulations! You just wrote and executed your first unit test + using the QTestLib framework. +*/ + +/*! + \example qtestlib/tutorial2 + + \previouspage {Chapter 1: Writing a Unit Test}{Chapter 1} + \contentspage {QTestLib Tutorial}{Contents} + \nextpage {Chapter 3: Simulating Gui Events}{Chapter 3} + + \title Chapter 2: Data Driven Testing + + In this chapter we will demonstrate how to execute a test + multiple times with different test data. + + So far, we have hard coded the data we wanted to test into our + test function. If we add more test data, the function might look like + this: + + \snippet code/doc_src_qtestlib.cpp 11 + + To prevent that the function ends up being cluttered by repetitive + code, QTestLib supports adding test data to a test function. All + we need is to add another private slot to our test class: + + \snippet qtestlib/tutorial2/testqstring.cpp 0 + + \section1 Writing the Data Function + + A test function's associated data function carries the same name, + appended by \c{_data}. Our data function looks like this: + + \snippet qtestlib/tutorial2/testqstring.cpp 1 + + First, we define the two elements of our test table using the \l + QTest::addColumn() function: A test string, and the + expected result of applying the QString::toUpper() function to + that string. + + Then we add some data to the table using the \l + QTest::newRow() function. Each set of data will become a + separate row in the test table. + + \l QTest::newRow() takes one argument: A name that will be + associated with the data set. If the test fails, the name will be + used in the test log, referencing the failed data. Then we + stream the data set into the new table row: First an arbitrary + string, and then the expected result of applying the + QString::toUpper() function to that string. + + You can think of the test data as a two-dimensional table. In + our case, it has two columns called \c string and \c result and + three rows. In addition a name as well as an index is associated + with each row: + + \table + \header + \li index + \li name + \li string + \li result + \row + \li 0 + \li all lower + \li "hello" + \li HELLO + \row + \li 1 + \li mixed + \li "Hello" + \li HELLO + \row + \li 2 + \li all upper + \li "HELLO" + \li HELLO + \endtable + + \section1 Rewriting the Test Function + + Our test function can now be rewritten: + + \snippet qtestlib/tutorial2/testqstring.cpp 2 + + The TestQString::toUpper() function will be executed three times, + once for each entry in the test table that we created in the + associated TestQString::toUpper_data() function. + + First, we fetch the two elements of the data set using the \l + QFETCH() macro. \l QFETCH() takes two arguments: The data type of + the element and the element name. Then we perform the test using + the \l QCOMPARE() macro. + + This approach makes it very easy to add new data to the test + without modifying the test itself. + + And again, to make our test case a stand-alone executable, + the following two lines are needed: + + \snippet qtestlib/tutorial2/testqstring.cpp 3 + + As before, the QTEST_MAIN() macro expands to a simple main() + method that runs all the test functions, and since both the + declaration and the implementation of our test class are in a .cpp + file, we also need to include the generated moc file to make Qt's + introspection work. +*/ + +/*! + \example qtestlib/tutorial3 + + \previouspage {Chapter 2: Data Driven Testing}{Chapter 2} + \contentspage {QTestLib Tutorial}{Contents} + \nextpage {Chapter 4: Replaying GUI Events}{Chapter 4} + + \title Chapter 3: Simulating GUI Events + + QTestLib features some mechanisms to test graphical user + interfaces. Instead of simulating native window system events, + QTestLib sends internal Qt events. That means there are no + side-effects on the machine the tests are running on. + + In this chapter we will se how to write a simple GUI test. + + \section1 Writing a GUI test + + This time, let's assume you want to test the behavior of our + QLineEdit class. As before, you will need a class that contains + your test function: + + \snippet qtestlib/tutorial3/testgui.cpp 0 + + The only difference is that you need to include the QtGui class + definitions in addition to the QTest namespace. + + \snippet qtestlib/tutorial3/testgui.cpp 1 + + In the implementation of the test function we first create a + QLineEdit. Then we simulate writing "hello world" in the line edit + using the \l QTest::keyClicks() function. + + \note The widget must also be shown in order to correctly test keyboard + shortcuts. + + QTest::keyClicks() simulates clicking a sequence of keys on a + widget. Optionally, a keyboard modifier can be specified as well + as a delay (in milliseconds) of the test after each key click. In + a similar way, you can use the QTest::keyClick(), + QTest::keyPress(), QTest::keyRelease(), QTest::mouseClick(), + QTest::mouseDClick(), QTest::mouseMove(), QTest::mousePress() + and QTest::mouseRelease() functions to simulate the associated + GUI events. + + Finally, we use the \l QCOMPARE() macro to check if the line edit's + text is as expected. + + As before, to make our test case a stand-alone executable, the + following two lines are needed: + + \snippet qtestlib/tutorial3/testgui.cpp 2 + + The QTEST_MAIN() macro expands to a simple main() method that + runs all the test functions, and since both the declaration and + the implementation of our test class are in a .cpp file, we also + need to include the generated moc file to make Qt's introspection + work. +*/ + +/*! + \example qtestlib/tutorial4 + + \previouspage {Chapter 3: Simulating GUI Event}{Chapter 3} + \contentspage {QTestLib Tutorial}{Contents} + \nextpage {Chapter 5: Writing a Benchmark}{Chapter 5} + + \title Chapter 4: Replaying GUI Events + + In this chapter, we will show how to simulate a GUI event, + and how to store a series of GUI events as well as replay them on + a widget. + + The approach to storing a series of events and replay them, is + quite similar to the approach explained in \l {Chapter 2: + Data Driven Testing}{chapter 2}; all you need is to add a data + function to your test class: + + \snippet qtestlib/tutorial4/testgui.cpp 0 + + \section1 Writing the Data Function + + As before, a test function's associated data function carries the + same name, appended by \c{_data}. + + \snippet qtestlib/tutorial4/testgui.cpp 1 + + First, we define the elements of the table using the + QTest::addColumn() function: A list of GUI events, and the + expected result of applying the list of events on a QWidget. Note + that the type of the first element is \l QTestEventList. + + A QTestEventList can be populated with GUI events that can be + stored as test data for later usage, or be replayed on any + QWidget. + + In our current data function, we create two \l + {QTestEventList}s. The first list consists of a single click to + the 'a' key. We add the event to the list using the + QTestEventList::addKeyClick() function. Then we use the + QTest::newRow() function to give the data set a name, and + stream the event list and the expected result into the table. + + The second list consists of two key clicks: an 'a' with a + following 'backspace'. Again we use the + QTestEventList::addKeyClick() to add the events to the list, and + QTest::newRow() to put the event list and the expected + result into the table with an associated name. + + \section1 Rewriting the Test Function + + Our test can now be rewritten: + + \snippet qtestlib/tutorial4/testgui.cpp 2 + + The TestGui::testGui() function will be executed two times, + once for each entry in the test data that we created in the + associated TestGui::testGui_data() function. + + First, we fetch the two elements of the data set using the \l + QFETCH() macro. \l QFETCH() takes two arguments: The data type of + the element and the element name. Then we create a QLineEdit, and + apply the list of events on that widget using the + QTestEventList::simulate() function. + + Finally, we use the QCOMPARE() macro to check if the line edit's + text is as expected. + + As before, to make our test case a stand-alone executable, + the following two lines are needed: + + \snippet qtestlib/tutorial4/testgui.cpp 3 + + The QTEST_MAIN() macro expands to a simple main() method that + runs all the test functions, and since both the declaration and + the implementation of our test class are in a .cpp file, we also + need to include the generated moc file to make Qt's introspection + work. +*/ + +/*! + \example qtestlib/tutorial5 + + \previouspage {Chapter 4: Replaying GUI Events}{Chapter 4} + \contentspage {QTestLib Tutorial}{Contents} + + \title Chapter 5: Writing a Benchmark + + In this final chapter we will demonstrate how to write benchmarks + using QTestLib. + + \section1 Writing a Benchmark + To create a benchmark we extend a test function with a QBENCHMARK macro. + A benchmark test function will then typically consist of setup code and + a QBENCHMARK macro that contains the code to be measured. This test + function benchmarks QString::localeAwareCompare(). + + \snippet qtestlib/tutorial5/benchmarking.cpp 0 + + Setup can be done at the beginning of the function, the clock is not + running at this point. The code inside the QBENCHMARK macro will be + measured, and possibly repeated several times in order to get an + accurate measurement. + + Several \l {testlib-benchmarking-measurement}{back-ends} are available + and can be selected on the command line. + + \section1 Data Functions + + Data functions are useful for creating benchmarks that compare + multiple data inputs, for example locale aware compare against standard + compare. + + \snippet qtestlib/tutorial5/benchmarking.cpp 1 + + The test function then uses the data to determine what to benchmark. + + \snippet qtestlib/tutorial5/benchmarking.cpp 2 + + The "if (useLocaleCompare)" switch is placed outside the QBENCHMARK + macro to avoid measuring its overhead. Each benchmark test function + can have one active QBENCHMARK macro. + + \section1 External Tools + + Tools for handling and visualizing test data are available as part of + the \l {qtestlib-tools} project in the \l{Qt Labs} web site. + These include a tool for comparing performance data obtained from test + runs and a utility to generate Web-based graphs of performance data. + + See the \l{qtestlib-tools Announcement}{qtestlib-tools announcement} + for more information on these tools and a simple graphing example. + +*/ + + + diff --git a/src/testlib/qsignalspy.qdoc b/src/testlib/qsignalspy.qdoc index dddaed74f63..7ce0a515051 100644 --- a/src/testlib/qsignalspy.qdoc +++ b/src/testlib/qsignalspy.qdoc @@ -38,7 +38,7 @@ The following example records all signal emissions for the \c clicked() signal of a QCheckBox: - \snippet doc/src/snippets/code/doc_src_qsignalspy.cpp 0 + \snippet code/doc_src_qsignalspy.cpp 0 \c{spy.takeFirst()} returns the arguments for the first emitted signal, as a list of QVariant objects. The \c clicked() signal has a single bool argument, @@ -46,17 +46,17 @@ The example below catches a signal from a custom object: - \snippet doc/src/snippets/code/doc_src_qsignalspy.cpp 1 + \snippet code/doc_src_qsignalspy.cpp 1 \b {Note:} Non-standard data types need to be registered, using the qRegisterMetaType() function, before you can create a QSignalSpy. For example: - \snippet doc/src/snippets/code/doc_src_qsignalspy.cpp 2 + \snippet code/doc_src_qsignalspy.cpp 2 To retrieve the \c QModelIndex, you can use qvariant_cast: - \snippet doc/src/snippets/code/doc_src_qsignalspy.cpp 3 + \snippet code/doc_src_qsignalspy.cpp 3 */ /*! \fn QSignalSpy::QSignalSpy(QObject *object, const char *signal) @@ -69,7 +69,7 @@ return false. Example: - \snippet doc/src/snippets/code/doc_src_qsignalspy.cpp 4 + \snippet code/doc_src_qsignalspy.cpp 4 */ /*! \fn QSignalSpy::isValid() const diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 245245e1ca8..21468f05851 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -113,7 +113,7 @@ QT_BEGIN_NAMESPACE by the test framework. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 0 + \snippet code/src_qtestlib_qtestcase.cpp 0 \sa QCOMPARE(), QTRY_VERIFY() */ @@ -127,7 +127,7 @@ QT_BEGIN_NAMESPACE C string. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 1 + \snippet code/src_qtestlib_qtestcase.cpp 1 \sa QVERIFY(), QCOMPARE() */ @@ -160,7 +160,7 @@ QT_BEGIN_NAMESPACE by the test framework. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 2 + \snippet code/src_qtestlib_qtestcase.cpp 2 \sa QVERIFY(), QTRY_COMPARE(), QTest::toString() */ @@ -236,12 +236,12 @@ QT_BEGIN_NAMESPACE Assuming a test has the following data: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 3 + \snippet code/src_qtestlib_qtestcase.cpp 3 The test data has two elements, a QString called \c aString and an integer called \c expected. To fetch these values in the actual test: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 4 + \snippet code/src_qtestlib_qtestcase.cpp 4 \c aString and \c expected are variables on the stack that are initialized with the current test data. @@ -271,7 +271,7 @@ QT_BEGIN_NAMESPACE Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 5 + \snippet code/src_qtestlib_qtestcase.cpp 5 */ /*! \macro QTEST(actual, testElement) @@ -286,11 +286,11 @@ QT_BEGIN_NAMESPACE Instead of writing: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 6 + \snippet code/src_qtestlib_qtestcase.cpp 6 you can write: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 7 + \snippet code/src_qtestlib_qtestcase.cpp 7 \sa QCOMPARE() */ @@ -320,7 +320,7 @@ QT_BEGIN_NAMESPACE function that is invoked by the test framework. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 8 + \snippet code/src_qtestlib_qtestcase.cpp 8 */ /*! \macro QEXPECT_FAIL(dataIndex, comment, mode) @@ -347,7 +347,7 @@ QT_BEGIN_NAMESPACE by the test framework. Example 1: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 9 + \snippet code/src_qtestlib_qtestcase.cpp 9 In the example above, an expected fail will be written into the test output if the variable \c i is not 42. If the variable \c i is 42, an unexpected pass @@ -355,7 +355,7 @@ QT_BEGIN_NAMESPACE statement in the example. Example 2: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 10 + \snippet code/src_qtestlib_qtestcase.cpp 10 The above testfunction will not continue executing for the test data entry \c{data27}. @@ -391,7 +391,7 @@ QT_BEGIN_NAMESPACE a warning is printed to the test log. For example, in this code: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 26 + \snippet code/src_qtestlib_qtestcase.cpp 26 The testdata file will be resolved as the first existing file from: @@ -441,7 +441,7 @@ QT_BEGIN_NAMESPACE \l {QApplication::setNavigationMode()}. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 11 + \snippet code/src_qtestlib_qtestcase.cpp 11 \sa QTEST_APPLESS_MAIN(), QTEST_GUILESS_MAIN(), QTest::qExec(), QApplication::setNavigationMode() @@ -486,7 +486,7 @@ QT_BEGIN_NAMESPACE For example: - \snippet examples/qtestlib/tutorial5/benchmarking.cpp 0 + \snippet qtestlib/tutorial5/benchmarking.cpp 0 \sa {QTestLib Manual#Creating a Benchmark}{Creating a Benchmark}, {Chapter 5: Writing a Benchmark}{Writing a Benchmark} @@ -556,7 +556,7 @@ QT_BEGIN_NAMESPACE before clicking the key. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 13 + \snippet code/src_qtestlib_qtestcase.cpp 13 The example above simulates clicking \c a on \c myWidget without any keyboard modifiers and without delay of the test. @@ -571,7 +571,7 @@ QT_BEGIN_NAMESPACE before clicking the key. Examples: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 14 + \snippet code/src_qtestlib_qtestcase.cpp 14 The first example above simulates clicking the \c escape key on \c myWidget without any keyboard modifiers and without delay. The @@ -650,7 +650,7 @@ QT_BEGIN_NAMESPACE click. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 15 + \snippet code/src_qtestlib_qtestcase.cpp 15 The example above simulates clicking the sequence of keys representing "hello world" on \c myWidget without any keyboard @@ -726,7 +726,7 @@ QT_BEGIN_NAMESPACE Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 16 + \snippet code/src_qtestlib_qtestcase.cpp 16 The example above defines a toString() specialization for a class called \c MyPoint. Whenever a comparison of two instances of \c @@ -851,7 +851,7 @@ QT_BEGIN_NAMESPACE your test will stay responsive to user interface events or network communication. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 17 + \snippet code/src_qtestlib_qtestcase.cpp 17 The code above will wait until the network server is responding for a maximum of about 12.5 seconds. @@ -867,7 +867,7 @@ QT_BEGIN_NAMESPACE time after being asked to show itself on the screen. Returns true. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 24 + \snippet code/src_qtestlib_qtestcase.cpp 24 */ /*! \fn bool QTest::qWaitForWindowShown(QWindow *window, int timeout) @@ -914,7 +914,7 @@ QT_BEGIN_NAMESPACE instance run out of scope to commit the sequence to the event system. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 25 + \snippet code/src_qtestlib_qtestcase.cpp 25 */ /*! @@ -2023,7 +2023,7 @@ FatalSignalHandler::~FatalSignalHandler() The following example will run all tests in \c MyTestObject: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 18 + \snippet code/src_qtestlib_qtestcase.cpp 18 This function returns 0 if no tests failed, or a value other than 0 if one or more tests failed or in case of unhandled exceptions. (Skipped tests do @@ -2237,7 +2237,7 @@ void QTest::qWarn(const char *message, const char *file, int line) call ignoreMessage() twice, too. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 19 + \snippet code/src_qtestlib_qtestcase.cpp 19 The example above tests that QDir::mkdir() outputs the right warning when invoked with an invalid file name. @@ -2397,7 +2397,7 @@ void QTest::addColumnInternal(int id, const char *name) that can be used to stream in data. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 20 + \snippet code/src_qtestlib_qtestcase.cpp 20 \b {Note:} This macro can only be used in a test's data function that is invoked by the test framework. @@ -2427,7 +2427,7 @@ QTestData &QTest::newRow(const char *dataTag) \l QFETCH() to fetch the data in the actual test. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 21 + \snippet code/src_qtestlib_qtestcase.cpp 21 To add custom types to the testdata, the type must be registered with QMetaType via \l Q_DECLARE_METATYPE(). @@ -2446,7 +2446,7 @@ QTestData &QTest::newRow(const char *dataTag) Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 22 + \snippet code/src_qtestlib_qtestcase.cpp 22 */ const char *QTest::currentTestFunction() { @@ -2483,7 +2483,7 @@ bool QTest::currentTestFailed() qSleep() depends on the operating system. Example: - \snippet doc/src/snippets/code/src_qtestlib_qtestcase.cpp 23 + \snippet code/src_qtestlib_qtestcase.cpp 23 \sa qWait() */ diff --git a/src/testlib/qtestevent.qdoc b/src/testlib/qtestevent.qdoc index d20cfa95d65..b9290045f73 100644 --- a/src/testlib/qtestevent.qdoc +++ b/src/testlib/qtestevent.qdoc @@ -39,7 +39,7 @@ QWidget. Example: - \snippet doc/src/snippets/code/doc_src_qtestevent.cpp 0 + \snippet code/doc_src_qtestevent.cpp 0 The example above simulates the user entering the character \c a followed by a backspace, waiting for 200 milliseconds and From a4d07f6c0bc71b3e0abd109325b3be4683e0d243 Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Tue, 8 May 2012 13:32:37 +0200 Subject: [PATCH 11/13] Doc: Add "make docs" targets for libraries. Change-Id: I249c238f4986f443f84aaa6a3ac4ce102abff4db Reviewed-by: Marius Storm-Olsen --- src/concurrent/concurrent.pro | 3 +++ src/dbus/dbus.pro | 3 +++ src/gui/gui.pro | 3 +++ src/opengl/opengl.pro | 3 +++ src/printsupport/printsupport.pro | 3 +++ src/testlib/testlib.pro | 3 +++ src/widgets/widgets.pro | 3 +++ 7 files changed, 21 insertions(+) diff --git a/src/concurrent/concurrent.pro b/src/concurrent/concurrent.pro index 6bf16e6a0a5..54359f7d3b9 100644 --- a/src/concurrent/concurrent.pro +++ b/src/concurrent/concurrent.pro @@ -57,6 +57,9 @@ HEADERS += \ qfutureinterface_p.h \ qfuturewatcher_p.h +QMAKE_DOCS = $$PWD/doc/qtconcurrent.qdocconf +QMAKE_DOCS_INDEX = ../../doc + contains(QT_CONFIG, clock-gettime) { linux-*|hpux-*|solaris-*:LIBS *= -lrt } diff --git a/src/dbus/dbus.pro b/src/dbus/dbus.pro index 100736252e8..b1a3e12e1f6 100644 --- a/src/dbus/dbus.pro +++ b/src/dbus/dbus.pro @@ -35,6 +35,9 @@ load(qt_module_config) HEADERS += $$QT_SOURCE_TREE/src/dbus/qtdbusversion.h +QMAKE_DOCS = $$PWD/doc/qtdbus.qdocconf +QMAKE_DOCS_INDEX = ../../doc + PUB_HEADERS = qdbusargument.h \ qdbusconnectioninterface.h \ qdbusmacros.h \ diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 93c087cf640..2d21a7d7b26 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -23,6 +23,9 @@ testcocoon { HEADERS += $$QT_SOURCE_TREE/src/gui/qtguiversion.h +QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf +QMAKE_DOCS_INDEX = ../../doc + include(accessible/accessible.pri) include(kernel/kernel.pri) include(image/image.pri) diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index b2b3790b29d..f1589694a86 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -24,6 +24,9 @@ contains(QT_CONFIG, opengles1):CONFIG += opengles1 contains(QT_CONFIG, opengles2):CONFIG += opengles2 contains(QT_CONFIG, egl):CONFIG += egl +QMAKE_DOCS = $$PWD/doc/qtopengl.qdocconf +QMAKE_DOCS_INDEX = ../../doc + HEADERS += qgl.h \ qgl_p.h \ qglcolormap.h \ diff --git a/src/printsupport/printsupport.pro b/src/printsupport/printsupport.pro index 0aa92a95de7..9002ba3996c 100644 --- a/src/printsupport/printsupport.pro +++ b/src/printsupport/printsupport.pro @@ -15,6 +15,9 @@ load(qt_module_config) HEADERS += $$QT_SOURCE_TREE/src/printsupport/qtprintsupportversion.h +QMAKE_DOCS = $$PWD/doc/qtprintsupport.qdocconf +QMAKE_DOCS_INDEX = ../../doc + QMAKE_LIBS += $$QMAKE_LIBS_PRINTSUPPORT include(kernel/kernel.pri) diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index e4ff21e2aa5..47a52318e85 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -13,6 +13,9 @@ unix:!embedded:QMAKE_PKGCONFIG_DESCRIPTION = Qt \ Testing \ Library +QMAKE_DOCS = $$PWD/doc/qttest.qdocconf +QMAKE_DOCS_INDEX = ../../doc + HEADERS = qbenchmark.h \ qbenchmark_p.h \ qbenchmarkmeasurement_p.h \ diff --git a/src/widgets/widgets.pro b/src/widgets/widgets.pro index a8be4396953..ad1f29259ea 100644 --- a/src/widgets/widgets.pro +++ b/src/widgets/widgets.pro @@ -15,6 +15,9 @@ unix|win32-g++*:QMAKE_PKGCONFIG_REQUIRES = QtCore HEADERS += $$QT_SOURCE_TREE/src/widgets/qtwidgetsversion.h +QMAKE_DOCS = $$PWD/doc/qtwidgets.qdocconf +QMAKE_DOCS_INDEX = ../../doc + include(../qbase.pri) contains(QT_CONFIG, x11sm):CONFIG += x11sm From 47799adc0d1bfb9e0e592dbc9af3eb4680e0c81b Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Wed, 9 May 2012 12:35:30 +0200 Subject: [PATCH 12/13] Doc: Move some remaining files over for modularization. The files in this change were still in qtbase/doc/src or required for it. qtbase/doc/src should now only contain example documentation and images for the example documentation. Change-Id: Ia7ca8e7fd2b316e77c706a08df71303bc8294213 Reviewed-by: Marius Storm-Olsen --- .../corelib/doc}/images/resources.png | Bin .../doc}/snippets/code/doc_src_resources.cpp | 0 .../doc}/snippets/code/doc_src_resources.qdoc | 0 src/corelib/doc/src/io.qdoc | 39 + .../corelib/doc/src/resource-system.qdoc | 28 +- src/corelib/global/qlogging.cpp | 6 +- src/corelib/io/qfiledevice.cpp | 4 +- src/corelib/io/qurlquery.cpp | 2 +- src/corelib/tools/qhash.cpp | 2 +- src/corelib/tools/qstringlist.cpp | 8 +- src/gui/doc/images/qrect-diagram-zero.png | Bin 0 -> 5198 bytes src/gui/doc/images/qrectf-diagram-one.png | Bin 0 -> 9594 bytes src/gui/doc/images/qrectf-diagram-three.png | Bin 0 -> 9392 bytes src/gui/doc/images/qrectf-diagram-two.png | Bin 0 -> 9387 bytes .../doc}/snippets/code/doc_src_coordsys.cpp | 0 src/gui/doc/src/coordsys.qdoc | 20 +- src/gui/kernel/qkeysequence.cpp | 38 +- src/gui/text/qabstracttextdocumentlayout.cpp | 2 +- .../network/doc}/images/tcpstream.png | Bin .../network/doc}/images/udppackets.png | Bin .../network/doc/src}/bearermanagement.qdoc | 0 .../network/doc/src/network-programming.qdoc | 0 .../network/doc/src}/ssl.qdoc | 0 ...ressbook-tutorial-part1-labeled-layout.png | Bin ...book-tutorial-part1-labeled-screenshot.png | Bin .../addressbook-tutorial-part1-screenshot.png | Bin ...addressbook-tutorial-part2-add-contact.png | Bin ...dressbook-tutorial-part2-add-flowchart.png | Bin ...ressbook-tutorial-part2-add-successful.png | Bin ...ressbook-tutorial-part2-labeled-layout.png | Bin ...sbook-tutorial-part2-signals-and-slots.png | Bin ...essbook-tutorial-part2-stretch-effects.png | Bin ...ressbook-tutorial-part3-labeled-layout.png | Bin .../addressbook-tutorial-part3-linkedlist.png | Bin .../addressbook-tutorial-part3-screenshot.png | Bin .../addressbook-tutorial-part4-remove.png | Bin .../addressbook-tutorial-part5-finddialog.png | Bin .../addressbook-tutorial-part5-notfound.png | Bin .../addressbook-tutorial-part5-screenshot.png | Bin ...sbook-tutorial-part5-signals-and-slots.png | Bin .../addressbook-tutorial-part6-load.png | Bin .../addressbook-tutorial-part6-save.png | Bin .../addressbook-tutorial-part6-screenshot.png | Bin .../addressbook-tutorial-part7-screenshot.png | Bin .../addressbook-tutorial-screenshot.png | Bin {doc/src => src/widgets/doc}/images/clock.png | Bin src/widgets/doc/images/columnview.png | Bin 0 -> 3480 bytes .../widgets/doc}/images/dummy_tree.png | Bin .../widgets/doc}/images/example_model.png | Bin .../widgets/doc}/images/list_table_tree.png | Bin src/widgets/doc/images/listview.png | Bin 0 -> 9695 bytes .../doc}/images/mainwindow-docks-example.png | Bin src/widgets/doc/images/modelview-combobox.png | Bin 0 -> 5022 bytes .../widgets/doc}/images/modelview-header.png | Bin src/widgets/doc/images/modelview-models.png | Bin 0 -> 20540 bytes src/widgets/doc/images/modelview-overview.png | Bin 0 -> 15042 bytes src/widgets/doc/images/modelview-roles.png | Bin 0 -> 24954 bytes .../doc/images/modelview-tablemodel.png | Bin 0 -> 12256 bytes .../doc/images/modelview-treemodel.png | Bin 0 -> 9193 bytes .../widgets/doc}/images/modelview.png | Bin .../widgets/doc}/images/qcompleter.png | Bin .../doc}/images/readonlytable_role.png | Bin src/widgets/doc/images/selected-items1.png | Bin 0 -> 31870 bytes src/widgets/doc/images/selected-items2.png | Bin 0 -> 32025 bytes src/widgets/doc/images/selected-items3.png | Bin 0 -> 32100 bytes src/widgets/doc/images/selection-extended.png | Bin 0 -> 11401 bytes src/widgets/doc/images/selection-multi.png | Bin 0 -> 13058 bytes src/widgets/doc/images/selection-single.png | Bin 0 -> 7849 bytes .../widgets/doc}/images/selection2.png | Bin src/widgets/doc/images/shareddirmodel.png | Bin 0 -> 45891 bytes .../doc/images/sharedmodel-tableviews.png | Bin 0 -> 16811 bytes .../doc/images/sharedselection-tableviews.png | Bin 0 -> 14212 bytes .../doc}/images/spinboxdelegate-example.png | Bin src/widgets/doc/images/standard-views.png | Bin 0 -> 44495 bytes .../widgets/doc}/images/standardwidget.png | Bin .../widgets/doc}/images/stardelegate.png | Bin src/widgets/doc/images/stringlistmodel.png | Bin 0 -> 4849 bytes src/widgets/doc/images/tableview.png | Bin 0 -> 10102 bytes .../doc}/images/tree_2_with_algorithm.png | Bin .../widgets/doc}/images/treeview.png | Bin .../widgets/doc}/images/widgetmapper.png | Bin .../images/widgets-tutorial-childwidget.png | Bin 0 -> 8547 bytes .../images/widgets-tutorial-nestedlayouts.png | Bin 0 -> 23287 bytes .../doc/images/widgets-tutorial-toplevel.png | Bin 0 -> 6087 bytes .../images/widgets-tutorial-windowlayout.png | Bin 0 -> 5849 bytes .../code/doc_src_model-view-programming.cpp | 76 + .../snippets/code/doc_src_qt4-mainwindow.cpp | 0 .../doc}/snippets/dockwidgets/mainwindow.cpp | 0 .../snippets/itemselection/itemselection.pro | 3 + .../doc/snippets/itemselection/main.cpp | 115 + .../doc/snippets/itemselection/model.cpp | 238 ++ .../doc/snippets/itemselection/model.h | 71 +- .../doc/snippets/qlistview-dnd/main.cpp | 15 +- .../doc/snippets/qlistview-dnd/mainwindow.cpp | 83 + .../doc/snippets/qlistview-dnd/mainwindow.h | 61 + .../doc/snippets/qlistview-dnd/model.cpp | 167 ++ .../doc/snippets/qlistview-dnd/model.h | 68 +- .../snippets/qlistview-dnd/qlistview-dnd.pro | 5 + .../doc/snippets/qlistwidget-dnd/main.cpp | 16 +- .../snippets/qlistwidget-dnd/mainwindow.cpp | 87 + .../doc/snippets/qlistwidget-dnd/mainwindow.h | 62 + .../qlistwidget-dnd/qlistwidget-dnd.pro | 3 + .../snippets/qsortfilterproxymodel/main.cpp | 77 + .../qsortfilterproxymodel.pro | 1 + .../qtablewidget-using/Images/cubed.png | Bin 0 -> 437 bytes .../qtablewidget-using/Images/squared.png | Bin 0 -> 440 bytes .../snippets/qtablewidget-using/images.qrc | 6 + .../doc/snippets/qtablewidget-using/main.cpp | 15 +- .../snippets/qtablewidget-using/mainwindow.h | 50 +- .../qtablewidget-using/qtablewidget-using.pro | 4 + .../doc/snippets/reading-selections/main.cpp | 59 + .../doc/snippets/reading-selections/model.cpp | 238 ++ .../doc/snippets/reading-selections/model.h | 74 + .../reading-selections/reading-selections.pro | 2 + .../snippets/reading-selections/window.cpp | 120 + .../doc/snippets/reading-selections/window.h | 67 + .../doc/snippets/sharedtablemodel/main.cpp | 89 + .../doc/snippets/sharedtablemodel/model.cpp | 236 ++ .../doc/snippets/sharedtablemodel/model.h | 74 + .../sharedtablemodel/sharedtablemodel.pro | 2 + .../doc/snippets/simplemodel-use/main.cpp | 95 + .../simplemodel-use/simplemodel-use.pro | 1 + .../doc/snippets/stringlistmodel/main.cpp | 83 + .../doc/snippets/stringlistmodel/model.cpp | 211 ++ .../doc/snippets/stringlistmodel/model.h | 82 + .../stringlistmodel/stringlistmodel.pro | 3 + .../doc/snippets/updating-selections/main.cpp | 59 + .../snippets/updating-selections/model.cpp | 236 ++ .../doc/snippets/updating-selections/model.h | 74 + .../updating-selections.pro | 2 + .../snippets/updating-selections/window.cpp | 109 + .../doc/snippets/updating-selections/window.h | 67 + .../snippets/widgets-tutorial/template.cpp | 0 .../widgets/doc/src}/addressbook-fr.qdoc | 0 .../widgets/doc/src}/addressbook.qdoc | 0 .../doc/src/model-view-programming.qdoc | 2339 +++++++++++++++++ .../widgets/doc/src}/modelview.qdoc | 30 +- .../widgets/doc/src}/widgets-tutorial.qdoc | 2 +- .../doc/src}/windows-and-dialogs/dialogs.qdoc | 0 .../src}/windows-and-dialogs/mainwindow.qdoc | 18 +- 140 files changed, 5536 insertions(+), 208 deletions(-) rename {doc/src => src/corelib/doc}/images/resources.png (100%) rename {doc/src => src/corelib/doc}/snippets/code/doc_src_resources.cpp (100%) rename {doc/src => src/corelib/doc}/snippets/code/doc_src_resources.qdoc (100%) create mode 100644 src/corelib/doc/src/io.qdoc rename doc/src/network/files-and-resources/resources.qdoc => src/corelib/doc/src/resource-system.qdoc (90%) create mode 100644 src/gui/doc/images/qrect-diagram-zero.png create mode 100644 src/gui/doc/images/qrectf-diagram-one.png create mode 100644 src/gui/doc/images/qrectf-diagram-three.png create mode 100644 src/gui/doc/images/qrectf-diagram-two.png rename {doc/src => src/gui/doc}/snippets/code/doc_src_coordsys.cpp (100%) rename {doc/src => src/network/doc}/images/tcpstream.png (100%) rename {doc/src => src/network/doc}/images/udppackets.png (100%) rename {doc/src/network/network-programming => src/network/doc/src}/bearermanagement.qdoc (100%) rename doc/src/network/network-programming/qtnetwork.qdoc => src/network/doc/src/network-programming.qdoc (100%) rename {doc/src/network/network-programming => src/network/doc/src}/ssl.qdoc (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part1-labeled-layout.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part1-labeled-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part1-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part2-add-contact.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part2-add-flowchart.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part2-add-successful.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part2-labeled-layout.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part2-signals-and-slots.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part2-stretch-effects.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part3-labeled-layout.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part3-linkedlist.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part3-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part4-remove.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part5-finddialog.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part5-notfound.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part5-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part5-signals-and-slots.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part6-load.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part6-save.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part6-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-part7-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/addressbook-tutorial-screenshot.png (100%) rename {doc/src => src/widgets/doc}/images/clock.png (100%) create mode 100644 src/widgets/doc/images/columnview.png rename {doc/src => src/widgets/doc}/images/dummy_tree.png (100%) rename {doc/src => src/widgets/doc}/images/example_model.png (100%) rename {doc/src => src/widgets/doc}/images/list_table_tree.png (100%) create mode 100755 src/widgets/doc/images/listview.png rename {doc/src => src/widgets/doc}/images/mainwindow-docks-example.png (100%) create mode 100755 src/widgets/doc/images/modelview-combobox.png rename {doc/src => src/widgets/doc}/images/modelview-header.png (100%) create mode 100644 src/widgets/doc/images/modelview-models.png create mode 100644 src/widgets/doc/images/modelview-overview.png create mode 100644 src/widgets/doc/images/modelview-roles.png create mode 100644 src/widgets/doc/images/modelview-tablemodel.png create mode 100644 src/widgets/doc/images/modelview-treemodel.png rename {doc/src => src/widgets/doc}/images/modelview.png (100%) rename {doc/src => src/widgets/doc}/images/qcompleter.png (100%) rename {doc/src => src/widgets/doc}/images/readonlytable_role.png (100%) create mode 100644 src/widgets/doc/images/selected-items1.png create mode 100644 src/widgets/doc/images/selected-items2.png create mode 100644 src/widgets/doc/images/selected-items3.png create mode 100644 src/widgets/doc/images/selection-extended.png create mode 100644 src/widgets/doc/images/selection-multi.png create mode 100644 src/widgets/doc/images/selection-single.png rename {doc/src => src/widgets/doc}/images/selection2.png (100%) create mode 100644 src/widgets/doc/images/shareddirmodel.png create mode 100644 src/widgets/doc/images/sharedmodel-tableviews.png create mode 100644 src/widgets/doc/images/sharedselection-tableviews.png rename {doc/src => src/widgets/doc}/images/spinboxdelegate-example.png (100%) create mode 100644 src/widgets/doc/images/standard-views.png rename {doc/src => src/widgets/doc}/images/standardwidget.png (100%) rename {doc/src => src/widgets/doc}/images/stardelegate.png (100%) create mode 100644 src/widgets/doc/images/stringlistmodel.png create mode 100755 src/widgets/doc/images/tableview.png rename {doc/src => src/widgets/doc}/images/tree_2_with_algorithm.png (100%) rename {doc/src => src/widgets/doc}/images/treeview.png (100%) rename {doc/src => src/widgets/doc}/images/widgetmapper.png (100%) create mode 100644 src/widgets/doc/images/widgets-tutorial-childwidget.png create mode 100644 src/widgets/doc/images/widgets-tutorial-nestedlayouts.png create mode 100644 src/widgets/doc/images/widgets-tutorial-toplevel.png create mode 100644 src/widgets/doc/images/widgets-tutorial-windowlayout.png create mode 100644 src/widgets/doc/snippets/code/doc_src_model-view-programming.cpp rename {doc/src => src/widgets/doc}/snippets/code/doc_src_qt4-mainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/dockwidgets/mainwindow.cpp (100%) create mode 100644 src/widgets/doc/snippets/itemselection/itemselection.pro create mode 100644 src/widgets/doc/snippets/itemselection/main.cpp create mode 100644 src/widgets/doc/snippets/itemselection/model.cpp rename doc/src/snippets/code/src_gui_embedded_qwindowsystem_qws.cpp => src/widgets/doc/snippets/itemselection/model.h (63%) rename doc/src/snippets/code/src_gui_embedded_qscreen_qws.cpp => src/widgets/doc/snippets/qlistview-dnd/main.cpp (91%) create mode 100644 src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp create mode 100644 src/widgets/doc/snippets/qlistview-dnd/mainwindow.h create mode 100644 src/widgets/doc/snippets/qlistview-dnd/model.cpp rename doc/src/snippets/code/src_gui_embedded_qtransportauth_qws.cpp => src/widgets/doc/snippets/qlistview-dnd/model.h (68%) create mode 100644 src/widgets/doc/snippets/qlistview-dnd/qlistview-dnd.pro rename doc/src/snippets/code/src_gui_embedded_qmousetslib_qws.cpp => src/widgets/doc/snippets/qlistwidget-dnd/main.cpp (91%) create mode 100644 src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp create mode 100644 src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h create mode 100644 src/widgets/doc/snippets/qlistwidget-dnd/qlistwidget-dnd.pro create mode 100644 src/widgets/doc/snippets/qsortfilterproxymodel/main.cpp create mode 100644 src/widgets/doc/snippets/qsortfilterproxymodel/qsortfilterproxymodel.pro create mode 100644 src/widgets/doc/snippets/qtablewidget-using/Images/cubed.png create mode 100644 src/widgets/doc/snippets/qtablewidget-using/Images/squared.png create mode 100644 src/widgets/doc/snippets/qtablewidget-using/images.qrc rename doc/src/snippets/code/src_gui_embedded_qmouse_qws.cpp => src/widgets/doc/snippets/qtablewidget-using/main.cpp (91%) rename doc/src/snippets/code/src_gui_embedded_qcopchannel_qws.cpp => src/widgets/doc/snippets/qtablewidget-using/mainwindow.h (78%) create mode 100644 src/widgets/doc/snippets/qtablewidget-using/qtablewidget-using.pro create mode 100644 src/widgets/doc/snippets/reading-selections/main.cpp create mode 100644 src/widgets/doc/snippets/reading-selections/model.cpp create mode 100644 src/widgets/doc/snippets/reading-selections/model.h create mode 100644 src/widgets/doc/snippets/reading-selections/reading-selections.pro create mode 100644 src/widgets/doc/snippets/reading-selections/window.cpp create mode 100644 src/widgets/doc/snippets/reading-selections/window.h create mode 100644 src/widgets/doc/snippets/sharedtablemodel/main.cpp create mode 100644 src/widgets/doc/snippets/sharedtablemodel/model.cpp create mode 100644 src/widgets/doc/snippets/sharedtablemodel/model.h create mode 100644 src/widgets/doc/snippets/sharedtablemodel/sharedtablemodel.pro create mode 100644 src/widgets/doc/snippets/simplemodel-use/main.cpp create mode 100644 src/widgets/doc/snippets/simplemodel-use/simplemodel-use.pro create mode 100644 src/widgets/doc/snippets/stringlistmodel/main.cpp create mode 100644 src/widgets/doc/snippets/stringlistmodel/model.cpp create mode 100644 src/widgets/doc/snippets/stringlistmodel/model.h create mode 100644 src/widgets/doc/snippets/stringlistmodel/stringlistmodel.pro create mode 100644 src/widgets/doc/snippets/updating-selections/main.cpp create mode 100644 src/widgets/doc/snippets/updating-selections/model.cpp create mode 100644 src/widgets/doc/snippets/updating-selections/model.h create mode 100644 src/widgets/doc/snippets/updating-selections/updating-selections.pro create mode 100644 src/widgets/doc/snippets/updating-selections/window.cpp create mode 100644 src/widgets/doc/snippets/updating-selections/window.h rename {doc/src => src/widgets/doc}/snippets/widgets-tutorial/template.cpp (100%) rename {doc/src/widgets => src/widgets/doc/src}/addressbook-fr.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/addressbook.qdoc (100%) create mode 100644 src/widgets/doc/src/model-view-programming.qdoc rename {doc/src/widgets => src/widgets/doc/src}/modelview.qdoc (96%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-tutorial.qdoc (99%) rename {doc/src/widgets => src/widgets/doc/src}/windows-and-dialogs/dialogs.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/windows-and-dialogs/mainwindow.qdoc (95%) diff --git a/doc/src/images/resources.png b/src/corelib/doc/images/resources.png similarity index 100% rename from doc/src/images/resources.png rename to src/corelib/doc/images/resources.png diff --git a/doc/src/snippets/code/doc_src_resources.cpp b/src/corelib/doc/snippets/code/doc_src_resources.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_resources.cpp rename to src/corelib/doc/snippets/code/doc_src_resources.cpp diff --git a/doc/src/snippets/code/doc_src_resources.qdoc b/src/corelib/doc/snippets/code/doc_src_resources.qdoc similarity index 100% rename from doc/src/snippets/code/doc_src_resources.qdoc rename to src/corelib/doc/snippets/code/doc_src_resources.qdoc diff --git a/src/corelib/doc/src/io.qdoc b/src/corelib/doc/src/io.qdoc new file mode 100644 index 00000000000..dfe9be2b3c3 --- /dev/null +++ b/src/corelib/doc/src/io.qdoc @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \group io + \title Input/Output and Networking + \ingroup groups + + \brief Classes providing file input and output along with directory and + network handling. + + These classes are used to handle input and output to and from external + devices, processes, files etc. as well as manipulating files and directories. +*/ + diff --git a/doc/src/network/files-and-resources/resources.qdoc b/src/corelib/doc/src/resource-system.qdoc similarity index 90% rename from doc/src/network/files-and-resources/resources.qdoc rename to src/corelib/doc/src/resource-system.qdoc index 1d0fc51631b..89a099a1c16 100644 --- a/doc/src/network/files-and-resources/resources.qdoc +++ b/src/corelib/doc/src/resource-system.qdoc @@ -25,18 +25,6 @@ ** ****************************************************************************/ -/*! - \group io - \title Input/Output and Networking - \ingroup groups - - \brief Classes providing file input and output along with directory and - network handling. - - These classes are used to handle input and output to and from external - devices, processes, files etc. as well as manipulating files and directories. -*/ - /*! \page resources.html \title The Qt Resource System @@ -89,14 +77,14 @@ is \c images/cut.png. This can be changed using the \c file tag's \c alias attribute: - \snippet doc/src/snippets/code/doc_src_resources.qdoc 0 + \snippet code/doc_src_resources.qdoc 0 The file is then accessible as \c :/cut-img.png from the application. It is also possible to specify a path prefix for all files in the \c .qrc file using the \c qresource tag's \c prefix attribute: - \snippet doc/src/snippets/code/doc_src_resources.qdoc 1 + \snippet code/doc_src_resources.qdoc 1 In this case, the file is accessible as \c :/myresources/cut-img.png. @@ -106,7 +94,7 @@ attribute to the \c qresource tag, specifying a suitable locale string. For example: - \snippet doc/src/snippets/code/doc_src_resources.qdoc 2 + \snippet code/doc_src_resources.qdoc 2 If the user's locale is French (i.e., QLocale::system().name() returns "fr_FR"), \c :/cut.jpg becomes a reference to the \c cut_fr.jpg @@ -126,11 +114,11 @@ For example, a set of resource data specified in a \c .qrc file can be compiled in the following way: - \snippet doc/src/snippets/code/doc_src_resources.qdoc 3 + \snippet code/doc_src_resources.qdoc 3 In the application, this resource would be registered with code like this: - \snippet doc/src/snippets/code/doc_src_resources.cpp 4 + \snippet code/doc_src_resources.cpp 4 \section2 Compiled-In Resources @@ -138,7 +126,7 @@ mentioned in the application's \c .pro file so that \c qmake knows about it. For example: - \snippet examples/mainwindows/application/application.pro 0 + \snippet mainwindows/application/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 @@ -183,7 +171,7 @@ pass a resource path instead of a file name to the QIcon, QImage, or QPixmap constructor: - \snippet examples/mainwindows/application/mainwindow.cpp 21 + \snippet mainwindows/application/mainwindow.cpp 21 See the \l{mainwindows/application}{Application} example for an actual application that uses Qt's resource system to store its @@ -205,7 +193,7 @@ Q_INIT_RESOURCE() with the base name of the \c .qrc file. For example: - \snippet doc/src/snippets/code/doc_src_resources.cpp 5 + \snippet code/doc_src_resources.cpp 5 Similarly, if you must unload a set of resources explicitly (because a plugin is being unloaded or the resources are not valid diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp index 52ffae5f985..ed845745beb 100644 --- a/src/corelib/global/qlogging.cpp +++ b/src/corelib/global/qlogging.cpp @@ -737,7 +737,7 @@ void qWinMessageHandler2(QtMsgType t, const QMessageLogContext &context, This is a typedef for a pointer to a function with the following signature: - \snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 7 + \snippet code/src_corelib_global_qglobal.cpp 7 This typedef is deprecated, you should use QtMessageHandler instead. \sa QtMsgType, QtMessageHandler, qInstallMsgHandler(), qInstallMessageHandler() @@ -751,7 +751,7 @@ void qWinMessageHandler2(QtMsgType t, const QMessageLogContext &context, This is a typedef for a pointer to a function with the following signature: - \snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 49 + \snippet code/src_corelib_global_qglobal.cpp 49 \sa QtMsgType, qInstallMessageHandler() */ @@ -785,7 +785,7 @@ void qWinMessageHandler2(QtMsgType t, const QMessageLogContext &context, Example: - \snippet doc/src/snippets/code/src_corelib_global_qglobal.cpp 23 + \snippet code/src_corelib_global_qglobal.cpp 23 \sa QtMessageHandler, QtMsgType, qDebug(), qWarning(), qCritical(), qFatal(), {Debugging Techniques} diff --git a/src/corelib/io/qfiledevice.cpp b/src/corelib/io/qfiledevice.cpp index 17eedb0bdd6..e1f1db9eadc 100644 --- a/src/corelib/io/qfiledevice.cpp +++ b/src/corelib/io/qfiledevice.cpp @@ -146,12 +146,12 @@ void QFileDevicePrivate::setError(QFileDevice::FileError err, int errNum) handling considerably. It is possible to force permission checking on NTFS by including the following code in your source: - \snippet doc/src/snippets/ntfsp.cpp 0 + \snippet ntfsp.cpp 0 Permission checking is then turned on and off by incrementing and decrementing \c qt_ntfs_permission_lookup by 1. - \snippet doc/src/snippets/ntfsp.cpp 1 + \snippet ntfsp.cpp 1 */ //************* QFileDevice diff --git a/src/corelib/io/qurlquery.cpp b/src/corelib/io/qurlquery.cpp index 2e2db115588..5625aebd3ca 100644 --- a/src/corelib/io/qurlquery.cpp +++ b/src/corelib/io/qurlquery.cpp @@ -511,7 +511,7 @@ QString QUrlQuery::query(QUrl::ComponentFormattingOptions encoding) const If \a valueDelimiter is set to '(' and \a pairDelimiter is ')', the above query string would instead be represented like this: - \snippet doc/src/snippets/code/src_corelib_io_qurl.cpp 4 + \snippet code/src_corelib_io_qurl.cpp 4 \note Non-standard delimiters should be chosen from among what RFC 3986 calls "sub-delimiters". They are: diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index 10dcff92c7d..3172014363d 100644 --- a/src/corelib/tools/qhash.cpp +++ b/src/corelib/tools/qhash.cpp @@ -838,7 +838,7 @@ void QHashData::checkSanity() operator==() and a qHash() implementation. Example: - \snippet doc/src/snippets/code/src_corelib_tools_qhash.cpp 13 + \snippet code/src_corelib_tools_qhash.cpp 13 In the example above, we've relied on Qt's global qHash(const QString &, uint) to give us a hash value for the employee's name, and diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index c25d326b9dd..0b0aeb50c0c 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -404,8 +404,8 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegExp &r For example: - \snippet doc/src/snippets/qstringlist/main.cpp 5 - \snippet doc/src/snippets/qstringlist/main.cpp 16 + \snippet qstringlist/main.cpp 5 + \snippet qstringlist/main.cpp 16 For regular expressions that contain capturing groups, occurrences of \b{\\1}, \b{\\2}, ..., in \a after are @@ -413,8 +413,8 @@ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegExp &r For example: - \snippet doc/src/snippets/qstringlist/main.cpp 5 - \snippet doc/src/snippets/qstringlist/main.cpp 17 + \snippet qstringlist/main.cpp 5 + \snippet qstringlist/main.cpp 17 */ void QtPrivate::QStringList_replaceInStrings(QStringList *that, const QRegularExpression &re, const QString &after) { diff --git a/src/gui/doc/images/qrect-diagram-zero.png b/src/gui/doc/images/qrect-diagram-zero.png new file mode 100644 index 0000000000000000000000000000000000000000..90e3db0c413c642b22b885b31c9cb1c359b05967 GIT binary patch literal 5198 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 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qrectf-diagram-one.png b/src/gui/doc/images/qrectf-diagram-one.png new file mode 100644 index 0000000000000000000000000000000000000000..842289ce073d6d5b183bdbcadb3618219e682846 GIT binary patch literal 9594 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 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qrectf-diagram-three.png b/src/gui/doc/images/qrectf-diagram-three.png new file mode 100644 index 0000000000000000000000000000000000000000..e05106a7e173a24b71255b52f894f460665762f4 GIT binary patch literal 9392 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 D(#KZC literal 0 HcmV?d00001 diff --git a/doc/src/snippets/code/doc_src_coordsys.cpp b/src/gui/doc/snippets/code/doc_src_coordsys.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_coordsys.cpp rename to src/gui/doc/snippets/code/doc_src_coordsys.cpp diff --git a/src/gui/doc/src/coordsys.qdoc b/src/gui/doc/src/coordsys.qdoc index 655dbf7cf3e..bfa046f7fb9 100644 --- a/src/gui/doc/src/coordsys.qdoc +++ b/src/gui/doc/src/coordsys.qdoc @@ -97,10 +97,10 @@ \row \li - \snippet doc/src/snippets/code/doc_src_coordsys.cpp 0 + \snippet code/doc_src_coordsys.cpp 0 \li - \snippet doc/src/snippets/code/doc_src_coordsys.cpp 1 + \snippet code/doc_src_coordsys.cpp 1 \endtable When rendering with a pen with an even number of pixels, the @@ -163,10 +163,10 @@ \row \li - \snippet doc/src/snippets/code/doc_src_coordsys.cpp 2 + \snippet code/doc_src_coordsys.cpp 2 \li - \snippet doc/src/snippets/code/doc_src_coordsys.cpp 3 + \snippet code/doc_src_coordsys.cpp 3 \endtable \section1 Transformations @@ -238,7 +238,7 @@ \row \li {2,1} - \snippet examples/widgets/analogclock/analogclock.cpp 9 + \snippet widgets/analogclock/analogclock.cpp 9 First, we set up the painter. We translate the coordinate system so that point (0, 0) is in the widget's center, instead of being @@ -253,7 +253,7 @@ See also the \l {Window-Viewport Conversion} section. - \snippet examples/widgets/analogclock/analogclock.cpp 18 + \snippet widgets/analogclock/analogclock.cpp 18 We draw the clock's hour hand by rotating the coordinate system and calling QPainter::drawConvexPolygon(). Thank's to the @@ -268,14 +268,14 @@ the code guarantees that the code that follows won't be disturbed by the transformations we've used. - \snippet examples/widgets/analogclock/analogclock.cpp 24 + \snippet widgets/analogclock/analogclock.cpp 24 We do the same for the clock's minute hand, which is defined by the four points (1, 0), (0, 1), (-1, 0), and (0, -40). These coordinates specify a hand that is thinner and longer than the minute hand. - \snippet examples/widgets/analogclock/analogclock.cpp 27 + \snippet widgets/analogclock/analogclock.cpp 27 Finally, we draw the clock face, which consists of twelve short lines at 30-degree intervals. At the end of that, the painter is @@ -319,7 +319,7 @@ -50) to (50, 50) with (0, 0) in the center by calling the QPainter::setWindow() function: - \snippet doc/src/snippets/code/doc_src_coordsys.cpp 4 + \snippet code/doc_src_coordsys.cpp 4 Now, the logical coordinates (-50,-50) correspond to the paint device's physical coordinates (0, 0). Independent of the paint @@ -333,7 +333,7 @@ viewport and "window" maintain the same aspect ratio to prevent deformation: - \snippet doc/src/snippets/code/doc_src_coordsys.cpp 5 + \snippet code/doc_src_coordsys.cpp 5 If we make the logical coordinate system a square, we should also make the viewport a square using the QPainter::setViewport() diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 635e3dadca4..d03294f2461 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -177,7 +177,7 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni more modifiers, such as Qt::SHIFT, Qt::CTRL, Qt::ALT and Qt::META. \endlist - For example, \gui{Ctrl P} might be a sequence used as a shortcut for + For example, \uicontrol{Ctrl P} might be a sequence used as a shortcut for printing a document, and can be specified in any of the following ways: @@ -185,8 +185,8 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni Note that, for letters, the case used in the specification string does not matter. In the above examples, the user does not need to - hold down the \key{Shift} key to activate a shortcut specified - with "Ctrl+P". However, for other keys, the use of \key{Shift} as + hold down the \uicontrol{Shift} key to activate a shortcut specified + with "Ctrl+P". However, for other keys, the use of \uicontrol{Shift} as an unspecified extra modifier key can lead to confusion for users of an application whose keyboards have different layouts to those used by the developers. See the \l{Keyboard Layout Issues} section @@ -207,9 +207,9 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni as Qt::Key_A. \b{Note:} On Mac OS X, references to "Ctrl", Qt::CTRL, Qt::Control - and Qt::ControlModifier correspond to the \key Command keys on the + and Qt::ControlModifier correspond to the \uicontrol Command keys on the Macintosh keyboard, and references to "Meta", Qt::META, Qt::Meta and - Qt::MetaModifier correspond to the \key Control keys. Developers on + Qt::MetaModifier correspond to the \uicontrol Control keys. Developers on Mac OS X can use the same shortcut descriptions across all platforms, and their applications will automatically work as expected on Mac OS X. @@ -220,9 +220,9 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni setting up actions in a typical application. The table below shows some common key sequences that are often used for these standard shortcuts by applications on four widely-used platforms. Note - that on Mac OS X, the \key Ctrl value corresponds to the \key - Command keys on the Macintosh keyboard, and the \key Meta value - corresponds to the \key Control keys. + that on Mac OS X, the \uicontrol Ctrl value corresponds to the \uicontrol + Command keys on the Macintosh keyboard, and the \uicontrol Meta value + corresponds to the \uicontrol Control keys. \table \header \li StandardKey \li Windows \li Mac OS X \li KDE \li GNOME @@ -302,23 +302,23 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni Many key sequence specifications are chosen by developers based on the layout of certain types of keyboard, rather than choosing keys that - represent the first letter of an action's name, such as \key{Ctrl S} - ("Ctrl+S") or \key{Ctrl C} ("Ctrl+C"). + represent the first letter of an action's name, such as \uicontrol{Ctrl S} + ("Ctrl+S") or \uicontrol{Ctrl C} ("Ctrl+C"). Additionally, because certain symbols can only be entered with the help of modifier keys on certain keyboard layouts, key sequences intended for use with one keyboard layout may map to a different key, map to no keys at all, or require an additional modifier key to be used on different keyboard layouts. - For example, the shortcuts, \key{Ctrl plus} and \key{Ctrl minus}, are often + For example, the shortcuts, \uicontrol{Ctrl plus} and \uicontrol{Ctrl minus}, are often used as shortcuts for zoom operations in graphics applications, and these may be specified as "Ctrl++" and "Ctrl+-" respectively. However, the way these shortcuts are specified and interpreted depends on the keyboard layout. - Users of Norwegian keyboards will note that the \key{+} and \key{-} keys + Users of Norwegian keyboards will note that the \uicontrol{+} and \uicontrol{-} keys are not adjacent on the keyboard, but will still be able to activate both - shortcuts without needing to press the \key{Shift} key. However, users - with British keyboards will need to hold down the \key{Shift} key - to enter the \key{+} symbol, making the shortcut effectively the same as + shortcuts without needing to press the \uicontrol{Shift} key. However, users + with British keyboards will need to hold down the \uicontrol{Shift} key + to enter the \uicontrol{+} symbol, making the shortcut effectively the same as "Ctrl+Shift+=". Although some developers might resort to fully specifying all the modifiers @@ -327,9 +327,9 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni For example, a developer using a British keyboard may decide to specify "Ctrl+Shift+=" as the key sequence in order to create a shortcut that - coincidentally behaves in the same way as \key{Ctrl plus}. However, the - \key{=} key needs to be accessed using the \key{Shift} key on Norwegian - keyboard, making the required shortcut effectively \key{Ctrl Shift Shift =} + coincidentally behaves in the same way as \uicontrol{Ctrl plus}. However, the + \uicontrol{=} key needs to be accessed using the \uicontrol{Shift} key on Norwegian + keyboard, making the required shortcut effectively \uicontrol{Ctrl Shift Shift =} (an impossible key combination). As a result, both human-readable strings and hard-coded key codes @@ -351,7 +351,7 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni key codes, can be created by using the multiple argument constructor, or by passing a human-readable string of comma-separated key sequences. - For example, the key sequence, \key{Ctrl X} followed by \key{Ctrl C}, can + For example, the key sequence, \uicontrol{Ctrl X} followed by \uicontrol{Ctrl C}, can be specified using either of the following ways: \snippet code/src_gui_kernel_qkeysequence.cpp 1 diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index e14cfe0f82f..45903f678c8 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -120,7 +120,7 @@ QT_BEGIN_NAMESPACE and QTextObjectInterface. QObject must be the first class inherited. For instance: - \snippet examples/richtext/textobject/svgtextobject.h 1 + \snippet richtext/textobject/svgtextobject.h 1 The data of a text object is usually stored in the QTextCharFormat using QTextCharFormat::setProperty(), and then retrieved with diff --git a/doc/src/images/tcpstream.png b/src/network/doc/images/tcpstream.png similarity index 100% rename from doc/src/images/tcpstream.png rename to src/network/doc/images/tcpstream.png diff --git a/doc/src/images/udppackets.png b/src/network/doc/images/udppackets.png similarity index 100% rename from doc/src/images/udppackets.png rename to src/network/doc/images/udppackets.png diff --git a/doc/src/network/network-programming/bearermanagement.qdoc b/src/network/doc/src/bearermanagement.qdoc similarity index 100% rename from doc/src/network/network-programming/bearermanagement.qdoc rename to src/network/doc/src/bearermanagement.qdoc diff --git a/doc/src/network/network-programming/qtnetwork.qdoc b/src/network/doc/src/network-programming.qdoc similarity index 100% rename from doc/src/network/network-programming/qtnetwork.qdoc rename to src/network/doc/src/network-programming.qdoc diff --git a/doc/src/network/network-programming/ssl.qdoc b/src/network/doc/src/ssl.qdoc similarity index 100% rename from doc/src/network/network-programming/ssl.qdoc rename to src/network/doc/src/ssl.qdoc diff --git a/doc/src/images/addressbook-tutorial-part1-labeled-layout.png b/src/widgets/doc/images/addressbook-tutorial-part1-labeled-layout.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part1-labeled-layout.png rename to src/widgets/doc/images/addressbook-tutorial-part1-labeled-layout.png diff --git a/doc/src/images/addressbook-tutorial-part1-labeled-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-part1-labeled-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part1-labeled-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-part1-labeled-screenshot.png diff --git a/doc/src/images/addressbook-tutorial-part1-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-part1-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part1-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-part1-screenshot.png diff --git a/doc/src/images/addressbook-tutorial-part2-add-contact.png b/src/widgets/doc/images/addressbook-tutorial-part2-add-contact.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part2-add-contact.png rename to src/widgets/doc/images/addressbook-tutorial-part2-add-contact.png diff --git a/doc/src/images/addressbook-tutorial-part2-add-flowchart.png b/src/widgets/doc/images/addressbook-tutorial-part2-add-flowchart.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part2-add-flowchart.png rename to src/widgets/doc/images/addressbook-tutorial-part2-add-flowchart.png diff --git a/doc/src/images/addressbook-tutorial-part2-add-successful.png b/src/widgets/doc/images/addressbook-tutorial-part2-add-successful.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part2-add-successful.png rename to src/widgets/doc/images/addressbook-tutorial-part2-add-successful.png diff --git a/doc/src/images/addressbook-tutorial-part2-labeled-layout.png b/src/widgets/doc/images/addressbook-tutorial-part2-labeled-layout.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part2-labeled-layout.png rename to src/widgets/doc/images/addressbook-tutorial-part2-labeled-layout.png diff --git a/doc/src/images/addressbook-tutorial-part2-signals-and-slots.png b/src/widgets/doc/images/addressbook-tutorial-part2-signals-and-slots.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part2-signals-and-slots.png rename to src/widgets/doc/images/addressbook-tutorial-part2-signals-and-slots.png diff --git a/doc/src/images/addressbook-tutorial-part2-stretch-effects.png b/src/widgets/doc/images/addressbook-tutorial-part2-stretch-effects.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part2-stretch-effects.png rename to src/widgets/doc/images/addressbook-tutorial-part2-stretch-effects.png diff --git a/doc/src/images/addressbook-tutorial-part3-labeled-layout.png b/src/widgets/doc/images/addressbook-tutorial-part3-labeled-layout.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part3-labeled-layout.png rename to src/widgets/doc/images/addressbook-tutorial-part3-labeled-layout.png diff --git a/doc/src/images/addressbook-tutorial-part3-linkedlist.png b/src/widgets/doc/images/addressbook-tutorial-part3-linkedlist.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part3-linkedlist.png rename to src/widgets/doc/images/addressbook-tutorial-part3-linkedlist.png diff --git a/doc/src/images/addressbook-tutorial-part3-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-part3-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part3-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-part3-screenshot.png diff --git a/doc/src/images/addressbook-tutorial-part4-remove.png b/src/widgets/doc/images/addressbook-tutorial-part4-remove.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part4-remove.png rename to src/widgets/doc/images/addressbook-tutorial-part4-remove.png diff --git a/doc/src/images/addressbook-tutorial-part5-finddialog.png b/src/widgets/doc/images/addressbook-tutorial-part5-finddialog.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part5-finddialog.png rename to src/widgets/doc/images/addressbook-tutorial-part5-finddialog.png diff --git a/doc/src/images/addressbook-tutorial-part5-notfound.png b/src/widgets/doc/images/addressbook-tutorial-part5-notfound.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part5-notfound.png rename to src/widgets/doc/images/addressbook-tutorial-part5-notfound.png diff --git a/doc/src/images/addressbook-tutorial-part5-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-part5-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part5-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-part5-screenshot.png diff --git a/doc/src/images/addressbook-tutorial-part5-signals-and-slots.png b/src/widgets/doc/images/addressbook-tutorial-part5-signals-and-slots.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part5-signals-and-slots.png rename to src/widgets/doc/images/addressbook-tutorial-part5-signals-and-slots.png diff --git a/doc/src/images/addressbook-tutorial-part6-load.png b/src/widgets/doc/images/addressbook-tutorial-part6-load.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part6-load.png rename to src/widgets/doc/images/addressbook-tutorial-part6-load.png diff --git a/doc/src/images/addressbook-tutorial-part6-save.png b/src/widgets/doc/images/addressbook-tutorial-part6-save.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part6-save.png rename to src/widgets/doc/images/addressbook-tutorial-part6-save.png diff --git a/doc/src/images/addressbook-tutorial-part6-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-part6-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part6-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-part6-screenshot.png diff --git a/doc/src/images/addressbook-tutorial-part7-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-part7-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-part7-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-part7-screenshot.png diff --git a/doc/src/images/addressbook-tutorial-screenshot.png b/src/widgets/doc/images/addressbook-tutorial-screenshot.png similarity index 100% rename from doc/src/images/addressbook-tutorial-screenshot.png rename to src/widgets/doc/images/addressbook-tutorial-screenshot.png diff --git a/doc/src/images/clock.png b/src/widgets/doc/images/clock.png similarity index 100% rename from doc/src/images/clock.png rename to src/widgets/doc/images/clock.png diff --git a/src/widgets/doc/images/columnview.png b/src/widgets/doc/images/columnview.png new file mode 100644 index 0000000000000000000000000000000000000000..127b79531f2d51de8a1dde5f6471b7d1dd1f702c GIT binary patch literal 3480 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

hwl+0%Z>Cfw8Q^Oy9S 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/modelview-header.png b/src/widgets/doc/images/modelview-header.png similarity index 100% rename from doc/src/images/modelview-header.png rename to src/widgets/doc/images/modelview-header.png diff --git a/src/widgets/doc/images/modelview-models.png b/src/widgets/doc/images/modelview-models.png new file mode 100644 index 0000000000000000000000000000000000000000..183a7cffd5209c9eb0f0874f291a79d719e60aa4 GIT binary patch literal 20540 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 LNkvXXu0mjf$&llF literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/modelview-overview.png b/src/widgets/doc/images/modelview-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..41e3a6827f55a8925f47902ede4d3a7909d6727d GIT binary patch literal 15042 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 bJyXAWq-t4dXWIeJrot)8smWGJn}z-la*elp literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/modelview-roles.png b/src/widgets/doc/images/modelview-roles.png new file mode 100644 index 0000000000000000000000000000000000000000..2a60ce71901971976481b330ed6a52a8e3a9e30b GIT binary patch literal 24954 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%0DQx=Y507p7lAgUT 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/modelview-tablemodel.png b/src/widgets/doc/images/modelview-tablemodel.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9ea2f1b0c99f3f2c97b7dd62e278bf2e57cca6 GIT binary patch literal 12256 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 oxIyma}uqr95FCg%PR1h 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/selected-items2.png b/src/widgets/doc/images/selected-items2.png new file mode 100644 index 0000000000000000000000000000000000000000..ad247d90a96d0ecb045cf33a55f751637e677f1f GIT binary patch literal 32025 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/sharedselection-tableviews.png b/src/widgets/doc/images/sharedselection-tableviews.png new file mode 100644 index 0000000000000000000000000000000000000000..ccbda2578f680f37bfe0ddcd3ac9e434655af07a GIT binary patch literal 14212 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 f-=8}aPOf8$<&HhE3=V;}>+Ze_Cm%BThrEHE{ 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

nz6!>#16r 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%0DO54Rtt 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 OI$@w=impPrMg9*T<^7=m literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/tableview.png b/src/widgets/doc/images/tableview.png new file mode 100755 index 0000000000000000000000000000000000000000..8be1b6ce62dfa09cbbcfd32c3803ca84dd82d1c2 GIT binary patch literal 10102 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/tree_2_with_algorithm.png b/src/widgets/doc/images/tree_2_with_algorithm.png similarity index 100% rename from doc/src/images/tree_2_with_algorithm.png rename to src/widgets/doc/images/tree_2_with_algorithm.png diff --git a/doc/src/images/treeview.png b/src/widgets/doc/images/treeview.png similarity index 100% rename from doc/src/images/treeview.png rename to src/widgets/doc/images/treeview.png diff --git a/doc/src/images/widgetmapper.png b/src/widgets/doc/images/widgetmapper.png similarity index 100% rename from doc/src/images/widgetmapper.png rename to src/widgets/doc/images/widgetmapper.png diff --git a/src/widgets/doc/images/widgets-tutorial-childwidget.png b/src/widgets/doc/images/widgets-tutorial-childwidget.png new file mode 100644 index 0000000000000000000000000000000000000000..0d42d701fca28ce04fd94626dadddc328581bbaa GIT binary patch literal 8547 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 QHU~gUP5*J_qnB^~58rn8XaE2J literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/widgets-tutorial-nestedlayouts.png b/src/widgets/doc/images/widgets-tutorial-nestedlayouts.png new file mode 100644 index 0000000000000000000000000000000000000000..1e2a9f4a1d13656aaca8d200822f4623c6db7d82 GIT binary patch literal 23287 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/widgets-tutorial-windowlayout.png b/src/widgets/doc/images/widgets-tutorial-windowlayout.png new file mode 100644 index 0000000000000000000000000000000000000000..fce52cdcd9010ff3d296841f411f59307976e1d1 GIT binary patch literal 5849 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 E02@e{asU7T literal 0 HcmV?d00001 diff --git a/src/widgets/doc/snippets/code/doc_src_model-view-programming.cpp b/src/widgets/doc/snippets/code/doc_src_model-view-programming.cpp new file mode 100644 index 00000000000..ca9aa606f7a --- /dev/null +++ b/src/widgets/doc/snippets/code/doc_src_model-view-programming.cpp @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +//! [0] +QAbstractItemModel *model = index.model(); +//! [0] + + +//! [1] +QModelIndex index = model->index(row, column, ...); +//! [1] + + +//! [2] +QModelIndex indexA = model->index(0, 0, QModelIndex()); +QModelIndex indexB = model->index(1, 1, QModelIndex()); +QModelIndex indexC = model->index(2, 1, QModelIndex()); +//! [2] + + +//! [3] +QModelIndex index = model->index(row, column, parent); +//! [3] + + +//! [4] +QModelIndex indexA = model->index(0, 0, QModelIndex()); +QModelIndex indexC = model->index(2, 1, QModelIndex()); +//! [4] + + +//! [5] +QModelIndex indexB = model->index(1, 0, indexA); +//! [5] + + +//! [6] +QVariant value = model->data(index, role); +//! [6] diff --git a/doc/src/snippets/code/doc_src_qt4-mainwindow.cpp b/src/widgets/doc/snippets/code/doc_src_qt4-mainwindow.cpp similarity index 100% rename from doc/src/snippets/code/doc_src_qt4-mainwindow.cpp rename to src/widgets/doc/snippets/code/doc_src_qt4-mainwindow.cpp diff --git a/doc/src/snippets/dockwidgets/mainwindow.cpp b/src/widgets/doc/snippets/dockwidgets/mainwindow.cpp similarity index 100% rename from doc/src/snippets/dockwidgets/mainwindow.cpp rename to src/widgets/doc/snippets/dockwidgets/mainwindow.cpp diff --git a/src/widgets/doc/snippets/itemselection/itemselection.pro b/src/widgets/doc/snippets/itemselection/itemselection.pro new file mode 100644 index 00000000000..b1126bfe73b --- /dev/null +++ b/src/widgets/doc/snippets/itemselection/itemselection.pro @@ -0,0 +1,3 @@ +HEADERS = model.h +SOURCES = main.cpp \ + model.cpp diff --git a/src/widgets/doc/snippets/itemselection/main.cpp b/src/widgets/doc/snippets/itemselection/main.cpp new file mode 100644 index 00000000000..f39fb68b32c --- /dev/null +++ b/src/widgets/doc/snippets/itemselection/main.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how selections can be used directly on a model. + It shows the result of some selections made using a table view. +*/ + +#include +#include +#include +#include + +#include "model.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + +//! [0] + TableModel *model = new TableModel(8, 4, &app); + + QTableView *table = new QTableView(0); + table->setModel(model); + + QItemSelectionModel *selectionModel = table->selectionModel(); +//! [0] //! [1] + QModelIndex topLeft; + QModelIndex bottomRight; + + topLeft = model->index(0, 0, QModelIndex()); + bottomRight = model->index(5, 2, QModelIndex()); +//! [1] + +//! [2] + QItemSelection selection(topLeft, bottomRight); + selectionModel->select(selection, QItemSelectionModel::Select); +//! [2] + +//! [3] + QItemSelection toggleSelection; + + topLeft = model->index(2, 1, QModelIndex()); + bottomRight = model->index(7, 3, QModelIndex()); + toggleSelection.select(topLeft, bottomRight); + + selectionModel->select(toggleSelection, QItemSelectionModel::Toggle); +//! [3] + +//! [4] + QItemSelection columnSelection; + + topLeft = model->index(0, 1, QModelIndex()); + bottomRight = model->index(0, 2, QModelIndex()); + + columnSelection.select(topLeft, bottomRight); + + selectionModel->select(columnSelection, + QItemSelectionModel::Select | QItemSelectionModel::Columns); + + QItemSelection rowSelection; + + topLeft = model->index(0, 0, QModelIndex()); + bottomRight = model->index(1, 0, QModelIndex()); + + rowSelection.select(topLeft, bottomRight); + + selectionModel->select(rowSelection, + QItemSelectionModel::Select | QItemSelectionModel::Rows); +//! [4] + + table->setWindowTitle("Selected items in a table model"); + table->show(); + table->resize(460, 280); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/itemselection/model.cpp b/src/widgets/doc/snippets/itemselection/model.cpp new file mode 100644 index 00000000000..6c9c5bad827 --- /dev/null +++ b/src/widgets/doc/snippets/itemselection/model.cpp @@ -0,0 +1,238 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + Provides a table model for use in various examples. +*/ + +#include + +#include "model.h" + +/*! + Constructs a table model with at least one row and one column. +*/ + +TableModel::TableModel(int rows, int columns, QObject *parent) + : QAbstractTableModel(parent) +{ + QStringList newList; + + for (int column = 0; column < qMax(1, columns); ++column) { + newList.append(""); + } + + for (int row = 0; row < qMax(1, rows); ++row) { + rowList.append(newList); + } +} + + +/*! + Returns the number of items in the row list as the number of rows + in the model. +*/ + +int TableModel::rowCount(const QModelIndex &/*parent*/) const +{ + return rowList.size(); +} + +/*! + Returns the number of items in the first list item as the number of + columns in the model. All rows should have the same number of columns. +*/ + +int TableModel::columnCount(const QModelIndex &/*parent*/) const +{ + return rowList[0].size(); +} + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned for the display role; otherwise an invalid variant + is returned. +*/ + +QVariant TableModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role == Qt::DisplayRole) + return rowList[index.row()][index.column()]; + else + return QVariant(); +} + +/*! + Returns the appropriate header string depending on the orientation of + the header and the section. If anything other than the display role is + requested, we return an invalid variant. +*/ + +QVariant TableModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} + +/*! + Returns an appropriate value for the item's flags. Valid items are + enabled, selectable, and editable. +*/ + +Qt::ItemFlags TableModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; +} + +/*! + Changes an item in the model, but only if the following conditions + are met: + + * The index supplied is valid. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +bool TableModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) + return false; + + rowList[index.row()][index.column()] = value.toString(); + emit dataChanged(index, index); + return true; +} + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +bool TableModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + int columns = columnCount(); + beginInsertRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + QStringList items; + for (int column = 0; column < columns; ++column) + items.append(""); + rowList.insert(position, items); + } + + endInsertRows(); + return true; +} + +/*! + Inserts a number of columns into the model at the specified position. + Each entry in the list is extended in turn with the required number of + empty strings. +*/ + +bool TableModel::insertColumns(int position, int columns, + const QModelIndex &parent) +{ + int rows = rowCount(); + beginInsertColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = position; column < columns; ++column) { + rowList[row].insert(position, ""); + } + } + + endInsertColumns(); + return true; +} + +/*! + Removes a number of rows from the model at the specified position. +*/ + +bool TableModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + beginRemoveRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + rowList.removeAt(position); + } + + endRemoveRows(); + return true; +} + +/*! + Removes a number of columns from the model at the specified position. + Each row is shortened by the number of columns specified. +*/ + +bool TableModel::removeColumns(int position, int columns, + const QModelIndex &parent) +{ + int rows = rowCount(); + beginRemoveColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = 0; column < columns; ++column) { + rowList[row].removeAt(position); + } + } + + endRemoveColumns(); + return true; +} diff --git a/doc/src/snippets/code/src_gui_embedded_qwindowsystem_qws.cpp b/src/widgets/doc/snippets/itemselection/model.h similarity index 63% rename from doc/src/snippets/code/src_gui_embedded_qwindowsystem_qws.cpp rename to src/widgets/doc/snippets/itemselection/model.h index 66308f34055..ef63e45ce09 100644 --- a/doc/src/snippets/code/src_gui_embedded_qwindowsystem_qws.cpp +++ b/src/widgets/doc/snippets/itemselection/model.h @@ -38,48 +38,37 @@ ** ****************************************************************************/ -//! [0] -bool MyScreenSaver::save( int level ) +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel { - switch ( level ) { - case 0: - if ( dim_enabled ) { - // dim the screen - } - return true; - case 1: - if ( screenoff_enabled ) { - // turn off the screen - } - return true; - case 2: - if ( suspend_enabled ) { - // suspend - } - return true; - default: - return false; - } -} + Q_OBJECT -... +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); -int timings[4]; -timings[0] = 5000; // dim after 5 seconds -timings[1] = 10000; // light off after 15 seconds -timings[2] = 45000; // suspend after 60 seconds -timings[3] = 0; -QWSServer::setScreenSaverIntervals( timings ); + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; -// ignore the key/mouse event that turns on the screen -int blocklevel = 1; -if ( !screenoff_enabled ) { - // screenoff is disabled, ignore the key/mouse event that wakes from suspend - blocklevel = 2; - if ( !suspend_enabled ) { - // suspend is disabled, never ignore events - blocklevel = -1; - } -} -QWSServer::setScreenSaverBlockLevel( blocklevel ); -//! [0] + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/doc/src/snippets/code/src_gui_embedded_qscreen_qws.cpp b/src/widgets/doc/snippets/qlistview-dnd/main.cpp similarity index 91% rename from doc/src/snippets/code/src_gui_embedded_qscreen_qws.cpp rename to src/widgets/doc/snippets/qlistview-dnd/main.cpp index 99be26133ec..56bff2a6124 100644 --- a/doc/src/snippets/code/src_gui_embedded_qscreen_qws.cpp +++ b/src/widgets/doc/snippets/qlistview-dnd/main.cpp @@ -38,11 +38,14 @@ ** ****************************************************************************/ -//! [0] -[screen driver][:driver specific options][:display number] -//! [0] +#include +#include "mainwindow.h" -//! [1] -Mach64:/dev/fb1:2 -//! [1] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp new file mode 100644 index 00000000000..ff35c5e25d4 --- /dev/null +++ b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" +#include "model.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + menuBar()->addMenu(fileMenu); + +// For convenient quoting: +//! [0] +QListView *listView = new QListView(this); +listView->setSelectionMode(QAbstractItemView::ExtendedSelection); +listView->setDragEnabled(true); +listView->setAcceptDrops(true); +listView->setDropIndicatorShown(true); +//! [0] + + this->listView = listView; + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setupListItems(); + + setCentralWidget(listView); + setWindowTitle(tr("List View")); +} + +void MainWindow::setupListItems() +{ + QStringList items; + items << tr("Oak") << tr("Fir") << tr("Pine") << tr("Birch") << tr("Hazel") + << tr("Redwood") << tr("Sycamore") << tr("Chestnut") + << tr("Mahogany"); + + DragDropListModel *model = new DragDropListModel(items, this); + listView->setModel(model); +} diff --git a/src/widgets/doc/snippets/qlistview-dnd/mainwindow.h b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.h new file mode 100644 index 00000000000..daac61260e8 --- /dev/null +++ b/src/widgets/doc/snippets/qlistview-dnd/mainwindow.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QListView; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +private: + void setupListItems(); + + QListView *listView; +}; + +#endif diff --git a/src/widgets/doc/snippets/qlistview-dnd/model.cpp b/src/widgets/doc/snippets/qlistview-dnd/model.cpp new file mode 100644 index 00000000000..190ac968c01 --- /dev/null +++ b/src/widgets/doc/snippets/qlistview-dnd/model.cpp @@ -0,0 +1,167 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of an example program for Qt. +** EDITIONS: NOLIMITS +** +****************************************************************************/ + +/* + model.cpp + + A simple model that uses a QStringList as its data source. +*/ + +#include + +#include "model.h" + +DragDropListModel::DragDropListModel(const QStringList &strings, + QObject *parent) + : QStringListModel(strings, parent) +{ +} + +//! [0] +bool DragDropListModel::dropMimeData(const QMimeData *data, + Qt::DropAction action, int row, int column, const QModelIndex &parent) +{ + if (action == Qt::IgnoreAction) + return true; + + if (!data->hasFormat("application/vnd.text.list")) + return false; + + if (column > 0) +//! [0] //! [1] + return false; +//! [1] + +//! [2] + int beginRow; + + if (row != -1) + beginRow = row; +//! [2] //! [3] + else if (parent.isValid()) + beginRow = parent.row(); +//! [3] //! [4] + else + beginRow = rowCount(QModelIndex()); +//! [4] + +//! [5] + QByteArray encodedData = data->data("application/vnd.text.list"); + QDataStream stream(&encodedData, QIODevice::ReadOnly); + QStringList newItems; + int rows = 0; + + while (!stream.atEnd()) { + QString text; + stream >> text; + newItems << text; + ++rows; + } +//! [5] + +//! [6] + insertRows(beginRow, rows, QModelIndex()); + foreach (const QString &text, newItems) { + QModelIndex idx = index(beginRow, 0, QModelIndex()); + setData(idx, text); + beginRow++; + } + + return true; +} +//! [6] + +//! [7] +Qt::ItemFlags DragDropListModel::flags(const QModelIndex &index) const +{ + Qt::ItemFlags defaultFlags = QStringListModel::flags(index); + + if (index.isValid()) + return Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | defaultFlags; + else + return Qt::ItemIsDropEnabled | defaultFlags; +} +//! [7] + +//! [8] +QMimeData *DragDropListModel::mimeData(const QModelIndexList &indexes) const +{ + QMimeData *mimeData = new QMimeData(); + QByteArray encodedData; + + QDataStream stream(&encodedData, QIODevice::WriteOnly); + + foreach (const QModelIndex &index, indexes) { + if (index.isValid()) { + QString text = data(index, Qt::DisplayRole).toString(); + stream << text; + } + } + + mimeData->setData("application/vnd.text.list", encodedData); + return mimeData; +} +//! [8] + +//! [9] +QStringList DragDropListModel::mimeTypes() const +{ + QStringList types; + types << "application/vnd.text.list"; + return types; +} +//! [9] + +//! [10] +Qt::DropActions DragDropListModel::supportedDropActions() const +{ + return Qt::CopyAction | Qt::MoveAction; +} +//! [10] diff --git a/doc/src/snippets/code/src_gui_embedded_qtransportauth_qws.cpp b/src/widgets/doc/snippets/qlistview-dnd/model.h similarity index 68% rename from doc/src/snippets/code/src_gui_embedded_qtransportauth_qws.cpp rename to src/widgets/doc/snippets/qlistview-dnd/model.h index e73ee2ed0a8..9d1ff904e1b 100644 --- a/doc/src/snippets/code/src_gui_embedded_qtransportauth_qws.cpp +++ b/src/widgets/doc/snippets/qlistview-dnd/model.h @@ -38,50 +38,36 @@ ** ****************************************************************************/ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of an example program for Qt. +** EDITIONS: NOLIMITS +** +****************************************************************************/ -void wrapInFunction() +#ifndef MODEL_H +#define MODEL_H + +#include +#include + +class DragDropListModel : public QStringListModel { + Q_OBJECT -//! [0] -QTransportAuth::Data *conData; -QTransportAuth *a = QTransportAuth::getInstance(); +public: + DragDropListModel(const QStringList &strings, QObject *parent = 0); -conData = a->connectTransport( - QTransportAuth::Trusted | QTransportAuth::UnixStreamSock, - socketDescriptor ); -//! [0] + Qt::ItemFlags flags(const QModelIndex &index) const; + bool dropMimeData(const QMimeData *data, Qt::DropAction action, + int row, int column, const QModelIndex &parent); + QMimeData *mimeData(const QModelIndexList &indexes) const; + QStringList mimeTypes() const; + Qt::DropActions supportedDropActions() const; +}; -//! [1] -// mySocket can be any QIODevice subclass -AuthDevice *ad = a->recvBuf( d, mySocket ); - -// proxy in the auth device where the socket would have gone -connect( ad, SIGNAL(readyRead()), this, SLOT(mySocketReadyRead())); -//! [1] - - -//! [2] -AuthDevice *ad = a->authBuf( d, mySocket ); - -ad->write( someData ); -//! [2] - - -//! [3] -policyCheck( QTransportAuth::Data &, const QString & ) -//! [3] - - -//! [4] -QTransportAuth::Result r = d.status & QTransportAuth::ErrMask; -qWarning( "error: %s", QTransportAuth::errorStrings[r] ); -//! [4] - - -//! [5] -MD5(K XOR opad, MD5(K XOR ipad, text)) -//! [5] - -} - +#endif diff --git a/src/widgets/doc/snippets/qlistview-dnd/qlistview-dnd.pro b/src/widgets/doc/snippets/qlistview-dnd/qlistview-dnd.pro new file mode 100644 index 00000000000..71fa273a69a --- /dev/null +++ b/src/widgets/doc/snippets/qlistview-dnd/qlistview-dnd.pro @@ -0,0 +1,5 @@ +SOURCES = main.cpp \ + mainwindow.cpp \ + model.cpp +HEADERS = mainwindow.h \ + model.h diff --git a/doc/src/snippets/code/src_gui_embedded_qmousetslib_qws.cpp b/src/widgets/doc/snippets/qlistwidget-dnd/main.cpp similarity index 91% rename from doc/src/snippets/code/src_gui_embedded_qmousetslib_qws.cpp rename to src/widgets/doc/snippets/qlistwidget-dnd/main.cpp index 7a2eee142e2..56bff2a6124 100644 --- a/doc/src/snippets/code/src_gui_embedded_qmousetslib_qws.cpp +++ b/src/widgets/doc/snippets/qlistwidget-dnd/main.cpp @@ -38,12 +38,14 @@ ** ****************************************************************************/ -//! [0] -configure -L -I -//! [0] +#include +#include "mainwindow.h" -//! [1] -module_raw input -module linear -//! [1] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp new file mode 100644 index 00000000000..8d93f823f40 --- /dev/null +++ b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "mainwindow.h" + +MainWindow::MainWindow() +{ + QMenu *fileMenu = new QMenu(tr("&File")); + + QAction *quitAction = fileMenu->addAction(tr("E&xit")); + quitAction->setShortcut(tr("Ctrl+Q")); + + menuBar()->addMenu(fileMenu); + +// For convenient quoting: +//! [0] +QListWidget *listWidget = new QListWidget(this); +listWidget->setSelectionMode(QAbstractItemView::SingleSelection); +listWidget->setDragEnabled(true); +listWidget->viewport()->setAcceptDrops(true); +listWidget->setDropIndicatorShown(true); +//! [0] //! [1] +listWidget->setDragDropMode(QAbstractItemView::InternalMove); +//! [1] + + this->listWidget = listWidget; + + connect(quitAction, SIGNAL(triggered()), this, SLOT(close())); + + setupListItems(); + + setCentralWidget(listWidget); + setWindowTitle(tr("List Widget")); +} + +void MainWindow::setupListItems() +{ + QListWidgetItem *item; + item = new QListWidgetItem(tr("Oak"), listWidget); + item = new QListWidgetItem(tr("Fir"), listWidget); + item = new QListWidgetItem(tr("Pine"), listWidget); + item = new QListWidgetItem(tr("Birch"), listWidget); + item = new QListWidgetItem(tr("Hazel"), listWidget); + item = new QListWidgetItem(tr("Redwood"), listWidget); + item = new QListWidgetItem(tr("Sycamore"), listWidget); + item = new QListWidgetItem(tr("Chestnut"), listWidget); + item = new QListWidgetItem(tr("Mahogany"), listWidget); +} diff --git a/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h new file mode 100644 index 00000000000..50cac647d1f --- /dev/null +++ b/src/widgets/doc/snippets/qlistwidget-dnd/mainwindow.h @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QListWidget; +class QListWidgetItem; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +private: + void setupListItems(); + + QListWidget *listWidget; +}; + +#endif diff --git a/src/widgets/doc/snippets/qlistwidget-dnd/qlistwidget-dnd.pro b/src/widgets/doc/snippets/qlistwidget-dnd/qlistwidget-dnd.pro new file mode 100644 index 00000000000..12a900a7c64 --- /dev/null +++ b/src/widgets/doc/snippets/qlistwidget-dnd/qlistwidget-dnd.pro @@ -0,0 +1,3 @@ +SOURCES = main.cpp \ + mainwindow.cpp +HEADERS = mainwindow.h diff --git a/src/widgets/doc/snippets/qsortfilterproxymodel/main.cpp b/src/widgets/doc/snippets/qsortfilterproxymodel/main.cpp new file mode 100644 index 00000000000..0d78ae3f104 --- /dev/null +++ b/src/widgets/doc/snippets/qsortfilterproxymodel/main.cpp @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QObject *parent = &app; + + QStringList numbers; + numbers << "One" << "Two" << "Three" << "Four" << "Five"; + + QAbstractItemModel *stringListModel = new QStringListModel(numbers, parent); + +//! [0] + QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(parent); + filterModel->setSourceModel(stringListModel); +//! [0] + + QWidget *window = new QWidget; + +//! [1] + QListView *filteredView = new QListView; + filteredView->setModel(filterModel); +//! [1] + filteredView->setWindowTitle("Filtered view onto a string list model"); + + QLineEdit *patternEditor = new QLineEdit; + QObject:: + connect(patternEditor, SIGNAL(textChanged(const QString &)), + filterModel, SLOT(setFilterRegExp(const QString &))); + + QVBoxLayout *layout = new QVBoxLayout(window); + layout->addWidget(filteredView); + layout->addWidget(patternEditor); + + window->show(); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/qsortfilterproxymodel/qsortfilterproxymodel.pro b/src/widgets/doc/snippets/qsortfilterproxymodel/qsortfilterproxymodel.pro new file mode 100644 index 00000000000..16181f21cfd --- /dev/null +++ b/src/widgets/doc/snippets/qsortfilterproxymodel/qsortfilterproxymodel.pro @@ -0,0 +1 @@ +SOURCES = main.cpp diff --git a/src/widgets/doc/snippets/qtablewidget-using/Images/cubed.png b/src/widgets/doc/snippets/qtablewidget-using/Images/cubed.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd9048ca6ba463b6a0f31d94ed6420346693df9 GIT binary patch literal 437 zcmV;m0ZRUfP)AYzJ8A$Jsu3gLE0jsrCbVwz^E~U-XNTt+ikC{v7xCypdngXa*zW?L0~UJ z1s$s`p$H509F^yJu5X`D4l-3Tl`1Kvq?EEE0wN-?Ab^0VtiTE@oX%*nR9F?3)50ZO ztZs)<1_HtW20QvoPdg1302mByXRv+$@z$6_wv92E9G$rR^VYEg5CE=gN7FWVtN-x* zMC*zGcPDe$%+zIHvk!Lr^TSdRz^9F0S1vqyzPP-(GT+|Vlk=UFe7^g4^GWa7#)sbO zk-6ieqFm1sI(lyIQdz$I<4rZ~!@80x!ZEr2yEl97e z3~&fL>X+l!Q*Yz!FfkYeF59o>PVZE!C(qOX05WaoTf5kH2H%%nuS_-A7-3g^F7EYS z?0#7}KMVj|?nFASo@%1|uX}H*&QL^VuBEb9MkOb@)lQU@lu|_yyE#T2>}yOG&Tz_x flubw&jKTi_Ge!*bk)o;&00000NkvXXu0mjf)3C*+ literal 0 HcmV?d00001 diff --git a/src/widgets/doc/snippets/qtablewidget-using/Images/squared.png b/src/widgets/doc/snippets/qtablewidget-using/Images/squared.png new file mode 100644 index 0000000000000000000000000000000000000000..bfdf99328950607c9173e5e2b931a798e87b9189 GIT binary patch literal 440 zcmV;p0Z0CcP)GY6nC@~(NbFlIYpD32rf-gPSW5KK})k^gE>Tz z2nG!e5_MXT(I50W(#JcW>-YRV?_Mu&Y;1o0w)OqT&)+-E*5BQ%eUSevq5}YC2mkI~CY6Q;4RF8&AW$r=-I|t=1Assf2iAYhE-jXVxg;S3!n#LmXD1WD z0Z<6CBF31GylLLfTn?at%5YLt4waQQmL3EN2hjSnho7nom*>;=ozC3zBT+6;+?!t* zoijb!3Nzy;E*%(-P*P8?ELQFhpBzbVOx`=*H5{b${dW1--4Aak2J=>PyKCTr*#BA8 zT4zJGXzp%Ej%49w|8?_scCMWu5ICr(wK9G>>wPtLCIA4qi0Nj$7SqO;o2$!*3nYXi z^}eRQUw)B&Tt4460OXMDPdurH&c&;JQ$qn60tf3}sD~s!_4Kjw1O(s!*{(tUXGbOw i2$vvn33Epv1o{tvNn + + Images/squared.png + Images/cubed.png + + diff --git a/doc/src/snippets/code/src_gui_embedded_qmouse_qws.cpp b/src/widgets/doc/snippets/qtablewidget-using/main.cpp similarity index 91% rename from doc/src/snippets/code/src_gui_embedded_qmouse_qws.cpp rename to src/widgets/doc/snippets/qtablewidget-using/main.cpp index 8fc61400751..56bff2a6124 100644 --- a/doc/src/snippets/code/src_gui_embedded_qmouse_qws.cpp +++ b/src/widgets/doc/snippets/qtablewidget-using/main.cpp @@ -38,7 +38,14 @@ ** ****************************************************************************/ -//! [0] -s*Xs = a*Xd + b*Yd + c -s*Ys = d*Xd + e*Yd + f -//! [0] +#include + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow *window = new MainWindow; + window->show(); + return app.exec(); +} diff --git a/doc/src/snippets/code/src_gui_embedded_qcopchannel_qws.cpp b/src/widgets/doc/snippets/qtablewidget-using/mainwindow.h similarity index 78% rename from doc/src/snippets/code/src_gui_embedded_qcopchannel_qws.cpp rename to src/widgets/doc/snippets/qtablewidget-using/mainwindow.h index 76b958dda31..5c8c9977628 100644 --- a/doc/src/snippets/code/src_gui_embedded_qcopchannel_qws.cpp +++ b/src/widgets/doc/snippets/qtablewidget-using/mainwindow.h @@ -38,29 +38,33 @@ ** ****************************************************************************/ -//! [0] -void MyClass::receive(const QString &message, const QByteArray &data) +#ifndef WINDOW_H +#define WINDOW_H + +#include + +class QAction; +class QTableWidget; +class QTableWidgetItem; + +class MainWindow : public QMainWindow { - QDataStream in(data); - if (message == "execute(QString,QString)") { - QString cmd; - QString arg; - in >> cmd >> arg; - ... - } else if (message == "delete(QString)") { - QString fileName; - in >> fileName; - ... - } else { - ... - } -} + Q_OBJECT + +public: + MainWindow(); + +public slots: + void averageItems(); + void sumItems(); + +private: + void setupTableItems(); + + QAction *removeAction; //! [0] + QTableWidget *tableWidget; +//! [0] +}; - -//! [1] -QByteArray data; -QDataStream out(&data, QIODevice::WriteOnly); -out << QString("cat") << QString("file.txt"); -QCopChannel::send("System/Shell", "execute(QString,QString)", data); -//! [1] +#endif diff --git a/src/widgets/doc/snippets/qtablewidget-using/qtablewidget-using.pro b/src/widgets/doc/snippets/qtablewidget-using/qtablewidget-using.pro new file mode 100644 index 00000000000..ffe134cbb69 --- /dev/null +++ b/src/widgets/doc/snippets/qtablewidget-using/qtablewidget-using.pro @@ -0,0 +1,4 @@ +SOURCES = main.cpp \ + mainwindow.cpp +HEADERS = mainwindow.h +RESOURCES += images.qrc diff --git a/src/widgets/doc/snippets/reading-selections/main.cpp b/src/widgets/doc/snippets/reading-selections/main.cpp new file mode 100644 index 00000000000..3356ffc8aba --- /dev/null +++ b/src/widgets/doc/snippets/reading-selections/main.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how selections can be used directly on a model. + It shows the result of some selections made using a table view. +*/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QMainWindow *window = new MainWindow; + window->show(); + window->resize(640, 480); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/reading-selections/model.cpp b/src/widgets/doc/snippets/reading-selections/model.cpp new file mode 100644 index 00000000000..ca4b9f84ddd --- /dev/null +++ b/src/widgets/doc/snippets/reading-selections/model.cpp @@ -0,0 +1,238 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + Provides a table model for use in various examples. +*/ + +#include + +#include "model.h" + +/*! + Constructs a table model with at least one row and one column. +*/ + +TableModel::TableModel(int rows, int columns, QObject *parent) + : QAbstractTableModel(parent) +{ + QStringList newList; + + for (int column = 0; column < qMax(1, columns); ++column) { + newList.append(""); + } + + for (int row = 0; row < qMax(1, rows); ++row) { + rowList.append(newList); + } +} + + +/*! + Returns the number of items in the row list as the number of rows + in the model. +*/ + +int TableModel::rowCount(const QModelIndex &/*parent*/) const +{ + return rowList.size(); +} + +/*! + Returns the number of items in the first list item as the number of + columns in the model. All rows should have the same number of columns. +*/ + +int TableModel::columnCount(const QModelIndex &/*parent*/) const +{ + return rowList[0].size(); +} + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned for the display role; otherwise an invalid variant + is returned. +*/ + +QVariant TableModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role == Qt::DisplayRole) + return rowList[index.row()][index.column()]; + else + return QVariant(); +} + +/*! + Returns the appropriate header string depending on the orientation of + the header and the section. If anything other than the display role is + requested, we return an invalid variant. +*/ + +QVariant TableModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} + +/*! + Returns an appropriate value for the item's flags. Valid items are + enabled, selectable, and editable. +*/ + +Qt::ItemFlags TableModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +/*! + Changes an item in the model, but only if the following conditions + are met: + + * The index supplied is valid. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +bool TableModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) + return false; + + rowList[index.row()][index.column()] = value.toString(); + emit dataChanged(index, index); + return true; +} + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +bool TableModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + int columns = columnCount(); + beginInsertRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + QStringList items; + for (int column = 0; column < columns; ++column) + items.append(""); + rowList.insert(position, items); + } + + endInsertRows(); + return true; +} + +/*! + Inserts a number of columns into the model at the specified position. + Each entry in the list is extended in turn with the required number of + empty strings. +*/ + +bool TableModel::insertColumns(int position, int columns, + const QModelIndex &parent) +{ + int rows = rowCount(); + beginInsertColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = position; column < columns; ++column) { + rowList[row].insert(position, ""); + } + } + + endInsertColumns(); + return true; +} + +/*! + Removes a number of rows from the model at the specified position. +*/ + +bool TableModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + beginRemoveRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + rowList.removeAt(position); + } + + endRemoveRows(); + return true; +} + +/*! + Removes a number of columns from the model at the specified position. + Each row is shortened by the number of columns specified. +*/ + +bool TableModel::removeColumns(int position, int columns, + const QModelIndex &parent) +{ + int rows = rowCount(); + beginRemoveColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = 0; column < columns; ++column) { + rowList[row].removeAt(position); + } + } + + endRemoveColumns(); + return true; +} diff --git a/src/widgets/doc/snippets/reading-selections/model.h b/src/widgets/doc/snippets/reading-selections/model.h new file mode 100644 index 00000000000..ef63e45ce09 --- /dev/null +++ b/src/widgets/doc/snippets/reading-selections/model.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/src/widgets/doc/snippets/reading-selections/reading-selections.pro b/src/widgets/doc/snippets/reading-selections/reading-selections.pro new file mode 100644 index 00000000000..91ebd3e84fc --- /dev/null +++ b/src/widgets/doc/snippets/reading-selections/reading-selections.pro @@ -0,0 +1,2 @@ +HEADERS += model.h window.h +SOURCES += main.cpp model.cpp window.cpp diff --git a/src/widgets/doc/snippets/reading-selections/window.cpp b/src/widgets/doc/snippets/reading-selections/window.cpp new file mode 100644 index 00000000000..dd9970374fc --- /dev/null +++ b/src/widgets/doc/snippets/reading-selections/window.cpp @@ -0,0 +1,120 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + window.cpp + + A minimal subclass of QTableView with slots to allow the selection model + to be monitored. +*/ + +#include +#include +#include +#include +#include +#include + +#include "model.h" +#include "window.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle("Selected Items in a Table Model"); + + model = new TableModel(8, 4, this); + + table = new QTableView(this); + table->setModel(model); + + QMenu *actionMenu = new QMenu(tr("&Actions"), this); + QAction *fillAction = actionMenu->addAction(tr("&Fill Selection")); + QAction *clearAction = actionMenu->addAction(tr("&Clear Selection")); + QAction *selectAllAction = actionMenu->addAction(tr("&Select All")); + menuBar()->addMenu(actionMenu); + + connect(fillAction, SIGNAL(triggered()), this, SLOT(fillSelection())); + connect(clearAction, SIGNAL(triggered()), this, SLOT(clearSelection())); + connect(selectAllAction, SIGNAL(triggered()), this, SLOT(selectAll())); + + selectionModel = table->selectionModel(); + + statusBar(); + setCentralWidget(table); +} + +void MainWindow::fillSelection() +{ +//! [0] + QModelIndexList indexes = selectionModel->selectedIndexes(); + QModelIndex index; + + foreach(index, indexes) { + QString text = QString("(%1,%2)").arg(index.row()).arg(index.column()); + model->setData(index, text); + } +//! [0] +} + +void MainWindow::clearSelection() +{ + QModelIndexList indexes = selectionModel->selectedIndexes(); + QModelIndex index; + + foreach(index, indexes) + model->setData(index, ""); +} + +void MainWindow::selectAll() +{ +//! [1] + QModelIndex parent = QModelIndex(); +//! [1] //! [2] + QModelIndex topLeft = model->index(0, 0, parent); + QModelIndex bottomRight = model->index(model->rowCount(parent)-1, + model->columnCount(parent)-1, parent); +//! [2] + +//! [3] + QItemSelection selection(topLeft, bottomRight); + selectionModel->select(selection, QItemSelectionModel::Select); +//! [3] +} diff --git a/src/widgets/doc/snippets/reading-selections/window.h b/src/widgets/doc/snippets/reading-selections/window.h new file mode 100644 index 00000000000..6d2537c22d7 --- /dev/null +++ b/src/widgets/doc/snippets/reading-selections/window.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(QWidget *parent = 0); + +private slots: + void fillSelection(); + void clearSelection(); + void selectAll(); + +private: + QAbstractItemModel *model; + QItemSelectionModel *selectionModel; + QTableView *table; +}; + +#endif diff --git a/src/widgets/doc/snippets/sharedtablemodel/main.cpp b/src/widgets/doc/snippets/sharedtablemodel/main.cpp new file mode 100644 index 00000000000..f031a02aca0 --- /dev/null +++ b/src/widgets/doc/snippets/sharedtablemodel/main.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how a single model can be shared between + multiple views. +*/ + +#include +#include +#include +#include + +#include "model.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + TableModel *model = new TableModel(4, 2, &app); + +//! [0] + QTableView *firstTableView = new QTableView; + QTableView *secondTableView = new QTableView; +//! [0] + +//! [1] + firstTableView->setModel(model); + secondTableView->setModel(model); +//! [1] + + firstTableView->horizontalHeader()->setModel(model); + + for (int row = 0; row < 4; ++row) { + for (int column = 0; column < 2; ++column) { + QModelIndex index = model->index(row, column, QModelIndex()); + model->setData(index, QVariant(QString("(%1, %2)").arg(row).arg(column))); + } + } + +//! [2] + secondTableView->setSelectionModel(firstTableView->selectionModel()); +//! [2] + + firstTableView->setWindowTitle("First table view"); + secondTableView->setWindowTitle("Second table view"); + firstTableView->show(); + secondTableView->show(); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/sharedtablemodel/model.cpp b/src/widgets/doc/snippets/sharedtablemodel/model.cpp new file mode 100644 index 00000000000..ec56f84adb9 --- /dev/null +++ b/src/widgets/doc/snippets/sharedtablemodel/model.cpp @@ -0,0 +1,236 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + Provides a table model for use in various examples. +*/ + +#include + +#include "model.h" + +/*! + Constructs a table model with at least one row and one column. +*/ + +TableModel::TableModel(int rows, int columns, QObject *parent) + : QAbstractTableModel(parent) +{ + QStringList newList; + + for (int column = 0; column < qMax(1, columns); ++column) { + newList.append(""); + } + + for (int row = 0; row < qMax(1, rows); ++row) { + rowList.append(newList); + } +} + + +/*! + Returns the number of items in the row list as the number of rows + in the model. +*/ + +int TableModel::rowCount(const QModelIndex &/*parent*/) const +{ + return rowList.size(); +} + +/*! + Returns the number of items in the first list item as the number of + columns in the model. All rows should have the same number of columns. +*/ + +int TableModel::columnCount(const QModelIndex &/*parent*/) const +{ + return rowList[0].size(); +} + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned for the display role; otherwise an invalid variant + is returned. +*/ + +QVariant TableModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role == Qt::DisplayRole) + return rowList[index.row()][index.column()]; + else + return QVariant(); +} + +/*! + Returns the appropriate header string depending on the orientation of + the header and the section. If anything other than the display role is + requested, we return an invalid variant. +*/ + +QVariant TableModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} + +/*! + Returns an appropriate value for the item's flags. Valid items are + enabled, selectable, and editable. +*/ + +Qt::ItemFlags TableModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; +} + +/*! + Changes an item in the model, but only if the following conditions + are met: + + * The index supplied is valid. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +bool TableModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) + return false; + + rowList[index.row()][index.column()] = value.toString(); + emit dataChanged(index, index); + return true; +} + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +bool TableModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + int columns = columnCount(); + beginInsertRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + QStringList items; + for (int column = 0; column < columns; ++column) + items.append(""); + rowList.insert(position, items); + } + + endInsertRows(); + return true; +} + +/*! + Inserts a number of columns into the model at the specified position. + Each entry in the list is extended in turn with the required number of + empty strings. +*/ + +bool TableModel::insertColumns(int position, int columns, const QModelIndex &parent) +{ + int rows = rowCount(); + beginInsertColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = position; column < columns; ++column) { + rowList[row].insert(position, ""); + } + } + + endInsertColumns(); + return true; +} + +/*! + Removes a number of rows from the model at the specified position. +*/ + +bool TableModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + beginRemoveRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + rowList.removeAt(position); + } + + endRemoveRows(); + return true; +} + +/*! + Removes a number of columns from the model at the specified position. + Each row is shortened by the number of columns specified. +*/ + +bool TableModel::removeColumns(int position, int columns, const QModelIndex &parent) +{ + int rows = rowCount(); + beginRemoveColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = 0; column < columns; ++column) { + rowList[row].removeAt(position); + } + } + + endRemoveColumns(); + return true; +} diff --git a/src/widgets/doc/snippets/sharedtablemodel/model.h b/src/widgets/doc/snippets/sharedtablemodel/model.h new file mode 100644 index 00000000000..ef63e45ce09 --- /dev/null +++ b/src/widgets/doc/snippets/sharedtablemodel/model.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/src/widgets/doc/snippets/sharedtablemodel/sharedtablemodel.pro b/src/widgets/doc/snippets/sharedtablemodel/sharedtablemodel.pro new file mode 100644 index 00000000000..10671e6e254 --- /dev/null +++ b/src/widgets/doc/snippets/sharedtablemodel/sharedtablemodel.pro @@ -0,0 +1,2 @@ +HEADERS += model.h +SOURCES += main.cpp model.cpp diff --git a/src/widgets/doc/snippets/simplemodel-use/main.cpp b/src/widgets/doc/snippets/simplemodel-use/main.cpp new file mode 100644 index 00000000000..d8188b14e6f --- /dev/null +++ b/src/widgets/doc/snippets/simplemodel-use/main.cpp @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example of how to access items from an existing model. +*/ + +#include + +/*! + Create a default directory model and, using the index-based interface to + the model and some QLabel widgets, populate the window's layout with the + names of objects in the directory. + + Note that we only want to read the filenames in the highest level of the + directory, so we supply a default (invalid) QModelIndex to the model in + order to indicate that we want top-level items. +*/ + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + + QWidget *window = new QWidget; + QVBoxLayout *layout = new QVBoxLayout(window); + QLabel *title = new QLabel("Some items from the directory model", window); + title->setBackgroundRole(QPalette::Base); + title->setMargin(8); + layout->addWidget(title); + +//! [0] + QFileSystemModel *model = new QFileSystemModel; + QModelIndex parentIndex = model->index(QDir::currentPath()); + int numRows = model->rowCount(parentIndex); +//! [0] + +//! [1] + for (int row = 0; row < numRows; ++row) { + QModelIndex index = model->index(row, 0, parentIndex); +//! [1] + +//! [2] + QString text = model->data(index, Qt::DisplayRole).toString(); + // Display the text in a widget. +//! [2] + + QLabel *label = new QLabel(text, window); + layout->addWidget(label); +//! [3] + } +//! [3] + + window->setWindowTitle("A simple model example"); + window->show(); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/simplemodel-use/simplemodel-use.pro b/src/widgets/doc/snippets/simplemodel-use/simplemodel-use.pro new file mode 100644 index 00000000000..28dcadcbfa2 --- /dev/null +++ b/src/widgets/doc/snippets/simplemodel-use/simplemodel-use.pro @@ -0,0 +1 @@ +SOURCES += main.cpp diff --git a/src/widgets/doc/snippets/stringlistmodel/main.cpp b/src/widgets/doc/snippets/stringlistmodel/main.cpp new file mode 100644 index 00000000000..d4f0efdc22b --- /dev/null +++ b/src/widgets/doc/snippets/stringlistmodel/main.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + The main function for the string list model example. This creates and + populates a model with values from a string list then displays the + contents of the model using a QListView widget. +*/ + +#include +#include +#include + +#include "model.h" + +//! [0] +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + +// Unindented for quoting purposes: +//! [1] +QStringList numbers; +numbers << "One" << "Two" << "Three" << "Four" << "Five"; + +QAbstractItemModel *model = new StringListModel(numbers); +//! [0] //! [1] //! [2] //! [3] +QListView *view = new QListView; +//! [2] +view->setWindowTitle("View onto a string list model"); +//! [4] +view->setModel(model); +//! [3] //! [4] + + model->insertRows(5, 7, QModelIndex()); + + for (int row = 5; row < 12; ++row) { + QModelIndex index = model->index(row, 0, QModelIndex()); + model->setData(index, QString::number(row+1)); + } + +//! [5] + view->show(); + return app.exec(); +} +//! [5] diff --git a/src/widgets/doc/snippets/stringlistmodel/model.cpp b/src/widgets/doc/snippets/stringlistmodel/model.cpp new file mode 100644 index 00000000000..6795345d365 --- /dev/null +++ b/src/widgets/doc/snippets/stringlistmodel/model.cpp @@ -0,0 +1,211 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + A simple model that uses a QStringList as its data source. +*/ + +#include "model.h" + +/*! + Returns the number of items in the string list as the number of rows + in the model. +*/ + +//! [0] +int StringListModel::rowCount(const QModelIndex &parent) const +{ + return stringList.count(); +} +//! [0] + + +#ifdef 0 +// This represents a read-only version of data(), an early stage in the +// development of the example leading to an editable StringListModel. + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned. +*/ + +//! [1-data-read-only] +QVariant StringListModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (index.row() >= stringList.size()) + return QVariant(); + + if (role == Qt::DisplayRole) + return stringList.at(index.row()); + else + return QVariant(); +} +//! [1-data-read-only] +#endif + + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned. +*/ + +//! [1] +QVariant StringListModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (index.row() >= stringList.size()) + return QVariant(); + + if (role == Qt::DisplayRole || role == Qt::EditRole) + return stringList.at(index.row()); + else + return QVariant(); +} +//! [1] + +/*! + Returns the appropriate header string depending on the orientation of + the header and the section. If anything other than the display role is + requested, we return an invalid variant. +*/ + +//! [2] +QVariant StringListModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} +//! [2] + +/*! + Returns an appropriate value for the item's flags. Valid items are + enabled, selectable, and editable. +*/ + +//! [3] +Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; +} +//! [3] + +/*! + Changes an item in the string list, but only if the following conditions + are met: + + * The index supplied is valid. + * The index corresponds to an item to be shown in a view. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +//! [4] +bool StringListModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (index.isValid() && role == Qt::EditRole) { + + stringList.replace(index.row(), value.toString()); + emit dataChanged(index, index); + return true; + } +//! [4] //! [5] + return false; +} +//! [5] + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +//! [6] +bool StringListModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + beginInsertRows(QModelIndex(), position, position+rows-1); + + for (int row = 0; row < rows; ++row) { + stringList.insert(position, ""); + } + + endInsertRows(); + return true; +//! [6] //! [7] +} +//! [7] + +/*! + Removes a number of rows from the model at the specified position. +*/ + +//! [8] +bool StringListModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + beginRemoveRows(QModelIndex(), position, position+rows-1); + + for (int row = 0; row < rows; ++row) { + stringList.removeAt(position); + } + + endRemoveRows(); + return true; +//! [8] //! [9] +} +//! [9] diff --git a/src/widgets/doc/snippets/stringlistmodel/model.h b/src/widgets/doc/snippets/stringlistmodel/model.h new file mode 100644 index 00000000000..1dceccb8a86 --- /dev/null +++ b/src/widgets/doc/snippets/stringlistmodel/model.h @@ -0,0 +1,82 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +//! [0] +class StringListModel : public QAbstractListModel +{ + Q_OBJECT + +public: + StringListModel(const QStringList &strings, QObject *parent = 0) + : QAbstractListModel(parent), stringList(strings) {} + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, +//! [0] //! [1] + int role = Qt::DisplayRole) const; +//! [1] + +//! [2] + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, +//! [2] //! [3] + int role = Qt::EditRole); +//! [3] + +//! [4] + bool insertRows(int position, int rows, const QModelIndex &index = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &index = QModelIndex()); +//! [4] + +//! [5] +private: + QStringList stringList; +}; +//! [5] + +#endif diff --git a/src/widgets/doc/snippets/stringlistmodel/stringlistmodel.pro b/src/widgets/doc/snippets/stringlistmodel/stringlistmodel.pro new file mode 100644 index 00000000000..b1126bfe73b --- /dev/null +++ b/src/widgets/doc/snippets/stringlistmodel/stringlistmodel.pro @@ -0,0 +1,3 @@ +HEADERS = model.h +SOURCES = main.cpp \ + model.cpp diff --git a/src/widgets/doc/snippets/updating-selections/main.cpp b/src/widgets/doc/snippets/updating-selections/main.cpp new file mode 100644 index 00000000000..3356ffc8aba --- /dev/null +++ b/src/widgets/doc/snippets/updating-selections/main.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + main.cpp + + A simple example that shows how selections can be used directly on a model. + It shows the result of some selections made using a table view. +*/ + +#include + +#include "window.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + QMainWindow *window = new MainWindow; + window->show(); + window->resize(640, 480); + return app.exec(); +} diff --git a/src/widgets/doc/snippets/updating-selections/model.cpp b/src/widgets/doc/snippets/updating-selections/model.cpp new file mode 100644 index 00000000000..ec56f84adb9 --- /dev/null +++ b/src/widgets/doc/snippets/updating-selections/model.cpp @@ -0,0 +1,236 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + model.cpp + + Provides a table model for use in various examples. +*/ + +#include + +#include "model.h" + +/*! + Constructs a table model with at least one row and one column. +*/ + +TableModel::TableModel(int rows, int columns, QObject *parent) + : QAbstractTableModel(parent) +{ + QStringList newList; + + for (int column = 0; column < qMax(1, columns); ++column) { + newList.append(""); + } + + for (int row = 0; row < qMax(1, rows); ++row) { + rowList.append(newList); + } +} + + +/*! + Returns the number of items in the row list as the number of rows + in the model. +*/ + +int TableModel::rowCount(const QModelIndex &/*parent*/) const +{ + return rowList.size(); +} + +/*! + Returns the number of items in the first list item as the number of + columns in the model. All rows should have the same number of columns. +*/ + +int TableModel::columnCount(const QModelIndex &/*parent*/) const +{ + return rowList[0].size(); +} + +/*! + Returns an appropriate value for the requested data. + If the view requests an invalid index, an invalid variant is returned. + Any valid index that corresponds to a string in the list causes that + string to be returned for the display role; otherwise an invalid variant + is returned. +*/ + +QVariant TableModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role == Qt::DisplayRole) + return rowList[index.row()][index.column()]; + else + return QVariant(); +} + +/*! + Returns the appropriate header string depending on the orientation of + the header and the section. If anything other than the display role is + requested, we return an invalid variant. +*/ + +QVariant TableModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (role != Qt::DisplayRole) + return QVariant(); + + if (orientation == Qt::Horizontal) + return QString("Column %1").arg(section); + else + return QString("Row %1").arg(section); +} + +/*! + Returns an appropriate value for the item's flags. Valid items are + enabled, selectable, and editable. +*/ + +Qt::ItemFlags TableModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable; +} + +/*! + Changes an item in the model, but only if the following conditions + are met: + + * The index supplied is valid. + * The role associated with editing text is specified. + + The dataChanged() signal is emitted if the item is changed. +*/ + +bool TableModel::setData(const QModelIndex &index, + const QVariant &value, int role) +{ + if (!index.isValid() || role != Qt::EditRole) + return false; + + rowList[index.row()][index.column()] = value.toString(); + emit dataChanged(index, index); + return true; +} + +/*! + Inserts a number of rows into the model at the specified position. +*/ + +bool TableModel::insertRows(int position, int rows, const QModelIndex &parent) +{ + int columns = columnCount(); + beginInsertRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + QStringList items; + for (int column = 0; column < columns; ++column) + items.append(""); + rowList.insert(position, items); + } + + endInsertRows(); + return true; +} + +/*! + Inserts a number of columns into the model at the specified position. + Each entry in the list is extended in turn with the required number of + empty strings. +*/ + +bool TableModel::insertColumns(int position, int columns, const QModelIndex &parent) +{ + int rows = rowCount(); + beginInsertColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = position; column < columns; ++column) { + rowList[row].insert(position, ""); + } + } + + endInsertColumns(); + return true; +} + +/*! + Removes a number of rows from the model at the specified position. +*/ + +bool TableModel::removeRows(int position, int rows, const QModelIndex &parent) +{ + beginRemoveRows(parent, position, position + rows - 1); + + for (int row = 0; row < rows; ++row) { + rowList.removeAt(position); + } + + endRemoveRows(); + return true; +} + +/*! + Removes a number of columns from the model at the specified position. + Each row is shortened by the number of columns specified. +*/ + +bool TableModel::removeColumns(int position, int columns, const QModelIndex &parent) +{ + int rows = rowCount(); + beginRemoveColumns(parent, position, position + columns - 1); + + for (int row = 0; row < rows; ++row) { + for (int column = 0; column < columns; ++column) { + rowList[row].removeAt(position); + } + } + + endRemoveColumns(); + return true; +} diff --git a/src/widgets/doc/snippets/updating-selections/model.h b/src/widgets/doc/snippets/updating-selections/model.h new file mode 100644 index 00000000000..ef63e45ce09 --- /dev/null +++ b/src/widgets/doc/snippets/updating-selections/model.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MODEL_H +#define MODEL_H + +#include +#include +#include + +class TableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + TableModel(int rows = 1, int columns = 1, QObject *parent = 0); + + int rowCount(const QModelIndex &parent = QModelIndex()) const; + int columnCount(const QModelIndex &parent = QModelIndex()) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + + Qt::ItemFlags flags(const QModelIndex &index) const; + bool setData(const QModelIndex &index, const QVariant &value, + int role = Qt::EditRole); + + bool insertRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool insertColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + bool removeRows(int position, int rows, const QModelIndex &parent = QModelIndex()); + bool removeColumns(int position, int columns, const QModelIndex &parent = QModelIndex()); + +private: + QList rowList; +}; + +#endif diff --git a/src/widgets/doc/snippets/updating-selections/updating-selections.pro b/src/widgets/doc/snippets/updating-selections/updating-selections.pro new file mode 100644 index 00000000000..91ebd3e84fc --- /dev/null +++ b/src/widgets/doc/snippets/updating-selections/updating-selections.pro @@ -0,0 +1,2 @@ +HEADERS += model.h window.h +SOURCES += main.cpp model.cpp window.cpp diff --git a/src/widgets/doc/snippets/updating-selections/window.cpp b/src/widgets/doc/snippets/updating-selections/window.cpp new file mode 100644 index 00000000000..eaa37b8c87b --- /dev/null +++ b/src/widgets/doc/snippets/updating-selections/window.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/* + window.cpp + + A minimal subclass of QTableView with slots to allow the selection model + to be monitored. +*/ + +#include +#include +#include +#include + +#include "model.h" +#include "window.h" + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) +{ + setWindowTitle("Selected items in a table model"); + + model = new TableModel(8, 4, this); + + table = new QTableView(this); + table->setModel(model); + + selectionModel = table->selectionModel(); + connect(selectionModel, + SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), + this, SLOT(updateSelection(const QItemSelection &, const QItemSelection &))); + connect(selectionModel, + SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), + this, SLOT(changeCurrent(const QModelIndex &, const QModelIndex &))); + + statusBar(); + setCentralWidget(table); +} + +//! [0] +void MainWindow::updateSelection(const QItemSelection &selected, + const QItemSelection &deselected) +{ + QModelIndex index; + QModelIndexList items = selected.indexes(); + + foreach (index, items) { + QString text = QString("(%1,%2)").arg(index.row()).arg(index.column()); + model->setData(index, text); +//! [0] //! [1] + } +//! [1] + +//! [2] + items = deselected.indexes(); + + foreach (index, items) + model->setData(index, ""); +} +//! [2] + +//! [3] +void MainWindow::changeCurrent(const QModelIndex ¤t, + const QModelIndex &previous) +{ + statusBar()->showMessage( + tr("Moved from (%1,%2) to (%3,%4)") + .arg(previous.row()).arg(previous.column()) + .arg(current.row()).arg(current.column())); +} +//! [3] diff --git a/src/widgets/doc/snippets/updating-selections/window.h b/src/widgets/doc/snippets/updating-selections/window.h new file mode 100644 index 00000000000..0d87ced010e --- /dev/null +++ b/src/widgets/doc/snippets/updating-selections/window.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor +** the names of its contributors may be used to endorse or promote +** products derived from this software without specific prior written +** permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef WINDOW_H +#define WINDOW_H + +#include +#include +#include +#include +#include + +class MainWindow : public QMainWindow +{ + Q_OBJECT +public: + MainWindow(QWidget *parent = 0); + +public slots: + void updateSelection(const QItemSelection &selected, + const QItemSelection &deselected); + void changeCurrent(const QModelIndex ¤t, const QModelIndex &previous); + +private: + QAbstractItemModel *model; + QItemSelectionModel *selectionModel; + QTableView *table; +}; + +#endif diff --git a/doc/src/snippets/widgets-tutorial/template.cpp b/src/widgets/doc/snippets/widgets-tutorial/template.cpp similarity index 100% rename from doc/src/snippets/widgets-tutorial/template.cpp rename to src/widgets/doc/snippets/widgets-tutorial/template.cpp diff --git a/doc/src/widgets/addressbook-fr.qdoc b/src/widgets/doc/src/addressbook-fr.qdoc similarity index 100% rename from doc/src/widgets/addressbook-fr.qdoc rename to src/widgets/doc/src/addressbook-fr.qdoc diff --git a/doc/src/widgets/addressbook.qdoc b/src/widgets/doc/src/addressbook.qdoc similarity index 100% rename from doc/src/widgets/addressbook.qdoc rename to src/widgets/doc/src/addressbook.qdoc diff --git a/src/widgets/doc/src/model-view-programming.qdoc b/src/widgets/doc/src/model-view-programming.qdoc new file mode 100644 index 00000000000..0e48efbff8f --- /dev/null +++ b/src/widgets/doc/src/model-view-programming.qdoc @@ -0,0 +1,2339 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:FDL$ +** GNU Free Documentation License +** Alternatively, this file may be used under the terms of the GNU Free +** Documentation License version 1.3 as published by the Free Software +** Foundation and appearing in the file included in the packaging of +** this file. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms +** and conditions contained in a signed written agreement between you +** and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \group model-view + \title Model/View Classes +*/ + +/*! + \page model-view-programming.html + \ingroup qt-basic-concepts + + \title Model/View Programming + \brief A guide to Qt's extensible model/view architecture. + + \section1 Introduction to Model/View Programming + + Qt 4 introduced a new set of item view classes that use a model/view + architecture to manage the relationship between data and the way it + is presented to the user. The separation of functionality introduced by + this architecture gives developers greater flexibility to customize the + presentation of items, and provides a standard model interface to allow + a wide range of data sources to be used with existing item views. + In this document, we give a brief introduction to the model/view paradigm, + outline the concepts involved, and describe the architecture of the item + view system. Each of the components in the architecture is explained, + and examples are given that show how to use the classes provided. + + \section2 The model/view architecture + + Model-View-Controller (MVC) is a design pattern originating from + Smalltalk that is often used when building user interfaces. + In \l{Design Patterns}, Gamma et al. write: + + \quotation + MVC consists of three kinds of objects. The Model is the application + object, the View is its screen presentation, and the Controller defines + the way the user interface reacts to user input. Before MVC, user + interface designs tended to lump these objects together. MVC decouples + them to increase flexibility and reuse. + \endquotation + + If the view and the controller objects are combined, the result is + the model/view architecture. This still separates the way that data + is stored from the way that it is presented to the user, but provides + a simpler framework based on the same principles. This separation + makes it possible to display the same data in several different views, + and to implement new types of views, without changing the underlying + data structures. + To allow flexible handling of user input, we introduce the concept of + the \e delegate. The advantage of having a delegate in this framework + is that it allows the way items of data are rendered and edited to be + customized. + + \table + \row \li \inlineimage modelview-overview.png + \li \b{The model/view architecture} + + The model communicates with a source of data, providing an \e interface + for the other components in the architecture. The nature of the + communication depends on the type of data source, and the way the model + is implemented. + + The view obtains \e{model indexes} from the model; these are references + to items of data. By supplying model indexes to the model, the view can + retrieve items of data from the data source. + + In standard views, a \e delegate renders the items of data. When an item + is edited, the delegate communicates with the model directly using + model indexes. + \endtable + + Generally, the model/view classes can be separated into the three groups + described above: models, views, and delegates. Each of these components + is defined by \e abstract classes that provide common interfaces and, + in some cases, default implementations of features. + Abstract classes are meant to be subclassed in order to provide the full + set of functionality expected by other components; this also allows + specialized components to be written. + + Models, views, and delegates communicate with each other using \e{signals + and slots}: + + \list + \li Signals from the model inform the view about changes to the data + held by the data source. + \li Signals from the view provide information about the user's interaction + with the items being displayed. + \li Signals from the delegate are used during editing to tell the + model and view about the state of the editor. + \endlist + + \section3 Models + + All item models are based on the QAbstractItemModel class. This class + defines an interface that is used by views and delegates to access data. + The data itself does not have to be stored in the model; it can be held + in a data structure or repository provided by a separate class, a file, + a database, or some other application component. + + The basic concepts surrounding models are presented in the section + on \l{Model Classes}. + + QAbstractItemModel + provides an interface to data that is flexible enough to handle views + that represent data in the form of tables, lists, and trees. However, + when implementing new models for list and table-like data structures, + the QAbstractListModel and QAbstractTableModel classes are better + starting points because they provide appropriate default implementations + of common functions. Each of these classes can be subclassed to provide + models that support specialized kinds of lists and tables. + + The process of subclassing models is discussed in the section on + \l{Creating New Models}. + + Qt provides some ready-made models that can be used to handle items of + data: + + \list + \li QStringListModel is used to store a simple list of QString items. + \li QStandardItemModel manages more complex tree structures of items, each + of which can contain arbitrary data. + \li QFileSystemModel provides information about files and directories in the + local filing system. + \li QSqlQueryModel, QSqlTableModel, and QSqlRelationalTableModel are used + to access databases using model/view conventions. + \endlist + + If these standard models do not meet your requirements, you can subclass + QAbstractItemModel, QAbstractListModel, or QAbstractTableModel to create + your own custom models. + + \section3 Views + + Complete implementations are provided for different kinds of + views: QListView displays a list of items, QTableView displays data + from a model in a table, and QTreeView shows model items of data in a + hierarchical list. Each of these classes is based on the + QAbstractItemView abstract base class. Although these classes are + ready-to-use implementations, they can also be subclassed to provide + customized views. + + The available views are examined in the section on \l{View Classes}. + + \section3 Delegates + + QAbstractItemDelegate is the abstract base class for delegates in the + model/view framework. Since Qt 4.4, the default delegate implementation is + provided by QStyledItemDelegate, and this is used as the default delegate + by Qt's standard views. However, QStyledItemDelegate and QItemDelegate are + independent alternatives to painting and providing editors for items in + views. The difference between them is that QStyledItemDelegate uses the + current style to paint its items. We therefore recommend using + QStyledItemDelegate as the base class when implementing custom delegates or + when working with Qt style sheets. + + Delegates are described in the section on \l{Delegate Classes}. + + \section3 Sorting + + There are two ways of approaching sorting in the model/view + architecture; which approach to choose depends on your underlying + model. + + If your model is sortable, i.e, if it reimplements the + QAbstractItemModel::sort() function, both QTableView and QTreeView + provide an API that allows you to sort your model data + programmatically. In addition, you can enable interactive sorting + (i.e. allowing the users to sort the data by clicking the view's + headers), by connecting the QHeaderView::sortIndicatorChanged() signal + to the QTableView::sortByColumn() slot or the + QTreeView::sortByColumn() slot, respectively. + + The alternative approach, if your model do not have the required + interface or if you want to use a list view to present your data, + is to use a proxy model to transform the structure of your model + before presenting the data in the view. This is covered in detail + in the section on \l {Proxy Models}. + + \section3 Convenience classes + + A number of \e convenience classes are derived from the standard view + classes for the benefit of applications that rely on Qt's item-based + item view and table classes. They are not intended to be subclassed, + but simply exist to provide a familiar interface to the equivalent classes + in Qt 3. + Examples of such classes include \l QListWidget, \l QTreeWidget, and + \l QTableWidget; these provide similar behavior to the \c QListBox, + \c QListView, and \c QTable classes in Qt 3. + + These classes are less flexible than the view classes, and cannot be + used with arbitrary models. We recommend that you use a model/view + approach to handling data in item views unless you strongly need an + item-based set of classes. + + If you wish to take advantage of the features provided by the model/view + approach while still using an item-based interface, consider using view + classes, such as QListView, QTableView, and QTreeView with + QStandardItemModel. + + \section1 Using models and views + + The following sections explain how to use the model/view pattern + in Qt. Each section includes an an example and is followed by a + section showing how to create new components. + + \section2 Two models included in Qt + + Two of the standard models provided by Qt are QStandardItemModel and + QFileSystemModel. QStandardItemModel is a multi-purpose model that can be + used to represent various different data structures needed by list, table, + and tree views. This model also holds the items of data. + QFileSystemModel is a model that maintains information about the contents + of a directory. As a result, it does not hold any items of data itself, but + simply represents files and directories on the local filing system. + + QFileSystemModel provides a ready-to-use model to experiment with, and can be + easily configured to use existing data. Using this model, we can show how + to set up a model for use with ready-made views, and explore how to + manipulate data using model indexes. + + \section2 Using views with an existing model + + The QListView and QTreeView classes are the most suitable views + to use with QFileSystemModel. The example presented below displays the + contents of a directory in a tree view next to the same information in + a list view. The views share the user's selection so that the selected + items are highlighted in both views. + + \image shareddirmodel.png + + We set up a QFileSystemModel so that it is ready for use, and create some + views to display the contents of a directory. This shows the simplest + way to use a model. The construction and use of the model is + performed from within a single \c main() function: + + \snippet shareddirmodel/main.cpp 0 + + The model is set up to use data from a certain file system. The call to + \l{QFileSystemModel::}{setRootPath()} tell the model which drive on the + file system to expose to the views. + + We create two views so that we can examine the items held in the model in two + different ways: + + \snippet shareddirmodel/main.cpp 5 + + The views are constructed in the same way as other widgets. Setting up + a view to display the items in the model is simply a matter of calling its + \l{QAbstractItemView::setModel()}{setModel()} function with the directory + model as the argument. We filter the data supplied by the model by calling + the \l{QAbstractItemView::}{setRootIndex()} function on each view, passing + a suitable \e{model index} from the file system model for the current + directory. + + The \c index() function used in this case is unique to QFileSystemModel; we + supply it with a directory and it returns a model index. Model indexes are + discussed in \l{Model Classes}. + + The rest of the function just displays the views within a splitter + widget, and runs the application's event loop: + + \snippet shareddirmodel/main.cpp 8 + + In the above example, we neglected to mention how to handle selections + of items. This subject is covered in more detail in the section about + \l{Handling Selections in Item Views}. + + \section1 Model classes + + Before examining how selections are handled, you may find it + useful to examine the concepts used in the model/view framework. + + \section2 Basic concepts + + In the model/view architecture, the model provides a standard interface + that views and delegates use to access data. In Qt, the standard + interface is defined by the QAbstractItemModel class. No matter how the + items of data are stored in any underlying data structure, all subclasses + of QAbstractItemModel represent the data as a hierarchical structure + containing tables of items. Views use this \e convention to access items + of data in the model, but they are not restricted in the way that they + present this information to the user. + + \image modelview-models.png + + Models also notify any attached views about changes to data through the + signals and slots mechanism. + + This section describes some basic concepts that are central to the way + item of data are accessed by other components via a model class. More + advanced concepts are discussed in later sections. + + \section3 Model indexes + + To ensure that the representation of the data is kept separate from the + way it is accessed, the concept of a \e{model index} is introduced. Each + piece of information that can be obtained via a model is represented by + a model index. Views and delegates use these indexes to request items of + data to display. + + As a result, only the model needs to know how to obtain data, and the type + of data managed by the model can be defined fairly generally. Model indexes + contain a pointer to the model that created them, and this prevents + confusion when working with more than one model. + + \snippet code/doc_src_model-view-programming.cpp 0 + + Model indexes provide \e temporary references to pieces of information, and + can be used to retrieve or modify data via the model. Since models may + reorganize their internal structures from time to time, model indexes may + become invalid, and \e{should not be stored}. If a long-term reference to a + piece of information is required, a \e{persistent model index} must be + created. This provides a reference to the information that the model keeps + up-to-date. Temporary model indexes are provided by the QModelIndex class, + and persistent model indexes are provided by the QPersistentModelIndex + class. + + To obtain a model index that corresponds to an item of data, three + properties must be specified to the model: a row number, a column number, + and the model index of a parent item. The following sections describe + and explain these properties in detail. + + \section3 Rows and columns + + In its most basic form, a model can be accessed as a simple table in which + items are located by their row and column numbers. \e{This does not mean + that the underlying pieces of data are stored in an array structure}; the + use of row and column numbers is only a convention to allow components to + communicate with each other. We can retrieve information about any given + item by specifying its row and column numbers to the model, and we receive + an index that represents the item: + + \snippet code/doc_src_model-view-programming.cpp 1 + + Models that provide interfaces to simple, single level data structures like + lists and tables do not need any other information to be provided but, as + the above code indicates, we need to supply more information when obtaining + a model index. + + \table + \row \li \inlineimage modelview-tablemodel.png + \li \b{Rows and columns} + + The diagram shows a representation of a basic table model in which each + item is located by a pair of row and column numbers. We obtain a model + index that refers to an item of data by passing the relevant row and + column numbers to the model. + + \snippet code/doc_src_model-view-programming.cpp 2 + + Top level items in a model are always referenced by specifying + \c QModelIndex() as their parent item. This is discussed in the next + section. + \endtable + + \section3 Parents of items + + The table-like interface to item data provided by models is ideal when + using data in a table or list view; the row and column number system maps + exactly to the way the views display items. However, structures such as + tree views require the model to expose a more flexible interface to the + items within. As a result, each item can also be the parent of another + table of items, in much the same way that a top-level item in a tree view + can contain another list of items. + + When requesting an index for a model item, we must provide some information + about the item's parent. Outside the model, the only way to refer to an + item is through a model index, so a parent model index must also be given: + + \snippet code/doc_src_model-view-programming.cpp 3 + + \table + \row \li \inlineimage modelview-treemodel.png + \li \b{Parents, rows, and columns} + + The diagram shows a representation of a tree model in which each item is + referred to by a parent, a row number, and a column number. + + Items "A" and "C" are represented as top-level siblings in the model: + + \snippet code/doc_src_model-view-programming.cpp 4 + + Item "A" has a number of children. A model index for item "B" is + obtained with the following code: + + \snippet code/doc_src_model-view-programming.cpp 5 + \endtable + + \section3 Item roles + + Items in a model can perform various \e roles for other components, + allowing different kinds of data to be supplied for different situations. + For example, Qt::DisplayRole is used to access a string that can be + displayed as text in a view. Typically, items contain data for a number of + different roles, and the standard roles are defined by Qt::ItemDataRole. + + We can ask the model for the item's data by passing it the model index + corresponding to the item, and by specifying a role to obtain the type + of data we want: + + \snippet code/doc_src_model-view-programming.cpp 6 + + \table + \row \li \inlineimage modelview-roles.png + \li \b{Item roles} + + The role indicates to the model which type of data is being referred to. + Views can display the roles in different ways, so it is important to + supply appropriate information for each role. + + The \l{Creating New Models} section covers some specific uses of roles in + more detail. + \endtable + + Most common uses for item data are covered by the standard roles defined in + Qt::ItemDataRole. By supplying appropriate item data for each role, models + can provide hints to views and delegates about how items should be + presented to the user. Different kinds of views have the freedom to + interpret or ignore this information as required. It is also possible to + define additional roles for application-specific purposes. + + \section3 Summary + + \list + \li Model indexes give views and delegates information about the location + of items provided by models in a way that is independent of any + underlying data structures. + \li Items are referred to by their row and column numbers, and by the model + index of their parent items. + \li Model indexes are constructed by models at the request of other + components, such as views and delegates. + \li If a valid model index is specified for the parent item when an index is + requested using \l{QAbstractItemModel::index()}{index()}, the index + returned refers to an item beneath that parent item in the model. + The index obtained refers to a child of that item. + \li If an invalid model index is specified for the parent item when an index + is requested using \l{QAbstractItemModel::index()}{index()}, the index + returned refers to a top-level item in the model. + \li The \l{Qt::ItemDataRole}{role} distinguishes between the + different kinds of data associated with an item. + \endlist + + \section2 Using model indexes + + To demonstrate how data can be retrieved from a model, using model + indexes, we set up a QFileSystemModel without a view and display the + names of files and directories in a widget. + Although this does not show a normal way of using a model, it demonstrates + the conventions used by models when dealing with model indexes. + + We construct a file system model in the following way: + + \snippet simplemodel-use/main.cpp 0 + + In this case, we set up a default QFileSystemModel, obtain a parent index + using a specific implementation of \l{QFileSystemModel::}{index()} + provided by that model, and we count the number of rows in the model using + the \l{QFileSystemModel::}{rowCount()} function. + + For simplicity, we are only interested in the items in the first column + of the model. We examine each row in turn, obtaining a model index for + the first item in each row, and read the data stored for that item + in the model. + + \snippet simplemodel-use/main.cpp 1 + + To obtain a model index, we specify the row number, column number (zero + for the first column), and the appropriate model index for the parent + of all the items that we want. + The text stored in each item is retrieved using the model's + \l{QFileSystemModel::}{data()} function. We specify the model index and + the \l{Qt::ItemDataRole}{DisplayRole} to obtain data for the + item in the form of a string. + + \snippet simplemodel-use/main.cpp 2 + \codeline + \snippet simplemodel-use/main.cpp 3 + + The above example demonstrates the basic principles used to retrieve + data from a model: + + \list + \li The dimensions of a model can be found using + \l{QAbstractItemModel::rowCount()}{rowCount()} and + \l{QAbstractItemModel::columnCount()}{columnCount()}. + These functions generally require a parent model index to be + specified. + \li Model indexes are used to access items in the model. The row, column, + and parent model index are needed to specify the item. + \li To access top-level items in a model, specify a null model index + as the parent index with \c QModelIndex(). + \li Items contain data for different roles. To obtain the data for a + particular role, both the model index and the role must be supplied + to the model. + \endlist + + \section2 Further reading + + New models can be created by implementing the standard interface + provided by QAbstractItemModel. In the \l{Creating New Models} + section, we demonstrate this by creating a convenient ready-to-use + model for holding lists of strings. + + \section1 View classes + + \section2 Concepts + + In the model/view architecture, the view obtains items of data from the + model and presents them to the user. The way that the data is + presented need not resemble the representation of the data provided by + the model, and may be \e{completely different} from the underlying data + structure used to store items of data. + + The separation of content and presentation is achieved by the use of a + standard model interface provided by QAbstractItemModel, a standard view + interface provided by QAbstractItemView, and the use of model indexes + that represent items of data in a general way. + Views typically manage the overall layout of the data obtained from + models. They may render individual items of data themselves, or use + \l{Delegate Classes}{delegates} to handle both rendering and editing + features. + + As well as presenting data, views handle navigation between items, + and some aspects of item selection. The views also implement basic + user interface features, such as context menus and drag and drop. + A view can provide default editing facilities for items, or it may + work with a \l{Delegate Classes}{delegate} to provide a custom + editor. + + A view can be constructed without a model, but a model must be + provided before it can display useful information. Views keep track of + the items that the user has selected through the use of + \l{Handling Selections in Item Views}{selections} which can be maintained + separately for each view, or shared between multiple views. + + Some views, such as QTableView and QTreeView, display headers as well + as items. These are also implemented by a view class, QHeaderView. + Headers usually access the same model as the view that contains them. + They retrieve data from the model using the + \l{QAbstractItemModel::headerData()} function, and usually display + header information in the form of a label. New headers can be + subclassed from the QHeaderView class to provide more specialized + labels for views. + + \section2 Using an existing view + + Qt provides three ready-to-use view classes that present data from + models in ways that are familiar to most users. + QListView can display items from a model as a simple list, or in the + form of a classic icon view. QTreeView displays items from a + model as a hierarchy of lists, allowing deeply nested structures to be + represented in a compact way. QTableView presents items from a model + in the form of a table, much like the layout of a spreadsheet + application. + + \image standard-views.png + + The default behavior of the standard views shown above should be + sufficient for most applications. They provide basic editing + facilities, and can be customized to suit the needs of more specialized + user interfaces. + + \section3 Using a model + + We take the string list model that \l{Creating New Models}{we created as + an example model}, set it up with some data, and construct a view to + display the contents of the model. This can all be performed within a + single function: + + \snippet stringlistmodel/main.cpp 0 + + Note that the \c StringListModel is declared as a \l QAbstractItemModel. + This allows us to use the abstract interface to the model, and + ensures that the code still works, even if we replace the string list + model with a different model. + + The list view provided by \l QListView is sufficient for presenting + the items in the string list model. We construct the view, and set up + the model using the following lines of code: + + \snippet stringlistmodel/main.cpp 2 + \snippet stringlistmodel/main.cpp 4 + + The view is shown in the normal way: + + \snippet stringlistmodel/main.cpp 5 + + The view renders the contents of a model, accessing data via the model's + interface. When the user tries to edit an item, the view uses a default + delegate to provide an editor widget. + + \image stringlistmodel.png + + The above image shows how a QListView represents the data in the string + list model. Since the model is editable, the view automatically allows + each item in the list to be edited using the default delegate. + + \section3 Using multiple views of a model + + Providing multiple views onto the same model is simply a matter of + setting the same model for each view. In the following code we create + two table views, each using the same simple table model which we have + created for this example: + + \snippet sharedtablemodel/main.cpp 0 + \codeline + \snippet sharedtablemodel/main.cpp 1 + + The use of signals and slots in the model/view architecture means that + changes to the model can be propagated to all the attached views, + ensuring that we can always access the same data regardless of the + view being used. + + \image sharedmodel-tableviews.png + + The above image shows two different views onto the same model, each + containing a number of selected items. Although the data from the model + is shown consistently across view, each view maintains its own internal + selection model. This can be useful in certain situations but, for + many applications, a shared selection model is desirable. + + \section2 Handling selections of items + + The mechanism for handling selections of items within views is provided + by the \l QItemSelectionModel class. All of the standard views construct + their own selection models by default, and interact with them in the + normal way. The selection model being used by a view can be obtained + through the \l{QAbstractItemView::selectionModel()}{selectionModel()} + function, and a replacement selection model can be specified with + \l{QAbstractItemView::setSelectionModel()}{setSelectionModel()}. + The ability to control the selection model used by a view is useful + when we want to provide multiple consistent views onto the same model + data. + + Generally, unless you are subclassing a model or view, you don't + need to manipulate the contents of selections directly. However, + the interface to the selection model can be accessed, if required, + and this is explored in \l{Handling Selections in Item Views}. + + \section3 Sharing selections among views + + Although it is convenient that the view classes provide their own + selection models by default, when we use more than one view onto the + same model it is often desirable that both the model's data and the + user's selection are shown consistently in all views. + Since the view classes allow their internal selection models to be + replaced, we can achieve a unified selection between views with the + following line: + + \snippet sharedtablemodel/main.cpp 2 + + The second view is given the selection model for the first view. + Both views now operate on the same selection model, keeping both + the data and the selected items synchronized. + + \image sharedselection-tableviews.png + + In the example shown above, two views of the same type were used to + display the same model's data. However, if two different types of view + were used, the selected items may be represented very differently in + each view; for example, a contiguous selection in a table view can be + represented as a fragmented set of highlighted items in a tree view. + + \section1 Delegate classes + + \section2 Concepts + + Unlike the Model-View-Controller pattern, the model/view design does not + include a completely separate component for managing interaction with + the user. Generally, the view is responsible for the presentation of + model data to the user, and for processing user input. To allow some + flexibility in the way this input is obtained, the interaction is + performed by delegates. These components provide input capabilities + and are also responsible for rendering individual items in some views. + The standard interface for controlling delegates is defined in the + \l QAbstractItemDelegate class. + + Delegates are expected to be able to render their contents themselves + by implementing the \l{QItemDelegate::paint()}{paint()} + and \l{QItemDelegate::sizeHint()}{sizeHint()} functions. + However, simple widget-based delegates can subclass \l QItemDelegate + instead of \l QAbstractItemDelegate, and take advantage of the default + implementations of these functions. + + Editors for delegates can be implemented either by using widgets to manage + the editing process or by handling events directly. + The first approach is covered later in this section, and it is also + shown in the \l{Spin Box Delegate Example}{Spin Box Delegate} example. + + The \l{Pixelator Example}{Pixelator} example shows how to create a + custom delegate that performs specialized rendering for a table view. + + \section2 Using an existing delegate + + The standard views provided with Qt use instances of \l QItemDelegate + to provide editing facilities. This default implementation of the + delegate interface renders items in the usual style for each of the + standard views: \l QListView, \l QTableView, and \l QTreeView. + + All the standard roles are handled by the default delegate used by + the standard views. The way these are interpreted is described in the + QItemDelegate documentation. + + The delegate used by a view is returned by the + \l{QAbstractItemView::itemDelegate()}{itemDelegate()} function. + The \l{QAbstractItemView::setItemDelegate()}{setItemDelegate()} function + allows you to install a custom delegate for a standard view, and it is + necessary to use this function when setting the delegate for a custom + view. + + \section2 A simple delegate + + The delegate implemented here uses a \l QSpinBox to provide + editing facilities, and is mainly intended for use with models + that display integers. Although we set up a custom integer-based + table model for this purpose, we could easily have used \l + QStandardItemModel instead, since the custom delegate controls + data entry. We construct a table view to display the contents of + the model, and this will use the custom delegate for editing. + + \image spinboxdelegate-example.png + + We subclass the delegate from \l QItemDelegate because we do not want + to write custom display functions. However, we must still provide + functions to manage the editor widget: + + \snippet itemviews/spinboxdelegate/delegate.h 0 + + Note that no editor widgets are set up when the delegate is + constructed. We only construct an editor widget when it is needed. + + \section3 Providing an editor + + In this example, when the table view needs to provide an editor, it + asks the delegate to provide an editor widget that is appropriate + for the item being modified. The + \l{QAbstractItemDelegate::createEditor()}{createEditor()} function is + supplied with everything that the delegate needs to be able to set up + a suitable widget: + + \snippet itemviews/spinboxdelegate/delegate.cpp 1 + + Note that we do not need to keep a pointer to the editor widget because + the view takes responsibility for destroying it when it is no longer + needed. + + We install the delegate's default event filter on the editor to ensure + that it provides the standard editing shortcuts that users expect. + Additional shortcuts can be added to the editor to allow more + sophisticated behavior; these are discussed in the section on + \l{#EditingHints}{Editing Hints}. + + The view ensures that the editor's data and geometry are set + correctly by calling functions that we define later for these purposes. + We can create different editors depending on the model index supplied + by the view. For example, if we have a column of integers and a column + of strings we could return either a \c QSpinBox or a \c QLineEdit, + depending on which column is being edited. + + The delegate must provide a function to copy model data into the + editor. In this example, we read the data stored in the + \l{Qt::ItemDataRole}{display role}, and set the value in the + spin box accordingly. + + \snippet itemviews/spinboxdelegate/delegate.cpp 2 + + In this example, we know that the editor widget is a spin box, but we + could have provided different editors for different types of data in + the model, in which case we would need to cast the widget to the + appropriate type before accessing its member functions. + + \section3 Submitting data to the model + + When the user has finished editing the value in the spin box, the view + asks the delegate to store the edited value in the model by calling the + \l{QAbstractItemDelegate::setModelData()}{setModelData()} function. + + \snippet itemviews/spinboxdelegate/delegate.cpp 3 + + Since the view manages the editor widgets for the delegate, we only + need to update the model with the contents of the editor supplied. + In this case, we ensure that the spin box is up-to-date, and update + the model with the value it contains using the index specified. + + The standard \l QItemDelegate class informs the view when it has + finished editing by emitting the + \l{QAbstractItemDelegate::closeEditor()}{closeEditor()} signal. + The view ensures that the editor widget is closed and destroyed. In + this example, we only provide simple editing facilities, so we need + never emit this signal. + + All the operations on data are performed through the interface + provided by \l QAbstractItemModel. This makes the delegate mostly + independent from the type of data it manipulates, but some + assumptions must be made in order to use certain types of + editor widgets. In this example, we have assumed that the model + always contains integer values, but we can still use this + delegate with different kinds of models because \l{QVariant} + provides sensible default values for unexpected data. + + \section3 Updating the editor's geometry + + It is the responsibility of the delegate to manage the editor's + geometry. The geometry must be set when the editor is created, and + when the item's size or position in the view is changed. Fortunately, + the view provides all the necessary geometry information inside a + \l{QStyleOptionViewItem}{view option} object. + + \snippet itemviews/spinboxdelegate/delegate.cpp 4 + + In this case, we just use the geometry information provided by the + view option in the item rectangle. A delegate that renders items with + several elements would not use the item rectangle directly. It would + position the editor in relation to the other elements in the item. + + \target EditingHints + \section3 Editing hints + + After editing, delegates should provide hints to the other components + about the result of the editing process, and provide hints that will + assist any subsequent editing operations. This is achieved by + emitting the \l{QAbstractItemDelegate::closeEditor()}{closeEditor()} + signal with a suitable hint. This is taken care of by the default + QItemDelegate event filter which we installed on the spin box when + it was constructed. + + The behavior of the spin box could be adjusted to make it more user + friendly. In the default event filter supplied by QItemDelegate, if + the user hits \key Return to confirm their choice in the spin box, + the delegate commits the value to the model and closes the spin box. + We can change this behavior by installing our own event filter on the + spin box, and provide editing hints that suit our needs; for example, + we might emit \l{QAbstractItemDelegate::closeEditor()}{closeEditor()} + with the \l{QAbstractItemDelegate::EndEditHint}{EditNextItem} hint to + automatically start editing the next item in the view. + + Another approach that does not require the use of an event + filter is to provide our own editor widget, perhaps subclassing + QSpinBox for convenience. This alternative approach would give us + more control over how the editor widget behaves at the cost of + writing additional code. It is usually easier to install an event + filter in the delegate if you need to customize the behavior of + a standard Qt editor widget. + + Delegates do not have to emit these hints, but those that do not will + be less integrated into applications, and will be less usable than + those that emit hints to support common editing actions. + + \section1 Handling selections in item views + + \section2 Concepts + + The selection model used in the item view classes offers many improvements + over the selection model used in Qt 3. It provides a more general + description of selections based on the facilities of the model/view + architecture. Although the standard classes for manipulating selections are + sufficient for the item views provided, the selection model allows you to + create specialized selection models to suit the requirements for your own + item models and views. + + Information about the items selected in a view is stored in an instance of + the \l QItemSelectionModel class. This maintains model indexes for items in + a single model, and is independent of any views. Since there can be many + views onto a model, it is possible to share selections between views, + allowing applications to show multiple views in a consistent way. + + Selections are made up of \e{selection ranges}. These efficiently maintain + information about large selections of items by recording only the starting + and ending model indexes for each range of selected items. Non-contiguous + selections of items are constructed by using more than one selection range + to describe the selection. + + Selections are applied to a collection of model indexes held by a selection + model. The most recent selection of items applied is known as the + \e{current selection}. The effects of this selection can be modified even + after its application through the use of certain types of selection + commands. These are discussed later in this section. + + \section3 Current item and selected items + + In a view, there is always a current item and a selected item - two + independent states. An item can be the current item and selected at the + same time. The view is responsible for ensuring that there is always a + current item as keyboard navigation, for example, requires a current item. + + The table below highlights the differences between current item and + selected items. + + \table + \header + \li Current Item + \li Selected Items + + \row + \li There can only be one current item. + \li There can be multiple selected items. + \row + \li The current item will be changed with key navigation or mouse + button clicks. + \li The selected state of items is set or unset, depending on several + pre-defined modes - e.g., single selection, multiple selection, + etc. - when the user interacts with the items. + \row + \li The current item will be edited if the edit key, \uicontrol F2, is + pressed or the item is double-clicked (provided that editing is + enabled). + \li The current item can be used together with an anchor to specify a + range that should be selected or deselected (or a combination of + the two). + \row + \li The current item is indicated by the focus rectangle. + \li The selected items are indicated with the selection rectangle. + \endtable + + When manipulating selections, it is often helpful to think of + \l QItemSelectionModel as a record of the selection state of all the items + in an item model. Once a selection model is set up, collections of items + can be selected, deselected, or their selection states can be toggled + without the need to know which items are already selected. The indexes of + all selected items can be retrieved at any time, and other components can + be informed of changes to the selection model via the signals and slots + mechanism. + + \section2 Using a selection model + + The standard view classes provide default selection models that can + be used in most applications. A selection model belonging to one view + can be obtained using the view's + \l{QAbstractItemView::selectionModel()}{selectionModel()} function, + and shared between many views with + \l{QAbstractItemView::setSelectionModel()}{setSelectionModel()}, + so the construction of new selection models is generally not required. + + A selection is created by specifying a model, and a pair of model + indexes to a \l QItemSelection. This uses the indexes to refer to items + in the given model, and interprets them as the top-left and bottom-right + items in a block of selected items. + To apply the selection to items in a model requires the selection to be + submitted to a selection model; this can be achieved in a number of ways, + each having a different effect on the selections already present in the + selection model. + + \section3 Selecting items + + To demonstrate some of the principal features of selections, we construct + an instance of a custom table model with 32 items in total, and open a + table view onto its data: + + \snippet itemselection/main.cpp 0 + + The table view's default selection model is retrieved for later use. + We do not modify any items in the model, but instead select a few + items that the view will display at the top-left of the table. To do + this, we need to retrieve the model indexes corresponding to the + top-left and bottom-right items in the region to be selected: + + \snippet itemselection/main.cpp 1 + + To select these items in the model, and see the corresponding change + in the table view, we need to construct a selection object then apply + it to the selection model: + + \snippet itemselection/main.cpp 2 + + The selection is applied to the selection model using a command + defined by a combination of + \l{QItemSelectionModel::SelectionFlag}{selection flags}. + In this case, the flags used cause the items recorded in the + selection object to be included in the selection model, regardless + of their previous state. The resulting selection is shown by the view. + + \image selected-items1.png + + The selection of items can be modified using various operations that + are defined by the selection flags. The selection that results from + these operations may have a complex structure, but it is represented + efficiently by the selection model. The use of different selection + flags to manipulate the selected items is described when we examine + how to update a selection. + + \section3 Reading the selection state + + The model indexes stored in the selection model can be read using + the \l{QItemSelectionModel::selectedIndexes()}{selectedIndexes()} + function. This returns an unsorted list of model indexes that we can + iterate over as long as we know which model they are for: + + \snippet reading-selections/window.cpp 0 + + The above code uses Qt's convenient \l{Container Classes}{foreach + keyword} to iterate over, and modify, the items corresponding to the + indexes returned by the selection model. + + The selection model emits signals to indicate changes in the + selection. These notify other components about changes to both the + selection as a whole and the currently focused item in the item + model. We can connect the + \l{QItemSelectionModel::selectionChanged()}{selectionChanged()} + signal to a slot, and examine the items in the model that are selected or + deselected when the selection changes. The slot is called with two + \l{QItemSelection} objects: one contains a list of indexes that + correspond to newly selected items; the other contains indexes that + correspond to newly deselected items. + + In the following code, we provide a slot that receives the + \l{QItemSelectionModel::selectionChanged()}{selectionChanged()} + signal, fills in the selected items with + a string, and clears the contents of the deselected items. + + \snippet updating-selections/window.cpp 0 + \snippet updating-selections/window.cpp 1 + \codeline + \snippet updating-selections/window.cpp 2 + + We can keep track of the currently focused item by connecting the + \l{QItemSelectionModel::currentChanged()}{currentChanged()} signal + to a slot that is called with two model indexes. These correspond to + the previously focused item, and the currently focused item. + + In the following code, we provide a slot that receives the + \l{QItemSelectionModel::currentChanged()}{currentChanged()} signal, + and uses the information provided to update the status bar of a + \l QMainWindow: + + \snippet updating-selections/window.cpp 3 + + Monitoring selections made by the user is straightforward with these + signals, but we can also update the selection model directly. + + \section3 Updating a selection + + Selection commands are provided by a combination of selection flags, + defined by \l{QItemSelectionModel::SelectionFlag}. + Each selection flag tells the selection model how to update its + internal record of selected items when either of the + \l{QItemSelection::select()}{select()} functions are called. + The most commonly used flag is the + \l{QItemSelectionModel::SelectionFlag}{Select} flag + which instructs the selection model to record the specified items as + being selected. The + \l{QItemSelectionModel::SelectionFlag}{Toggle} flag causes the + selection model to invert the state of the specified items, + selecting any deselected items given, and deselecting any currently + selected items. The \l{QItemSelectionModel::SelectionFlag}{Deselect} + flag deselects all the specified items. + + Individual items in the selection model are updated by creating a + selection of items, and applying them to the selection model. In the + following code, we apply a second selection of items to the table + model shown above, using the + \l{QItemSelectionModel::SelectionFlag}{Toggle} command to invert the + selection state of the items given. + + \snippet itemselection/main.cpp 3 + + The results of this operation are displayed in the table view, + providing a convenient way of visualizing what we have achieved: + + \image selected-items2.png + + By default, the selection commands only operate on the individual + items specified by the model indexes. However, the flag used to + describe the selection command can be combined with additional flags + to change entire rows and columns. For example if you call + \l{QItemSelectionModel::select()}{select()} with only one index, but + with a command that is a combination of + \l{QItemSelectionModel::SelectionFlag}{Select} and + \l{QItemSelectionModel::SelectionFlag}{Rows}, the + entire row containing the item referred to is selected. + The following code demonstrates the use of the + \l{QItemSelectionModel::SelectionFlag}{Rows} and + \l{QItemSelectionModel::SelectionFlag}{Columns} flags: + + \snippet itemselection/main.cpp 4 + + Although only four indexes are supplied to the selection model, the + use of the + \l{QItemSelectionModel::SelectionFlag}{Columns} and + \l{QItemSelectionModel::SelectionFlag}{Rows} selection flags means + that two columns and two rows are selected. The following image shows + the result of these two selections: + + \image selected-items3.png + + The commands performed on the example model have all involved + accumulating a selection of items in the model. It is also possible + to clear the selection, or to replace the current selection with + a new one. + + To replace the current selection with a new selection, combine + the other selection flags with the + \l{QItemSelectionModel::SelectionFlag}{Current} flag. A command using + this flag instructs the selection model to replace its current collection + of model indexes with those specified in a call to + \l{QItemSelectionModel::select()}{select()}. + To clear all selections before you start adding new ones, + combine the other selection flags with the + \l{QItemSelectionModel::SelectionFlag}{Clear} flag. This + has the effect of resetting the selection model's collection of model + indexes. + + \section3 Selecting all items in a model + + To select all items in a model, it is necessary to create a + selection for each level of the model that covers all items in that + level. We do this by retrieving the indexes corresponding to the + top-left and bottom-right items with a given parent index: + + \snippet reading-selections/window.cpp 2 + + A selection is constructed with these indexes and the model. The + corresponding items are then selected in the selection model: + + \snippet reading-selections/window.cpp 3 + + This needs to be performed for all levels in the model. + For top-level items, we would define the parent index in the usual way: + + \snippet reading-selections/window.cpp 1 + + For hierarchical models, the + \l{QAbstractItemModel::hasChildren()}{hasChildren()} function is used to + determine whether any given item is the parent of another level of + items. + + \section1 Creating new models + + The separation of functionality between the model/view components allows + models to be created that can take advantage of existing views. This + approach lets us present data from a variety of sources using standard + graphical user interface components, such as QListView, QTableView, and + QTreeView. + + The QAbstractItemModel class provides an interface that is flexible + enough to support data sources that arrange information in hierarchical + structures, allowing for the possibility that data will be inserted, + removed, modified, or sorted in some way. It also provides support for + drag and drop operations. + + The QAbstractListModel and QAbstractTableModel classes provide support + for interfaces to simpler non-hierarchical data structures, and are + easier to use as a starting point for simple list and table models. + + In this section, we create a simple read-only model to explore + the basic principles of the model/view architecture. Later in this + section, we adapt this simple model so that items can be modified + by the user. + + For an example of a more complex model, see the + \l{itemviews/simpletreemodel}{Simple Tree Model} example. + + The requirements of QAbstractItemModel subclasses is described in more + detail in the \l{Model Subclassing Reference} document. + + \section2 Designing a model + + When creating a new model for an existing data structure, it is + important to consider which type of model should be used to + provide an interface onto the data. If the data structure can be + represented as a list or table of items, you can subclass + QAbstractListModel or QAbstractTableModel since these classes + provide suitable default implementations for many functions. + + However, if the underlying data structure can only be represented + by a hierarchical tree structure, it is necessary to subclass + QAbstractItemModel. This approach is taken in the + \l{itemviews/simpletreemodel}{Simple Tree Model} example. + + In this section, we implement a simple model based on a list of + strings, so the QAbstractListModel provides an ideal base class on + which to build. + + Whatever form the underlying data structure takes, it is + usually a good idea to supplement the standard QAbstractItemModel API + in specialized models with one that allows more natural access to the + underlying data structure. This makes it easier to populate the model + with data, yet still enables other general model/view components to + interact with it using the standard API. The model described below + provides a custom constructor for just this purpose. + + \section2 A read-only example model + + The model implemented here is a simple, non-hierarchical, read-only data + model based on the standard QStringListModel class. It has a \l QStringList + as its internal data source, and implements only what is needed to make a + functioning model. To make the implementation easier, we subclass + \l QAbstractListModel because it defines sensible default behavior for list + models, and it exposes a simpler interface than the \l QAbstractItemModel + class. + + When implementing a model it is important to remember that + \l QAbstractItemModel does not store any data itself, it merely + presents an interface that the views use to access the data. + For a minimal read-only model it is only necessary to implement a few + functions as there are default implementations for most of the + interface. The class declaration is as follows: + + \snippet stringlistmodel/model.h 0 + \snippet stringlistmodel/model.h 1 + \codeline + \snippet stringlistmodel/model.h 5 + + Apart from the model's constructor, we only need to implement two + functions: \l{QAbstractItemModel::rowCount()}{rowCount()} returns the + number of rows in the model and \l{QAbstractItemModel::data()}{data()} + returns an item of data corresponding to a specified model index. + + Well behaved models also implement + \l{QAbstractItemModel::headerData()}{headerData()} to give tree and + table views something to display in their headers. + + Note that this is a non-hierarchical model, so we don't have to worry + about the parent-child relationships. If our model was hierarchical, we + would also have to implement the + \l{QAbstractItemModel::index()}{index()} and + \l{QAbstractItemModel::parent()}{parent()} functions. + + The list of strings is stored internally in the \c stringList private + member variable. + + \section3 Dimensions of the model + + We want the number of rows in the model to be the same as the number of + strings in the string list. We implement the + \l{QAbstractItemModel::rowCount()}{rowCount()} function with this in + mind: + + \snippet stringlistmodel/model.cpp 0 + + Since the model is non-hierarchical, we can safely ignore the model index + corresponding to the parent item. By default, models derived from + QAbstractListModel only contain one column, so we do not need to + reimplement the \l{QAbstractItemModel::columnCount()}{columnCount()} + function. + + \section3 Model headers and data + + For items in the view, we want to return the strings in the string list. + The \l{QAbstractItemModel::data()}{data()} function is responsible for + returning the item of data that corresponds to the index argument: + + \snippet stringlistmodel/model.cpp 1-data-read-only + + We only return a valid QVariant if the model index supplied is valid, + the row number is within the range of items in the string list, and the + requested role is one that we support. + + Some views, such as QTreeView and QTableView, are able to display headers + along with the item data. If our model is displayed in a view with headers, + we want the headers to show the row and column numbers. We can provide + information about the headers by subclassing the + \l{QAbstractItemModel::headerData()}{headerData()} function: + + \snippet stringlistmodel/model.cpp 2 + + Again, we return a valid QVariant only if the role is one that we support. + The orientation of the header is also taken into account when deciding the + exact data to return. + + Not all views display headers with the item data, and those that do may + be configured to hide them. Nonetheless, it is recommended that you + implement the \l{QAbstractItemModel::headerData()}{headerData()} function + to provide relevant information about the data provided by the model. + + An item can have several roles, giving out different data depending on the + role specified. The items in our model only have one role, + \l{Qt::ItemDataRole}{DisplayRole}, so we return the data + for items irrespective of the role specified. + However, we could reuse the data we provide for the + \l{Qt::ItemDataRole}{DisplayRole} in + other roles, such as the + \l{Qt::ItemDataRole}{ToolTipRole} that views can use to + display information about items in a tooltip. + + \section2 An editable model + + The read-only model shows how simple choices could be presented to the + user but, for many applications, an editable list model is much more + useful. We can modify the read-only model to make the items editable + by changing the data() function we implemented for read-only, and + by implementing two extra functions: + \l{QAbstractItemModel::flags()}{flags()} and + \l{QAbstractItemModel::setData()}{setData()}. + The following function declarations are added to the class definition: + + \snippet stringlistmodel/model.h 2 + \snippet stringlistmodel/model.h 3 + + \section3 Making the model editable + + A delegate checks whether an item is editable before creating an + editor. The model must let the delegate know that its items are + editable. We do this by returning the correct flags for each item in + the model; in this case, we enable all items and make them both + selectable and editable: + + \snippet stringlistmodel/model.cpp 3 + + Note that we do not have to know how the delegate performs the actual + editing process. We only have to provide a way for the delegate to set the + data in the model. This is achieved through the + \l{QAbstractItemModel::setData()}{setData()} function: + + \snippet stringlistmodel/model.cpp 4 + \snippet stringlistmodel/model.cpp 5 + + In this model, the item in the string list that corresponds to the + model index is replaced by the value provided. However, before we + can modify the string list, we must make sure that the index is + valid, the item is of the correct type, and that the role is + supported. By convention, we insist that the role is the + \l{Qt::ItemDataRole}{EditRole} since this is the role used by the + standard item delegate. For boolean values, however, you can use + Qt::CheckStateRole and set the Qt::ItemIsUserCheckable flag; a + checkbox is then used for editing the value. The underlying + data in this model is the same for all roles, so this detail just + makes it easier to integrate the model with standard components. + + When the data has been set, the model must let the views know that some + data has changed. This is done by emitting the + \l{QAbstractItemModel::dataChanged()}{dataChanged()} signal. Since only + one item of data has changed, the range of items specified in the signal + is limited to just one model index. + + Also the data() function needs to be changed to add the Qt::EditRole test: + + \snippet stringlistmodel/model.cpp 1 + + \section3 Inserting and removing rows + + It is possible to change the number of rows and columns in a model. In the + string list model it only makes sense to change the number of rows, so we + only reimplement the functions for inserting and removing rows. These are + declared in the class definition: + + \snippet stringlistmodel/model.h 4 + + Since rows in this model correspond to strings in a list, the + \c insertRows() function inserts a number of empty strings into the string + list before the specified position. The number of strings inserted is + equivalent to the number of rows specified. + + The parent index is normally used to determine where in the model the + rows should be added. In this case, we only have a single top-level list + of strings, so we just insert empty strings into that list. + + \snippet stringlistmodel/model.cpp 6 + \snippet stringlistmodel/model.cpp 7 + + The model first calls the + \l{QAbstractItemModel::beginInsertRows()}{beginInsertRows()} function to + inform other components that the number of rows is about to change. The + function specifies the row numbers of the first and last new rows to be + inserted, and the model index for their parent item. After changing the + string list, it calls + \l{QAbstractItemModel::endInsertRows()}{endInsertRows()} to complete the + operation and inform other components that the dimensions of the model + have changed, returning true to indicate success. + + The function to remove rows from the model is also simple to write. + The rows to be removed from the model are specified by the position and + the number of rows given. + We ignore the parent index to simplify our implementation, and just + remove the corresponding items from the string list. + + \snippet stringlistmodel/model.cpp 8 + \snippet stringlistmodel/model.cpp 9 + + The \l{QAbstractItemModel::beginRemoveRows()}{beginRemoveRows()} function + is always called before any underlying data is removed, and specifies the + first and last rows to be removed. This allows other components to access + the data before it becomes unavailable. + After the rows have been removed, the model emits + \l{QAbstractItemModel::endRemoveRows()}{endRemoveRows()} to finish the + operation and let other components know that the dimensions of the model + have changed. + + \section2 Next steps + + We can display the data provided by this model, or any other model, using + the \l QListView class to present the model's items in the form of a vertical + list. + For the string list model, this view also provides a default editor so that + the items can be manipulated. We examine the possibilities made available by + the standard view classes in \l{View Classes}. + + The \l{Model Subclassing Reference} document discusses the requirements of + QAbstractItemModel subclasses in more detail, and provides a guide to the + virtual functions that must be implemented to enable various features in + different types of models. + + \section1 Item view convenience classes + + Qt 4 also introduced some standard widgets to provide classic + item-based container widgets. These behave in a similar way to the + item view classes in Qt 3, but have been rewritten to use the + underlying model/view framework for performance and + maintainability. The old item view classes are still available in + the compatibility library (see the \l{porting4.html}{Porting + Guide} for more information). + + The item-based widgets have been given names which reflect their uses: + \c QListWidget provides a list of items, \c QTreeWidget displays a + multi-level tree structure, and \c QTableWidget provides a table of cell + items. Each class inherits the behavior of the \c QAbstractItemView + class which implements common behavior for item selection and header + management. + + \section2 List widgets + + Single level lists of items are typically displayed using a \c QListWidget + and a number of \c{QListWidgetItem}s. A list widget is constructed in the + same way as any other widget: + + \snippet qlistwidget-using/mainwindow.cpp 0 + + List items can be added directly to the list widget when they are + constructed: + + \snippet qlistwidget-using/mainwindow.cpp 3 + + They can also be constructed without a parent list widget and added to + a list at some later time: + + \snippet qlistwidget-using/mainwindow.cpp 6 + \snippet qlistwidget-using/mainwindow.cpp 7 + + Each item in a list can display a text label and an icon. The colors + and font used to render the text can be changed to provide a customized + appearance for items. Tooltips, status tips, and "What's + This?" help are all easily configured to ensure that the list is properly + integrated into the application. + + \snippet qlistwidget-using/mainwindow.cpp 8 + + By default, items in a list are presented in the order of their creation. + Lists of items can be sorted according to the criteria given in + \l{Qt::SortOrder} to produce a list of items that is sorted in forward or + reverse alphabetical order: + + \snippet qlistwidget-using/mainwindow.cpp 4 + \snippet qlistwidget-using/mainwindow.cpp 5 + + \section2 Tree widgets + + Trees or hierarchical lists of items are provided by the \c QTreeWidget + and \c QTreeWidgetItem classes. Each item in the tree widget can have + child items of its own, and can display a number of columns of + information. Tree widgets are created just like any other widget: + + \snippet qtreewidget-using/mainwindow.cpp 0 + + Before items can be added to the tree widget, the number of columns must + be set. For example, we could define two columns, and create a header + to provide labels at the top of each column: + + \snippet qtreewidget-using/mainwindow.cpp 1 + \snippet qtreewidget-using/mainwindow.cpp 2 + + The easiest way to set up the labels for each section is to supply a string + list. For more sophisticated headers, you can construct a tree item, + decorate it as you wish, and use that as the tree widget's header. + + Top-level items in the tree widget are constructed with the tree widget as + their parent widget. They can be inserted in an arbitrary order, or you + can ensure that they are listed in a particular order by specifying the + previous item when constructing each item: + + \snippet qtreewidget-using/mainwindow.cpp 3 + \codeline + \snippet qtreewidget-using/mainwindow.cpp 4 + + Tree widgets deal with top-level items slightly differently to other + items from deeper within the tree. Items can be removed from the top + level of the tree by calling the tree widget's + \l{QTreeWidget::takeTopLevelItem()}{takeTopLevelItem()} function, but + items from lower levels are removed by calling their parent item's + \l{QTreeWidgetItem::takeChild()}{takeChild()} function. + Items are inserted in the top level of the tree with the + \l{QTreeWidget::insertTopLevelItem()}{insertTopLevelItem()} function. + At lower levels in the tree, the parent item's + \l{QTreeWidgetItem::insertChild()}{insertChild()} function is used. + + It is easy to move items around between the top level and lower levels + in the tree. We just need to check whether the items are top-level items + or not, and this information is supplied by each item's \c parent() + function. For example, we can remove the current item in the tree widget + regardless of its location: + + \snippet qtreewidget-using/mainwindow.cpp 10 + \snippet qtreewidget-using/mainwindow.cpp 11 + + Inserting the item somewhere else in the tree widget follows the same + pattern: + + \snippet qtreewidget-using/mainwindow.cpp 8 + \snippet qtreewidget-using/mainwindow.cpp 9 + + \section2 Table widgets + + Tables of items similar to those found in spreadsheet applications + are constructed with the \c QTableWidget and \c QTableWidgetItem. These + provide a scrolling table widget with headers and items to use within it. + + Tables can be created with a set number of rows and columns, or these + can be added to an unsized table as they are needed. + + \snippet qtablewidget-using/mainwindow.h 0 + \snippet qtablewidget-using/mainwindow.cpp 0 + + Items are constructed outside the table before being added to the table + at the required location: + + \snippet qtablewidget-using/mainwindow.cpp 3 + + Horizontal and vertical headers can be added to the table by constructing + items outside the table and using them as headers: + + \snippet qtablewidget-using/mainwindow.cpp 1 + + Note that the rows and columns in the table begin at zero. + + \section2 Common features + + There are a number of item-based features common to each of the + convenience classes that are available through the same interfaces + in each class. We present these in the following sections with some + examples for different widgets. + Look at the list of \l{Model/View Classes} for each of the widgets + for more details about the use of each function used. + + \section3 Hidden items + + It is sometimes useful to be able to hide items in an item view widget + rather than remove them. Items for all of the above widgets can be + hidden and later shown again. You can determine whether an item is hidden + by calling the isItemHidden() function, and items can be hidden with + \c setItemHidden(). + + Since this operation is item-based, the same function is available for + all three convenience classes. + + \section3 Selections + + The way items are selected is controlled by the widget's selection mode + (\l{QAbstractItemView::SelectionMode}). + This property controls whether the user can select one or many items and, + in many-item selections, whether the selection must be a continuous range + of items. The selection mode works in the same way for all of the + above widgets. + + \table + \row + \li \image selection-single.png + \li \b{Single item selections:} + Where the user needs to choose a single item from a widget, the + default \c SingleSelection mode is most suitable. In this mode, the + current item and the selected item are the same. + + \row + \li \image selection-multi.png + \li \b{Multi-item selections:} + In this mode, the user can toggle the selection state of any item in the + widget without changing the existing selection, much like the way + non-exclusive checkboxes can be toggled independently. + + \row + \li \image selection-extended.png + \li \b{Extended selections:} + Widgets that often require many adjacent items to be selected, such + as those found in spreadsheets, require the \c ExtendedSelection mode. + In this mode, continuous ranges of items in the widget can be selected + with both the mouse and the keyboard. + Complex selections, involving many items that are not adjacent to other + selected items in the widget, can also be created if modifier keys are + used. + + If the user selects an item without using a modifier key, the existing + selection is cleared. + \endtable + + The selected items in a widget are read using the \c selectedItems() + function, providing a list of relevant items that can be iterated over. + For example, we can find the sum of all the numeric values within a + list of selected items with the following code: + + \snippet qtablewidget-using/mainwindow.cpp 4 + + Note that for the single selection mode, the current item will be in + the selection. In the multi-selection and extended selection modes, the + current item may not lie within the selection, depending on the way the + user formed the selection. + + \section3 Searching + + It is often useful to be able to find items within an item view widget, + either as a developer or as a service to present to users. All three + item view convenience classes provide a common \c findItems() function + to make this as consistent and simple as possible. + + Items are searched for by the text that they contain according to + criteria specified by a selection of values from Qt::MatchFlags. + We can obtain a list of matching items with the \c findItems() + function: + + \snippet qtreewidget-using/mainwindow.cpp 6 + \snippet qtreewidget-using/mainwindow.cpp 7 + + The above code causes items in a tree widget to be selected if they + contain the text given in the search string. This pattern can also be + used in the list and table widgets. + + \section1 Using Drag and Drop with Item Views + + Qt's drag and drop infrastructure is fully supported by the model/view framework. + Items in lists, tables, and trees can be dragged within the views, and data can be + imported and exported as MIME-encoded data. + + The standard views automatically support internal drag and drop, where items are + moved around to change the order in which they are displayed. By default, drag and + drop is not enabled for these views because they are configured for the simplest, + most common uses. To allow items to be dragged around, certain properties of the + view need to be enabled, and the items themselves must also allow dragging to occur. + + The requirements for a model that only allows items to be exported from a + view, and which does not allow data to be dropped into it, are fewer than + those for a fully-enabled drag and drop model. + + See also the \l{Model Subclassing Reference} for more information about + enabling drag and drop support in new models. + + \section2 Using convenience views + + Each of the types of item used with QListWidget, QTableWidget, and QTreeWidget + is configured to use a different set of flags by default. For example, each + QListWidgetItem or QTreeWidgetItem is initially enabled, checkable, selectable, + and can be used as the source of a drag and drop operation; each QTableWidgetItem + can also be edited and used as the target of a drag and drop operation. + + Although all of the standard items have one or both flags set for drag and drop, + you generally need to set various properties in the view itself to take advantage + of the built-in support for drag and drop: + + \list + \li To enable item dragging, set the view's + \l{QAbstractItemView::dragEnabled}{dragEnabled} property to \c true. + \li To allow the user to drop either internal or external items within the view, + set the view's \l{QAbstractScrollArea::}{viewport()}'s + \l{QWidget::acceptDrops}{acceptDrops} property to \c true. + \li To show the user where the item currently being dragged will be placed if + dropped, set the view's \l{QAbstractItemView::showDropIndicator}{showDropIndicator} + property. This provides the user with continuously updating information about + item placement within the view. + \endlist + + For example, we can enable drag and drop in a list widget with the following lines + of code: + + \snippet qlistwidget-dnd/mainwindow.cpp 0 + + The result is a list widget which allows the items to be copied + around within the view, and even lets the user drag items between + views containing the same type of data. In both situations, the + items are copied rather than moved. + + To enable the user to move the items around within the view, we + must set the list widget's \l {QAbstractItemView::}{dragDropMode}: + + \snippet qlistwidget-dnd/mainwindow.cpp 1 + + \section2 Using model/view classes + + Setting up a view for drag and drop follows the same pattern used with the + convenience views. For example, a QListView can be set up in the same way as a + QListWidget: + + \snippet qlistview-dnd/mainwindow.cpp 0 + + Since access to the data displayed by the view is controlled by a model, the + model used also has to provide support for drag and drop operations. The + actions supported by a model can be specified by reimplementing the + QAbstractItemModel::supportedDropActions() function. For example, copy and + move operations are enabled with the following code: + + \snippet qlistview-dnd/model.cpp 10 + + Although any combination of values from Qt::DropActions can be given, the + model needs to be written to support them. For example, to allow Qt::MoveAction + to be used properly with a list model, the model must provide an implementation + of QAbstractItemModel::removeRows(), either directly or by inheriting the + implementation from its base class. + + \section3 Enabling drag and drop for items + + Models indicate to views which items can be dragged, and which will accept drops, + by reimplementing the QAbstractItemModel::flags() function to provide suitable + flags. + + For example, a model which provides a simple list based on QAbstractListModel + can enable drag and drop for each of the items by ensuring that the flags + returned contain the \l Qt::ItemIsDragEnabled and \l Qt::ItemIsDropEnabled + values: + + \snippet qlistview-dnd/model.cpp 7 + + Note that items can be dropped into the top level of the model, but dragging is + only enabled for valid items. + + In the above code, since the model is derived from QStringListModel, we + obtain a default set of flags by calling its implementation of the flags() + function. + + \section3 Encoding exported data + + When items of data are exported from a model in a drag and drop operation, they + are encoded into an appropriate format corresponding to one or more MIME types. + Models declare the MIME types that they can use to supply items by reimplementing + the QAbstractItemModel::mimeTypes() function, returning a list of standard MIME + types. + + For example, a model that only provides plain text would provide the following + implementation: + + \snippet qlistview-dnd/model.cpp 9 + + The model must also provide code to encode data in the advertised format. This + is achieved by reimplementing the QAbstractItemModel::mimeData() function to + provide a QMimeData object, just as in any other drag and drop operation. + + The following code shows how each item of data, corresponding to a given list of + indexes, is encoded as plain text and stored in a QMimeData object. + + \snippet qlistview-dnd/model.cpp 8 + + Since a list of model indexes is supplied to the function, this approach is general + enough to be used in both hierarchical and non-heirarchical models. + + Note that custom datatypes must be declared as \l{QMetaObject}{meta objects} + and that stream operators must be implemented for them. See the QMetaObject + class description for details. + + \section3 Inserting dropped data into a model + + The way that any given model handles dropped data depends on both its type + (list, table, or tree) and the way its contents is likely to be presented to + the user. Generally, the approach taken to accommodate dropped data should + be the one that most suits the model's underlying data store. + + Different types of model tend to handle dropped data in different ways. List + and table models only provide a flat structure in which items of data are + stored. As a result, they may insert new rows (and columns) when data is + dropped on an existing item in a view, or they may overwrite the item's + contents in the model using some of the data supplied. Tree models are + often able to add child items containing new data to their underlying data + stores, and will therefore behave more predictably as far as the user + is concerned. + + Dropped data is handled by a model's reimplementation of + QAbstractItemModel::dropMimeData(). For example, a model that handles a + simple list of strings can provide an implementation that handles data + dropped onto existing items separately to data dropped into the top level + of the model (i.e., onto an invalid item). + + The model first has to make sure that the operation should be acted on, + the data supplied is in a format that can be used, and that its destination + within the model is valid: + + \snippet qlistview-dnd/model.cpp 0 + \snippet qlistview-dnd/model.cpp 1 + + A simple one column string list model can indicate failure if the data + supplied is not plain text, or if the column number given for the drop + is invalid. + + The data to be inserted into the model is treated differently depending on + whether it is dropped onto an existing item or not. In this simple example, + we want to allow drops between existing items, before the first item in the + list, and after the last item. + + When a drop occurs, the model index corresponding to the parent item will + either be valid, indicating that the drop occurred on an item, or it will + be invalid, indicating that the drop occurred somewhere in the view that + corresponds to top level of the model. + + \snippet qlistview-dnd/model.cpp 2 + + We initially examine the row number supplied to see if we can use it + to insert items into the model, regardless of whether the parent index is + valid or not. + + \snippet qlistview-dnd/model.cpp 3 + + If the parent model index is valid, the drop occurred on an item. In this + simple list model, we find out the row number of the item and use that + value to insert dropped items into the top level of the model. + + \snippet qlistview-dnd/model.cpp 4 + + When a drop occurs elsewhere in the view, and the row number is unusable, + we append items to the top level of the model. + + In hierarchical models, when a drop occurs on an item, it would be better to + insert new items into the model as children of that item. In the simple + example shown here, the model only has one level, so this approach is not + appropriate. + + \section3 Decoding imported data + + Each implementation of \l{QAbstractItemModel::dropMimeData()}{dropMimeData()} must + also decode the data and insert it into the model's underlying data structure. + + For a simple string list model, the encoded items can be decoded and streamed + into a QStringList: + + \snippet qlistview-dnd/model.cpp 5 + + The strings can then be inserted into the underlying data store. For consistency, + this can be done through the model's own interface: + + \snippet qlistview-dnd/model.cpp 6 + + Note that the model will typically need to provide implementations of the + QAbstractItemModel::insertRows() and QAbstractItemModel::setData() functions. + + \sa {Item Views Puzzle Example} + + \section1 Proxy models + + In the model/view framework, items of data supplied by a single model can be shared + by any number of views, and each of these can possibly represent the same information + in completely different ways. + Custom views and delegates are effective ways to provide radically different + representations of the same data. However, applications often need to provide + conventional views onto processed versions of the same data, such as differently-sorted + views onto a list of items. + + Although it seems appropriate to perform sorting and filtering operations as internal + functions of views, this approach does not allow multiple views to share the results + of such potentially costly operations. The alternative approach, involving sorting + within the model itself, leads to the similar problem where each view has to display + items of data that are organized according to the most recent processing operation. + + To solve this problem, the model/view framework uses proxy models to manage the + information supplied between individual models and views. Proxy models are components + that behave like ordinary models from the perspective of a view, and access data from + source models on behalf of that view. The signals and slots used by the model/view + framework ensure that each view is updated appropriately no matter how many proxy models + are placed between itself and the source model. + + \section2 Using proxy models + + Proxy models can be inserted between an existing model and any number of views. + Qt is supplied with a standard proxy model, QSortFilterProxyModel, that is usually + instantiated and used directly, but can also be subclassed to provide custom filtering + and sorting behavior. The QSortFilterProxyModel class can be used in the following way: + + \snippet qsortfilterproxymodel/main.cpp 0 + \codeline + \snippet qsortfilterproxymodel/main.cpp 1 + + Since proxy models are inherit from QAbstractItemModel, they can be connected to + any kind of view, and can be shared between views. They can also be used to + process the information obtained from other proxy models in a pipeline arrangement. + + The QSortFilterProxyModel class is designed to be instantiated and used directly + in applications. More specialized proxy models can be created by subclassing this + classes and implementing the required comparison operations. + + \section2 Customizing proxy models + + Generally, the type of processing used in a proxy model involves mapping each item of + data from its original location in the source model to either a different location in + the proxy model. In some models, some items may have no corresponding location in the + proxy model; these models are \e filtering proxy models. Views access items using + model indexes provided by the proxy model, and these contain no information about the + source model or the locations of the original items in that model. + + QSortFilterProxyModel enables data from a source model to be filtered before + being supplied to views, and also allows the contents of a source model to + be supplied to views as pre-sorted data. + + \section3 Custom filtering models + + The QSortFilterProxyModel class provides a filtering model that is fairly versatile, + and which can be used in a variety of common situations. For advanced users, + QSortFilterProxyModel can be subclassed, providing a mechanism that enables custom + filters to be implemented. + + Subclasses of QSortFilterProxyModel can reimplement two virtual functions that are + called whenever a model index from the proxy model is requested or used: + + \list + \li \l{QSortFilterProxyModel::filterAcceptsColumn()}{filterAcceptsColumn()} is used to + filter specific columns from part of the source model. + \li \l{QSortFilterProxyModel::filterAcceptsRow()}{filterAcceptsRow()} is used to filter + specific rows from part of the source model. + \endlist + + The default implementations of the above functions in QSortFilterProxyModel + return true to ensure that all items are passed through to views; reimplementations + of these functions should return false to filter out individual rows and columns. + + \section3 Custom sorting models + + QSortFilterProxyModel instances use Qt's built-in qStableSort() function to set up + mappings between items in the source model and those in the proxy model, allowing a + sorted hierarchy of items to be exposed to views without modifying the structure of the + source model. To provide custom sorting behavior, reimplement the + \l{QSortFilterProxyModel::lessThan()}{lessThan()} function to perform custom + comparisons. + + \section1 Model subclassing reference + + Model subclasses need to provide implementations of many of the virtual functions + defined in the QAbstractItemModel base class. The number of these functions that need + to be implemented depends on the type of model - whether it supplies views with + a simple list, a table, or a complex hierarchy of items. Models that inherit from + QAbstractListModel and QAbstractTableModel can take advantage of the default + implementations of functions provided by those classes. Models that expose items + of data in tree-like structures must provide implementations for many of the + virtual functions in QAbstractItemModel. + + The functions that need to be implemented in a model subclass can be divided into three + groups: + + \list + \li \b{Item data handling:} All models need to implement functions to enable views and + delegates to query the dimensions of the model, examine items, and retrieve data. + \li \b{Navigation and index creation:} Hierarchical models need to provide functions + that views can call to navigate the tree-like structures they expose, and obtain + model indexes for items. + \li \b{Drag and drop support and MIME type handling:} Models inherit functions that + control the way that internal and external drag and drop operations are performed. + These functions allow items of data to be described in terms of MIME types that + other components and applications can understand. + \endlist + + For more information, see the \l + {"Item View Classes" Chapter of C++ GUI Programming with Qt 4}. + + \section2 Item data handling + + Models can provide varying levels of access to the data they provide: They can be + simple read-only components, some models may support resizing operations, and + others may allow items to be edited. + + \section2 Read-Only access + + To provide read-only access to data provided by a model, the following functions + \e{must} be implemented in the model's subclass: + + \table 90% + \row \li \l{QAbstractItemModel::flags()}{flags()} + \li Used by other components to obtain information about each item provided by + the model. In many models, the combination of flags should include + Qt::ItemIsEnabled and Qt::ItemIsSelectable. + \row \li \l{QAbstractItemModel::data()}{data()} + \li Used to supply item data to views and delegates. Generally, models only + need to supply data for Qt::DisplayRole and any application-specific user + roles, but it is also good practice to provide data for Qt::ToolTipRole, + Qt::AccessibleTextRole, and Qt::AccessibleDescriptionRole. + See the Qt::ItemDataRole enum documentation for information about the types + associated with each role. + \row \li \l{QAbstractItemModel::headerData()}{headerData()} + \li Provides views with information to show in their headers. The information is + only retrieved by views that can display header information. + \row \li \l{QAbstractItemModel::rowCount()}{rowCount()} + \li Provides the number of rows of data exposed by the model. + \endtable + + These four functions must be implemented in all types of model, including list models + (QAbstractListModel subclasses) and table models (QAbstractTableModel subclasses). + + Additionally, the following functions \e{must} be implemented in direct subclasses + of QAbstractTableModel and QAbstractItemModel: + + \table 90% + \row \li \l{QAbstractItemModel::columnCount()}{columnCount()} + \li Provides the number of columns of data exposed by the model. List models do not + provide this function because it is already implemented in QAbstractListModel. + \endtable + + \section3 Editable items + + Editable models allow items of data to be modified, and may also provide + functions to allow rows and columns to be inserted and removed. To enable + editing, the following functions must be implemented correctly: + + \table 90% + \row \li \l{QAbstractItemModel::flags()}{flags()} + \li Must return an appropriate combination of flags for each item. In particular, + the value returned by this function must include \l{Qt::ItemIsEditable} in + addition to the values applied to items in a read-only model. + \row \li \l{QAbstractItemModel::setData()}{setData()} + \li Used to modify the item of data associated with a specified model index. + To be able to accept user input, provided by user interface elements, this + function must handle data associated with Qt::EditRole. + The implementation may also accept data associated with many different kinds + of roles specified by Qt::ItemDataRole. After changing the item of data, + models must emit the \l{QAbstractItemModel::dataChanged()}{dataChanged()} + signal to inform other components of the change. + \row \li \l{QAbstractItemModel::setHeaderData()}{setHeaderData()} + \li Used to modify horizontal and vertical header information. After changing + the item of data, models must emit the + \l{QAbstractItemModel::headerDataChanged()}{headerDataChanged()} + signal to inform other components of the change. + \endtable + + \section3 Resizable models + + All types of model can support the insertion and removal of rows. Table models + and hierarchical models can also support the insertion and removal of columns. + It is important to notify other components about changes to the model's dimensions + both \e before and \e after they occur. As a result, the following functions + can be implemented to allow the model to be resized, but implementations must + ensure that the appropriate functions are called to notify attached views and + delegates: + + \table 90% + \row \li \l{QAbstractItemModel::insertRows()}{insertRows()} + \li Used to add new rows and items of data to all types of model. + Implementations must call + \l{QAbstractItemModel::beginInsertRows()}{beginInsertRows()} \e before + inserting new rows into any underlying data structures, and call + \l{QAbstractItemModel::endInsertRows()}{endInsertRows()} + \e{immediately afterwards}. + \row \li \l{QAbstractItemModel::removeRows()}{removeRows()} + \li Used to remove rows and the items of data they contain from all types of model. + Implementations must call + \l{QAbstractItemModel::beginRemoveRows()}{beginRemoveRows()} + \e before inserting new columns into any underlying data structures, and call + \l{QAbstractItemModel::endRemoveRows()}{endRemoveRows()} + \e{immediately afterwards}. + \row \li \l{QAbstractItemModel::insertColumns()}{insertColumns()} + \li Used to add new columns and items of data to table models and hierarchical models. + Implementations must call + \l{QAbstractItemModel::beginInsertColumns()}{beginInsertColumns()} \e before + rows are removed from any underlying data structures, and call + \l{QAbstractItemModel::endInsertColumns()}{endInsertColumns()} + \e{immediately afterwards}. + \row \li \l{QAbstractItemModel::removeColumns()}{removeColumns()} + \li Used to remove columns and the items of data they contain from table models and + hierarchical models. + Implementations must call + \l{QAbstractItemModel::beginRemoveColumns()}{beginRemoveColumns()} + \e before columns are removed from any underlying data structures, and call + \l{QAbstractItemModel::endRemoveColumns()}{endRemoveColumns()} + \e{immediately afterwards}. + \endtable + + Generally, these functions should return true if the operation was successful. + However, there may be cases where the operation only partly succeeded; for example, + if less than the specified number of rows could be inserted. In such cases, the + model should return false to indicate failure to enable any attached components to + handle the situation. + + The signals emitted by the functions called in implementations of the resizing + API give attached components the chance to take action before any data becomes + unavailable. The encapsulation of insert and remove operations with begin and end + functions also enable the model to manage + \l{QPersistentModelIndex}{persistent model indexes} correctly. + + Normally, the begin and end functions are capable of informing other components + about changes to the model's underlying structure. For more complex changes to the + model's structure, perhaps involving internal reorganization or sorting of data, + it is necessary to emit the \l{QAbstractItemModel::layoutChanged()}{layoutChanged()} + signal to cause any attached views to be updated. + + \section3 Lazy population of model data + + Lazy population of model data effectively allows requests for information + about the model to be deferred until it is actually needed by views. + + Some models need to obtain data from remote sources, or must perform + time-consuming operations to obtain information about the way the + data is organized. Since views generally request as much information + as possible in order to accurately display model data, it can be useful + to restrict the amount of information returned to them to reduce + unnecessary follow-up requests for data. + + In hierarchical models where finding the number of children of a given + item is an expensive operation, it is useful to ensure that the model's + \l{QAbstractItemModel::}{rowCount()} implementation is only called when + necessary. In such cases, the \l{QAbstractItemModel::}{hasChildren()} + function can be reimplemented to provide an inexpensive way for views to + check for the presence of children and, in the case of QTreeView, draw + the appropriate decoration for their parent item. + + Whether the reimplementation of \l{QAbstractItemModel::}{hasChildren()} + returns \c true or \c false, it may not be necessary for the view to call + \l{QAbstractItemModel::}{rowCount()} to find out how many children are + present. For example, QTreeView does not need to know how many children + there are if the parent item has not been expanded to show them. + + If it is known that many items will have children, reimplementing + \l{QAbstractItemModel::}{hasChildren()} to unconditionally return \c true + is sometimes a useful approach to take. This ensures that each item can + be later examined for children while making initial population of model + data as fast as possible. The only disadvantage is that items without + children may be displayed incorrectly in some views until the user + attempts to view the non-existent child items. + + \section2 Navigation and model index creation + + Hierarchical models need to provide functions that views can call to navigate the + tree-like structures they expose, and obtain model indexes for items. + + \section3 Parents and children + + Since the structure exposed to views is determined by the underlying data + structure, it is up to each model subclass to create its own model indexes + by providing implementations of the following functions: + + \table 90% + \row \li \l{QAbstractItemModel::index()}{index()} + \li Given a model index for a parent item, this function allows views and delegates + to access children of that item. If no valid child item - corresponding to the + specified row, column, and parent model index, can be found, the function + must return QModelIndex(), which is an invalid model index. + \row \li \l{QAbstractItemModel::parent()}{parent()} + \li Provides a model index corresponding to the parent of any given child item. + If the model index specified corresponds to a top-level item in the model, or if + there is no valid parent item in the model, the function must return + an invalid model index, created with the empty QModelIndex() constructor. + \endtable + + Both functions above use the \l{QAbstractItemModel::createIndex()}{createIndex()} + factory function to generate indexes for other components to use. It is normal for + models to supply some unique identifier to this function to ensure that + the model index can be re-associated with its corresponding item later on. + + \section2 Drag and drop support and MIME type handling + + The model/view classes support drag and drop operations, providing default behavior + that is sufficient for many applications. However, it is also possible to customize + the way items are encoded during drag and drop operations, whether they are copied + or moved by default, and how they are inserted into existing models. + + Additionally, the convenience view classes implement specialized behavior that + should closely follow that expected by existing developers. + The \l{#Convenience Views}{Convenience Views} section provides an overview of this + behavior. + + \section3 MIME data + + By default, the built-in models and views use an internal MIME type + (\c{application/x-qabstractitemmodeldatalist}) to pass around information about + model indexes. This specifies data for a list of items, containing the row and + column numbers of each item, and information about the roles that each item + supports. + + Data encoded using this MIME type can be obtained by calling + QAbstractItemModel::mimeData() with a QModelIndexList containing the items to + be serialized. + \omit + The following types are used to store information about + each item as it is streamed into a QByteArray and stored in a QMimeData object: + + \table 90% + \header \li Description \li Type + \row \li Row \li int + \row \li Column \li int + \row \li Data for each role \li QMap + \endtable + + This information can be retrieved for use in non-model classes by calling + QMimeData::data() with the \c{application/x-qabstractitemmodeldatalist} MIME + type and streaming out the items one by one. + \endomit + + When implementing drag and drop support in a custom model, it is possible to + export items of data in specialized formats by reimplementing the following + function: + + \table 90% + \row \li \l{QAbstractItemModel::mimeData()}{mimeData()} + \li This function can be reimplemented to return data in formats other + than the default \c{application/x-qabstractitemmodeldatalist} internal + MIME type. + + Subclasses can obtain the default QMimeData object from the base class + and add data to it in additional formats. + \endtable + + For many models, it is useful to provide the contents of items in common format + represented by MIME types such as \c{text/plain} and \c{image/png}. Note that + images, colors and HTML documents can easily be added to a QMimeData object with + the QMimeData::setImageData(), QMimeData::setColorData(), and + QMimeData::setHtml() functions. + + \section3 Accepting dropped data + + When a drag and drop operation is performed over a view, the underlying model is + queried to determine which types of operation it supports and the MIME types + it can accept. This information is provided by the + QAbstractItemModel::supportedDropActions() and QAbstractItemModel::mimeTypes() + functions. Models that do not override the implementations provided by + QAbstractItemModel support copy operations and the default internal MIME type + for items. + + When serialized item data is dropped onto a view, the data is inserted into + the current model using its implementation of QAbstractItemModel::dropMimeData(). + The default implementation of this function will never overwrite any data in the + model; instead, it tries to insert the items of data either as siblings of an + item, or as children of that item. + + To take advantage of QAbstractItemModel's default implementation for the built-in + MIME type, new models must provide reimplementations of the following functions: + + \table 90% + \row \li \l{QAbstractItemModel::insertRows()}{insertRows()} + \li {1, 2} These functions enable the model to automatically insert new data using + the existing implementation provided by QAbstractItemModel::dropMimeData(). + \row \li \l{QAbstractItemModel::insertColumns()}{insertColumns()} + \row \li \l{QAbstractItemModel::setData()}{setData()} + \li Allows the new rows and columns to be populated with items. + \row \li \l{QAbstractItemModel::setItemData()}{setItemData()} + \li This function provides more efficient support for populating new items. + \endtable + + To accept other forms of data, these functions must be reimplemented: + + \table 90% + \row \li \l{QAbstractItemModel::supportedDropActions()}{supportedDropActions()} + \li Used to return a combination of \l{Qt::DropActions}{drop actions}, + indicating the types of drag and drop operations that the model accepts. + \row \li \l{QAbstractItemModel::mimeTypes()}{mimeTypes()} + \li Used to return a list of MIME types that can be decoded and handled by + the model. Generally, the MIME types that are supported for input into + the model are the same as those that it can use when encoding data for + use by external components. + \row \li \l{QAbstractItemModel::dropMimeData()}{dropMimeData()} + \li Performs the actual decoding of the data transferred by drag and drop + operations, determines where in the model it will be set, and inserts + new rows and columns where necessary. How this function is implemented + in subclasses depends on the requirements of the data exposed by each + model. + \endtable + + If the implementation of the \l{QAbstractItemModel::dropMimeData()}{dropMimeData()} + function changes the dimensions of a model by inserting or removing rows or + columns, or if items of data are modified, care must be taken to ensure that + all relevant signals are emitted. It can be useful to simply call + reimplementations of other functions in the subclass, such as + \l{QAbstractItemModel::setData()}{setData()}, + \l{QAbstractItemModel::insertRows()}{insertRows()}, and + \l{QAbstractItemModel::insertColumns()}{insertColumns()}, to ensure that the + model behaves consistently. + + In order to ensure drag operations work properly, it is important to + reimplement the following functions that remove data from the model: + + \list + \li \l{QAbstractItemModel::}{removeRows()} + \li \l{QAbstractItemModel::}{removeRow()} + \li \l{QAbstractItemModel::}{removeColumns()} + \li \l{QAbstractItemModel::}{removeColumn()} + \endlist + + For more information about drag and drop with item views, refer to + \l{Using drag and drop with item views}. + + \section3 Convenience views + + The convenience views (QListWidget, QTableWidget, and QTreeWidget) override + the default drag and drop functionality to provide less flexible, but more + natural behavior that is appropriate for many applications. For example, + since it is more common to drop data into cells in a QTableWidget, replacing + the existing contents with the data being transferred, the underlying model + will set the data of the target items rather than insert new rows and columns + into the model. For more information on drag and drop in convenience views, + you can see \l{Using drag and drop with item views}. + + \section2 Performance optimization for large amounts of data + + The \l{QAbstractItemModel::}{canFetchMore()} function checks if the parent + has more data available and returns true or false accordingly. The + \l{QAbstractItemModel::}{fetchMore()} function fetches data based on the + parent specified. Both these functions can be combined, for example, in a + database query involving incremental data to populate a QAbstractItemModel. + We reimplement \l{QAbstractItemModel::}{canFetchMore()} to indicate if there + is more data to be fetched and \l{QAbstractItemModel::}{fetchMore()} to + populate the model as required. + + Another example would be dynamically populated tree models, where we + reimplement \l{QAbstractItemModel::}{fetchMore()} when a branch in the tree + model is expanded. + + If your reimplementation of \l{QAbstractItemModel::}{fetchMore()} adds rows + to the model, you need to call \l{QAbstractItemModel::}{beginInsertRows()} + and \l{QAbstractItemModel::}{endInsertRows()}. Also, both + \l{QAbstractItemModel::}{canFetchMore()} and \l{QAbstractItemModel::} + {fetchMore()} must be reimplemented as their default implementation returns + false and does nothing. + + \keyword Model/View Classes + \section1 The model/view classes + + These classes use the model/view design pattern in which the + underlying data (in the model) is kept separate from the way the + data is presented and manipulated by the user (in the view). + + \annotatedlist model-view + + \section1 Related examples + + \list + \li \l{itemviews/dirview}{Dir View} + \li \l{itemviews/spinboxdelegate}{Spin Box Delegate} + \li \l{itemviews/pixelator}{Pixelator} + \li \l{itemviews/simpletreemodel}{Simple Tree Model} + \li \l{itemviews/chart}{Chart} + \endlist +*/ diff --git a/doc/src/widgets/modelview.qdoc b/src/widgets/doc/src/modelview.qdoc similarity index 96% rename from doc/src/widgets/modelview.qdoc rename to src/widgets/doc/src/modelview.qdoc index fdd25def31d..97432b4df45 100644 --- a/doc/src/widgets/modelview.qdoc +++ b/src/widgets/doc/src/modelview.qdoc @@ -201,7 +201,7 @@ add editing capabilities later. (file source: examples/tutorials/modelview/1_readonly/main.cpp) - \snippet examples/tutorials/modelview/1_readonly/main.cpp Quoting ModelView Tutorial + \snippet tutorials/modelview/1_readonly/main.cpp Quoting ModelView Tutorial We have the usual \l {modelview-part2-main-cpp.html}{main()} function: @@ -222,12 +222,12 @@ is easier to use than the more general QAbstractItemModel. (file source: examples/tutorials/modelview/1_readonly/mymodel.h) - \snippet examples/tutorials/modelview/1_readonly/mymodel.h Quoting ModelView Tutorial + \snippet tutorials/modelview/1_readonly/mymodel.h Quoting ModelView Tutorial QAbstractTableModel requires the implementation of three abstract methods. (file source: examples/tutorials/modelview/1_readonly/mymodel.cpp) - \snippet examples/tutorials/modelview/1_readonly/mymodel.cpp Quoting ModelView Tutorial + \snippet tutorials/modelview/1_readonly/mymodel.cpp Quoting ModelView Tutorial The number of rows and columns is provided by \l{QAbstractItemModel::rowCount()}{MyModel::rowCount()} and @@ -263,7 +263,7 @@ role to return different pieces of information depending on its value. (file source: examples/tutorials/modelview/2_formatting/mymodel.cpp) - \snippet examples/tutorials/modelview/2_formatting/mymodel.cpp Quoting ModelView Tutorial + \snippet tutorials/modelview/2_formatting/mymodel.cpp Quoting ModelView Tutorial Each formatting property will be requested from the model with a separate call to the \l{QAbstractItemModel::data()}{data()} method. The \c role @@ -311,7 +311,7 @@ stream. In our small example, \l{QAbstractItemModel::}{data()} will be called 42 times. Each time you hover the cursor over the field, - \l{QAbstractItemModel::}{data()} will be called again \mdash 7 times for + \l{QAbstractItemModel::}{data()} will be called again -- 7 times for each cell. That's why it is important to make sure that your data is available when \l{QAbstractItemModel::}{data()} is invoked and expensive lookup operations are cached. @@ -324,7 +324,7 @@ second because we are showing the current time. (file source: examples/tutorials/modelview/3_changingmodel/mymodel.cpp) - \snippet examples/tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_QVariant + \snippet tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_QVariant Something is missing to make the clock tick. We need to tell the view every second that the time has changed and that it needs to be read again. We do @@ -332,12 +332,12 @@ connect its timeout signal. (file source: examples/tutorials/modelview/3_changingmodel/mymodel.cpp) - \snippet examples/tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_a + \snippet tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_a Here is the corresponding slot: (file source: examples/tutorials/modelview/3_changingmodel/mymodel.cpp) - \snippet examples/tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_b + \snippet tutorials/modelview/3_changingmodel/mymodel.cpp quoting mymodel_b We ask the view to read the data in the top left cell again by emitting the \l{QAbstractItemModel::}{dataChanged()} signal. Note that we did not @@ -353,7 +353,7 @@ \l{QAbstractItemModel::headerData()}{headerData()} method: (file source: examples/tutorials/modelview/4_headers/mymodel.cpp) - \snippet examples/tutorials/modelview/4_headers/mymodel.cpp quoting mymodel_c + \snippet tutorials/modelview/4_headers/mymodel.cpp quoting mymodel_c Note that method \l{QAbstractItemModel::headerData()}{headerData()} also has a parameter role which has the same meaning as in @@ -372,7 +372,7 @@ \l{QAbstractItemModel::}{setData()} and \l{QAbstractItemModel::}{flags()}. (file source: examples/tutorials/modelview/5_edit/mymodel.h) - \snippet examples/tutorials/modelview/5_edit/mymodel.h Quoting ModelView Tutorial + \snippet tutorials/modelview/5_edit/mymodel.h Quoting ModelView Tutorial We use \c the two-dimensional array QString \c m_gridData to store our data. This makes \c m_gridData the core of \c MyModel. The rest of \c MyModel acts @@ -381,7 +381,7 @@ makes it possible to transfer the modified text to the window title. (file source: examples/tutorials/modelview/5_edit/mymodel.cpp) - \snippet examples/tutorials/modelview/5_edit/mymodel.cpp quoting mymodel_e + \snippet tutorials/modelview/5_edit/mymodel.cpp quoting mymodel_e \l{QAbstractItemModel::setData()}{setData()} will be called each time the user edits a cell. The \c index parameter tells us which field has been @@ -392,7 +392,7 @@ \l Qt::CheckStateRole. (file source: examples/tutorials/modelview/5_edit/mymodel.cpp) - \snippet examples/tutorials/modelview/5_edit/mymodel.cpp quoting mymodel_f + \snippet tutorials/modelview/5_edit/mymodel.cpp quoting mymodel_f Various properties of a cell can be adjusted with \l{QAbstractItemModel::flags()}{flags()}. @@ -436,7 +436,7 @@ \image tree_2_with_algorithm.png (file source: examples/tutorials/modelview/6_treeview/mainwindow.cpp) - \snippet examples/tutorials/modelview/6_treeview/mainwindow.cpp Quoting ModelView Tutorial + \snippet tutorials/modelview/6_treeview/mainwindow.cpp Quoting ModelView Tutorial We simply instantiate a QStandardItemModel and add a couple of \l{QStandardItem}{QStandardItems} to the constructor. We can then make a @@ -454,7 +454,7 @@ So let's create a couple of items: (file source: examples/tutorials/modelview/7_selections/mainwindow.cpp) - \snippet examples/tutorials/modelview/7_selections/mainwindow.cpp quoting modelview_a + \snippet tutorials/modelview/7_selections/mainwindow.cpp quoting modelview_a Views manage selections within a separate selection model, which can be retrieved with the \l{QAbstractItemView::}{selectionModel()} method. We @@ -462,7 +462,7 @@ \l{QAbstractItemView::}{selectionChanged()} signal. (file source: examples/tutorials/modelview/7_selections/mainwindow.cpp) - \snippet examples/tutorials/modelview/7_selections/mainwindow.cpp quoting modelview_b + \snippet tutorials/modelview/7_selections/mainwindow.cpp quoting modelview_b We get the model index that corresponds to the selection by calling \l{QItemSelectionModel::currentIndex()}{treeView->selectionModel()->currentIndex()} diff --git a/doc/src/widgets/widgets-tutorial.qdoc b/src/widgets/doc/src/widgets-tutorial.qdoc similarity index 99% rename from doc/src/widgets/widgets-tutorial.qdoc rename to src/widgets/doc/src/widgets-tutorial.qdoc index 735a7ebc54d..37f095d5004 100644 --- a/doc/src/widgets/widgets-tutorial.qdoc +++ b/src/widgets/doc/src/widgets-tutorial.qdoc @@ -63,7 +63,7 @@ A typical \c main() function in \c{main.cpp} looks like this: - \snippet doc/src/snippets/widgets-tutorial/template.cpp main.cpp body + \snippet widgets-tutorial/template.cpp main.cpp body First, a QApplication object is constructed, which can be configured with arguments passed in from the command line. After diff --git a/doc/src/widgets/windows-and-dialogs/dialogs.qdoc b/src/widgets/doc/src/windows-and-dialogs/dialogs.qdoc similarity index 100% rename from doc/src/widgets/windows-and-dialogs/dialogs.qdoc rename to src/widgets/doc/src/windows-and-dialogs/dialogs.qdoc diff --git a/doc/src/widgets/windows-and-dialogs/mainwindow.qdoc b/src/widgets/doc/src/windows-and-dialogs/mainwindow.qdoc similarity index 95% rename from doc/src/widgets/windows-and-dialogs/mainwindow.qdoc rename to src/widgets/doc/src/windows-and-dialogs/mainwindow.qdoc index 3a2efb06a25..3c175669fb3 100644 --- a/doc/src/widgets/windows-and-dialogs/mainwindow.qdoc +++ b/src/widgets/doc/src/windows-and-dialogs/mainwindow.qdoc @@ -198,17 +198,17 @@ the first time it is called. You can also call QMainWindow::setMenuBar() to use a custom menu bar in the main window. - \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.cpp 0 + \snippet code/doc_src_qt4-mainwindow.cpp 0 \dots - \snippet examples/mainwindows/menus/mainwindow.cpp 5 + \snippet mainwindows/menus/mainwindow.cpp 5 \dots Once actions have been created, we can add them to the main window components. To begin with, we add them to the pop-up menus: - \snippet examples/mainwindows/menus/mainwindow.cpp 10 + \snippet mainwindows/menus/mainwindow.cpp 10 \dots - \snippet examples/mainwindows/menus/mainwindow.cpp 11 + \snippet mainwindows/menus/mainwindow.cpp 11 \dots The QToolBar and QMenu classes use Qt's action system to provide a @@ -220,9 +220,9 @@ We create a toolbar as a child of the main window, and add the desired actions to it: - \snippet examples/mainwindows/sdi/mainwindow.cpp 0 + \snippet mainwindows/sdi/mainwindow.cpp 0 \dots - \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.cpp 1 + \snippet code/doc_src_qt4-mainwindow.cpp 1 In this example, the toolbar is restricted to the top and bottom toolbar areas of the main window, and is initially placed in the @@ -234,7 +234,7 @@ dock widget as a child of the main window, and add widgets as children of the dock widget: - \snippet doc/src/snippets/dockwidgets/mainwindow.cpp 0 + \snippet dockwidgets/mainwindow.cpp 0 In this example, the dock widget can only be placed in the left and right dock areas, and it is initially placed in the left dock area. @@ -244,7 +244,7 @@ required, the default can be changed with the QMainWindow::setCorner() function: - \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.cpp 2 + \snippet code/doc_src_qt4-mainwindow.cpp 2 The following diagram shows the configuration produced by the above code. Note that the left and right dock widgets will occupy the top and bottom @@ -255,7 +255,7 @@ Once all of the main window components have been set up, the central widget is created and installed by using code similar to the following: - \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.cpp 3 + \snippet code/doc_src_qt4-mainwindow.cpp 3 The central widget can be any subclass of QWidget. */ From ee38dec6f3aff6f7f277323c5c8488d4cd385693 Mon Sep 17 00:00:00 2001 From: Marius Storm-Olsen Date: Thu, 10 May 2012 08:53:06 +0200 Subject: [PATCH 13/13] Don't add C-style copyright headers to qmake project files Leads to parse errors, and we don't really put copyrights into these files anyways. Change-Id: I4b423b3f4f5c4f1f5051d8e3613133c4f1df342a Reviewed-by: Casper van Donderen --- src/dbus/doc/snippets/code/doc_src_qtdbus.pro | 40 ------------------- .../doc/snippets/code/doc_src_qtopengl.pro | 40 ------------------- .../snippets/code/doc_src_qtprintsupport.pro | 40 ------------------- .../doc/snippets/code/doc_src_qtestlib.pro | 40 ------------------- .../doc/snippets/code/doc_src_qttest.pro | 40 ------------------- .../doc/snippets/code/doc_src_qtwidgets.pro | 40 ------------------- 6 files changed, 240 deletions(-) diff --git a/src/dbus/doc/snippets/code/doc_src_qtdbus.pro b/src/dbus/doc/snippets/code/doc_src_qtdbus.pro index d0e6c0e837c..a1ba138a85f 100644 --- a/src/dbus/doc/snippets/code/doc_src_qtdbus.pro +++ b/src/dbus/doc/snippets/code/doc_src_qtdbus.pro @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - #! [1] QT += dbus #! [1] diff --git a/src/opengl/doc/snippets/code/doc_src_qtopengl.pro b/src/opengl/doc/snippets/code/doc_src_qtopengl.pro index 8c12b35abd3..72adc2140b3 100644 --- a/src/opengl/doc/snippets/code/doc_src_qtopengl.pro +++ b/src/opengl/doc/snippets/code/doc_src_qtopengl.pro @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - #! [1] QT += opengl #! [1] diff --git a/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro b/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro index 05cdbf3841a..39dd838120b 100644 --- a/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro +++ b/src/printsupport/doc/snippets/code/doc_src_qtprintsupport.pro @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - #! [0] QT += printsupport #! [0] diff --git a/src/testlib/doc/snippets/code/doc_src_qtestlib.pro b/src/testlib/doc/snippets/code/doc_src_qtestlib.pro index e6de136bec0..c514d260750 100644 --- a/src/testlib/doc/snippets/code/doc_src_qtestlib.pro +++ b/src/testlib/doc/snippets/code/doc_src_qtestlib.pro @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - #! [1] QT += testlib #! [1] diff --git a/src/testlib/doc/snippets/code/doc_src_qttest.pro b/src/testlib/doc/snippets/code/doc_src_qttest.pro index 15cbfc56947..62b8fb064cb 100644 --- a/src/testlib/doc/snippets/code/doc_src_qttest.pro +++ b/src/testlib/doc/snippets/code/doc_src_qttest.pro @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - #! [1] QT += testlib #! [1] diff --git a/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro b/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro index 7e3c633dd51..2fee715c24a 100644 --- a/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro +++ b/src/widgets/doc/snippets/code/doc_src_qtwidgets.pro @@ -1,43 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor -** the names of its contributors may be used to endorse or promote -** products derived from this software without specific prior written -** permission. -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - #! [0] QT += widgets #! [0]

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 literal 0 HcmV?d00001 diff --git a/doc/src/images/qpen-miterlimit.png b/src/gui/doc/images/qpen-miterlimit.png similarity index 100% rename from doc/src/images/qpen-miterlimit.png rename to src/gui/doc/images/qpen-miterlimit.png diff --git a/src/gui/doc/images/qpen-roundcap.png b/src/gui/doc/images/qpen-roundcap.png new file mode 100644 index 0000000000000000000000000000000000000000..77b22b2babd6aad1d6ef24333c05dfd052e2b64e GIT binary patch literal 1920 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 literal 0 HcmV?d00001 diff --git a/src/gui/doc/images/qpen-solid.png b/src/gui/doc/images/qpen-solid.png new file mode 100644 index 0000000000000000000000000000000000000000..e042b18017e927bdc74fa32c806ab394e1cfce8e GIT binary patch literal 7416 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%0A9$)25>i&<41g?J#GKKr~PL* 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 HE^+?_1?Dna literal 0 HcmV?d00001 diff --git a/doc/src/images/qradialgradient-pad.png b/src/gui/doc/images/qradialgradient-pad.png similarity index 100% rename from doc/src/images/qradialgradient-pad.png rename to src/gui/doc/images/qradialgradient-pad.png diff --git a/doc/src/images/qradialgradient-reflect.png b/src/gui/doc/images/qradialgradient-reflect.png similarity index 100% rename from doc/src/images/qradialgradient-reflect.png rename to src/gui/doc/images/qradialgradient-reflect.png diff --git a/doc/src/images/qradialgradient-repeat.png b/src/gui/doc/images/qradialgradient-repeat.png similarity index 100% rename from doc/src/images/qradialgradient-repeat.png rename to src/gui/doc/images/qradialgradient-repeat.png diff --git a/doc/src/images/qstatustipevent-action.png b/src/gui/doc/images/qstatustipevent-action.png similarity index 100% rename from doc/src/images/qstatustipevent-action.png rename to src/gui/doc/images/qstatustipevent-action.png diff --git a/doc/src/images/qstatustipevent-widget.png b/src/gui/doc/images/qstatustipevent-widget.png similarity index 100% rename from doc/src/images/qstatustipevent-widget.png rename to src/gui/doc/images/qstatustipevent-widget.png diff --git a/doc/src/images/qt-fillrule-oddeven.png b/src/gui/doc/images/qt-fillrule-oddeven.png similarity index 100% rename from doc/src/images/qt-fillrule-oddeven.png rename to src/gui/doc/images/qt-fillrule-oddeven.png diff --git a/doc/src/images/qt-fillrule-winding.png b/src/gui/doc/images/qt-fillrule-winding.png similarity index 100% rename from doc/src/images/qt-fillrule-winding.png rename to src/gui/doc/images/qt-fillrule-winding.png diff --git a/doc/src/images/qtexttableformat-cell.png b/src/gui/doc/images/qtexttableformat-cell.png similarity index 100% rename from doc/src/images/qtexttableformat-cell.png rename to src/gui/doc/images/qtexttableformat-cell.png diff --git a/doc/src/images/qtransform-combinedtransformation.png b/src/gui/doc/images/qtransform-combinedtransformation.png similarity index 100% rename from doc/src/images/qtransform-combinedtransformation.png rename to src/gui/doc/images/qtransform-combinedtransformation.png diff --git a/doc/src/images/qtransform-combinedtransformation2.png b/src/gui/doc/images/qtransform-combinedtransformation2.png similarity index 100% rename from doc/src/images/qtransform-combinedtransformation2.png rename to src/gui/doc/images/qtransform-combinedtransformation2.png diff --git a/doc/src/images/qtransform-representation.png b/src/gui/doc/images/qtransform-representation.png similarity index 100% rename from doc/src/images/qtransform-representation.png rename to src/gui/doc/images/qtransform-representation.png diff --git a/doc/src/images/qtransform-simpletransformation.png b/src/gui/doc/images/qtransform-simpletransformation.png similarity index 100% rename from doc/src/images/qtransform-simpletransformation.png rename to src/gui/doc/images/qtransform-simpletransformation.png diff --git a/doc/src/images/texttable-merge.png b/src/gui/doc/images/texttable-merge.png similarity index 100% rename from doc/src/images/texttable-merge.png rename to src/gui/doc/images/texttable-merge.png diff --git a/doc/src/images/texttable-split.png b/src/gui/doc/images/texttable-split.png similarity index 100% rename from doc/src/images/texttable-split.png rename to src/gui/doc/images/texttable-split.png diff --git a/src/gui/doc/qtgui.qdocconf b/src/gui/doc/qtgui.qdocconf new file mode 100644 index 00000000000..85772bbc3ea --- /dev/null +++ b/src/gui/doc/qtgui.qdocconf @@ -0,0 +1,92 @@ +include(../../../doc/global/qt-cpp-ignore.qdocconf) + +project = QtGui +description = Qt GUI Reference Documentation +url = http://qt-project.org/doc/qt-5.0/qtgui +version = 5.0.0 + +sourceencoding = UTF-8 +outputencoding = UTF-8 +naturallanguage = en_US +qhp.projects = QtGui + +qhp.QtGui.file = qtgui.qhp +qhp.QtGui.namespace = org.qt-project.qtgui.500 +qhp.QtGui.virtualFolder = qdoc +qhp.QtGui.indexTitle = Qt GUI Reference Documentation +qhp.QtGui.indexRoot = + +qhp.QtGui.filterAttributes = qtgui 5.0.0 qtrefdoc +qhp.QtGui.customFilters.Qt.name = Qtgui 5.0.0 +qhp.QtGui.customFilters.Qt.filterAttributes = qtgui 5.0.0 +qhp.QtGui.subprojects = classes overviews examples +qhp.QtGui.subprojects.classes.title = Classes +qhp.QtGui.subprojects.classes.indexTitle = Qt GUI's Classes +qhp.QtGui.subprojects.classes.selectors = class fake:headerfile +qhp.QtGui.subprojects.classes.sortPages = true +qhp.QtGui.subprojects.overviews.title = Overviews +qhp.QtGui.subprojects.overviews.indexTitle = All Overviews and HOWTOs +qhp.QtGui.subprojects.overviews.selectors = fake:page,group,module +qhp.QtGui.subprojects.examples.title = Qt GUI Examples +qhp.QtGui.subprojects.examples.indexTitle = Qt GUI Examples +qhp.QtGui.subprojects.examples.selectors = fake:example + +dita.metadata.default.author = Qt Project +dita.metadata.default.permissions = all +dita.metadata.default.publisher = Qt Project +dita.metadata.default.copyryear = 2012 +dita.metadata.default.copyrholder = Nokia +dita.metadata.default.audience = programmer + +sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qml *.qdoc" +headers.fileextensions = "*.ch *.h *.h++ *.hh *.hpp *.hxx" + +examples.fileextensions = "*.cpp *.h *.js *.xq *.svg *.xml *.ui *.qhp *.qhcp *.qml *.css" +examples.imageextensions = "*.png" + +outputdir = ../../../doc/qtgui +tagfile = ../../../doc/qtgui/qtgui.tags + +HTML.generatemacrefs = "true" +HTML.nobreadcrumbs = "true" + +HTML.templatedir = . + +HTML.stylesheets = ../../../doc/global/style/offline.css + +HTML.headerstyles = \ + " \n" + +HTML.endheader = \ + "\n" \ + +defines = Q_QDOC \ + QT_.*_SUPPORT \ + QT_.*_LIB \ + QT_COMPAT \ + QT_KEYPAD_NAVIGATION \ + QT_NO_EGL \ + Q_WS_.* \ + Q_OS_.* \ + Q_BYTE_ORDER \ + QT_DEPRECATED \ + QT_DEPRECATED_* \ + Q_NO_USING_KEYWORD \ + __cplusplus \ + Q_COMPILER_INITIALIZER_LISTS + +versionsym = QT_VERSION_STR + +codeindent = 1 + +depends += qtcore + +headerdirs += .. + +sourcedirs += .. + +exampledirs += ../../../examples \ + ../ \ + snippets + +imagedirs += images diff --git a/doc/src/snippets/brush/brush.cpp b/src/gui/doc/snippets/brush/brush.cpp similarity index 100% rename from doc/src/snippets/brush/brush.cpp rename to src/gui/doc/snippets/brush/brush.cpp diff --git a/doc/src/snippets/brush/gradientcreationsnippet.cpp b/src/gui/doc/snippets/brush/gradientcreationsnippet.cpp similarity index 100% rename from doc/src/snippets/brush/gradientcreationsnippet.cpp rename to src/gui/doc/snippets/brush/gradientcreationsnippet.cpp diff --git a/doc/src/snippets/code/doc_src_qtgui.pro b/src/gui/doc/snippets/code/doc_src_qtgui.pro similarity index 100% rename from doc/src/snippets/code/doc_src_qtgui.pro rename to src/gui/doc/snippets/code/doc_src_qtgui.pro diff --git a/doc/src/snippets/code/src_gui_accessible_qaccessible.cpp b/src/gui/doc/snippets/code/src_gui_accessible_qaccessible.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_accessible_qaccessible.cpp rename to src/gui/doc/snippets/code/src_gui_accessible_qaccessible.cpp diff --git a/doc/src/snippets/code/src_gui_image_qimage.cpp b/src/gui/doc/snippets/code/src_gui_image_qimage.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qimage.cpp rename to src/gui/doc/snippets/code/src_gui_image_qimage.cpp diff --git a/doc/src/snippets/code/src_gui_image_qimagereader.cpp b/src/gui/doc/snippets/code/src_gui_image_qimagereader.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qimagereader.cpp rename to src/gui/doc/snippets/code/src_gui_image_qimagereader.cpp diff --git a/doc/src/snippets/code/src_gui_image_qimagewriter.cpp b/src/gui/doc/snippets/code/src_gui_image_qimagewriter.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qimagewriter.cpp rename to src/gui/doc/snippets/code/src_gui_image_qimagewriter.cpp diff --git a/doc/src/snippets/code/src_gui_image_qmovie.cpp b/src/gui/doc/snippets/code/src_gui_image_qmovie.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qmovie.cpp rename to src/gui/doc/snippets/code/src_gui_image_qmovie.cpp diff --git a/doc/src/snippets/code/src_gui_image_qpixmap.cpp b/src/gui/doc/snippets/code/src_gui_image_qpixmap.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qpixmap.cpp rename to src/gui/doc/snippets/code/src_gui_image_qpixmap.cpp diff --git a/doc/src/snippets/code/src_gui_image_qpixmapcache.cpp b/src/gui/doc/snippets/code/src_gui_image_qpixmapcache.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_image_qpixmapcache.cpp rename to src/gui/doc/snippets/code/src_gui_image_qpixmapcache.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qapplication.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qapplication.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qapplication.cpp rename to src/gui/doc/snippets/code/src_gui_kernel_qapplication.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qapplication_x11.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp rename to src/gui/doc/snippets/code/src_gui_kernel_qapplication_x11.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qclipboard.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qclipboard.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qclipboard.cpp rename to src/gui/doc/snippets/code/src_gui_kernel_qclipboard.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qevent.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qevent.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qevent.cpp rename to src/gui/doc/snippets/code/src_gui_kernel_qevent.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qkeysequence.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp rename to src/gui/doc/snippets/code/src_gui_kernel_qkeysequence.cpp diff --git a/doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp b/src/gui/doc/snippets/code/src_gui_kernel_qshortcutmap.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp rename to src/gui/doc/snippets/code/src_gui_kernel_qshortcutmap.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qbrush.cpp b/src/gui/doc/snippets/code/src_gui_painting_qbrush.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qbrush.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qbrush.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qcolor.cpp b/src/gui/doc/snippets/code/src_gui_painting_qcolor.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qcolor.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qcolor.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qmatrix.cpp b/src/gui/doc/snippets/code/src_gui_painting_qmatrix.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qmatrix.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qmatrix.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qpainter.cpp b/src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qpainter.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qpainter.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qpainterpath.cpp b/src/gui/doc/snippets/code/src_gui_painting_qpainterpath.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qpainterpath.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qpainterpath.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qpen.cpp b/src/gui/doc/snippets/code/src_gui_painting_qpen.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qpen.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qpen.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qregion.cpp b/src/gui/doc/snippets/code/src_gui_painting_qregion.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qregion.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qregion.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qregion_unix.cpp b/src/gui/doc/snippets/code/src_gui_painting_qregion_unix.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qregion_unix.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qregion_unix.cpp diff --git a/doc/src/snippets/code/src_gui_painting_qtransform.cpp b/src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_painting_qtransform.cpp rename to src/gui/doc/snippets/code/src_gui_painting_qtransform.cpp diff --git a/doc/src/snippets/code/src_gui_qopenglshaderprogram.cpp b/src/gui/doc/snippets/code/src_gui_qopenglshaderprogram.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_qopenglshaderprogram.cpp rename to src/gui/doc/snippets/code/src_gui_qopenglshaderprogram.cpp diff --git a/doc/src/snippets/code/src_gui_text_qfont.cpp b/src/gui/doc/snippets/code/src_gui_text_qfont.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_text_qfont.cpp rename to src/gui/doc/snippets/code/src_gui_text_qfont.cpp diff --git a/doc/src/snippets/code/src_gui_text_qfontmetrics.cpp b/src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_text_qfontmetrics.cpp rename to src/gui/doc/snippets/code/src_gui_text_qfontmetrics.cpp diff --git a/doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp b/src/gui/doc/snippets/code/src_gui_text_qsyntaxhighlighter.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp rename to src/gui/doc/snippets/code/src_gui_text_qsyntaxhighlighter.cpp diff --git a/doc/src/snippets/code/src_gui_text_qtextcursor.cpp b/src/gui/doc/snippets/code/src_gui_text_qtextcursor.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_text_qtextcursor.cpp rename to src/gui/doc/snippets/code/src_gui_text_qtextcursor.cpp diff --git a/doc/src/snippets/code/src_gui_text_qtextdocument.cpp b/src/gui/doc/snippets/code/src_gui_text_qtextdocument.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_text_qtextdocument.cpp rename to src/gui/doc/snippets/code/src_gui_text_qtextdocument.cpp diff --git a/doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp b/src/gui/doc/snippets/code/src_gui_text_qtextdocumentwriter.cpp similarity index 100% rename from doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp rename to src/gui/doc/snippets/code/src_gui_text_qtextdocumentwriter.cpp diff --git a/doc/src/snippets/code/src_gui_text_qtextlayout.cpp b/src/gui/doc/snippets/code/src_gui_text_qtextlayout.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_text_qtextlayout.cpp rename to src/gui/doc/snippets/code/src_gui_text_qtextlayout.cpp diff --git a/doc/src/snippets/code/src_gui_util_qdesktopservices.cpp b/src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_util_qdesktopservices.cpp rename to src/gui/doc/snippets/code/src_gui_util_qdesktopservices.cpp diff --git a/doc/src/snippets/code/src_gui_widgets_qvalidator.cpp b/src/gui/doc/snippets/code/src_gui_util_qvalidator.cpp similarity index 100% rename from doc/src/snippets/code/src_gui_widgets_qvalidator.cpp rename to src/gui/doc/snippets/code/src_gui_util_qvalidator.cpp diff --git a/doc/src/snippets/dragging/mainwindow.cpp b/src/gui/doc/snippets/dragging/mainwindow.cpp similarity index 100% rename from doc/src/snippets/dragging/mainwindow.cpp rename to src/gui/doc/snippets/dragging/mainwindow.cpp diff --git a/doc/src/snippets/droparea.cpp b/src/gui/doc/snippets/droparea.cpp similarity index 100% rename from doc/src/snippets/droparea.cpp rename to src/gui/doc/snippets/droparea.cpp diff --git a/doc/src/snippets/image/image.cpp b/src/gui/doc/snippets/image/image.cpp similarity index 100% rename from doc/src/snippets/image/image.cpp rename to src/gui/doc/snippets/image/image.cpp diff --git a/doc/src/snippets/image/supportedformat.cpp b/src/gui/doc/snippets/image/supportedformat.cpp similarity index 100% rename from doc/src/snippets/image/supportedformat.cpp rename to src/gui/doc/snippets/image/supportedformat.cpp diff --git a/doc/src/snippets/matrix/matrix.cpp b/src/gui/doc/snippets/matrix/matrix.cpp similarity index 100% rename from doc/src/snippets/matrix/matrix.cpp rename to src/gui/doc/snippets/matrix/matrix.cpp diff --git a/doc/src/snippets/picture/picture.cpp b/src/gui/doc/snippets/picture/picture.cpp similarity index 100% rename from doc/src/snippets/picture/picture.cpp rename to src/gui/doc/snippets/picture/picture.cpp diff --git a/doc/src/snippets/polygon/polygon.cpp b/src/gui/doc/snippets/polygon/polygon.cpp similarity index 100% rename from doc/src/snippets/polygon/polygon.cpp rename to src/gui/doc/snippets/polygon/polygon.cpp diff --git a/doc/src/snippets/qfontdatabase/main.cpp b/src/gui/doc/snippets/qfontdatabase/main.cpp similarity index 100% rename from doc/src/snippets/qfontdatabase/main.cpp rename to src/gui/doc/snippets/qfontdatabase/main.cpp diff --git a/doc/src/snippets/qstatustipevent/main.cpp b/src/gui/doc/snippets/qstatustipevent/main.cpp similarity index 100% rename from doc/src/snippets/qstatustipevent/main.cpp rename to src/gui/doc/snippets/qstatustipevent/main.cpp diff --git a/doc/src/snippets/separations/finalwidget.cpp b/src/gui/doc/snippets/separations/finalwidget.cpp similarity index 100% rename from doc/src/snippets/separations/finalwidget.cpp rename to src/gui/doc/snippets/separations/finalwidget.cpp diff --git a/doc/src/snippets/textblock-fragments/xmlwriter.cpp b/src/gui/doc/snippets/textblock-fragments/xmlwriter.cpp similarity index 100% rename from doc/src/snippets/textblock-fragments/xmlwriter.cpp rename to src/gui/doc/snippets/textblock-fragments/xmlwriter.cpp diff --git a/doc/src/snippets/textdocument-css/main.cpp b/src/gui/doc/snippets/textdocument-css/main.cpp similarity index 100% rename from doc/src/snippets/textdocument-css/main.cpp rename to src/gui/doc/snippets/textdocument-css/main.cpp diff --git a/doc/src/snippets/textdocument-listitemstyles/main.cpp b/src/gui/doc/snippets/textdocument-listitemstyles/main.cpp similarity index 100% rename from doc/src/snippets/textdocument-listitemstyles/main.cpp rename to src/gui/doc/snippets/textdocument-listitemstyles/main.cpp diff --git a/doc/src/snippets/textdocument-listitemstyles/mainwindow.cpp b/src/gui/doc/snippets/textdocument-listitemstyles/mainwindow.cpp similarity index 100% rename from doc/src/snippets/textdocument-listitemstyles/mainwindow.cpp rename to src/gui/doc/snippets/textdocument-listitemstyles/mainwindow.cpp diff --git a/doc/src/snippets/textdocument-listitemstyles/mainwindow.h b/src/gui/doc/snippets/textdocument-listitemstyles/mainwindow.h similarity index 100% rename from doc/src/snippets/textdocument-listitemstyles/mainwindow.h rename to src/gui/doc/snippets/textdocument-listitemstyles/mainwindow.h diff --git a/doc/src/snippets/textdocument-listitemstyles/textdocument-listitemstyles.pro b/src/gui/doc/snippets/textdocument-listitemstyles/textdocument-listitemstyles.pro similarity index 100% rename from doc/src/snippets/textdocument-listitemstyles/textdocument-listitemstyles.pro rename to src/gui/doc/snippets/textdocument-listitemstyles/textdocument-listitemstyles.pro diff --git a/doc/src/snippets/textdocument-lists/mainwindow.cpp b/src/gui/doc/snippets/textdocument-lists/mainwindow.cpp similarity index 100% rename from doc/src/snippets/textdocument-lists/mainwindow.cpp rename to src/gui/doc/snippets/textdocument-lists/mainwindow.cpp diff --git a/doc/src/snippets/textdocument-resources/main.cpp b/src/gui/doc/snippets/textdocument-resources/main.cpp similarity index 100% rename from doc/src/snippets/textdocument-resources/main.cpp rename to src/gui/doc/snippets/textdocument-resources/main.cpp diff --git a/doc/src/snippets/textdocument-resources/textdocument-resources.pro b/src/gui/doc/snippets/textdocument-resources/textdocument-resources.pro similarity index 100% rename from doc/src/snippets/textdocument-resources/textdocument-resources.pro rename to src/gui/doc/snippets/textdocument-resources/textdocument-resources.pro diff --git a/doc/src/snippets/textdocument-tables/mainwindow.cpp b/src/gui/doc/snippets/textdocument-tables/mainwindow.cpp similarity index 100% rename from doc/src/snippets/textdocument-tables/mainwindow.cpp rename to src/gui/doc/snippets/textdocument-tables/mainwindow.cpp diff --git a/doc/src/snippets/textdocument-texttable/main.cpp b/src/gui/doc/snippets/textdocument-texttable/main.cpp similarity index 100% rename from doc/src/snippets/textdocument-texttable/main.cpp rename to src/gui/doc/snippets/textdocument-texttable/main.cpp diff --git a/doc/src/snippets/textdocumentendsnippet.cpp b/src/gui/doc/snippets/textdocumentendsnippet.cpp similarity index 100% rename from doc/src/snippets/textdocumentendsnippet.cpp rename to src/gui/doc/snippets/textdocumentendsnippet.cpp diff --git a/doc/src/snippets/transform/main.cpp b/src/gui/doc/snippets/transform/main.cpp similarity index 100% rename from doc/src/snippets/transform/main.cpp rename to src/gui/doc/snippets/transform/main.cpp diff --git a/doc/src/gui/coordsys.qdoc b/src/gui/doc/src/coordsys.qdoc similarity index 100% rename from doc/src/gui/coordsys.qdoc rename to src/gui/doc/src/coordsys.qdoc diff --git a/doc/src/gui/paintsystem.qdoc b/src/gui/doc/src/paintsystem.qdoc similarity index 100% rename from doc/src/gui/paintsystem.qdoc rename to src/gui/doc/src/paintsystem.qdoc diff --git a/doc/src/gui/qtgui.qdoc b/src/gui/doc/src/qtgui.qdoc similarity index 95% rename from doc/src/gui/qtgui.qdoc rename to src/gui/doc/src/qtgui.qdoc index bffe07889af..7e11aa52339 100644 --- a/doc/src/gui/qtgui.qdoc +++ b/src/gui/doc/src/qtgui.qdoc @@ -35,5 +35,5 @@ To include the definitions of both modules' classes, use the following directive: - \snippet doc/src/snippets/code/doc_src_qtgui.pro 0 + \snippet code/doc_src_qtgui.pro 0 */ diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index b8ec7de8518..64decd0fd74 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -441,7 +441,7 @@ bool QImageData::checkForAlphaPixels() const \row \li \inlineimage qimage-32bit_scaled.png \li - \snippet doc/src/snippets/code/src_gui_image_qimage.cpp 0 + \snippet code/src_gui_image_qimage.cpp 0 \endtable In case of a 8-bit and monchrome images, the pixel value is only @@ -462,7 +462,7 @@ bool QImageData::checkForAlphaPixels() const \row \li \inlineimage qimage-8bit_scaled.png \li - \snippet doc/src/snippets/code/src_gui_image_qimage.cpp 1 + \snippet code/src_gui_image_qimage.cpp 1 \endtable QImage also provide the scanLine() function which returns a @@ -949,7 +949,7 @@ extern bool qt_read_xpm_image_or_array(QIODevice *device, const char * const *so Note that it's possible to squeeze the XPM variable a little bit by using an unusual declaration: - \snippet doc/src/snippets/code/src_gui_image_qimage.cpp 2 + \snippet code/src_gui_image_qimage.cpp 2 The extra \c const makes the entire definition read-only, which is slightly more efficient (e.g., when the code is in a shared @@ -4478,7 +4478,7 @@ bool QImage::save(const QString &fileName, const char *format, int quality) cons This can, for example, be used to save an image directly into a QByteArray: - \snippet doc/src/snippets/image/image.cpp 0 + \snippet image/image.cpp 0 */ bool QImage::save(QIODevice* device, const char* format, int quality) const @@ -4801,7 +4801,7 @@ QString QImage::text(const QString &key) const if a specific image or format supports embedding text by using QImageWriter::supportsOption(). We give an example: - \snippet doc/src/snippets/image/supportedformat.cpp 0 + \snippet image/supportedformat.cpp 0 You can use QImageWriter::supportedImageFormats() to find out which image formats are available to you. diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp index fe14a45dcb7..c08ac0593b3 100644 --- a/src/gui/image/qimagereader.cpp +++ b/src/gui/image/qimagereader.cpp @@ -653,7 +653,7 @@ QImageReader::~QImageReader() Sets the format QImageReader will use when reading images, to \a format. \a format is a case insensitive text string. Example: - \snippet doc/src/snippets/code/src_gui_image_qimagereader.cpp 0 + \snippet code/src_gui_image_qimagereader.cpp 0 You can call supportedImageFormats() for the full list of formats QImageReader supports. @@ -671,7 +671,7 @@ void QImageReader::setFormat(const QByteArray &format) You can call this function after assigning a device to the reader to determine the format of the device. For example: - \snippet doc/src/snippets/code/src_gui_image_qimagereader.cpp 1 + \snippet code/src_gui_image_qimagereader.cpp 1 If the reader cannot read any image from the device (e.g., there is no image there, or the image has already been read), or if the format is @@ -1131,7 +1131,7 @@ QImage QImageReader::read() which always constructs a new image; especially when reading several images with the same format and size. - \snippet doc/src/snippets/code/src_gui_image_qimagereader.cpp 2 + \snippet code/src_gui_image_qimagereader.cpp 2 For image formats that support animation, calling read() repeatedly will return the next frame. When all frames have been read, a null image will @@ -1371,7 +1371,7 @@ QString QImageReader::errorString() const (see text()), and the BMP format allows you to determine the image's size without loading the whole image into memory (see size()). - \snippet doc/src/snippets/code/src_gui_image_qimagereader.cpp 3 + \snippet code/src_gui_image_qimagereader.cpp 3 \sa QImageWriter::supportsOption() */ diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp index 8395f9d2163..56c459ee4db 100644 --- a/src/gui/image/qimagewriter.cpp +++ b/src/gui/image/qimagewriter.cpp @@ -323,7 +323,7 @@ QImageWriter::~QImageWriter() Sets the format QImageWriter will use when writing images, to \a format. \a format is a case insensitive text string. Example: - \snippet doc/src/snippets/code/src_gui_image_qimagewriter.cpp 0 + \snippet code/src_gui_image_qimagewriter.cpp 0 You can call supportedImageFormats() for the full list of formats QImageWriter supports. @@ -522,7 +522,7 @@ QString QImageWriter::description() const \a text. This is useful for storing copyright information or other information about the image. Example: - \snippet doc/src/snippets/code/src_gui_image_qimagewriter.cpp 1 + \snippet code/src_gui_image_qimagewriter.cpp 1 If you want to store a single block of data (e.g., a comment), you can pass an empty key, or use @@ -629,7 +629,7 @@ QString QImageWriter::errorString() const example, the PNG format allows you to embed text into the image's metadata (see text()). - \snippet doc/src/snippets/code/src_gui_image_qimagewriter.cpp 2 + \snippet code/src_gui_image_qimagewriter.cpp 2 Options can be tested after the writer has been associated with a format. diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index 8dfcf57dfdf..e1ddcf1a0c5 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -61,7 +61,7 @@ To display the movie in your application, you can pass your QMovie object to QLabel::setMovie(). Example: - \snippet doc/src/snippets/code/src_gui_image_qmovie.cpp 0 + \snippet code/src_gui_image_qmovie.cpp 0 Whenever a new frame is available in the movie, QMovie will emit updated(). If the size of the frame changes, resized() is emitted. You can @@ -883,7 +883,7 @@ void QMovie::setPaused(bool paused) The default speed is 100%. Example: - \snippet doc/src/snippets/code/src_gui_image_qmovie.cpp 1 + \snippet code/src_gui_image_qmovie.cpp 1 */ void QMovie::setSpeed(int percentSpeed) { diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp index 8bb9f211e8c..283002b1d33 100644 --- a/src/gui/image/qpicture.cpp +++ b/src/gui/image/qpicture.cpp @@ -92,13 +92,13 @@ void qt_format_text(const QFont &fnt, const QRectF &_r, depending on the window system. Example of how to record a picture: - \snippet doc/src/snippets/picture/picture.cpp 0 + \snippet picture/picture.cpp 0 Note that the list of painter commands is reset on each call to the QPainter::begin() function. Example of how to replay a picture: - \snippet doc/src/snippets/picture/picture.cpp 1 + \snippet picture/picture.cpp 1 Pictures can also be drawn using play(). Some basic data about a picture is available, for example, size(), isNull() and @@ -1226,7 +1226,7 @@ static QStringList qToStringList(const QList arr) Note that if you want to iterate over the list, you should iterate over a copy, e.g. - \snippet doc/src/snippets/picture/picture.cpp 2 + \snippet picture/picture.cpp 2 \sa outputFormatList() inputFormats() QPictureIO */ @@ -1244,7 +1244,7 @@ QStringList QPicture::inputFormatList() Note that if you want to iterate over the list, you should iterate over a copy, e.g. - \snippet doc/src/snippets/picture/picture.cpp 3 + \snippet picture/picture.cpp 3 \sa inputFormatList() outputFormats() QPictureIO */ @@ -1464,11 +1464,11 @@ static QPictureHandler *get_picture_handler(const char *format) both are null, the QPictureIO object is valid but useless. Example: - \snippet doc/src/snippets/picture/picture.cpp 6 + \snippet picture/picture.cpp 6 \codeline - \snippet doc/src/snippets/picture/picture.cpp 7 + \snippet picture/picture.cpp 7 \codeline - \snippet doc/src/snippets/picture/picture.cpp 8 + \snippet picture/picture.cpp 8 Before the regular expression test, all the 0 bytes in the file header are converted to 1 bytes. This is done because when Qt was ASCII-based, QRegExp @@ -1833,7 +1833,7 @@ QList QPictureIO::outputFormats() Example: - \snippet doc/src/snippets/picture/picture.cpp 4 + \snippet picture/picture.cpp 4 \sa setIODevice() setFileName() setFormat() write() QPixmap::load() */ @@ -1902,7 +1902,7 @@ bool QPictureIO::read() The picture will be written using the specified picture format. Example: - \snippet doc/src/snippets/picture/picture.cpp 5 + \snippet picture/picture.cpp 5 \sa setIODevice() setFileName() setFormat() read() QPixmap::save() */ diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index cefb8edf74d..377d7e036a0 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -241,7 +241,7 @@ QPixmap::QPixmap(const QPixmap &pixmap) Note that it's possible to squeeze the XPM variable a little bit by using an unusual declaration: - \snippet doc/src/snippets/code/src_gui_image_qpixmap.cpp 0 + \snippet code/src_gui_image_qpixmap.cpp 0 The extra \c const makes the entire definition read-only, which is slightly more efficient (for example, when the code is in a shared @@ -334,7 +334,7 @@ QPixmap QPixmap::copy(const QRect &rect) const region is left unchanged. You can optionally pass a pointer to an empty QRegion to get the region that is \a exposed by the scroll operation. - \snippet doc/src/snippets/code/src_gui_image_qpixmap.cpp 2 + \snippet code/src_gui_image_qpixmap.cpp 2 You cannot scroll while there is an active painter on the pixmap. @@ -651,7 +651,7 @@ void QPixmap::setMask(const QBitmap &mask) The mask may not be perfect but it should be reasonable, so you can do things such as the following: - \snippet doc/src/snippets/code/src_gui_image_qpixmap.cpp 1 + \snippet code/src_gui_image_qpixmap.cpp 1 This function is slow because it involves converting to/from a QImage, and non-trivial computations. @@ -810,7 +810,7 @@ bool QPixmap::save(const QString &fileName, const char *format, int quality) con specified image file \a format and \a quality factor. This can be used, for example, to save a pixmap directly into a QByteArray: - \snippet doc/src/snippets/image/image.cpp 1 + \snippet image/image.cpp 1 */ bool QPixmap::save(QIODevice* device, const char* format, int quality) const diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index 7769c45b2ef..b0e5b7e1e3f 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -472,7 +472,7 @@ QPixmapCacheEntry::~QPixmapCacheEntry() bool find(const QString&, QPixmap*) instead. Example: - \snippet doc/src/snippets/code/src_gui_image_qpixmapcache.cpp 0 + \snippet code/src_gui_image_qpixmapcache.cpp 0 */ QPixmap *QPixmapCache::find(const QString &key) @@ -500,7 +500,7 @@ bool QPixmapCache::find(const QString &key, QPixmap& pixmap) \since 4.6 Example: - \snippet doc/src/snippets/code/src_gui_image_qpixmapcache.cpp 1 + \snippet code/src_gui_image_qpixmapcache.cpp 1 */ bool QPixmapCache::find(const QString &key, QPixmap* pixmap) diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index ef5e4f9c184..90fd63ee625 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -67,7 +67,7 @@ QT_BEGIN_NAMESPACE as QApplication::clipboard(). Example: - \snippet doc/src/snippets/code/src_gui_kernel_qclipboard.cpp 0 + \snippet code/src_gui_kernel_qclipboard.cpp 0 QClipboard features some convenience functions to access common data types: setText() allows the exchange of Unicode text and @@ -80,7 +80,7 @@ QT_BEGIN_NAMESPACE A typical example of the use of these functions follows: - \snippet doc/src/snippets/droparea.cpp 0 + \snippet droparea.cpp 0 \section1 Notes for X11 Users @@ -366,7 +366,7 @@ QImage QClipboard::image(Mode mode) const This is shorthand for: - \snippet doc/src/snippets/code/src_gui_kernel_qclipboard.cpp 1 + \snippet code/src_gui_kernel_qclipboard.cpp 1 \sa image(), setPixmap() setMimeData() */ diff --git a/src/gui/kernel/qdrag.cpp b/src/gui/kernel/qdrag.cpp index 40015c87061..e20401c67b9 100644 --- a/src/gui/kernel/qdrag.cpp +++ b/src/gui/kernel/qdrag.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE QMimeData object. This is specified with the setMimeData() function in the following way: - \snippet doc/src/snippets/dragging/mainwindow.cpp 1 + \snippet dragging/mainwindow.cpp 1 Note that setMimeData() assigns ownership of the QMimeData object to the QDrag object. The QDrag must be constructed on the heap with a parent QObject @@ -80,7 +80,7 @@ QT_BEGIN_NAMESPACE that the cursor's hot spot points to the center of its bottom edge: - \snippet doc/src/snippets/separations/finalwidget.cpp 2 + \snippet separations/finalwidget.cpp 2 \note On X11, the pixmap may not be able to keep up with the mouse movements if the hot spot causes the pixmap to be displayed diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp index 266eb143e56..eeedd32fd9c 100644 --- a/src/gui/kernel/qevent.cpp +++ b/src/gui/kernel/qevent.cpp @@ -582,7 +582,7 @@ QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF& globalPos, Example: - \snippet doc/src/snippets/code/src_gui_kernel_qevent.cpp 0 + \snippet code/src_gui_kernel_qevent.cpp 0 */ /*! @@ -604,7 +604,7 @@ QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF& globalPos, Example: - \snippet doc/src/snippets/code/src_gui_kernel_qevent.cpp 0 + \snippet code/src_gui_kernel_qevent.cpp 0 */ /*! @@ -2557,9 +2557,9 @@ QHelpEvent::~QHelpEvent() \table 100% \row \li - \snippet doc/src/snippets/qstatustipevent/main.cpp 1 + \snippet qstatustipevent/main.cpp 1 \dots - \snippet doc/src/snippets/qstatustipevent/main.cpp 3 + \snippet qstatustipevent/main.cpp 3 \li \image qstatustipevent-widget.png Widget with status tip. \endtable @@ -2570,10 +2570,10 @@ QHelpEvent::~QHelpEvent() \table 100% \row \li - \snippet doc/src/snippets/qstatustipevent/main.cpp 0 - \snippet doc/src/snippets/qstatustipevent/main.cpp 2 + \snippet qstatustipevent/main.cpp 0 + \snippet qstatustipevent/main.cpp 2 \dots - \snippet doc/src/snippets/qstatustipevent/main.cpp 3 + \snippet qstatustipevent/main.cpp 3 \li \image qstatustipevent-action.png Action with status tip. \endtable diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 27e84b71a96..b63ed78c4b5 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -2078,7 +2078,7 @@ static inline void applyCursor(const QList &l, const QCursor &c) restoreOverrideCursor(), otherwise the stack will never be emptied. Example: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication_x11.cpp 0 + \snippet code/src_gui_kernel_qapplication_x11.cpp 0 \sa overrideCursor(), restoreOverrideCursor(), changeOverrideCursor(), QWidget::setCursor() @@ -2134,7 +2134,7 @@ QStyleHints *QGuiApplication::styleHints() This function must be called before creating the QGuiApplication object, like this: - \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 6 + \snippet code/src_gui_kernel_qapplication.cpp 6 \sa desktopSettingsAware() */ diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 4946a1dc183..635e3dadca4 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -181,7 +181,7 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni printing a document, and can be specified in any of the following ways: - \snippet doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp 0 + \snippet code/src_gui_kernel_qkeysequence.cpp 0 Note that, for letters, the case used in the specification string does not matter. In the above examples, the user does not need to @@ -354,7 +354,7 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni For example, the key sequence, \key{Ctrl X} followed by \key{Ctrl C}, can be specified using either of the following ways: - \snippet doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp 1 + \snippet code/src_gui_kernel_qkeysequence.cpp 1 \warning A QApplication instance must have been constructed before a QKeySequence is created; otherwise, your application may crash. @@ -929,7 +929,7 @@ QKeySequence::QKeySequence() \endlink(), so that shortcut keys can be replaced in translations: - \snippet doc/src/snippets/code/src_gui_kernel_qkeysequence.cpp 2 + \snippet code/src_gui_kernel_qkeysequence.cpp 2 Note the "File|Open" translator comment. It is by no means necessary, but it provides some context for the human translator. diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index ab62ec0992a..cb18b0d22f1 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -499,7 +499,7 @@ static void qt_palette_from_color(QPalette &pal, const QColor &button) and the QTextDocument::setDefaultStyleSheet() function to alter the appearance of links. For example: - \snippet doc/src/snippets/textdocument-css/main.cpp 0 + \snippet textdocument-css/main.cpp 0 \value NoRole No role; this special role is often used to indicate that a role has not been assigned. diff --git a/src/gui/kernel/qshortcutmap.cpp b/src/gui/kernel/qshortcutmap.cpp index a7500822197..267f528ca0c 100644 --- a/src/gui/kernel/qshortcutmap.cpp +++ b/src/gui/kernel/qshortcutmap.cpp @@ -528,7 +528,7 @@ QKeySequence::SequenceMatch QShortcutMap::find(QKeyEvent *e) /*! \internal Clears \a seq to an empty QKeySequence. Same as doing (the slower) - \snippet doc/src/snippets/code/src_gui_kernel_qshortcutmap.cpp 0 + \snippet code/src_gui_kernel_qshortcutmap.cpp 0 */ void QShortcutMap::clearSequence(QVector &ksl) { diff --git a/src/gui/opengl/qopenglshaderprogram.cpp b/src/gui/opengl/qopenglshaderprogram.cpp index c0899e5a411..e9973be2abd 100644 --- a/src/gui/opengl/qopenglshaderprogram.cpp +++ b/src/gui/opengl/qopenglshaderprogram.cpp @@ -71,7 +71,7 @@ QT_BEGIN_NAMESPACE program is activated in the current QOpenGLContext by calling QOpenGLShaderProgram::bind(): - \snippet doc/src/snippets/code/src_gui_qopenglshaderprogram.cpp 0 + \snippet code/src_gui_qopenglshaderprogram.cpp 0 \section1 Writing portable shaders @@ -99,12 +99,12 @@ QT_BEGIN_NAMESPACE \section1 Simple shader example - \snippet doc/src/snippets/code/src_gui_qopenglshaderprogram.cpp 1 + \snippet code/src_gui_qopenglshaderprogram.cpp 1 With the above shader program active, we can draw a green triangle as follows: - \snippet doc/src/snippets/code/src_gui_qopenglshaderprogram.cpp 2 + \snippet code/src_gui_qopenglshaderprogram.cpp 2 \section1 Binary shaders and programs diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index 2f0fb9f96c1..6ee28a42b91 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -292,7 +292,7 @@ struct QBrushDataPointerDeleter gradients: QLinearGradient, QConicalGradient, and QRadialGradient - all of which inherit QGradient. - \snippet doc/src/snippets/brush/gradientcreationsnippet.cpp 0 + \snippet brush/gradientcreationsnippet.cpp 0 The texture() defines the pixmap used when the current style is Qt::TexturePattern. You can create a brush with a texture by @@ -323,7 +323,7 @@ struct QBrushDataPointerDeleter QPainter's \l {QPen}{pen} combined with Qt::PenStyle and Qt::GlobalColor: - \snippet doc/src/snippets/code/src_gui_painting_qbrush.cpp 0 + \snippet code/src_gui_painting_qbrush.cpp 0 Note that, by default, QPainter renders the outline (using the currently set pen) when drawing shapes. Use \l {Qt::NoPen}{\c @@ -1214,13 +1214,13 @@ QDataStream &operator>>(QDataStream &s, QBrush &b) A diagonal linear gradient from black at (100, 100) to white at (200, 200) could be specified like this: - \snippet doc/src/snippets/brush/brush.cpp 0 + \snippet brush/brush.cpp 0 A gradient can have an arbitrary number of stop points. The following would create a radial gradient starting with red in the center, blue and then green on the edges: - \snippet doc/src/snippets/brush/brush.cpp 1 + \snippet brush/brush.cpp 1 It is possible to repeat or reflect the gradient outside its area by specifiying the \l {QGradient::Spread}{spread method} using the diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp index 75122571d6b..81f5a7438a8 100644 --- a/src/gui/painting/qcolor.cpp +++ b/src/gui/painting/qcolor.cpp @@ -148,7 +148,7 @@ QT_BEGIN_NAMESPACE represents a fully transparent color, while 255 represents a fully opaque color. For example: - \snippet doc/src/snippets/code/src_gui_painting_qcolor.cpp 0 + \snippet code/src_gui_painting_qcolor.cpp 0 The code above produces the following output: diff --git a/src/gui/painting/qmatrix.cpp b/src/gui/painting/qmatrix.cpp index c26d7e5d980..afefb1787c8 100644 --- a/src/gui/painting/qmatrix.cpp +++ b/src/gui/painting/qmatrix.cpp @@ -114,7 +114,7 @@ QT_BEGIN_NAMESPACE \row \li \inlineimage qmatrix-simpletransformation.png \li - \snippet doc/src/snippets/matrix/matrix.cpp 0 + \snippet matrix/matrix.cpp 0 \endtable Although these functions are very convenient, it can be more @@ -126,7 +126,7 @@ QT_BEGIN_NAMESPACE \row \li \inlineimage qmatrix-combinedtransformation.png \li - \snippet doc/src/snippets/matrix/matrix.cpp 1 + \snippet matrix/matrix.cpp 1 \endtable \section1 Basic Matrix Operations @@ -142,7 +142,7 @@ QT_BEGIN_NAMESPACE QMatrix transforms a point in the plane to another point using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qmatrix.cpp 0 + \snippet code/src_gui_painting_qmatrix.cpp 0 The point \e (x, y) is the original point, and \e (x', y') is the transformed point. \e (x', y') can be transformed back to \e (x, @@ -174,7 +174,7 @@ QT_BEGIN_NAMESPACE \row \li \inlineimage qmatrix-combinedtransformation.png \li - \snippet doc/src/snippets/matrix/matrix.cpp 2 + \snippet matrix/matrix.cpp 2 \endtable \sa QPainter, QTransform, {Coordinate System}, @@ -342,7 +342,7 @@ void QMatrix::setMatrix(qreal m11, qreal m12, qreal m21, qreal m22, qreal dx, qr The coordinates are transformed using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qmatrix.cpp 1 + \snippet code/src_gui_painting_qmatrix.cpp 1 The point (x, y) is the original point, and (x', y') is the transformed point. @@ -427,7 +427,7 @@ QRect QMatrix::mapRect(const QRect &rect) const The rectangle's coordinates are transformed using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qmatrix.cpp 2 + \snippet code/src_gui_painting_qmatrix.cpp 2 If rotation or shearing has been specified, this function returns the \e bounding rectangle. To retrieve the exact region the given @@ -741,7 +741,7 @@ QPainterPath QMatrix::map(const QPainterPath &path) const The rectangle's coordinates are transformed using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qmatrix.cpp 3 + \snippet code/src_gui_painting_qmatrix.cpp 3 Polygons and rectangles behave slightly differently when transformed (due to integer rounding), so diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 68e60ed5485..e622fe46a76 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -941,7 +941,7 @@ void QPainterPrivate::updateState(QPainterState *newState) painter. Then draw. Remember to destroy the QPainter object after drawing. For example: - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 0 + \snippet code/src_gui_painting_qpainter.cpp 0 The core functionality of QPainter is drawing, but the class also provide several functions that allows you to customize QPainter's @@ -1446,10 +1446,10 @@ QPainter::QPainter() automatically calls end(). Here's an example using begin() and end(): - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 1 + \snippet code/src_gui_painting_qpainter.cpp 1 The same example using this constructor: - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 2 + \snippet code/src_gui_painting_qpainter.cpp 2 Since the constructor cannot provide feedback when the initialization of the painter failed you should rather use begin() and end() to paint @@ -1667,7 +1667,7 @@ void QPainter::restore() The errors that can occur are serious problems, such as these: - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 3 + \snippet code/src_gui_painting_qpainter.cpp 3 Note that most of the time, you can use one of the constructors instead of begin(), and that end() is automatically done at @@ -1956,7 +1956,7 @@ QPaintEngine *QPainter::paintEngine() const default state by endNativePainting(). Here is an example that shows intermixing of painter commands and raw OpenGL commands: - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 21 + \snippet code/src_gui_painting_qpainter.cpp 21 \sa endNativePainting() */ @@ -2871,7 +2871,7 @@ void QPainter::setClipRegion(const QRegion &r, Qt::ClipOperation op) They operate on the painter's worldMatrix() and are implemented like this: - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 4 + \snippet code/src_gui_painting_qpainter.cpp 4 Note that when using setWorldMatrix() function you should always have \a combine be true when you are drawing into a QPicture. Otherwise @@ -3340,7 +3340,7 @@ void QPainter::fillPath(const QPainterPath &path, const QBrush &brush) \row \li \inlineimage qpainter-path.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 5 + \snippet code/src_gui_painting_qpainter.cpp 5 \endtable \sa {painting/painterpaths}{the Painter Paths @@ -3385,7 +3385,7 @@ void QPainter::drawPath(const QPainterPath &path) \row \li \inlineimage qpainter-line.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 6 + \snippet code/src_gui_painting_qpainter.cpp 6 \endtable \sa drawLines(), drawPolyline(), {Coordinate System} @@ -3432,7 +3432,7 @@ void QPainter::drawPath(const QPainterPath &path) \row \li \inlineimage qpainter-rectangle.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 7 + \snippet code/src_gui_painting_qpainter.cpp 7 \endtable \sa drawRects(), drawPolygon(), {Coordinate System} @@ -4101,7 +4101,7 @@ const QFont &QPainter::font() const \row \li \inlineimage qpainter-roundrect.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 8 + \snippet code/src_gui_painting_qpainter.cpp 8 \endtable \sa drawRect(), QPen @@ -4201,7 +4201,7 @@ void QPainter::drawRoundRect(const QRectF &r, int xRnd, int yRnd) \row \li \inlineimage qpainter-ellipse.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 9 + \snippet code/src_gui_painting_qpainter.cpp 9 \endtable \sa drawPie(), {Coordinate System} @@ -4327,7 +4327,7 @@ void QPainter::drawEllipse(const QRect &r) \row \li \inlineimage qpainter-arc.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 10 + \snippet code/src_gui_painting_qpainter.cpp 10 \endtable \sa drawPie(), drawChord(), {Coordinate System} @@ -4391,7 +4391,7 @@ void QPainter::drawArc(const QRectF &r, int a, int alen) \row \li \inlineimage qpainter-pie.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 11 + \snippet code/src_gui_painting_qpainter.cpp 11 \endtable \sa drawEllipse(), drawChord(), {Coordinate System} @@ -4460,7 +4460,7 @@ void QPainter::drawPie(const QRectF &r, int a, int alen) \row \li \inlineimage qpainter-chord.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 12 + \snippet code/src_gui_painting_qpainter.cpp 12 \endtable \sa drawArc(), drawPie(), {Coordinate System} @@ -4675,7 +4675,7 @@ void QPainter::drawLines(const QPoint *pointPairs, int lineCount) \table 100% \row \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 13 + \snippet code/src_gui_painting_qpainter.cpp 13 \endtable \sa drawLines(), drawPolygon(), {Coordinate System} @@ -4782,7 +4782,7 @@ void QPainter::drawPolyline(const QPoint *points, int pointCount) \row \li \inlineimage qpainter-polygon.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 14 + \snippet code/src_gui_painting_qpainter.cpp 14 \endtable The first point is implicitly connected to the last point, and the @@ -4895,7 +4895,7 @@ void QPainter::drawPolygon(const QPoint *points, int pointCount, Qt::FillRule fi \row \li \inlineimage qpainter-polygon.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 15 + \snippet code/src_gui_painting_qpainter.cpp 15 \endtable The first point is implicitly connected to the last point, and the @@ -5018,7 +5018,7 @@ static inline QPointF roundInDeviceCoordinates(const QPointF &p, const QTransfor \table 100% \row \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 16 + \snippet code/src_gui_painting_qpainter.cpp 16 \endtable If \a pixmap is a QBitmap it is drawn with the bits that are "set" @@ -5928,7 +5928,7 @@ void QPainter::drawText(const QRect &r, int flags, const QString &str, QRect *br \row \li \inlineimage qpainter-text.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 17 + \snippet code/src_gui_painting_qpainter.cpp 17 \endtable The \a boundingRect (if not null) is set to the what the bounding rectangle @@ -6682,7 +6682,7 @@ void QPainter::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPo \table 100% \row \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 18 + \snippet code/src_gui_painting_qpainter.cpp 18 \endtable \sa QPicture::play() @@ -6725,7 +6725,7 @@ void QPainter::drawPicture(const QPointF &p, const QPicture &picture) Erases the area inside the given \a rectangle. Equivalent to calling - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 19 + \snippet code/src_gui_painting_qpainter.cpp 19 \sa fillRect() */ @@ -7669,7 +7669,7 @@ void QPainterState::init(QPainter *p) { \table 100% \row \li - \snippet doc/src/snippets/code/src_gui_painting_qpainter.cpp 20 + \snippet code/src_gui_painting_qpainter.cpp 20 \endtable \sa drawPixmap() diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index 0e8811b934c..dc310520e08 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -229,7 +229,7 @@ static void qt_debug_path(const QPainterPath &path) \row \li \inlineimage qpainterpath-construction.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 0 + \snippet code/src_gui_painting_qpainterpath.cpp 0 \endtable The painter path is initially empty when constructed. We first add @@ -763,7 +763,7 @@ void QPainterPath::lineTo(const QPointF &p) \row \li \inlineimage qpainterpath-cubicto.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 1 + \snippet code/src_gui_painting_qpainterpath.cpp 1 \endtable \sa quadTo(), {QPainterPath#Composing a QPainterPath}{Composing @@ -890,7 +890,7 @@ void QPainterPath::quadTo(const QPointF &c, const QPointF &e) \row \li \inlineimage qpainterpath-arcto.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 2 + \snippet code/src_gui_painting_qpainterpath.cpp 2 \endtable \sa arcMoveTo(), addEllipse(), QPainter::drawArc(), QPainter::drawPie(), @@ -1002,7 +1002,7 @@ QPointF QPainterPath::currentPosition() const \row \li \inlineimage qpainterpath-addrectangle.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 3 + \snippet code/src_gui_painting_qpainterpath.cpp 3 \endtable \sa addRegion(), lineTo(), {QPainterPath#Composing a @@ -1049,7 +1049,7 @@ void QPainterPath::addRect(const QRectF &r) \row \li \inlineimage qpainterpath-addpolygon.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 4 + \snippet code/src_gui_painting_qpainterpath.cpp 4 \endtable \sa lineTo(), {QPainterPath#Composing a QPainterPath}{Composing @@ -1085,7 +1085,7 @@ void QPainterPath::addPolygon(const QPolygonF &polygon) \row \li \inlineimage qpainterpath-addellipse.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 5 + \snippet code/src_gui_painting_qpainterpath.cpp 5 \endtable \sa arcTo(), QPainter::drawEllipse(), {QPainterPath#Composing a @@ -1137,7 +1137,7 @@ void QPainterPath::addEllipse(const QRectF &boundingRect) \row \li \inlineimage qpainterpath-addtext.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpainterpath.cpp 6 + \snippet code/src_gui_painting_qpainterpath.cpp 6 \endtable \sa QPainter::drawText(), {QPainterPath#Composing a diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp index 77f0edc52ff..2c95a9f146c 100644 --- a/src/gui/painting/qpen.cpp +++ b/src/gui/painting/qpen.cpp @@ -79,11 +79,11 @@ typedef QPenPrivate QPenData; For example: - \snippet doc/src/snippets/code/src_gui_painting_qpen.cpp 0 + \snippet code/src_gui_painting_qpen.cpp 0 which is equivalent to - \snippet doc/src/snippets/code/src_gui_painting_qpen.cpp 1 + \snippet code/src_gui_painting_qpen.cpp 1 The default pen is a solid black brush with 0 width, square cap style (Qt::SquareCap), and bevel join style (Qt::BevelJoin). @@ -135,7 +135,7 @@ typedef QPenPrivate QPenData; spaces. For example, the custom pattern shown above is created using the following code: - \snippet doc/src/snippets/code/src_gui_painting_qpen.cpp 2 + \snippet code/src_gui_painting_qpen.cpp 2 Note that the dash pattern is specified in units of the pens width, e.g. a dash of length 5 in width 10 is 50 pixels long. @@ -476,7 +476,7 @@ QVector QPen::dashPattern() const \row \li \inlineimage qpen-custom.png \li - \snippet doc/src/snippets/code/src_gui_painting_qpen.cpp 3 + \snippet code/src_gui_painting_qpen.cpp 3 \endtable The dash pattern is specified in units of the pens width; e.g. a diff --git a/src/gui/painting/qpolygon.cpp b/src/gui/painting/qpolygon.cpp index ee1f7967cb7..b7dee7ff2a9 100644 --- a/src/gui/painting/qpolygon.cpp +++ b/src/gui/painting/qpolygon.cpp @@ -98,7 +98,7 @@ static void qt_polygon_isect_line(const QPointF &p1, const QPointF &p2, const QP points to a QPolygon is to use QVector's streaming operator, as illustrated below: - \snippet doc/src/snippets/polygon/polygon.cpp 0 + \snippet polygon/polygon.cpp 0 In addition to the functions provided by QVector, QPolygon provides some point-specific functions. @@ -304,7 +304,7 @@ void QPolygon::point(int index, int *x, int *y) const The example code creates a polygon with two points (10, 20) and (30, 40): - \snippet doc/src/snippets/polygon/polygon.cpp 2 + \snippet polygon/polygon.cpp 2 \sa setPoint() putPoints() */ @@ -330,7 +330,7 @@ void QPolygon::setPoints(int nPoints, const int *points) The example code creates a polygon with two points (10, 20) and (30, 40): - \snippet doc/src/snippets/polygon/polygon.cpp 3 + \snippet polygon/polygon.cpp 3 */ void QPolygon::setPoints(int nPoints, int firstx, int firsty, ...) @@ -381,12 +381,12 @@ void QPolygon::putPoints(int index, int nPoints, const int *points) The example code creates a polygon with three points (4,5), (6,7) and (8,9), by expanding the polygon from 1 to 3 points: - \snippet doc/src/snippets/polygon/polygon.cpp 4 + \snippet polygon/polygon.cpp 4 The following code has the same result, but here the putPoints() function overwrites rather than extends: - \snippet doc/src/snippets/polygon/polygon.cpp 5 + \snippet polygon/polygon.cpp 5 \sa setPoints() */ @@ -418,7 +418,7 @@ void QPolygon::putPoints(int index, int nPoints, int firstx, int firsty, ...) default) in \a fromPolygon into this polygon, starting at the specified \a index. For example: - \snippet doc/src/snippets/polygon/polygon.cpp 6 + \snippet polygon/polygon.cpp 6 */ void QPolygon::putPoints(int index, int nPoints, const QPolygon & from, int fromIndex) @@ -490,7 +490,7 @@ QDebug operator<<(QDebug dbg, const QPolygon &a) to a QPolygonF is to use its streaming operator, as illustrated below: - \snippet doc/src/snippets/polygon/polygon.cpp 1 + \snippet polygon/polygon.cpp 1 In addition to the functions provided by QVector, QPolygonF provides the boundingRect() and translate() functions for geometry diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index ebca1edddc4..f250150b06e 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -86,7 +86,7 @@ QT_BEGIN_NAMESPACE rectangles. Example of using complex regions: - \snippet doc/src/snippets/code/src_gui_painting_qregion.cpp 0 + \snippet code/src_gui_painting_qregion.cpp 0 \section1 Additional License Information @@ -725,7 +725,7 @@ QRegion QRegion::intersect(const QRect &r) const empty region is a region that contains no points. Example: - \snippet doc/src/snippets/code/src_gui_painting_qregion_unix.cpp 0 + \snippet code/src_gui_painting_qregion_unix.cpp 0 */ /*! diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index ba971d454dc..924a444805b 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -159,7 +159,7 @@ QT_BEGIN_NAMESPACE \row \li \inlineimage qtransform-simpletransformation.png \li - \snippet doc/src/snippets/transform/main.cpp 0 + \snippet transform/main.cpp 0 \endtable Although these functions are very convenient, it can be more @@ -171,7 +171,7 @@ QT_BEGIN_NAMESPACE \row \li \inlineimage qtransform-combinedtransformation.png \li - \snippet doc/src/snippets/transform/main.cpp 1 + \snippet transform/main.cpp 1 \endtable \section1 Basic Matrix Operations @@ -188,7 +188,7 @@ QT_BEGIN_NAMESPACE QTransform transforms a point in the plane to another point using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qtransform.cpp 0 + \snippet code/src_gui_painting_qtransform.cpp 0 The point \e (x, y) is the original point, and \e (x', y') is the transformed point. \e (x', y') can be transformed back to \e (x, @@ -221,7 +221,7 @@ QT_BEGIN_NAMESPACE \row \li \inlineimage qtransform-combinedtransformation2.png \li - \snippet doc/src/snippets/transform/main.cpp 2 + \snippet transform/main.cpp 2 \endtable \sa QPainter, {Coordinate System}, {painting/affine}{Affine @@ -1662,7 +1662,7 @@ QPainterPath QTransform::map(const QPainterPath &path) const The rectangle's coordinates are transformed using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qtransform.cpp 1 + \snippet code/src_gui_painting_qtransform.cpp 1 Polygons and rectangles behave slightly differently when transformed (due to integer rounding), so @@ -1915,7 +1915,7 @@ QRect QTransform::mapRect(const QRect &rect) const The rectangle's coordinates are transformed using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qtransform.cpp 2 + \snippet code/src_gui_painting_qtransform.cpp 2 If rotation or shearing has been specified, this function returns the \e bounding rectangle. To retrieve the exact region the given @@ -1991,7 +1991,7 @@ QRectF QTransform::mapRect(const QRectF &rect) const The coordinates are transformed using the following formulas: - \snippet doc/src/snippets/code/src_gui_painting_qtransform.cpp 3 + \snippet code/src_gui_painting_qtransform.cpp 3 The point (x, y) is the original point, and (x', y') is the transformed point. diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 161bb4e23dc..cd1556070e4 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -367,7 +367,7 @@ QFontEngineData::~QFontEngineData() Create QFonts like this: - \snippet doc/src/snippets/code/src_gui_text_qfont.cpp 0 + \snippet code/src_gui_text_qfont.cpp 0 The attributes set in the constructor can also be set later, e.g. setFamily(), setPointSize(), setPointSizeFloat(), setWeight() and @@ -464,11 +464,11 @@ QFontEngineData::~QFontEngineData() Examples: - \snippet doc/src/snippets/code/src_gui_text_qfont.cpp 1 + \snippet code/src_gui_text_qfont.cpp 1 If you had both an Adobe and a Cronyx Helvetica, you might get either. - \snippet doc/src/snippets/code/src_gui_text_qfont.cpp 2 + \snippet code/src_gui_text_qfont.cpp 2 You can specify the foundry you want in the family name. The font f in the above example will be set to "Helvetica @@ -477,11 +477,11 @@ QFontEngineData::~QFontEngineData() To determine the attributes of the font actually used in the window system, use a QFontInfo object, e.g. - \snippet doc/src/snippets/code/src_gui_text_qfont.cpp 3 + \snippet code/src_gui_text_qfont.cpp 3 To find out font metrics use a QFontMetrics object, e.g. - \snippet doc/src/snippets/code/src_gui_text_qfont.cpp 4 + \snippet code/src_gui_text_qfont.cpp 4 For more general information on fonts, see the \link http://nwalsh.com/comp.fonts/FAQ/ comp.fonts FAQ.\endlink diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index a1af8569926..42096d9ae79 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1197,8 +1197,8 @@ QString QFontDatabase::styleString(const QFontInfo &fontInfo) Example: - \snippet doc/src/snippets/qfontdatabase/main.cpp 0 - \snippet doc/src/snippets/qfontdatabase/main.cpp 1 + \snippet qfontdatabase/main.cpp 0 + \snippet qfontdatabase/main.cpp 1 This example gets the list of font families, the list of styles for each family, and the point sizes that are available for diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index fe9e1d16c71..cc6fa4bfeea 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -122,7 +122,7 @@ extern void qt_format_text(const QFont& font, const QRectF &_r, and size(), to return the size of that rectangle. Example: - \snippet doc/src/snippets/code/src_gui_text_qfontmetrics.cpp 0 + \snippet code/src_gui_text_qfontmetrics.cpp 0 \sa QFont, QFontInfo, QFontDatabase, QFontComboBox, {Character Map Example} */ @@ -976,7 +976,7 @@ int QFontMetrics::lineWidth() const and size(), to return the size of that rectangle. Example: - \snippet doc/src/snippets/code/src_gui_text_qfontmetrics.cpp 1 + \snippet code/src_gui_text_qfontmetrics.cpp 1 \sa QFont QFontInfo QFontDatabase */ diff --git a/src/gui/text/qsyntaxhighlighter.cpp b/src/gui/text/qsyntaxhighlighter.cpp index c6810ad61f1..c3720710196 100644 --- a/src/gui/text/qsyntaxhighlighter.cpp +++ b/src/gui/text/qsyntaxhighlighter.cpp @@ -253,7 +253,7 @@ void QSyntaxHighlighterPrivate::reformatBlock(const QTextBlock &block) pass it the QTextEdit or QTextDocument that you want the syntax highlighting to be applied to. For example: - \snippet doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp 0 + \snippet code/src_gui_text_qsyntaxhighlighter.cpp 0 After this your highlightBlock() function will be called automatically whenever necessary. Use your highlightBlock() @@ -262,7 +262,7 @@ void QSyntaxHighlighterPrivate::reformatBlock(const QTextBlock &block) setFormat() function which applies a given QTextCharFormat on the current text block. For example: - \snippet doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp 1 + \snippet code/src_gui_text_qsyntaxhighlighter.cpp 1 Some syntaxes can have constructs that span several text blocks. For example, a C++ syntax highlighter should be able to @@ -285,7 +285,7 @@ void QSyntaxHighlighterPrivate::reformatBlock(const QTextBlock &block) For example, if you're writing a simple C++ syntax highlighter, you might designate 1 to signify "in comment": - \snippet doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp 2 + \snippet code/src_gui_text_qsyntaxhighlighter.cpp 2 In the example above, we first set the current block state to 0. Then, if the previous block ended within a comment, we higlight @@ -432,7 +432,7 @@ void QSyntaxHighlighter::rehighlightBlock(const QTextBlock &block) setFormat() as often as necessary to apply any font and color changes that you require. For example: - \snippet doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp 3 + \snippet code/src_gui_text_qsyntaxhighlighter.cpp 3 Some syntaxes can have constructs that span several text blocks. For example, a C++ syntax highlighter should be able to @@ -602,7 +602,7 @@ void QSyntaxHighlighter::setCurrentBlockState(int newState) and store their relative position and the actual QChar in a simple class derived from QTextBlockUserData: - \snippet doc/src/snippets/code/src_gui_text_qsyntaxhighlighter.cpp 4 + \snippet code/src_gui_text_qsyntaxhighlighter.cpp 4 During cursor navigation in the associated editor, you can ask the current QTextBlock (retrieved using the QTextCursor::block() diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index 02fd921fac0..ce46ec2e59b 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -972,7 +972,7 @@ QTextLayout *QTextCursorPrivate::blockLayout(QTextBlock &block) const{ diacritics). Functions such as movePosition() and deleteChar() limit cursor movement to these valid positions. - \sa \link richtext.html Rich Text Processing\endlink + \sa {Rich Text Processing} */ @@ -1380,7 +1380,7 @@ void QTextCursor::setKeepPositionOnInsert(bool b) If there is a selection, the selection is deleted and replaced by \a text, for example: - \snippet doc/src/snippets/code/src_gui_text_qtextcursor.cpp 0 + \snippet code/src_gui_text_qtextcursor.cpp 0 This clears any existing selection, selects the word at the cursor (i.e. from position() forward), and replaces the selection with the phrase "Hello World". @@ -2301,7 +2301,7 @@ void QTextCursor::insertImage(const QTextImageFormat &format) Convenience method for inserting the image with the given \a name at the current position(). - \snippet doc/src/snippets/code/src_gui_text_qtextcursor.cpp 1 + \snippet code/src_gui_text_qtextcursor.cpp 1 */ void QTextCursor::insertImage(const QString &name) { @@ -2445,7 +2445,7 @@ bool QTextCursor::operator>(const QTextCursor &rhs) const For example: - \snippet doc/src/snippets/code/src_gui_text_qtextcursor.cpp 2 + \snippet code/src_gui_text_qtextcursor.cpp 2 The call to undo() will cause both insertions to be undone, causing both "World" and "Hello" to be removed. @@ -2474,7 +2474,7 @@ void QTextCursor::beginEditBlock() For example: - \snippet doc/src/snippets/code/src_gui_text_qtextcursor.cpp 3 + \snippet code/src_gui_text_qtextcursor.cpp 3 The call to undo() will cause all three insertions to be undone. diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index ec660dd0505..f0546566d4a 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -1511,7 +1511,7 @@ QTextBlock QTextDocument::begin() const This function returns a block to test for the end of the document while iterating over it. - \snippet doc/src/snippets/textdocumentendsnippet.cpp 0 + \snippet textdocumentendsnippet.cpp 0 The block returned is invalid and represents the block after the last block in the document. You can use lastBlock() to retrieve the @@ -1868,15 +1868,15 @@ QVariant QTextDocument::resource(int type, const QUrl &name) const For example, you can add an image as a resource in order to reference it from within the document: - \snippet snippets/textdocument-resources/main.cpp Adding a resource + \snippet textdocument-resources/main.cpp Adding a resource The image can be inserted into the document using the QTextCursor API: - \snippet snippets/textdocument-resources/main.cpp Inserting an image with a cursor + \snippet textdocument-resources/main.cpp Inserting an image with a cursor Alternatively, you can insert images using the HTML \c img tag: - \snippet snippets/textdocument-resources/main.cpp Inserting an image using HTML + \snippet textdocument-resources/main.cpp Inserting an image using HTML */ void QTextDocument::addResource(int type, const QUrl &name, const QVariant &resource) { @@ -2967,7 +2967,7 @@ void QTextHtmlExporter::emitFrameStyle(const QTextFrameFormat &format, FrameType The \a encoding parameter specifies the value for the charset attribute in the html header. For example if 'utf-8' is specified then the beginning of the generated html will look like this: - \snippet doc/src/snippets/code/src_gui_text_qtextdocument.cpp 0 + \snippet code/src_gui_text_qtextdocument.cpp 0 If no encoding is specified then no such meta information is generated. diff --git a/src/gui/text/qtextdocumentwriter.cpp b/src/gui/text/qtextdocumentwriter.cpp index b0bbeb7a476..2894c280e85 100644 --- a/src/gui/text/qtextdocumentwriter.cpp +++ b/src/gui/text/qtextdocumentwriter.cpp @@ -160,7 +160,7 @@ QTextDocumentWriter::~QTextDocumentWriter() Sets the format used to write documents to the \a format specified. \a format is a case insensitive text string. For example: - \snippet doc/src/snippets/code/src.gui.text.qtextdocumentwriter.cpp 0 + \snippet code/src_gui_text_qtextdocumentwriter.cpp 0 You can call supportedDocumentFormats() for the full list of formats QTextDocumentWriter supports. diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 9a38b1f0b2f..bb3d897ebe1 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -2269,7 +2269,7 @@ QList QTextBlockFormat::tabPositions() const can be used to customize the numbers used in an ordered list so that they appear as (1), (2), (3), etc.: - \snippet doc/src/snippets/textdocument-listitemstyles/mainwindow.cpp add a styled, ordered list + \snippet textdocument-listitemstyles/mainwindow.cpp add a styled, ordered list \sa QTextList */ diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 94af3edeeb8..0ab964778a4 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -282,10 +282,10 @@ Qt::LayoutDirection QTextInlineObject::textDirection() const created lines. Here is a code snippet that demonstrates the layout phase: - \snippet doc/src/snippets/code/src_gui_text_qtextlayout.cpp 0 + \snippet code/src_gui_text_qtextlayout.cpp 0 The text can then be rendered by calling the layout's draw() function: - \snippet doc/src/snippets/code/src_gui_text_qtextlayout.cpp 1 + \snippet code/src_gui_text_qtextlayout.cpp 1 For a given position in the text you can find a valid cursor position with isValidCursorPosition(), nextCursorPosition(), and previousCursorPosition(). diff --git a/src/gui/text/qtextlist.cpp b/src/gui/text/qtextlist.cpp index c3c71bc0210..82d744d654b 100644 --- a/src/gui/text/qtextlist.cpp +++ b/src/gui/text/qtextlist.cpp @@ -75,7 +75,7 @@ public: The \l{QTextCursor::insertList()} function inserts an empty block into the document at the cursor position, and makes it the first item in a list. - \snippet doc/src/snippets/textdocument-lists/mainwindow.cpp 0 + \snippet textdocument-lists/mainwindow.cpp 0 The \l{QTextCursor::createList()} function takes the contents of the cursor's current block and turns it into the first item of a new list. diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index a9daf6ba563..d4e9c7d12cc 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -939,8 +939,8 @@ bool QTextBlock::isValid() const An iterator can be constructed and used to access the fragments within a text block in the following way: - \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 4 - \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 7 + \snippet textblock-fragments/xmlwriter.cpp 4 + \snippet textblock-fragments/xmlwriter.cpp 7 \sa QTextFragment */ diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index 65bc8fde1e9..a9866187d32 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -510,9 +510,9 @@ void QTextTablePrivate::update() const For example, we can insert a table with three rows and two columns at the current cursor position in an editor using the following lines of code: - \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 1 + \snippet textdocument-tables/mainwindow.cpp 1 \codeline - \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 3 + \snippet textdocument-tables/mainwindow.cpp 3 The table format is either defined when the table is created or changed later with setFormat(). @@ -545,14 +545,14 @@ void QTextTablePrivate::update() const \li Suppose we have a 2x3 table of names and addresses. To merge both columns in the first row we invoke mergeCells() with \a row = 0, \a column = 0, \a numRows = 1 and \a numColumns = 2. - \snippet doc/src/snippets/textdocument-texttable/main.cpp 0 + \snippet textdocument-texttable/main.cpp 0 \row \li \inlineimage texttable-merge.png \li This gives us the following table. To split the first row of the table back into two cells, we invoke the splitCell() function with \a numRows and \a numCols = 1. - \snippet doc/src/snippets/textdocument-texttable/main.cpp 1 + \snippet textdocument-texttable/main.cpp 1 \row \li \inlineimage texttable-split.png Split Table diff --git a/src/gui/util/qdesktopservices.cpp b/src/gui/util/qdesktopservices.cpp index a941c060310..1535162735e 100644 --- a/src/gui/util/qdesktopservices.cpp +++ b/src/gui/util/qdesktopservices.cpp @@ -135,7 +135,7 @@ void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler) URLs, and by registering a handler it becomes possible to display the help text inside the application: - \snippet doc/src/snippets/code/src_gui_util_qdesktopservices.cpp 0 + \snippet code/src_gui_util_qdesktopservices.cpp 0 If inside the handler you decide that you can't open the requested URL, you can just call QDesktopServices::openUrl() again with the @@ -155,7 +155,7 @@ void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler) The following example opens a file on the Windows file system residing on a path that contains spaces: - \snippet doc/src/snippets/code/src_gui_util_qdesktopservices.cpp 2 + \snippet code/src_gui_util_qdesktopservices.cpp 2 If a \c mailto URL is specified, the user's e-mail client will be used to open a composer window containing the options specified in the URL, similar to the way @@ -164,7 +164,7 @@ void QOpenUrlHandlerRegistry::handlerDestroyed(QObject *handler) For example, the following URL contains a recipient (\c{user@foo.com}), a subject (\c{Test}), and a message body (\c{Just a test}): - \snippet doc/src/snippets/code/src_gui_util_qdesktopservices.cpp 1 + \snippet code/src_gui_util_qdesktopservices.cpp 1 \warning Although many e-mail clients can send attachments and are Unicode-aware, the user may have configured their client without these features. diff --git a/src/gui/util/qvalidator.cpp b/src/gui/util/qvalidator.cpp index 3103cc74243..84a5b4c54c9 100644 --- a/src/gui/util/qvalidator.cpp +++ b/src/gui/util/qvalidator.cpp @@ -303,12 +303,12 @@ void QValidator::fixup(QString &) const Example of use: - \snippet doc/src/snippets/code/src_gui_widgets_qvalidator.cpp 0 + \snippet code/src_gui_util_qvalidator.cpp 0 Below we present some examples of validators. In practice they would normally be associated with a widget as in the example above. - \snippet doc/src/snippets/code/src_gui_widgets_qvalidator.cpp 1 + \snippet code/src_gui_util_qvalidator.cpp 1 Notice that the value \c 999 returns Intermediate. Values consisting of a number of digits equal to or less than the max @@ -377,7 +377,7 @@ QIntValidator::~QIntValidator() the user might be just about to type the minus (especially for right-to-left languages). - \snippet doc/src/snippets/code/src_gui_widgets_qvalidator.cpp 2 + \snippet code/src_gui_util_qvalidator.cpp 2 By default, the \a pos parameter is not used by this validator. */ @@ -812,12 +812,12 @@ QDoubleValidator::Notation QDoubleValidator::notation() const For a brief introduction to Qt's regexp engine, see \l QRegExp. Example of use: - \snippet doc/src/snippets/code/src_gui_widgets_qvalidator.cpp 3 + \snippet code/src_gui_util_qvalidator.cpp 3 Below we present some examples of validators. In practice they would normally be associated with a widget as in the example above. - \snippet doc/src/snippets/code/src_gui_widgets_qvalidator.cpp 4 + \snippet code/src_gui_util_qvalidator.cpp 4 \sa QRegExp, QIntValidator, QDoubleValidator, {Settings Editor Example} */ From 97b5b8009254004608feefb903cbf44abaa099f6 Mon Sep 17 00:00:00 2001 From: Casper van Donderen Date: Mon, 7 May 2012 18:49:48 +0200 Subject: [PATCH 07/13] Doc: Modularize QtWidgets documentation. This change moves the snippets and images to the modularized directories. Change-Id: Idec1afb9db7ea6add1ca4cf25ec4019d8bce0c4d Reviewed-by: Marius Storm-Olsen --- src/widgets/dialogs/qcolordialog.cpp | 8 +- src/widgets/dialogs/qdialog.cpp | 14 +- src/widgets/dialogs/qfiledialog.cpp | 28 +- src/widgets/dialogs/qfilesystemmodel.cpp | 6 +- src/widgets/dialogs/qfontdialog.cpp | 30 +- src/widgets/dialogs/qinputdialog.cpp | 32 +- src/widgets/dialogs/qmessagebox.cpp | 24 +- src/widgets/dialogs/qprogressdialog.cpp | 8 +- src/widgets/dialogs/qwizard.cpp | 208 ++++++------ src/widgets/doc/images/assistant-toolbar.png | Bin 0 -> 6532 bytes .../buttonbox-gnomelayout-horizontal.png | Bin 0 -> 4188 bytes .../images/buttonbox-gnomelayout-vertical.png | Bin 0 -> 5027 bytes .../images/buttonbox-kdelayout-horizontal.png | Bin 0 -> 2862 bytes .../images/buttonbox-kdelayout-vertical.png | Bin 0 -> 3298 bytes .../buttonbox-mac-modeless-horizontal.png | Bin 0 -> 4123 bytes .../buttonbox-mac-modeless-vertical.png | Bin 0 -> 5177 bytes .../images/buttonbox-maclayout-horizontal.png | Bin 0 -> 5409 bytes .../images/buttonbox-maclayout-vertical.png | Bin 0 -> 7340 bytes .../images/buttonbox-winlayout-horizontal.png | Bin 0 -> 2780 bytes .../images/buttonbox-winlayout-vertical.png | Bin 0 -> 3184 bytes .../doc}/images/cde-calendarwidget.png | Bin .../widgets/doc}/images/cde-checkbox.png | Bin .../widgets/doc}/images/cde-combobox.png | Bin .../widgets/doc}/images/cde-dateedit.png | Bin .../widgets/doc}/images/cde-datetimeedit.png | Bin .../widgets/doc}/images/cde-dial.png | Bin .../widgets/doc}/images/cde-doublespinbox.png | Bin .../widgets/doc}/images/cde-fontcombobox.png | Bin .../widgets/doc}/images/cde-frame.png | Bin .../widgets/doc}/images/cde-groupbox.png | Bin .../doc}/images/cde-horizontalscrollbar.png | Bin .../widgets/doc}/images/cde-label.png | Bin .../widgets/doc}/images/cde-lcdnumber.png | Bin .../widgets/doc}/images/cde-lineedit.png | Bin .../widgets/doc}/images/cde-listview.png | Bin .../widgets/doc}/images/cde-progressbar.png | Bin .../widgets/doc}/images/cde-pushbutton.png | Bin .../widgets/doc}/images/cde-radiobutton.png | Bin .../widgets/doc}/images/cde-slider.png | Bin .../widgets/doc}/images/cde-spinbox.png | Bin .../widgets/doc}/images/cde-tableview.png | Bin .../widgets/doc}/images/cde-tabwidget.png | Bin .../widgets/doc}/images/cde-textedit.png | Bin .../widgets/doc}/images/cde-timeedit.png | Bin .../widgets/doc}/images/cde-toolbox.png | Bin .../widgets/doc}/images/cde-toolbutton.png | Bin .../widgets/doc}/images/cde-treeview.png | Bin .../doc/images/checkboxes-exclusive.png | Bin 0 -> 5079 bytes .../doc/images/checkboxes-non-exclusive.png | Bin 0 -> 5614 bytes .../doc}/images/cleanlooks-calendarwidget.png | Bin .../doc}/images/cleanlooks-checkbox.png | Bin .../doc}/images/cleanlooks-combobox.png | Bin .../doc}/images/cleanlooks-dateedit.png | Bin .../doc}/images/cleanlooks-datetimeedit.png | Bin .../widgets/doc}/images/cleanlooks-dial.png | Bin .../doc}/images/cleanlooks-doublespinbox.png | Bin .../doc}/images/cleanlooks-fontcombobox.png | Bin .../widgets/doc}/images/cleanlooks-frame.png | Bin .../doc}/images/cleanlooks-groupbox.png | Bin .../images/cleanlooks-horizontalscrollbar.png | Bin .../widgets/doc}/images/cleanlooks-label.png | Bin .../doc}/images/cleanlooks-lcdnumber.png | Bin .../doc}/images/cleanlooks-lineedit.png | Bin .../doc}/images/cleanlooks-listview.png | Bin .../doc}/images/cleanlooks-progressbar.png | Bin .../doc/images/cleanlooks-pushbutton-menu.png | Bin 0 -> 3177 bytes .../doc}/images/cleanlooks-pushbutton.png | Bin .../doc}/images/cleanlooks-radiobutton.png | Bin .../widgets/doc}/images/cleanlooks-slider.png | Bin .../doc}/images/cleanlooks-spinbox.png | Bin .../doc}/images/cleanlooks-tableview.png | Bin .../doc}/images/cleanlooks-tabwidget.png | Bin .../doc}/images/cleanlooks-textedit.png | Bin .../doc}/images/cleanlooks-timeedit.png | Bin .../doc}/images/cleanlooks-toolbox.png | Bin .../doc}/images/cleanlooks-toolbutton.png | Bin .../doc}/images/cleanlooks-treeview.png | Bin .../images/designer-stylesheet-options.png | Bin .../doc}/images/designer-stylesheet-usage.png | Bin .../images/designer-validator-highlighter.png | Bin .../widgets/doc}/images/filedialogurls.png | Bin .../src => src/widgets/doc}/images/frames.png | Bin .../images/graphicsview-ellipseitem-pie.png | Bin 0 -> 6683 bytes .../doc/images/graphicsview-ellipseitem.png | Bin 0 -> 5801 bytes .../doc}/images/graphicsview-items.png | Bin .../doc}/images/graphicsview-pathitem.png | Bin .../doc}/images/graphicsview-pixmapitem.png | Bin .../doc}/images/graphicsview-polygonitem.png | Bin .../doc}/images/graphicsview-rectitem.png | Bin .../doc}/images/graphicsview-zorder.png | Bin .../widgets/doc}/images/gridlayout.png | Bin .../doc}/images/gtk-calendarwidget.png | Bin .../widgets/doc}/images/gtk-checkbox.png | Bin .../widgets/doc}/images/gtk-combobox.png | Bin .../widgets/doc}/images/gtk-dateedit.png | Bin .../widgets/doc}/images/gtk-datetimeedit.png | Bin .../widgets/doc}/images/gtk-dial.png | Bin .../widgets/doc}/images/gtk-doublespinbox.png | Bin .../widgets/doc}/images/gtk-fontcombobox.png | Bin .../widgets/doc}/images/gtk-frame.png | Bin .../widgets/doc}/images/gtk-groupbox.png | Bin .../doc}/images/gtk-horizontalscrollbar.png | Bin .../widgets/doc}/images/gtk-label.png | Bin .../widgets/doc}/images/gtk-lcdnumber.png | Bin .../widgets/doc}/images/gtk-lineedit.png | Bin .../widgets/doc}/images/gtk-listview.png | Bin .../widgets/doc}/images/gtk-progressbar.png | Bin .../widgets/doc}/images/gtk-pushbutton.png | Bin .../widgets/doc}/images/gtk-radiobutton.png | Bin .../widgets/doc}/images/gtk-slider.png | Bin .../widgets/doc}/images/gtk-spinbox.png | Bin .../widgets/doc}/images/gtk-tableview.png | Bin .../widgets/doc}/images/gtk-tabwidget.png | Bin .../widgets/doc}/images/gtk-textedit.png | Bin .../widgets/doc}/images/gtk-timeedit.png | Bin .../widgets/doc}/images/gtk-toolbox.png | Bin .../widgets/doc}/images/gtk-toolbutton.png | Bin .../widgets/doc}/images/gtk-treeview.png | Bin .../images/javastyle/branchindicatorimage.png | Bin .../widgets/doc}/images/javastyle/button.png | Bin .../doc}/images/javastyle/checkbox.png | Bin .../doc}/images/javastyle/checkboxexample.png | Bin .../doc}/images/javastyle/combobox.png | Bin .../doc}/images/javastyle/comboboximage.png | Bin .../javastyle/conceptualpushbuttontree.png | Bin .../doc}/images/javastyle/dockwidget.png | Bin .../doc}/images/javastyle/dockwidgetimage.png | Bin .../doc}/images/javastyle/groupbox.png | Bin .../doc}/images/javastyle/groupboximage.png | Bin .../widgets/doc}/images/javastyle/header.png | Bin .../doc}/images/javastyle/headerimage.png | Bin .../widgets/doc}/images/javastyle/menu.png | Bin .../widgets/doc}/images/javastyle/menubar.png | Bin .../doc}/images/javastyle/menubarimage.png | Bin .../doc}/images/javastyle/menuimage.png | Bin .../doc}/images/javastyle/progressbar.png | Bin .../images/javastyle/progressbarimage.png | Bin .../doc}/images/javastyle/pushbutton.png | Bin .../doc}/images/javastyle/rubberband.png | Bin .../doc}/images/javastyle/rubberbandimage.png | Bin .../doc}/images/javastyle/scrollbar.png | Bin .../doc}/images/javastyle/scrollbarimage.png | Bin .../doc}/images/javastyle/sizegrip.png | Bin .../doc}/images/javastyle/sizegripimage.png | Bin .../widgets/doc}/images/javastyle/slider.png | Bin .../doc}/images/javastyle/sliderimage.png | Bin .../widgets/doc}/images/javastyle/spinbox.png | Bin .../doc}/images/javastyle/spinboximage.png | Bin .../widgets/doc}/images/javastyle/tab.png | Bin .../doc}/images/javastyle/tabwidget.png | Bin .../doc}/images/javastyle/titlebar.png | Bin .../doc}/images/javastyle/titlebarimage.png | Bin .../widgets/doc}/images/javastyle/toolbar.png | Bin .../doc}/images/javastyle/toolbarimage.png | Bin .../widgets/doc}/images/javastyle/toolbox.png | Bin .../doc}/images/javastyle/toolboximage.png | Bin .../doc}/images/javastyle/toolbutton.png | Bin .../doc}/images/javastyle/toolbuttonimage.png | Bin .../doc}/images/javastyle/windowstabimage.png | Bin .../doc}/images/licensewizard-flow.png | Bin .../doc}/images/macintosh-calendarwidget.png | Bin .../doc}/images/macintosh-checkbox.png | Bin .../doc}/images/macintosh-combobox.png | Bin .../doc}/images/macintosh-dateedit.png | Bin .../doc}/images/macintosh-datetimeedit.png | Bin .../widgets/doc}/images/macintosh-dial.png | Bin .../doc}/images/macintosh-doublespinbox.png | Bin .../doc}/images/macintosh-fontcombobox.png | Bin .../widgets/doc}/images/macintosh-frame.png | Bin .../doc}/images/macintosh-groupbox.png | Bin .../images/macintosh-horizontalscrollbar.png | Bin .../widgets/doc}/images/macintosh-label.png | Bin .../doc}/images/macintosh-lcdnumber.png | Bin .../doc}/images/macintosh-lineedit.png | Bin .../doc}/images/macintosh-listview.png | Bin src/widgets/doc/images/macintosh-menu.png | Bin 0 -> 6891 bytes .../doc}/images/macintosh-progressbar.png | Bin .../doc}/images/macintosh-pushbutton.png | Bin .../doc}/images/macintosh-radiobutton.png | Bin .../widgets/doc}/images/macintosh-slider.png | Bin .../widgets/doc}/images/macintosh-spinbox.png | Bin .../doc}/images/macintosh-tableview.png | Bin .../doc}/images/macintosh-tabwidget.png | Bin .../doc}/images/macintosh-textedit.png | Bin .../doc}/images/macintosh-timeedit.png | Bin .../widgets/doc}/images/macintosh-toolbox.png | Bin .../doc}/images/macintosh-toolbutton.png | Bin .../doc}/images/macintosh-treeview.png | Bin .../widgets/doc}/images/mainwindow-docks.png | Bin .../widgets/doc}/images/mainwindowlayout.png | Bin src/widgets/doc/images/mdi-cascade.png | Bin 0 -> 14590 bytes src/widgets/doc/images/mdi-tile.png | Bin 0 -> 31624 bytes .../doc}/images/motif-calendarwidget.png | Bin .../widgets/doc}/images/motif-checkbox.png | Bin .../widgets/doc}/images/motif-combobox.png | Bin .../widgets/doc}/images/motif-dateedit.png | Bin .../doc}/images/motif-datetimeedit.png | Bin .../widgets/doc}/images/motif-dial.png | Bin .../doc}/images/motif-doublespinbox.png | Bin .../doc}/images/motif-fontcombobox.png | Bin .../widgets/doc}/images/motif-frame.png | Bin .../widgets/doc}/images/motif-groupbox.png | Bin .../doc}/images/motif-horizontalscrollbar.png | Bin .../widgets/doc}/images/motif-label.png | Bin .../widgets/doc}/images/motif-lcdnumber.png | Bin .../widgets/doc}/images/motif-lineedit.png | Bin .../widgets/doc}/images/motif-listview.png | Bin src/widgets/doc/images/motif-menubar.png | Bin 0 -> 1350 bytes .../widgets/doc}/images/motif-progressbar.png | Bin .../widgets/doc}/images/motif-pushbutton.png | Bin .../widgets/doc}/images/motif-radiobutton.png | Bin .../widgets/doc}/images/motif-slider.png | Bin .../widgets/doc}/images/motif-spinbox.png | Bin .../widgets/doc}/images/motif-tableview.png | Bin .../widgets/doc}/images/motif-tabwidget.png | Bin .../widgets/doc}/images/motif-textedit.png | Bin .../widgets/doc}/images/motif-timeedit.png | Bin .../widgets/doc}/images/motif-toolbox.png | Bin .../widgets/doc}/images/motif-toolbutton.png | Bin .../widgets/doc}/images/motif-treeview.png | Bin .../widgets/doc}/images/msgbox1.png | Bin .../widgets/doc}/images/msgbox2.png | Bin .../widgets/doc}/images/msgbox3.png | Bin .../widgets/doc}/images/msgbox4.png | Bin .../widgets/doc}/images/pangesture.png | Bin .../doc}/images/parent-child-widgets.png | Bin .../widgets/doc}/images/pinchgesture.png | Bin .../doc}/images/plastique-calendarwidget.png | Bin .../doc}/images/plastique-checkbox.png | Bin .../doc}/images/plastique-colordialog.png | Bin .../doc}/images/plastique-combobox.png | Bin .../doc}/images/plastique-dateedit.png | Bin .../doc}/images/plastique-datetimeedit.png | Bin .../widgets/doc}/images/plastique-dial.png | Bin .../doc}/images/plastique-doublespinbox.png | Bin .../doc}/images/plastique-fontcombobox.png | Bin .../doc}/images/plastique-fontdialog.png | Bin .../widgets/doc}/images/plastique-frame.png | Bin .../doc}/images/plastique-groupbox.png | Bin .../images/plastique-horizontalscrollbar.png | Bin .../widgets/doc}/images/plastique-label.png | Bin .../doc}/images/plastique-lcdnumber.png | Bin .../doc}/images/plastique-lineedit.png | Bin .../doc}/images/plastique-listview.png | Bin src/widgets/doc/images/plastique-menu.png | Bin 0 -> 3867 bytes src/widgets/doc/images/plastique-menubar.png | Bin 0 -> 1030 bytes .../doc}/images/plastique-progressbar.png | Bin .../doc}/images/plastique-progressdialog.png | Bin .../doc/images/plastique-pushbutton-menu.png | Bin 0 -> 3354 bytes .../doc}/images/plastique-pushbutton.png | Bin .../doc}/images/plastique-radiobutton.png | Bin src/widgets/doc/images/plastique-sizegrip.png | Bin 0 -> 8168 bytes .../widgets/doc}/images/plastique-slider.png | Bin .../widgets/doc}/images/plastique-spinbox.png | Bin .../doc}/images/plastique-statusbar.png | Bin .../doc/images/plastique-tabbar-truncated.png | Bin 0 -> 2986 bytes src/widgets/doc/images/plastique-tabbar.png | Bin 0 -> 2721 bytes .../doc}/images/plastique-tableview.png | Bin .../doc}/images/plastique-tabwidget.png | Bin .../doc}/images/plastique-textedit.png | Bin .../doc}/images/plastique-timeedit.png | Bin .../widgets/doc}/images/plastique-toolbox.png | Bin .../doc}/images/plastique-toolbutton.png | Bin .../doc}/images/plastique-treeview.png | Bin .../doc}/images/progressBar-stylesheet.png | Bin .../doc}/images/progressBar2-stylesheet.png | Bin .../doc}/images/propagation-custom.png | Bin .../doc}/images/propagation-standard.png | Bin .../doc}/images/qcalendarwidget-grid.png | Bin .../doc}/images/qcalendarwidget-maximum.png | Bin .../doc}/images/qcalendarwidget-minimum.png | Bin .../widgets/doc}/images/qcolumnview.png | Bin .../widgets/doc}/images/qdesktopwidget.png | Bin src/widgets/doc/images/qformlayout-kde.png | Bin 0 -> 1703 bytes src/widgets/doc/images/qformlayout-mac.png | Bin 0 -> 1706 bytes src/widgets/doc/images/qformlayout-qpe.png | Bin 0 -> 1764 bytes src/widgets/doc/images/qformlayout-win.png | Bin 0 -> 1743 bytes .../images/qformlayout-with-6-children.png | Bin .../images/qgraphicsproxywidget-embed.png | Bin .../images/qgridlayout-with-5-children.png | Bin .../images/qhboxlayout-with-5-children.png | Bin .../doc}/images/qmdisubwindowlayout.png | Bin .../doc/images/qscrollarea-noscrollbars.png | Bin 0 -> 54671 bytes .../doc/images/qscrollarea-onescrollbar.png | Bin 0 -> 77476 bytes .../doc/images/qscrollarea-twoscrollbars.png | Bin 0 -> 78046 bytes .../doc}/images/qscrollbar-picture.png | Bin src/widgets/doc/images/qscrollbar-values.png | Bin 0 -> 15902 bytes src/widgets/doc/images/qspinbox-plusminus.png | Bin 0 -> 375 bytes src/widgets/doc/images/qspinbox-updown.png | Bin 0 -> 402 bytes .../widgets/doc}/images/qstyle-comboboxes.png | Bin .../images/qstyleoptiontoolbar-position.png | Bin src/widgets/doc/images/qtableview-resized.png | Bin 0 -> 42232 bytes src/widgets/doc/images/qtwizard-aero1.png | Bin 0 -> 11749 bytes src/widgets/doc/images/qtwizard-aero2.png | Bin 0 -> 16560 bytes src/widgets/doc/images/qtwizard-classic1.png | Bin 0 -> 39640 bytes src/widgets/doc/images/qtwizard-classic2.png | Bin 0 -> 8616 bytes src/widgets/doc/images/qtwizard-mac1.png | Bin 0 -> 25478 bytes src/widgets/doc/images/qtwizard-mac2.png | Bin 0 -> 29591 bytes .../widgets/doc}/images/qtwizard-macpage.png | Bin src/widgets/doc/images/qtwizard-modern1.png | Bin 0 -> 45093 bytes src/widgets/doc/images/qtwizard-modern2.png | Bin 0 -> 15081 bytes .../doc}/images/qtwizard-nonmacpage.png | Bin .../widgets/doc}/images/qundoview.png | Bin .../images/qvboxlayout-with-5-children.png | Bin .../doc/images/simpleanchorlayout-example.png | Bin 0 -> 13463 bytes .../images/stylesheet-border-image-normal.png | Bin .../stylesheet-border-image-stretched.png | Bin 0 -> 12170 bytes .../images/stylesheet-border-image-wrong.png | Bin 0 -> 12887 bytes .../doc}/images/stylesheet-boxmodel.png | Bin .../doc/images/stylesheet-branch-closed.png | Bin 0 -> 334 bytes .../doc/images/stylesheet-branch-end.png | Bin 0 -> 182 bytes .../doc/images/stylesheet-branch-more.png | Bin 0 -> 136 bytes .../doc/images/stylesheet-branch-open.png | Bin 0 -> 346 bytes .../images/stylesheet-coffee-cleanlooks.png | Bin 0 -> 14820 bytes .../doc/images/stylesheet-coffee-xp.png | Bin 0 -> 14200 bytes .../doc/images/stylesheet-pagefold-mac.png | Bin 0 -> 20618 bytes .../doc}/images/stylesheet-pagefold.png | Bin .../doc}/images/stylesheet-redbutton1.png | Bin .../doc}/images/stylesheet-redbutton2.png | Bin .../doc}/images/stylesheet-redbutton3.png | Bin .../doc}/images/stylesheet-scrollbar1.png | Bin .../doc}/images/stylesheet-scrollbar2.png | Bin .../doc}/images/stylesheet-treeview.png | Bin src/widgets/doc/images/stylesheet-vline.png | Bin 0 -> 124 bytes .../widgets/doc}/images/swipegesture.png | Bin .../widgets/doc}/images/system-tray.png | Bin .../doc}/images/tabWidget-stylesheet1.png | Bin .../doc}/images/tabWidget-stylesheet2.png | Bin .../doc}/images/tabWidget-stylesheet3.png | Bin .../doc}/images/tableWidget-stylesheet.png | Bin .../widgets/doc}/images/widgetdelegate.png | Bin .../doc}/images/windows-calendarwidget.png | Bin .../widgets/doc}/images/windows-checkbox.png | Bin .../widgets/doc}/images/windows-combobox.png | Bin .../widgets/doc}/images/windows-dateedit.png | Bin .../doc}/images/windows-datetimeedit.png | Bin .../widgets/doc}/images/windows-dial.png | Bin .../doc}/images/windows-doublespinbox.png | Bin .../doc}/images/windows-fontcombobox.png | Bin .../widgets/doc}/images/windows-frame.png | Bin .../widgets/doc}/images/windows-groupbox.png | Bin .../images/windows-horizontalscrollbar.png | Bin .../widgets/doc}/images/windows-label.png | Bin .../widgets/doc}/images/windows-lcdnumber.png | Bin .../widgets/doc}/images/windows-lineedit.png | Bin .../widgets/doc}/images/windows-listview.png | Bin .../doc}/images/windows-progressbar.png | Bin .../doc}/images/windows-pushbutton.png | Bin .../doc}/images/windows-radiobutton.png | Bin .../widgets/doc}/images/windows-slider.png | Bin .../widgets/doc}/images/windows-spinbox.png | Bin .../widgets/doc}/images/windows-tableview.png | Bin .../widgets/doc}/images/windows-tabwidget.png | Bin .../widgets/doc}/images/windows-textedit.png | Bin .../widgets/doc}/images/windows-timeedit.png | Bin .../widgets/doc}/images/windows-toolbox.png | Bin .../doc}/images/windows-toolbutton.png | Bin .../widgets/doc}/images/windows-treeview.png | Bin .../images/windowsvista-calendarwidget.png | Bin .../doc}/images/windowsvista-checkbox.png | Bin .../doc}/images/windowsvista-combobox.png | Bin .../doc}/images/windowsvista-dateedit.png | Bin .../doc}/images/windowsvista-datetimeedit.png | Bin .../widgets/doc}/images/windowsvista-dial.png | Bin .../images/windowsvista-doublespinbox.png | Bin .../doc}/images/windowsvista-fontcombobox.png | Bin .../doc}/images/windowsvista-frame.png | Bin .../doc}/images/windowsvista-groupbox.png | Bin .../windowsvista-horizontalscrollbar.png | Bin .../doc}/images/windowsvista-label.png | Bin .../doc}/images/windowsvista-lcdnumber.png | Bin .../doc}/images/windowsvista-lineedit.png | Bin .../doc}/images/windowsvista-listview.png | Bin .../doc}/images/windowsvista-progressbar.png | Bin .../doc}/images/windowsvista-pushbutton.png | Bin .../doc}/images/windowsvista-radiobutton.png | Bin .../doc}/images/windowsvista-slider.png | Bin .../doc}/images/windowsvista-spinbox.png | Bin .../doc}/images/windowsvista-tableview.png | Bin .../doc}/images/windowsvista-tabwidget.png | Bin .../doc}/images/windowsvista-textedit.png | Bin .../doc}/images/windowsvista-timeedit.png | Bin .../doc}/images/windowsvista-toolbox.png | Bin .../doc}/images/windowsvista-toolbutton.png | Bin .../doc}/images/windowsvista-treeview.png | Bin .../doc}/images/windowsxp-calendarwidget.png | Bin .../doc}/images/windowsxp-checkbox.png | Bin .../doc}/images/windowsxp-combobox.png | Bin .../doc}/images/windowsxp-dateedit.png | Bin .../doc}/images/windowsxp-datetimeedit.png | Bin .../widgets/doc}/images/windowsxp-dial.png | Bin .../doc}/images/windowsxp-doublespinbox.png | Bin .../doc}/images/windowsxp-fontcombobox.png | Bin .../widgets/doc}/images/windowsxp-frame.png | Bin .../doc}/images/windowsxp-groupbox.png | Bin .../images/windowsxp-horizontalscrollbar.png | Bin .../widgets/doc}/images/windowsxp-label.png | Bin .../doc}/images/windowsxp-lcdnumber.png | Bin .../doc}/images/windowsxp-lineedit.png | Bin .../doc}/images/windowsxp-listview.png | Bin src/widgets/doc/images/windowsxp-menu.png | Bin 0 -> 1442 bytes .../doc}/images/windowsxp-progressbar.png | Bin .../doc}/images/windowsxp-pushbutton.png | Bin .../doc}/images/windowsxp-radiobutton.png | Bin .../widgets/doc}/images/windowsxp-slider.png | Bin .../widgets/doc}/images/windowsxp-spinbox.png | Bin .../doc}/images/windowsxp-tableview.png | Bin .../doc}/images/windowsxp-tabwidget.png | Bin .../doc}/images/windowsxp-textedit.png | Bin .../doc}/images/windowsxp-timeedit.png | Bin .../widgets/doc}/images/windowsxp-toolbox.png | Bin .../doc}/images/windowsxp-toolbutton.png | Bin .../doc}/images/windowsxp-treeview.png | Bin src/widgets/doc/qtwidgets.qdocconf | 92 +++++ .../doc}/snippets/code/doc_src_layout.cpp | 0 .../doc}/snippets/code/doc_src_qt4-styles.cpp | 0 .../doc/snippets/code/doc_src_qtwidgets.cpp | 43 +++ .../doc/snippets/code/doc_src_qtwidgets.pro | 43 +++ .../doc}/snippets/code/doc_src_styles.cpp | 0 .../doc}/snippets/code/doc_src_stylesheet.cpp | 0 .../snippets/code/doc_src_stylesheet.qdoc | 0 .../code/src_gui_dialogs_qfiledialog.cpp | 0 .../code/src_gui_dialogs_qfontdialog.cpp | 0 .../code/src_gui_dialogs_qmessagebox.cpp | 148 ++++++++ .../snippets/code/src_gui_dialogs_qwizard.cpp | 0 .../code/src_gui_effects_qgraphicseffect.cpp | 0 ...c_gui_graphicsview_qgraphicsgridlayout.cpp | 0 .../src_gui_graphicsview_qgraphicsitem.cpp | 0 ...gui_graphicsview_qgraphicslinearlayout.cpp | 0 ..._gui_graphicsview_qgraphicsproxywidget.cpp | 0 .../src_gui_graphicsview_qgraphicsscene.cpp | 0 ...c_gui_graphicsview_qgraphicssceneevent.cpp | 0 .../src_gui_graphicsview_qgraphicsview.cpp | 0 .../src_gui_graphicsview_qgraphicswidget.cpp | 0 .../snippets/code/src_gui_image_qicon.cpp | 0 .../code/src_gui_image_qpixmapfilter.cpp | 0 .../src_gui_itemviews_qabstractitemview.cpp | 0 .../src_gui_itemviews_qdatawidgetmapper.cpp | 0 .../src_gui_itemviews_qitemeditorfactory.cpp | 0 .../src_gui_itemviews_qstandarditemmodel.cpp | 0 .../code/src_gui_itemviews_qtablewidget.cpp | 0 .../code/src_gui_itemviews_qtreewidget.cpp | 0 .../snippets/code/src_gui_kernel_qaction.cpp | 0 .../code/src_gui_kernel_qapplication.cpp | 183 ++++++++++ .../code/src_gui_kernel_qformlayout.cpp | 0 .../snippets/code/src_gui_kernel_qlayout.cpp | 0 .../code/src_gui_kernel_qlayoutitem.cpp | 0 .../code/src_gui_kernel_qshortcut.cpp | 0 .../snippets/code/src_gui_kernel_qwidget.cpp | 0 .../code/src_gui_painting_qdrawutil.cpp | 0 .../snippets/code/src_gui_qproxystyle.cpp | 0 .../snippets/code/src_gui_styles_qstyle.cpp | 0 .../code/src_gui_styles_qstyleoption.cpp | 0 .../snippets/code/src_gui_util_qcompleter.cpp | 0 .../snippets/code/src_gui_util_qundostack.cpp | 0 .../code/src_gui_widgets_qabstractbutton.cpp | 0 .../code/src_gui_widgets_qabstractspinbox.cpp | 0 .../code/src_gui_widgets_qcalendarwidget.cpp | 0 .../code/src_gui_widgets_qcheckbox.cpp | 0 .../code/src_gui_widgets_qdatetimeedit.cpp | 0 .../code/src_gui_widgets_qdockwidget.cpp | 0 .../snippets/code/src_gui_widgets_qframe.cpp | 0 .../code/src_gui_widgets_qgroupbox.cpp | 0 .../snippets/code/src_gui_widgets_qlabel.cpp | 0 .../code/src_gui_widgets_qlineedit.cpp | 0 .../code/src_gui_widgets_qmainwindow.cpp | 0 .../snippets/code/src_gui_widgets_qmenu.cpp | 0 .../code/src_gui_widgets_qmenubar.cpp | 0 .../code/src_gui_widgets_qplaintextedit.cpp | 0 .../code/src_gui_widgets_qpushbutton.cpp | 0 .../code/src_gui_widgets_qradiobutton.cpp | 0 .../code/src_gui_widgets_qrubberband.cpp | 0 .../code/src_gui_widgets_qscrollarea.cpp | 0 .../code/src_gui_widgets_qspinbox.cpp | 0 .../code/src_gui_widgets_qsplashscreen.cpp | 0 .../code/src_gui_widgets_qsplitter.cpp | 0 .../code/src_gui_widgets_qstatusbar.cpp | 0 .../code/src_gui_widgets_qtextbrowser.cpp | 0 .../code/src_gui_widgets_qtextedit.cpp | 0 .../doc}/snippets/customstyle/customstyle.cpp | 0 .../doc}/snippets/customstyle/customstyle.h | 0 .../doc/snippets/customstyle/customstyle.pro | 2 + src/widgets/doc/snippets/customstyle/main.cpp | 54 +++ .../widgets/doc}/snippets/customviewstyle.cpp | 0 .../widgets/doc}/snippets/dialogs/dialogs.cpp | 0 .../widgets/doc}/snippets/filedialogurls.cpp | 0 .../snippets/graphicssceneadditemsnippet.cpp | 0 .../widgets/doc}/snippets/javastyle.cpp | 0 .../widgets/doc}/snippets/layouts/layouts.cpp | 0 .../doc}/snippets/mainwindowsnippet.cpp | 0 .../widgets/doc}/snippets/mdiareasnippets.cpp | 0 .../widgets/doc}/snippets/myscrollarea.cpp | 0 .../snippets/qlistwidget-using/mainwindow.cpp | 0 .../doc}/snippets/qmacnativewidget/main.mm | 0 .../doc}/snippets/qsplashscreen/main.cpp | 0 .../doc}/snippets/qstackedlayout/main.cpp | 0 .../doc}/snippets/qstackedwidget/main.cpp | 0 .../doc}/snippets/qstyleoption/main.cpp | 0 .../doc}/snippets/qstyleplugin/main.cpp | 0 .../qtablewidget-resizing/mainwindow.cpp | 0 .../qtablewidget-using/mainwindow.cpp | 0 .../snippets/qtreewidget-using/mainwindow.cpp | 0 .../mainwindow.cpp | 0 .../doc}/snippets/shareddirmodel/main.cpp | 0 .../doc}/snippets/splitter/splitter.cpp | 0 .../doc}/snippets/splitterhandle/splitter.cpp | 0 .../doc}/snippets/splitterhandle/splitter.h | 0 .../widgets/doc}/snippets/styles/styles.cpp | 0 .../snippets/stylesheet/common-mistakes.cpp | 0 .../textdocument-imagedrop/textedit.cpp | 0 .../widgets/doc}/snippets/timeline/main.cpp | 0 .../doc}/snippets/whatsthis/whatsthis.cpp | 0 .../doc}/snippets/widget-mask/main.cpp | 0 .../widgets/doc}/snippets/widgetdelegate.cpp | 0 .../widgets/doc/src}/qtwidgets.qdoc | 4 +- .../doc/src}/widgets-and-layouts/focus.qdoc | 0 .../src}/widgets-and-layouts/gallery-cde.qdoc | 0 .../gallery-cleanlooks.qdoc | 0 .../src}/widgets-and-layouts/gallery-gtk.qdoc | 0 .../gallery-macintosh.qdoc | 0 .../widgets-and-layouts/gallery-motif.qdoc | 0 .../gallery-plastique.qdoc | 0 .../widgets-and-layouts/gallery-windows.qdoc | 0 .../gallery-windowsvista.qdoc | 0 .../gallery-windowsxp.qdoc | 0 .../doc/src}/widgets-and-layouts/gallery.qdoc | 0 .../doc/src}/widgets-and-layouts/layout.qdoc | 52 +-- .../doc/src}/widgets-and-layouts/styles.qdoc | 26 +- .../src}/widgets-and-layouts/stylesheet.qdoc | 320 +++++++++--------- .../doc/src}/widgets-and-layouts/widgets.qdoc | 0 src/widgets/effects/qgraphicseffect.cpp | 6 +- src/widgets/effects/qpixmapfilter.cpp | 6 +- .../graphicsview/qgraphicsanchorlayout.cpp | 12 +- .../graphicsview/qgraphicsgridlayout.cpp | 2 +- src/widgets/graphicsview/qgraphicsitem.cpp | 48 +-- .../graphicsview/qgraphicsitemanimation.cpp | 2 +- .../graphicsview/qgraphicslinearlayout.cpp | 2 +- .../graphicsview/qgraphicsproxywidget.cpp | 6 +- src/widgets/graphicsview/qgraphicsscene.cpp | 14 +- .../graphicsview/qgraphicssceneevent.cpp | 2 +- src/widgets/graphicsview/qgraphicsview.cpp | 16 +- src/widgets/graphicsview/qgraphicswidget.cpp | 6 +- .../itemviews/qabstractitemdelegate.cpp | 2 +- src/widgets/itemviews/qabstractitemview.cpp | 6 +- src/widgets/itemviews/qdatawidgetmapper.cpp | 6 +- src/widgets/itemviews/qitemdelegate.cpp | 20 +- src/widgets/itemviews/qitemeditorfactory.cpp | 8 +- src/widgets/itemviews/qlistwidget.cpp | 12 +- src/widgets/itemviews/qstandarditemmodel.cpp | 10 +- src/widgets/itemviews/qstyleditemdelegate.cpp | 18 +- src/widgets/itemviews/qtablewidget.cpp | 14 +- src/widgets/itemviews/qtreeview.cpp | 4 +- src/widgets/itemviews/qtreewidget.cpp | 6 +- .../itemviews/qtreewidgetitemiterator.cpp | 2 +- src/widgets/kernel/qaction.cpp | 10 +- src/widgets/kernel/qactiongroup.cpp | 6 +- src/widgets/kernel/qapplication.cpp | 36 +- src/widgets/kernel/qboxlayout.cpp | 24 +- src/widgets/kernel/qformlayout.cpp | 6 +- src/widgets/kernel/qicon.cpp | 10 +- src/widgets/kernel/qlayout.cpp | 4 +- src/widgets/kernel/qlayoutitem.cpp | 2 +- src/widgets/kernel/qshortcut.cpp | 10 +- src/widgets/kernel/qstackedlayout.cpp | 8 +- src/widgets/kernel/qwhatsthis.cpp | 2 +- src/widgets/kernel/qwidget.cpp | 30 +- src/widgets/styles/qdrawutil.cpp | 20 +- src/widgets/styles/qproxystyle.cpp | 2 +- src/widgets/styles/qstyle.cpp | 30 +- src/widgets/styles/qstyleoption.cpp | 8 +- src/widgets/styles/qstylepainter.cpp | 8 +- src/widgets/styles/qstyleplugin.cpp | 6 +- src/widgets/util/qcompleter.cpp | 6 +- src/widgets/util/qundostack.cpp | 12 +- src/widgets/widgets/qabstractbutton.cpp | 6 +- src/widgets/widgets/qabstractscrollarea.cpp | 4 +- src/widgets/widgets/qabstractspinbox.cpp | 4 +- src/widgets/widgets/qcalendarwidget.cpp | 12 +- src/widgets/widgets/qcheckbox.cpp | 2 +- src/widgets/widgets/qdatetimeedit.cpp | 14 +- src/widgets/widgets/qdialogbuttonbox.cpp | 8 +- src/widgets/widgets/qdockwidget.cpp | 2 +- src/widgets/widgets/qframe.cpp | 2 +- src/widgets/widgets/qgroupbox.cpp | 4 +- src/widgets/widgets/qlabel.cpp | 6 +- src/widgets/widgets/qlineedit.cpp | 2 +- .../widgets/qmaccocoaviewcontainer_mac.mm | 2 +- src/widgets/widgets/qmacnativewidget_mac.mm | 4 +- src/widgets/widgets/qmainwindow.cpp | 12 +- src/widgets/widgets/qmdiarea.cpp | 4 +- src/widgets/widgets/qmenu.cpp | 14 +- src/widgets/widgets/qmenubar.cpp | 12 +- src/widgets/widgets/qplaintextedit.cpp | 8 +- src/widgets/widgets/qpushbutton.cpp | 2 +- src/widgets/widgets/qradiobutton.cpp | 2 +- src/widgets/widgets/qrubberband.cpp | 2 +- src/widgets/widgets/qscrollarea.cpp | 2 +- src/widgets/widgets/qspinbox.cpp | 20 +- src/widgets/widgets/qsplashscreen.cpp | 6 +- src/widgets/widgets/qsplitter.cpp | 14 +- src/widgets/widgets/qstackedwidget.cpp | 8 +- src/widgets/widgets/qstatusbar.cpp | 6 +- src/widgets/widgets/qtextbrowser.cpp | 2 +- src/widgets/widgets/qtextedit.cpp | 14 +- 604 files changed, 1281 insertions(+), 714 deletions(-) create mode 100644 src/widgets/doc/images/assistant-toolbar.png create mode 100644 src/widgets/doc/images/buttonbox-gnomelayout-horizontal.png create mode 100644 src/widgets/doc/images/buttonbox-gnomelayout-vertical.png create mode 100644 src/widgets/doc/images/buttonbox-kdelayout-horizontal.png create mode 100644 src/widgets/doc/images/buttonbox-kdelayout-vertical.png create mode 100644 src/widgets/doc/images/buttonbox-mac-modeless-horizontal.png create mode 100644 src/widgets/doc/images/buttonbox-mac-modeless-vertical.png create mode 100644 src/widgets/doc/images/buttonbox-maclayout-horizontal.png create mode 100644 src/widgets/doc/images/buttonbox-maclayout-vertical.png create mode 100644 src/widgets/doc/images/buttonbox-winlayout-horizontal.png create mode 100644 src/widgets/doc/images/buttonbox-winlayout-vertical.png rename {doc/src => src/widgets/doc}/images/cde-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/cde-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/cde-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/cde-dial.png (100%) rename {doc/src => src/widgets/doc}/images/cde-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-frame.png (100%) rename {doc/src => src/widgets/doc}/images/cde-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/cde-label.png (100%) rename {doc/src => src/widgets/doc}/images/cde-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/cde-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/cde-listview.png (100%) rename {doc/src => src/widgets/doc}/images/cde-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/cde-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/cde-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/cde-slider.png (100%) rename {doc/src => src/widgets/doc}/images/cde-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/cde-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/cde-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/cde-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/cde-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/cde-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/cde-treeview.png (100%) create mode 100644 src/widgets/doc/images/checkboxes-exclusive.png create mode 100644 src/widgets/doc/images/checkboxes-non-exclusive.png rename {doc/src => src/widgets/doc}/images/cleanlooks-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-dial.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-frame.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-label.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-listview.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-progressbar.png (100%) create mode 100644 src/widgets/doc/images/cleanlooks-pushbutton-menu.png rename {doc/src => src/widgets/doc}/images/cleanlooks-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-slider.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/cleanlooks-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/designer-stylesheet-options.png (100%) rename {doc/src => src/widgets/doc}/images/designer-stylesheet-usage.png (100%) rename {doc/src => src/widgets/doc}/images/designer-validator-highlighter.png (100%) rename {doc/src => src/widgets/doc}/images/filedialogurls.png (100%) rename {doc/src => src/widgets/doc}/images/frames.png (100%) create mode 100644 src/widgets/doc/images/graphicsview-ellipseitem-pie.png create mode 100644 src/widgets/doc/images/graphicsview-ellipseitem.png rename {doc/src => src/widgets/doc}/images/graphicsview-items.png (100%) rename {doc/src => src/widgets/doc}/images/graphicsview-pathitem.png (100%) rename {doc/src => src/widgets/doc}/images/graphicsview-pixmapitem.png (100%) rename {doc/src => src/widgets/doc}/images/graphicsview-polygonitem.png (100%) rename {doc/src => src/widgets/doc}/images/graphicsview-rectitem.png (100%) rename {doc/src => src/widgets/doc}/images/graphicsview-zorder.png (100%) rename {doc/src => src/widgets/doc}/images/gridlayout.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-dial.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-frame.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-label.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-listview.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-slider.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/gtk-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/branchindicatorimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/button.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/checkboxexample.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/combobox.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/comboboximage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/conceptualpushbuttontree.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/dockwidget.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/dockwidgetimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/groupboximage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/header.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/headerimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/menu.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/menubar.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/menubarimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/menuimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/progressbarimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/rubberband.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/rubberbandimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/scrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/scrollbarimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/sizegrip.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/sizegripimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/slider.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/sliderimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/spinboximage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/tab.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/titlebar.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/titlebarimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/toolbar.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/toolbarimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/toolboximage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/toolbuttonimage.png (100%) rename {doc/src => src/widgets/doc}/images/javastyle/windowstabimage.png (100%) rename {doc/src => src/widgets/doc}/images/licensewizard-flow.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-dial.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-frame.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-label.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-listview.png (100%) create mode 100644 src/widgets/doc/images/macintosh-menu.png rename {doc/src => src/widgets/doc}/images/macintosh-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-slider.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/macintosh-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/mainwindow-docks.png (100%) rename {doc/src => src/widgets/doc}/images/mainwindowlayout.png (100%) create mode 100644 src/widgets/doc/images/mdi-cascade.png create mode 100644 src/widgets/doc/images/mdi-tile.png rename {doc/src => src/widgets/doc}/images/motif-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/motif-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/motif-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/motif-dial.png (100%) rename {doc/src => src/widgets/doc}/images/motif-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-frame.png (100%) rename {doc/src => src/widgets/doc}/images/motif-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/motif-label.png (100%) rename {doc/src => src/widgets/doc}/images/motif-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/motif-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/motif-listview.png (100%) create mode 100644 src/widgets/doc/images/motif-menubar.png rename {doc/src => src/widgets/doc}/images/motif-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/motif-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/motif-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/motif-slider.png (100%) rename {doc/src => src/widgets/doc}/images/motif-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/motif-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/motif-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/motif-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/motif-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/motif-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/motif-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/msgbox1.png (100%) rename {doc/src => src/widgets/doc}/images/msgbox2.png (100%) rename {doc/src => src/widgets/doc}/images/msgbox3.png (100%) rename {doc/src => src/widgets/doc}/images/msgbox4.png (100%) rename {doc/src => src/widgets/doc}/images/pangesture.png (100%) rename {doc/src => src/widgets/doc}/images/parent-child-widgets.png (100%) rename {doc/src => src/widgets/doc}/images/pinchgesture.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-colordialog.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-dial.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-fontdialog.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-frame.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-label.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-listview.png (100%) create mode 100644 src/widgets/doc/images/plastique-menu.png create mode 100644 src/widgets/doc/images/plastique-menubar.png rename {doc/src => src/widgets/doc}/images/plastique-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-progressdialog.png (100%) create mode 100644 src/widgets/doc/images/plastique-pushbutton-menu.png rename {doc/src => src/widgets/doc}/images/plastique-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-radiobutton.png (100%) create mode 100644 src/widgets/doc/images/plastique-sizegrip.png rename {doc/src => src/widgets/doc}/images/plastique-slider.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-statusbar.png (100%) create mode 100644 src/widgets/doc/images/plastique-tabbar-truncated.png create mode 100644 src/widgets/doc/images/plastique-tabbar.png rename {doc/src => src/widgets/doc}/images/plastique-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/plastique-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/progressBar-stylesheet.png (100%) rename {doc/src => src/widgets/doc}/images/progressBar2-stylesheet.png (100%) rename {doc/src => src/widgets/doc}/images/propagation-custom.png (100%) rename {doc/src => src/widgets/doc}/images/propagation-standard.png (100%) rename {doc/src => src/widgets/doc}/images/qcalendarwidget-grid.png (100%) rename {doc/src => src/widgets/doc}/images/qcalendarwidget-maximum.png (100%) rename {doc/src => src/widgets/doc}/images/qcalendarwidget-minimum.png (100%) rename {doc/src => src/widgets/doc}/images/qcolumnview.png (100%) rename {doc/src => src/widgets/doc}/images/qdesktopwidget.png (100%) create mode 100644 src/widgets/doc/images/qformlayout-kde.png create mode 100644 src/widgets/doc/images/qformlayout-mac.png create mode 100644 src/widgets/doc/images/qformlayout-qpe.png create mode 100644 src/widgets/doc/images/qformlayout-win.png rename {doc/src => src/widgets/doc}/images/qformlayout-with-6-children.png (100%) rename {doc/src => src/widgets/doc}/images/qgraphicsproxywidget-embed.png (100%) rename {doc/src => src/widgets/doc}/images/qgridlayout-with-5-children.png (100%) rename {doc/src => src/widgets/doc}/images/qhboxlayout-with-5-children.png (100%) rename {doc/src => src/widgets/doc}/images/qmdisubwindowlayout.png (100%) create mode 100644 src/widgets/doc/images/qscrollarea-noscrollbars.png create mode 100644 src/widgets/doc/images/qscrollarea-onescrollbar.png create mode 100644 src/widgets/doc/images/qscrollarea-twoscrollbars.png rename {doc/src => src/widgets/doc}/images/qscrollbar-picture.png (100%) create mode 100644 src/widgets/doc/images/qscrollbar-values.png create mode 100644 src/widgets/doc/images/qspinbox-plusminus.png create mode 100644 src/widgets/doc/images/qspinbox-updown.png rename {doc/src => src/widgets/doc}/images/qstyle-comboboxes.png (100%) rename {doc/src => src/widgets/doc}/images/qstyleoptiontoolbar-position.png (100%) create mode 100644 src/widgets/doc/images/qtableview-resized.png create mode 100644 src/widgets/doc/images/qtwizard-aero1.png create mode 100644 src/widgets/doc/images/qtwizard-aero2.png create mode 100644 src/widgets/doc/images/qtwizard-classic1.png create mode 100644 src/widgets/doc/images/qtwizard-classic2.png create mode 100644 src/widgets/doc/images/qtwizard-mac1.png create mode 100644 src/widgets/doc/images/qtwizard-mac2.png rename {doc/src => src/widgets/doc}/images/qtwizard-macpage.png (100%) create mode 100644 src/widgets/doc/images/qtwizard-modern1.png create mode 100644 src/widgets/doc/images/qtwizard-modern2.png rename {doc/src => src/widgets/doc}/images/qtwizard-nonmacpage.png (100%) rename {doc/src => src/widgets/doc}/images/qundoview.png (100%) rename {doc/src => src/widgets/doc}/images/qvboxlayout-with-5-children.png (100%) create mode 100644 src/widgets/doc/images/simpleanchorlayout-example.png rename {doc/src => src/widgets/doc}/images/stylesheet-border-image-normal.png (100%) create mode 100644 src/widgets/doc/images/stylesheet-border-image-stretched.png create mode 100644 src/widgets/doc/images/stylesheet-border-image-wrong.png rename {doc/src => src/widgets/doc}/images/stylesheet-boxmodel.png (100%) create mode 100644 src/widgets/doc/images/stylesheet-branch-closed.png create mode 100644 src/widgets/doc/images/stylesheet-branch-end.png create mode 100644 src/widgets/doc/images/stylesheet-branch-more.png create mode 100644 src/widgets/doc/images/stylesheet-branch-open.png create mode 100644 src/widgets/doc/images/stylesheet-coffee-cleanlooks.png create mode 100644 src/widgets/doc/images/stylesheet-coffee-xp.png create mode 100644 src/widgets/doc/images/stylesheet-pagefold-mac.png rename {doc/src => src/widgets/doc}/images/stylesheet-pagefold.png (100%) rename {doc/src => src/widgets/doc}/images/stylesheet-redbutton1.png (100%) rename {doc/src => src/widgets/doc}/images/stylesheet-redbutton2.png (100%) rename {doc/src => src/widgets/doc}/images/stylesheet-redbutton3.png (100%) rename {doc/src => src/widgets/doc}/images/stylesheet-scrollbar1.png (100%) rename {doc/src => src/widgets/doc}/images/stylesheet-scrollbar2.png (100%) rename {doc/src => src/widgets/doc}/images/stylesheet-treeview.png (100%) create mode 100644 src/widgets/doc/images/stylesheet-vline.png rename {doc/src => src/widgets/doc}/images/swipegesture.png (100%) rename {doc/src => src/widgets/doc}/images/system-tray.png (100%) rename {doc/src => src/widgets/doc}/images/tabWidget-stylesheet1.png (100%) rename {doc/src => src/widgets/doc}/images/tabWidget-stylesheet2.png (100%) rename {doc/src => src/widgets/doc}/images/tabWidget-stylesheet3.png (100%) rename {doc/src => src/widgets/doc}/images/tableWidget-stylesheet.png (100%) rename {doc/src => src/widgets/doc}/images/widgetdelegate.png (100%) rename {doc/src => src/widgets/doc}/images/windows-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/windows-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/windows-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/windows-dial.png (100%) rename {doc/src => src/widgets/doc}/images/windows-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-frame.png (100%) rename {doc/src => src/widgets/doc}/images/windows-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/windows-label.png (100%) rename {doc/src => src/widgets/doc}/images/windows-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/windows-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/windows-listview.png (100%) rename {doc/src => src/widgets/doc}/images/windows-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/windows-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/windows-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/windows-slider.png (100%) rename {doc/src => src/widgets/doc}/images/windows-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/windows-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/windows-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/windows-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/windows-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/windows-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/windows-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-dial.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-frame.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-label.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-listview.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-slider.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/windowsvista-treeview.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-calendarwidget.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-checkbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-combobox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-dateedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-datetimeedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-dial.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-doublespinbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-fontcombobox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-frame.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-groupbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-horizontalscrollbar.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-label.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-lcdnumber.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-lineedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-listview.png (100%) create mode 100644 src/widgets/doc/images/windowsxp-menu.png rename {doc/src => src/widgets/doc}/images/windowsxp-progressbar.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-pushbutton.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-radiobutton.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-slider.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-spinbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-tableview.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-tabwidget.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-textedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-timeedit.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-toolbox.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-toolbutton.png (100%) rename {doc/src => src/widgets/doc}/images/windowsxp-treeview.png (100%) create mode 100644 src/widgets/doc/qtwidgets.qdocconf rename {doc/src => src/widgets/doc}/snippets/code/doc_src_layout.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/doc_src_qt4-styles.cpp (100%) create mode 100644 src/widgets/doc/snippets/code/doc_src_qtwidgets.cpp create mode 100644 src/widgets/doc/snippets/code/doc_src_qtwidgets.pro rename {doc/src => src/widgets/doc}/snippets/code/doc_src_styles.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/doc_src_stylesheet.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/doc_src_stylesheet.qdoc (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_dialogs_qfiledialog.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_dialogs_qfontdialog.cpp (100%) create mode 100644 src/widgets/doc/snippets/code/src_gui_dialogs_qmessagebox.cpp rename {doc/src => src/widgets/doc}/snippets/code/src_gui_dialogs_qwizard.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_effects_qgraphicseffect.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicsgridlayout.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicsitem.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicslinearlayout.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicsproxywidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicsscene.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicssceneevent.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicsview.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_graphicsview_qgraphicswidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_image_qicon.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_image_qpixmapfilter.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_itemviews_qabstractitemview.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_itemviews_qdatawidgetmapper.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_itemviews_qitemeditorfactory.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_itemviews_qstandarditemmodel.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_itemviews_qtablewidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_itemviews_qtreewidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_kernel_qaction.cpp (100%) create mode 100644 src/widgets/doc/snippets/code/src_gui_kernel_qapplication.cpp rename {doc/src => src/widgets/doc}/snippets/code/src_gui_kernel_qformlayout.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_kernel_qlayout.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_kernel_qlayoutitem.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_kernel_qshortcut.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_kernel_qwidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_painting_qdrawutil.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_qproxystyle.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_styles_qstyle.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_styles_qstyleoption.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_util_qcompleter.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_util_qundostack.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qabstractbutton.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qabstractspinbox.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qcalendarwidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qcheckbox.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qdatetimeedit.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qdockwidget.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qframe.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qgroupbox.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qlabel.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qlineedit.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qmainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qmenu.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qmenubar.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qplaintextedit.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qpushbutton.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qradiobutton.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qrubberband.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qscrollarea.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qspinbox.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qsplashscreen.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qsplitter.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qstatusbar.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qtextbrowser.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/code/src_gui_widgets_qtextedit.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/customstyle/customstyle.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/customstyle/customstyle.h (100%) create mode 100644 src/widgets/doc/snippets/customstyle/customstyle.pro create mode 100644 src/widgets/doc/snippets/customstyle/main.cpp rename {doc/src => src/widgets/doc}/snippets/customviewstyle.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/dialogs/dialogs.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/filedialogurls.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/graphicssceneadditemsnippet.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/javastyle.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/layouts/layouts.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/mainwindowsnippet.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/mdiareasnippets.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/myscrollarea.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qlistwidget-using/mainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qmacnativewidget/main.mm (100%) rename {doc/src => src/widgets/doc}/snippets/qsplashscreen/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qstackedlayout/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qstackedwidget/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qstyleoption/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qstyleplugin/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qtablewidget-resizing/mainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qtablewidget-using/mainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qtreewidget-using/mainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/qtreewidgetitemiterator-using/mainwindow.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/shareddirmodel/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/splitter/splitter.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/splitterhandle/splitter.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/splitterhandle/splitter.h (100%) rename {doc/src => src/widgets/doc}/snippets/styles/styles.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/stylesheet/common-mistakes.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/textdocument-imagedrop/textedit.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/timeline/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/whatsthis/whatsthis.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/widget-mask/main.cpp (100%) rename {doc/src => src/widgets/doc}/snippets/widgetdelegate.cpp (100%) rename {doc/src/widgets => src/widgets/doc/src}/qtwidgets.qdoc (90%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/focus.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-cde.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-cleanlooks.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-gtk.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-macintosh.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-motif.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-plastique.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-windows.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-windowsvista.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery-windowsxp.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/gallery.qdoc (100%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/layout.qdoc (91%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/styles.qdoc (99%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/stylesheet.qdoc (92%) rename {doc/src/widgets => src/widgets/doc/src}/widgets-and-layouts/widgets.qdoc (100%) diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp index d7a8f5dc21d..f034590ccb8 100644 --- a/src/widgets/dialogs/qcolordialog.cpp +++ b/src/widgets/dialogs/qcolordialog.cpp @@ -1717,7 +1717,7 @@ QColor QColorDialog::currentColor() const } /*! - Returns the color that the user selected by clicking the \gui{OK} + Returns the color that the user selected by clicking the \uicontrol{OK} or equivalent button. \note This color is not always the same as the color held by the @@ -1795,7 +1795,7 @@ QColorDialog::ColorDialogOptions QColorDialog::options() const of a color dialog. \value ShowAlphaChannel Allow the user to select the alpha component of a color. - \value NoButtons Don't display \gui{OK} and \gui{Cancel} buttons. (Useful for "live dialogs".) + \value NoButtons Don't display \uicontrol{OK} and \uicontrol{Cancel} buttons. (Useful for "live dialogs".) \value DontUseNativeDialog Use Qt's standard color dialog on the Mac instead of Apple's native color panel. @@ -1819,7 +1819,7 @@ bool QColorDialogPrivate::sharedColorPanelAvailable = true; /*! \fn void QColorDialog::colorSelected(const QColor &color); - This signal is emitted just after the user has clicked \gui{OK} to + This signal is emitted just after the user has clicked \uicontrol{OK} to select a color to use. The chosen color is specified by \a color. \sa color, currentColorChanged() @@ -1933,7 +1933,7 @@ QColor QColorDialog::getColor(const QColor &initial, QWidget *parent, const QStr initially set to \a initial. The dialog is a child of \a parent. If \a ok is non-null, \e *\a ok is set to true if the user clicked - \gui{OK}, and to false if the user clicked Cancel. + \uicontrol{OK}, and to false if the user clicked Cancel. If the user clicks Cancel, the \a initial value is returned. diff --git a/src/widgets/dialogs/qdialog.cpp b/src/widgets/dialogs/qdialog.cpp index 718d64bd27f..9410a9b62b8 100644 --- a/src/widgets/dialogs/qdialog.cpp +++ b/src/widgets/dialogs/qdialog.cpp @@ -181,8 +181,8 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const exec() function. When the user closes the dialog, exec() will provide a useful \link #return return value\endlink. Typically, to get the dialog to close and return the appropriate value, we - connect a default button, e.g. \gui OK, to the accept() slot and a - \gui Cancel button to the reject() slot. + connect a default button, e.g. \uicontrol OK, to the accept() slot and a + \uicontrol Cancel button to the reject() slot. Alternatively you can call the done() slot with \c Accepted or \c Rejected. @@ -239,7 +239,7 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const partial dialog that shows the most commonly used options, and a full dialog that shows all the options. Typically an extensible dialog will initially appear as a partial dialog, but with a - \gui More toggle button. If the user presses the \gui More button down, + \uicontrol More toggle button. If the user presses the \uicontrol More button down, the dialog is expanded. The \l{Extension Example} shows how to achieve extensible dialogs using Qt. @@ -247,8 +247,8 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const \section1 Return Value (Modal Dialogs) Modal dialogs are often used in situations where a return value is - required, e.g. to indicate whether the user pressed \gui OK or - \gui Cancel. A dialog can be closed by calling the accept() or the + required, e.g. to indicate whether the user pressed \uicontrol OK or + \uicontrol Cancel. A dialog can be closed by calling the accept() or the reject() slots, and exec() will return \c Accepted or \c Rejected as appropriate. The exec() call returns the result of the dialog. The result is also available from result() if the dialog has not @@ -265,11 +265,11 @@ QVariant QDialogPrivate::styleHint(QPlatformDialogHelper::StyleHint hint) const A modal dialog: - \snippet doc/src/snippets/dialogs/dialogs.cpp 1 + \snippet dialogs/dialogs.cpp 1 A modeless dialog: - \snippet doc/src/snippets/dialogs/dialogs.cpp 0 + \snippet dialogs/dialogs.cpp 0 \sa QDialogButtonBox, QTabWidget, QWidget, QProgressDialog, {fowler}{GUI Design Handbook: Dialogs, Standard}, {Extension Example}, diff --git a/src/widgets/dialogs/qfiledialog.cpp b/src/widgets/dialogs/qfiledialog.cpp index 3908daec9c7..43bb1643669 100644 --- a/src/widgets/dialogs/qfiledialog.cpp +++ b/src/widgets/dialogs/qfiledialog.cpp @@ -108,7 +108,7 @@ Q_WIDGETS_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_h functions. On Windows, Mac OS X, KDE and GNOME, these static functions will call the native file dialog when possible. - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 0 + \snippet code/src_gui_dialogs_qfiledialog.cpp 0 In the above example, a modal QFileDialog is created using a static function. The dialog initially displays the contents of the "/home/jana" @@ -119,13 +119,13 @@ Q_WIDGETS_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_h If you want to use multiple filters, separate each one with \e two semicolons. For example: - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 1 + \snippet code/src_gui_dialogs_qfiledialog.cpp 1 You can create your own QFileDialog without using the static functions. By calling setFileMode(), you can specify what the user must select in the dialog: - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 2 + \snippet code/src_gui_dialogs_qfiledialog.cpp 2 In the above example, the mode of the file dialog is set to AnyFile, meaning that the user can select any file, or even specify a @@ -138,7 +138,7 @@ Q_WIDGETS_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_h this indicates what types of objects the user is expected to select. Use setNameFilter() to set the dialog's file filter. For example: - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 3 + \snippet code/src_gui_dialogs_qfiledialog.cpp 3 In the above example, the filter is set to \c{"Images (*.png *.xpm *.jpg)"}, this means that only files with the extension \c png, \c xpm, @@ -154,12 +154,12 @@ Q_WIDGETS_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_h information alongside each name, such as the file size and modification date. Set the mode with setViewMode(): - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 4 + \snippet code/src_gui_dialogs_qfiledialog.cpp 4 The last important function you will need to use when creating your own file dialog is selectedFiles(). - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 5 + \snippet code/src_gui_dialogs_qfiledialog.cpp 5 In the above example, a modal file dialog is created and shown. If the user clicked OK, the file they selected is put in \c fileName. @@ -377,7 +377,7 @@ QFileDialog::~QFileDialog() For instance: - \snippet doc/src/snippets/filedialogurls.cpp 0 + \snippet filedialogurls.cpp 0 The file dialog will then look like this: @@ -1100,7 +1100,7 @@ QStringList qt_make_filter_list(const QString &filter) text contained in the parentheses is used as the filter. This means that these calls are all equivalent: - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 6 + \snippet code/src_gui_dialogs_qfiledialog.cpp 6 \sa setNameFilters() */ @@ -1156,7 +1156,7 @@ QStringList qt_strip_filters(const QStringList &filters) Sets the \a filters used in the file dialog. - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 7 + \snippet code/src_gui_dialogs_qfiledialog.cpp 7 */ void QFileDialog::setNameFilters(const QStringList &filters) { @@ -1707,7 +1707,7 @@ extern QString qt_win_get_existing_directory(const QFileDialogArgs &args); This is a convenience static function that returns an existing file selected by the user. If the user presses Cancel, it returns a null string. - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 8 + \snippet code/src_gui_dialogs_qfiledialog.cpp 8 The function creates a modal file dialog with the given \a parent widget. If \a parent is not 0, the dialog will be shown centered over the parent @@ -1789,7 +1789,7 @@ QString QFileDialog::getOpenFileName(QWidget *parent, This is a convenience static function that will return one or more existing files selected by the user. - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 9 + \snippet code/src_gui_dialogs_qfiledialog.cpp 9 This function creates a modal file dialog with the given \a parent widget. If \a parent is not 0, the dialog will be shown centered over the parent @@ -1826,7 +1826,7 @@ QString QFileDialog::getOpenFileName(QWidget *parent, \note If you want to iterate over the list of files, you should iterate over a copy. For example: - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 10 + \snippet code/src_gui_dialogs_qfiledialog.cpp 10 \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the @@ -1878,7 +1878,7 @@ QStringList QFileDialog::getOpenFileNames(QWidget *parent, \a parent is not 0, the dialog will be shown centered over the parent widget. - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 11 + \snippet code/src_gui_dialogs_qfiledialog.cpp 11 The file dialog's working directory will be set to \a dir. If \a dir includes a file name, the file will be selected. Only files that match the @@ -1962,7 +1962,7 @@ QString QFileDialog::getSaveFileName(QWidget *parent, This is a convenience static function that will return an existing directory selected by the user. - \snippet doc/src/snippets/code/src_gui_dialogs_qfiledialog.cpp 12 + \snippet code/src_gui_dialogs_qfiledialog.cpp 12 This function creates a modal file dialog with the given \a parent widget. If \a parent is not 0, the dialog will be shown centered over the parent diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 40cc100c532..06733a89325 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -95,16 +95,16 @@ QT_BEGIN_NAMESPACE A directory model that displays the contents of a default directory is usually constructed with a parent object: - \snippet doc/src/snippets/shareddirmodel/main.cpp 2 + \snippet shareddirmodel/main.cpp 2 A tree view can be used to display the contents of the model - \snippet doc/src/snippets/shareddirmodel/main.cpp 4 + \snippet shareddirmodel/main.cpp 4 and the contents of a particular directory can be displayed by setting the tree view's root index: - \snippet doc/src/snippets/shareddirmodel/main.cpp 7 + \snippet shareddirmodel/main.cpp 7 The view's root index can be used to control how much of a hierarchical model is displayed. QDirModel provides a convenience diff --git a/src/widgets/dialogs/qfontdialog.cpp b/src/widgets/dialogs/qfontdialog.cpp index b267f674228..23fac318221 100644 --- a/src/widgets/dialogs/qfontdialog.cpp +++ b/src/widgets/dialogs/qfontdialog.cpp @@ -122,10 +122,10 @@ static const Qt::WindowFlags DefaultWindowFlags = Examples: - \snippet doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp 0 + \snippet code/src_gui_dialogs_qfontdialog.cpp 0 The dialog can also be used to set a widget's font directly: - \snippet doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp 1 + \snippet code/src_gui_dialogs_qfontdialog.cpp 1 If the user clicks OK the font they chose will be used for myWidget, and if they click Cancel the original font is used. @@ -345,20 +345,20 @@ QFontDialog::~QFontDialog() /*! Executes a modal font dialog and returns a font. - If the user clicks \gui OK, the selected font is returned. If the user - clicks \gui Cancel, the \a initial font is returned. + If the user clicks \uicontrol OK, the selected font is returned. If the user + clicks \uicontrol Cancel, the \a initial font is returned. The dialog is constructed with the given \a parent and the options specified in \a options. \a title is shown as the window title of the dialog and \a initial is the initially selected font. If the \a ok parameter is not-null, - the value it refers to is set to true if the user clicks \gui OK, and set to - false if the user clicks \gui Cancel. + the value it refers to is set to true if the user clicks \uicontrol OK, and set to + false if the user clicks \uicontrol Cancel. Examples: - \snippet doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp 2 + \snippet code/src_gui_dialogs_qfontdialog.cpp 2 The dialog can also be used to set a widget's font directly: - \snippet doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp 3 + \snippet code/src_gui_dialogs_qfontdialog.cpp 3 In this example, if the user clicks OK the font they chose will be used, and if they click Cancel the original font is used. @@ -377,16 +377,16 @@ QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent, cons Executes a modal font dialog and returns a font. - If the user clicks \gui OK, the selected font is returned. If the user - clicks \gui Cancel, the Qt default font is returned. + If the user clicks \uicontrol OK, the selected font is returned. If the user + clicks \uicontrol Cancel, the Qt default font is returned. The dialog is constructed with the given \a parent. If the \a ok parameter is not-null, the value it refers to is set - to true if the user clicks \gui OK, and false if the user clicks - \gui Cancel. + to true if the user clicks \uicontrol OK, and false if the user clicks + \uicontrol Cancel. Example: - \snippet doc/src/snippets/code/src_gui_dialogs_qfontdialog.cpp 4 + \snippet code/src_gui_dialogs_qfontdialog.cpp 4 \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog @@ -829,7 +829,7 @@ QFont QFontDialog::currentFont() const } /*! - Returns the font that the user selected by clicking the \gui{OK} + Returns the font that the user selected by clicking the \uicontrol{OK} or equivalent button. \note This font is not always the same as the font held by the @@ -849,7 +849,7 @@ QFont QFontDialog::selectedFont() const This enum specifies various options that affect the look and feel of a font dialog. - \value NoButtons Don't display \gui{OK} and \gui{Cancel} buttons. (Useful for "live dialogs".) + \value NoButtons Don't display \uicontrol{OK} and \uicontrol{Cancel} buttons. (Useful for "live dialogs".) \value DontUseNativeDialog Use Qt's standard font dialog on the Mac instead of Apple's native font panel. (Currently, the native dialog is never used, but this is likely to change in future Qt releases.) diff --git a/src/widgets/dialogs/qinputdialog.cpp b/src/widgets/dialogs/qinputdialog.cpp index 737d6bb4675..13be3fcbe42 100644 --- a/src/widgets/dialogs/qinputdialog.cpp +++ b/src/widgets/dialogs/qinputdialog.cpp @@ -442,9 +442,9 @@ void QInputDialogPrivate::_q_currentRowChanged(const QModelIndex &newIndex, getDouble(), and getItem(). All the functions can be used in a similar way, for example: - \snippet examples/dialogs/standarddialogs/dialog.cpp 3 + \snippet dialogs/standarddialogs/dialog.cpp 3 - The \c ok variable is set to true if the user clicks \gui OK; otherwise it + The \c ok variable is set to true if the user clicks \uicontrol OK; otherwise it is set to false. \img inputdialogs.png Input Dialogs @@ -576,7 +576,7 @@ QString QInputDialog::labelText() const This enum specifies various options that affect the look and feel of an input dialog. - \value NoButtons Don't display \gui{OK} and \gui{Cancel} buttons. (Useful for "live dialogs".) + \value NoButtons Don't display \uicontrol{OK} and \uicontrol{Cancel} buttons. (Useful for "live dialogs".) \value UseListViewForComboBoxItems Use a QListView rather than a non-editable QComboBox for displaying the items set with setComboBoxItems(). @@ -1133,7 +1133,7 @@ void QInputDialog::done(int result) edit widget if an input method is active. If \a ok is nonnull \e *\a ok will be set to true if the user pressed - \gui OK and to false if the user pressed \gui Cancel. The dialog's parent + \uicontrol OK and to false if the user pressed \uicontrol Cancel. The dialog's parent is \a parent. The dialog will be modal and uses the specified widget \a flags. @@ -1142,7 +1142,7 @@ void QInputDialog::done(int result) Use this static function like this: - \snippet examples/dialogs/standarddialogs/dialog.cpp 3 + \snippet dialogs/standarddialogs/dialog.cpp 3 \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the @@ -1185,8 +1185,8 @@ QString QInputDialog::getText(QWidget *parent, const QString &title, const QStri \a step is the amount by which the values change as the user presses the arrow buttons to increment or decrement the value. - If \a ok is nonnull *\a ok will be set to true if the user pressed \gui OK - and to false if the user pressed \gui Cancel. The dialog's parent is + If \a ok is nonnull *\a ok will be set to true if the user pressed \uicontrol OK + and to false if the user pressed \uicontrol Cancel. The dialog's parent is \a parent. The dialog will be modal and uses the widget \a flags. On success, this function returns the integer which has been entered by the @@ -1194,7 +1194,7 @@ QString QInputDialog::getText(QWidget *parent, const QString &title, const QStri Use this static function like this: - \snippet examples/dialogs/standarddialogs/dialog.cpp 0 + \snippet dialogs/standarddialogs/dialog.cpp 0 \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the @@ -1234,8 +1234,8 @@ int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &l \a min and \a max are the minimum and maximum values the user may choose. \a decimals is the maximum number of decimal places the number may have. - If \a ok is nonnull, *\a ok will be set to true if the user pressed \gui OK - and to false if the user pressed \gui Cancel. The dialog's parent is + If \a ok is nonnull, *\a ok will be set to true if the user pressed \uicontrol OK + and to false if the user pressed \uicontrol Cancel. The dialog's parent is \a parent. The dialog will be modal and uses the widget \a flags. This function returns the floating point number which has been entered by @@ -1243,7 +1243,7 @@ int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &l Use this static function like this: - \snippet examples/dialogs/standarddialogs/dialog.cpp 1 + \snippet dialogs/standarddialogs/dialog.cpp 1 \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the @@ -1289,7 +1289,7 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr user may only select one of the existing items. If \a ok is nonnull \e *\a ok will be set to true if the user pressed - \gui OK and to false if the user pressed \gui Cancel. The dialog's parent + \uicontrol OK and to false if the user pressed \uicontrol Cancel. The dialog's parent is \a parent. The dialog will be modal and uses the widget \a flags. This function returns the text of the current item, or if \a editable is @@ -1297,7 +1297,7 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr Use this static function like this: - \snippet examples/dialogs/standarddialogs/dialog.cpp 2 + \snippet dialogs/standarddialogs/dialog.cpp 2 \warning Do not delete \a parent during the execution of the dialog. If you want to do this, you should create the dialog yourself using one of the @@ -1379,7 +1379,7 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri \fn void QInputDialog::doubleValueSelected(double value) This signal is emitted whenever the user selects a double value by - accepting the dialog; for example, by clicking the \gui{OK} button. + accepting the dialog; for example, by clicking the \uicontrol{OK} button. The selected value is specified by \a value. This signal is only relevant when the input dialog is used in @@ -1400,7 +1400,7 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri \fn void QInputDialog::intValueSelected(int value) This signal is emitted whenever the user selects a integer value by - accepting the dialog; for example, by clicking the \gui{OK} button. + accepting the dialog; for example, by clicking the \uicontrol{OK} button. The selected value is specified by \a value. This signal is only relevant when the input dialog is used in @@ -1421,7 +1421,7 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri \fn void QInputDialog::textValueSelected(const QString &text) This signal is emitted whenever the user selects a text string by - accepting the dialog; for example, by clicking the \gui{OK} button. + accepting the dialog; for example, by clicking the \uicontrol{OK} button. The selected string is specified by \a text. This signal is only relevant when the input dialog is used in diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 92915b1bb1b..5c1a2a4a64a 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -498,9 +498,9 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) the message. The simplest configuration is to set only the \l{QMessageBox::text} {message text} property. - \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 5 + \snippet code/src_gui_dialogs_qmessagebox.cpp 5 - The user must click the \gui{OK} button to dismiss the message + The user must click the \uicontrol{OK} button to dismiss the message box. The rest of the GUI is blocked until the message box is dismissed. @@ -514,13 +514,13 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) responses. The buttons are specified by combining values from StandardButtons using the bitwise OR operator. The display order for the buttons is platform-dependent. For example, on Windows, - \gui{Save} is displayed to the left of \gui{Cancel}, whereas on + \uicontrol{Save} is displayed to the left of \uicontrol{Cancel}, whereas on Mac OS, the order is reversed. Mark one of your standard buttons to be your \l{QMessageBox::defaultButton()} {default button}. - \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 6 + \snippet code/src_gui_dialogs_qmessagebox.cpp 6 This is the approach recommended in the \l{http://developer.apple.com/library/mac/documentation/UserExperience/Conceptual/AppleHIGuidelines/Windows/Windows.html#//apple_ref/doc/uid/20000961-BABCAJID} @@ -534,16 +534,16 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) The exec() slot returns the StandardButtons value of the button that was clicked. - \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 7 + \snippet code/src_gui_dialogs_qmessagebox.cpp 7 To give the user more information to help him answer the question, set the \l{QMessageBox::detailedText} {detailed text} property. If the \l{QMessageBox::detailedText} {detailed text} property is set, - the \gui{Show Details...} button will be shown. + the \uicontrol{Show Details...} button will be shown. \image msgbox3.png - Clicking the \gui{Show Details...} button displays the detailed text. + Clicking the \uicontrol{Show Details...} button displays the detailed text. \image msgbox4.png @@ -632,7 +632,7 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) Static functions are available for creating information(), question(), warning(), and critical() message boxes. - \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 0 + \snippet code/src_gui_dialogs_qmessagebox.cpp 0 The \l{dialogs/standarddialogs}{Standard Dialogs} example shows how to use QMessageBox and the other built-in Qt dialogs. @@ -647,7 +647,7 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) platform). You can test the value of clickedButton() after calling exec(). For example, - \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 2 + \snippet code/src_gui_dialogs_qmessagebox.cpp 2 \section1 Default and Escape Keys @@ -1028,7 +1028,7 @@ void QMessageBoxPrivate::detectEscapeButton() Example: - \snippet doc/src/snippets/code/src_gui_dialogs_qmessagebox.cpp 3 + \snippet code/src_gui_dialogs_qmessagebox.cpp 3 \sa standardButton(), button() */ @@ -1707,7 +1707,7 @@ void QMessageBox::about(QWidget *parent, const QString &title, const QString &te and centered over \a parent (if \a parent is not 0). The message includes the version number of Qt being used by the application. - This is useful for inclusion in the \gui Help menu of an application, + This is useful for inclusion in the \uicontrol Help menu of an application, as shown in the \l{mainwindows/menus}{Menus} example. QApplication provides this functionality as a slot. @@ -1964,7 +1964,7 @@ void QMessageBoxPrivate::retranslateStrings() to make it the cancel or close button (clicked when \key Esc is pressed). - \snippet doc/src/snippets/dialogs/dialogs.cpp 2 + \snippet dialogs/dialogs.cpp 2 The message box is an \l{Qt::ApplicationModal} {application modal} dialog box. diff --git a/src/widgets/dialogs/qprogressdialog.cpp b/src/widgets/dialogs/qprogressdialog.cpp index 350fb57e20c..97e628e96bc 100644 --- a/src/widgets/dialogs/qprogressdialog.cpp +++ b/src/widgets/dialogs/qprogressdialog.cpp @@ -244,7 +244,7 @@ void QProgressDialogPrivate::_q_disconnectOnClose() to use for the programmer. Do the operation in a loop, call \l setValue() at intervals, and check for cancellation with wasCanceled(). For example: - \snippet doc/src/snippets/dialogs/dialogs.cpp 3 + \snippet dialogs/dialogs.cpp 3 A modeless progress dialog is suitable for operations that take place in the background, where the user is able to interact with the @@ -257,11 +257,11 @@ void QProgressDialogPrivate::_q_disconnectOnClose() canceled() signal to a slot that stops the operation, and call \l setValue() at intervals. For example: - \snippet doc/src/snippets/dialogs/dialogs.cpp 4 + \snippet dialogs/dialogs.cpp 4 \codeline - \snippet doc/src/snippets/dialogs/dialogs.cpp 5 + \snippet dialogs/dialogs.cpp 5 \codeline - \snippet doc/src/snippets/dialogs/dialogs.cpp 6 + \snippet dialogs/dialogs.cpp 6 In both modes the progress dialog may be customized by replacing the child widgets with custom widgets by using setLabel(), diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp index ac19ec8d22e..36327741c8d 100644 --- a/src/widgets/dialogs/qwizard.cpp +++ b/src/widgets/dialogs/qwizard.cpp @@ -1809,17 +1809,17 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) \l{dialogs/classwizard}{Class Wizard} and \l{dialogs/licensewizard}{License Wizard}. - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 1 - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 3 + \snippet dialogs/trivialwizard/trivialwizard.cpp 1 + \snippet dialogs/trivialwizard/trivialwizard.cpp 3 \dots - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 4 + \snippet dialogs/trivialwizard/trivialwizard.cpp 4 \codeline - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 5 - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 7 + \snippet dialogs/trivialwizard/trivialwizard.cpp 5 + \snippet dialogs/trivialwizard/trivialwizard.cpp 7 \dots - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 8 + \snippet dialogs/trivialwizard/trivialwizard.cpp 8 \codeline - \snippet examples/dialogs/trivialwizard/trivialwizard.cpp 10 + \snippet dialogs/trivialwizard/trivialwizard.cpp 10 \section1 Wizard Look and Feel @@ -1856,19 +1856,19 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) In addition to the wizard style, there are several options that control the look and feel of the wizard. These can be set using setOption() or setOptions(). For example, HaveHelpButton makes - QWizard show a \gui Help button along with the other wizard + QWizard show a \uicontrol Help button along with the other wizard buttons. You can even change the order of the wizard buttons to any arbitrary order using setButtonLayout(), and you can add up to - three custom buttons (e.g., a \gui Print button) to the button + three custom buttons (e.g., a \uicontrol Print button) to the button row. This is achieved by calling setButton() or setButtonText() with CustomButton1, CustomButton2, or CustomButton3 to set up the button, and by enabling the HaveCustomButton1, HaveCustomButton2, or HaveCustomButton3 options. Whenever the user clicks a custom button, customButtonClicked() is emitted. For example: - \snippet examples/dialogs/licensewizard/licensewizard.cpp 29 + \snippet dialogs/licensewizard/licensewizard.cpp 29 \section1 Elements of a Wizard Page @@ -1936,12 +1936,12 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) To register a field, call QWizardPage::registerField() field. For example: - \snippet examples/dialogs/classwizard/classwizard.cpp 8 + \snippet dialogs/classwizard/classwizard.cpp 8 \dots - \snippet examples/dialogs/classwizard/classwizard.cpp 10 - \snippet examples/dialogs/classwizard/classwizard.cpp 11 + \snippet dialogs/classwizard/classwizard.cpp 10 + \snippet dialogs/classwizard/classwizard.cpp 11 \dots - \snippet examples/dialogs/classwizard/classwizard.cpp 13 + \snippet dialogs/classwizard/classwizard.cpp 13 The above code registers three fields, \c className, \c baseClass, and \c qobjectMacro, which are associated with three @@ -1952,7 +1952,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) The fields of any page are accessible from any other page. For example: - \snippet examples/dialogs/classwizard/classwizard.cpp 17 + \snippet dialogs/classwizard/classwizard.cpp 17 Here, we call QWizardPage::field() to access the contents of the \c className field (which was defined in the \c ClassInfoPage) @@ -1971,7 +1971,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) If an asterisk (\c *) is appended to the name when the property is registered, the field is a \e{mandatory field}. When a page has - mandatory fields, the \gui Next and/or \gui Finish buttons are + mandatory fields, the \uicontrol Next and/or \uicontrol Finish buttons are enabled only when all mandatory fields are filled. To consider a field "filled", QWizard simply checks that the @@ -1987,7 +1987,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) QWizardPage::completeChanged() signal whenever the page becomes complete or incomplete. - The enabled/disabled state of the \gui Next and/or \gui Finish + The enabled/disabled state of the \uicontrol Next and/or \uicontrol Finish buttons is one way to perform validation on the user input. Another way is to reimplement validateCurrentPage() (or QWizardPage::validatePage()) to perform some last-minute @@ -2005,9 +2005,9 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) them using addPage(). By default, the pages are shown in the order in which they were added. For example: - \snippet examples/dialogs/classwizard/classwizard.cpp 0 + \snippet dialogs/classwizard/classwizard.cpp 0 \dots - \snippet examples/dialogs/classwizard/classwizard.cpp 2 + \snippet dialogs/classwizard/classwizard.cpp 2 When a page is about to be shown, QWizard calls initializePage() (which in turn calls QWizardPage::initializePage()) to fill the @@ -2016,11 +2016,11 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) based on other pages' fields (see the \l{initialize page}{example above}). - If the user presses \gui Back, cleanupPage() is called (which in + If the user presses \uicontrol Back, cleanupPage() is called (which in turn calls QWizardPage::cleanupPage()). The default implementation resets the page's fields to their original values (the values they had before initializePage() was called). If you - want the \gui Back button to be non-destructive and keep the + want the \uicontrol Back button to be non-destructive and keep the values entered by the user, simply enable the IndependentPages option. @@ -2037,37 +2037,37 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) In complex wizards, pages are identified by IDs. These IDs are typically defined using an enum. For example: - \snippet examples/dialogs/licensewizard/licensewizard.h 0 + \snippet dialogs/licensewizard/licensewizard.h 0 \dots - \snippet examples/dialogs/licensewizard/licensewizard.h 2 + \snippet dialogs/licensewizard/licensewizard.h 2 \dots - \snippet examples/dialogs/licensewizard/licensewizard.h 3 + \snippet dialogs/licensewizard/licensewizard.h 3 The pages are inserted using setPage(), which takes an ID and an instance of QWizardPage (or of a subclass): - \snippet examples/dialogs/licensewizard/licensewizard.cpp 1 + \snippet dialogs/licensewizard/licensewizard.cpp 1 \dots - \snippet examples/dialogs/licensewizard/licensewizard.cpp 8 + \snippet dialogs/licensewizard/licensewizard.cpp 8 By default, the pages are shown in increasing ID order. To provide a dynamic order that depends on the options chosen by the user, we must reimplement QWizardPage::nextId(). For example: - \snippet examples/dialogs/licensewizard/licensewizard.cpp 18 + \snippet dialogs/licensewizard/licensewizard.cpp 18 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 23 + \snippet dialogs/licensewizard/licensewizard.cpp 23 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 24 + \snippet dialogs/licensewizard/licensewizard.cpp 24 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 25 + \snippet dialogs/licensewizard/licensewizard.cpp 25 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 26 + \snippet dialogs/licensewizard/licensewizard.cpp 26 It would also be possible to put all the logic in one place, in a QWizard::nextId() reimplementation. For example: - \snippet doc/src/snippets/code/src_gui_dialogs_qwizard.cpp 0 + \snippet code/src_gui_dialogs_qwizard.cpp 0 To start at another page than the page with the lowest ID, call setStartId(). @@ -2075,7 +2075,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) To test whether a page has been visited or not, call hasVisitedPage(). For example: - \snippet examples/dialogs/licensewizard/licensewizard.cpp 27 + \snippet dialogs/licensewizard/licensewizard.cpp 27 \sa QWizardPage, {Class Wizard Example}, {License Wizard Example} */ @@ -2085,12 +2085,12 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) This enum specifies the buttons in a wizard. - \value BackButton The \gui Back button (\gui {Go Back} on Mac OS X) - \value NextButton The \gui Next button (\gui Continue on Mac OS X) - \value CommitButton The \gui Commit button - \value FinishButton The \gui Finish button (\gui Done on Mac OS X) - \value CancelButton The \gui Cancel button (see also NoCancelButton) - \value HelpButton The \gui Help button (see also HaveHelpButton) + \value BackButton The \uicontrol Back button (\uicontrol {Go Back} on Mac OS X) + \value NextButton The \uicontrol Next button (\uicontrol Continue on Mac OS X) + \value CommitButton The \uicontrol Commit button + \value FinishButton The \uicontrol Finish button (\uicontrol Done on Mac OS X) + \value CancelButton The \uicontrol Cancel button (see also NoCancelButton) + \value HelpButton The \uicontrol Help button (see also HaveHelpButton) \value CustomButton1 The first user-defined button (see also HaveCustomButton1) \value CustomButton2 The second user-defined button (see also HaveCustomButton2) \value CustomButton3 The third user-defined button (see also HaveCustomButton3) @@ -2148,18 +2148,18 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *) \value IgnoreSubTitles Don't show any subtitles, even if they are set. \value ExtendedWatermarkPixmap Extend any WatermarkPixmap all the way down to the window's edge. - \value NoDefaultButton Don't make the \gui Next or \gui Finish button the + \value NoDefaultButton Don't make the \uicontrol Next or \uicontrol Finish button the dialog's \l{QPushButton::setDefault()}{default button}. - \value NoBackButtonOnStartPage Don't show the \gui Back button on the start page. - \value NoBackButtonOnLastPage Don't show the \gui Back button on the last page. - \value DisabledBackButtonOnLastPage Disable the \gui Back button on the last page. - \value HaveNextButtonOnLastPage Show the (disabled) \gui Next button on the last page. - \value HaveFinishButtonOnEarlyPages Show the (disabled) \gui Finish button on non-final pages. - \value NoCancelButton Don't show the \gui Cancel button. - \value CancelButtonOnLeft Put the \gui Cancel button on the left of \gui Back (rather than on - the right of \gui Finish or \gui Next). - \value HaveHelpButton Show the \gui Help button. - \value HelpButtonOnRight Put the \gui Help button on the far right of the button layout + \value NoBackButtonOnStartPage Don't show the \uicontrol Back button on the start page. + \value NoBackButtonOnLastPage Don't show the \uicontrol Back button on the last page. + \value DisabledBackButtonOnLastPage Disable the \uicontrol Back button on the last page. + \value HaveNextButtonOnLastPage Show the (disabled) \uicontrol Next button on the last page. + \value HaveFinishButtonOnEarlyPages Show the (disabled) \uicontrol Finish button on non-final pages. + \value NoCancelButton Don't show the \uicontrol Cancel button. + \value CancelButtonOnLeft Put the \uicontrol Cancel button on the left of \uicontrol Back (rather than on + the right of \uicontrol Finish or \uicontrol Next). + \value HaveHelpButton Show the \uicontrol Help button. + \value HelpButtonOnRight Put the \uicontrol Help button on the far right of the button layout (rather than on the far left). \value HaveCustomButton1 Show the first user-defined button (CustomButton1). \value HaveCustomButton2 Show the second user-defined button (CustomButton2). @@ -2363,7 +2363,7 @@ QWizardPage *QWizard::page(int theid) const Returns true if the page history contains page \a id; otherwise, returns false. - Pressing \gui Back marks the current page as "unvisited" again. + Pressing \uicontrol Back marks the current page as "unvisited" again. \sa visitedPages() */ @@ -2377,7 +2377,7 @@ bool QWizard::hasVisitedPage(int theid) const Returns the list of IDs of visited pages, in the order in which the pages were visited. - Pressing \gui Back marks the current page as "unvisited" again. + Pressing \uicontrol Back marks the current page as "unvisited" again. \sa hasVisitedPage() */ @@ -2635,10 +2635,10 @@ QWizard::WizardOptions QWizard::options() const Sets the text on button \a which to be \a text. By default, the text on buttons depends on the wizardStyle. For - example, on Mac OS X, the \gui Next button is called \gui + example, on Mac OS X, the \uicontrol Next button is called \uicontrol Continue. - To add extra buttons to the wizard (e.g., a \gui Print button), + To add extra buttons to the wizard (e.g., a \uicontrol Print button), one way is to call setButtonText() with CustomButton1, CustomButton2, or CustomButton3 to set their text, and make the buttons visible using the HaveCustomButton1, HaveCustomButton2, @@ -2667,7 +2667,7 @@ void QWizard::setButtonText(WizardButton which, const QString &text) If a text has ben set using setButtonText(), this text is returned. By default, the text on buttons depends on the wizardStyle. For - example, on Mac OS X, the \gui Next button is called \gui + example, on Mac OS X, the \uicontrol Next button is called \uicontrol Continue. \sa button(), setButton(), setButtonText(), QWizardPage::buttonText(), @@ -2704,7 +2704,7 @@ QString QWizard::buttonText(WizardButton which) const Example: - \snippet doc/src/snippets/code/src_gui_dialogs_qwizard.cpp 1 + \snippet code/src_gui_dialogs_qwizard.cpp 1 \sa setButton(), setButtonText(), setOptions() */ @@ -2738,7 +2738,7 @@ void QWizard::setButtonLayout(const QList &layout) /*! Sets the button corresponding to role \a which to \a button. - To add extra buttons to the wizard (e.g., a \gui Print button), + To add extra buttons to the wizard (e.g., a \uicontrol Print button), one way is to call setButton() with CustomButton1 to CustomButton3, and make the buttons visible using the HaveCustomButton1 to HaveCustomButton3 options. @@ -3029,27 +3029,27 @@ QSize QWizard::sizeHint() const /*! \fn void QWizard::helpRequested() - This signal is emitted when the user clicks the \gui Help button. + This signal is emitted when the user clicks the \uicontrol Help button. - By default, no \gui Help button is shown. Call + By default, no \uicontrol Help button is shown. Call setOption(HaveHelpButton, true) to have one. Example: - \snippet examples/dialogs/licensewizard/licensewizard.cpp 0 + \snippet dialogs/licensewizard/licensewizard.cpp 0 \dots - \snippet examples/dialogs/licensewizard/licensewizard.cpp 5 - \snippet examples/dialogs/licensewizard/licensewizard.cpp 7 + \snippet dialogs/licensewizard/licensewizard.cpp 5 + \snippet dialogs/licensewizard/licensewizard.cpp 7 \dots - \snippet examples/dialogs/licensewizard/licensewizard.cpp 8 + \snippet dialogs/licensewizard/licensewizard.cpp 8 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 10 + \snippet dialogs/licensewizard/licensewizard.cpp 10 \dots - \snippet examples/dialogs/licensewizard/licensewizard.cpp 12 + \snippet dialogs/licensewizard/licensewizard.cpp 12 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 14 + \snippet dialogs/licensewizard/licensewizard.cpp 14 \codeline - \snippet examples/dialogs/licensewizard/licensewizard.cpp 15 + \snippet dialogs/licensewizard/licensewizard.cpp 15 \sa customButtonClicked() */ @@ -3070,7 +3070,7 @@ QSize QWizard::sizeHint() const /*! Goes back to the previous page. - This is equivalent to pressing the \gui Back button. + This is equivalent to pressing the \uicontrol Back button. \sa next(), accept(), reject(), restart() */ @@ -3086,7 +3086,7 @@ void QWizard::back() /*! Advances to the next page. - This is equivalent to pressing the \gui Next or \gui Commit button. + This is equivalent to pressing the \uicontrol Next or \uicontrol Commit button. \sa nextId(), back(), accept(), reject(), restart() */ @@ -3253,7 +3253,7 @@ void QWizard::done(int result) This virtual function is called by QWizard to prepare page \a id just before it is shown either as a result of QWizard::restart() - being called, or as a result of the user clicking \gui Next. (However, if the \l + being called, or as a result of the user clicking \uicontrol Next. (However, if the \l QWizard::IndependentPages option is set, this function is only called the first time the page is shown.) @@ -3277,7 +3277,7 @@ void QWizard::initializePage(int theid) \fn void QWizard::cleanupPage(int id) This virtual function is called by QWizard to clean up page \a id just before the - user leaves it by clicking \gui Back (unless the \l QWizard::IndependentPages option is set). + user leaves it by clicking \uicontrol Back (unless the \l QWizard::IndependentPages option is set). The default implementation calls QWizardPage::cleanupPage() on page(\a id). @@ -3293,15 +3293,15 @@ void QWizard::cleanupPage(int theid) /*! This virtual function is called by QWizard when the user clicks - \gui Next or \gui Finish to perform some last-minute validation. + \uicontrol Next or \uicontrol Finish to perform some last-minute validation. If it returns true, the next page is shown (or the wizard finishes); otherwise, the current page stays up. The default implementation calls QWizardPage::validatePage() on the currentPage(). - When possible, it is usually better style to disable the \gui - Next or \gui Finish button (by specifying \l{mandatory fields} or + When possible, it is usually better style to disable the \uicontrol + Next or \uicontrol Finish button (by specifying \l{mandatory fields} or by reimplementing QWizardPage::isComplete()) than to reimplement validateCurrentPage(). @@ -3318,7 +3318,7 @@ bool QWizard::validateCurrentPage() /*! This virtual function is called by QWizard to find out which page - to show when the user clicks the \gui Next button. + to show when the user clicks the \uicontrol Next button. The return value is the ID of the next page, or -1 if no page follows. @@ -3362,29 +3362,29 @@ int QWizard::nextId() const \list \li initializePage() is called to initialize the page's contents - when the user clicks the wizard's \gui Next button. If you + when the user clicks the wizard's \uicontrol Next button. If you want to derive the page's default from what the user entered on previous pages, this is the function to reimplement. \li cleanupPage() is called to reset the page's contents when the - user clicks the wizard's \gui Back button. - \li validatePage() validates the page when the user clicks \gui - Next or \gui Finish. It is often used to show an error message + user clicks the wizard's \uicontrol Back button. + \li validatePage() validates the page when the user clicks \uicontrol + Next or \uicontrol Finish. It is often used to show an error message if the user has entered incomplete or invalid information. \li nextId() returns the ID of the next page. It is useful when \l{creating non-linear wizards}, which allow different traversal paths based on the information provided by the user. - \li isComplete() is called to determine whether the \gui Next - and/or \gui Finish button should be enabled or disabled. If + \li isComplete() is called to determine whether the \uicontrol Next + and/or \uicontrol Finish button should be enabled or disabled. If you reimplement isComplete(), also make sure that completeChanged() is emitted whenever the complete state changes. \endlist - Normally, the \gui Next button and the \gui Finish button of a - wizard are mutually exclusive. If isFinalPage() returns true, \gui - Finish is available; otherwise, \gui Next is available. By + Normally, the \uicontrol Next button and the \uicontrol Finish button of a + wizard are mutually exclusive. If isFinalPage() returns true, \uicontrol + Finish is available; otherwise, \uicontrol Next is available. By default, isFinalPage() is true only when nextId() returns -1. If - you want to show \gui Next and \gui Final simultaneously for a + you want to show \uicontrol Next and \uicontrol Final simultaneously for a page (letting the user perform an "early finish"), call setFinalPage(true) on that page. For wizards that support early finishes, you might also want to set the @@ -3532,7 +3532,7 @@ QPixmap QWizardPage::pixmap(QWizard::WizardPixmap which) const /*! This virtual function is called by QWizard::initializePage() to prepare the page just before it is shown either as a result of QWizard::restart() - being called, or as a result of the user clicking \gui Next. + being called, or as a result of the user clicking \uicontrol Next. (However, if the \l QWizard::IndependentPages option is set, this function is only called the first time the page is shown.) @@ -3540,7 +3540,7 @@ QPixmap QWizardPage::pixmap(QWizard::WizardPixmap which) const fields are properly initialized based on fields from previous pages. For example: - \snippet examples/dialogs/classwizard/classwizard.cpp 17 + \snippet dialogs/classwizard/classwizard.cpp 17 The default implementation does nothing. @@ -3552,7 +3552,7 @@ void QWizardPage::initializePage() /*! This virtual function is called by QWizard::cleanupPage() when - the user leaves the page by clicking \gui Back (unless the \l QWizard::IndependentPages + the user leaves the page by clicking \uicontrol Back (unless the \l QWizard::IndependentPages option is set). The default implementation resets the page's fields to their @@ -3576,14 +3576,14 @@ void QWizardPage::cleanupPage() /*! This virtual function is called by QWizard::validateCurrentPage() - when the user clicks \gui Next or \gui Finish to perform some + when the user clicks \uicontrol Next or \uicontrol Finish to perform some last-minute validation. If it returns true, the next page is shown (or the wizard finishes); otherwise, the current page stays up. The default implementation returns true. - When possible, it is usually better style to disable the \gui - Next or \gui Finish button (by specifying \l{mandatory fields} or + When possible, it is usually better style to disable the \uicontrol + Next or \uicontrol Finish button (by specifying \l{mandatory fields} or reimplementing isComplete()) than to reimplement validatePage(). \sa QWizard::validateCurrentPage(), isComplete() @@ -3595,7 +3595,7 @@ bool QWizardPage::validatePage() /*! This virtual function is called by QWizard to determine whether - the \gui Next or \gui Finish button should be enabled or + the \uicontrol Next or \uicontrol Finish button should be enabled or disabled. The default implementation returns true if all \l{mandatory @@ -3645,7 +3645,7 @@ bool QWizardPage::isComplete() const /*! Explicitly sets this page to be final if \a finalPage is true. - After calling setFinalPage(true), isFinalPage() returns true and the \gui + After calling setFinalPage(true), isFinalPage() returns true and the \uicontrol Finish button is visible (and enabled if isComplete() returns true). @@ -3664,7 +3664,7 @@ void QWizardPage::setFinalPage(bool finalPage) } /*! - This function is called by QWizard to determine whether the \gui + This function is called by QWizard to determine whether the \uicontrol Finish button should be shown for this page or not. By default, it returns true if there is no next page @@ -3695,12 +3695,12 @@ bool QWizardPage::isFinalPage() const sets it to be a normal page. A commit page is a page that represents an action which cannot be undone - by clicking \gui Back or \gui Cancel. + by clicking \uicontrol Back or \uicontrol Cancel. - A \gui Commit button replaces the \gui Next button on a commit page. Clicking this - button simply calls QWizard::next() just like clicking \gui Next does. + A \uicontrol Commit button replaces the \uicontrol Next button on a commit page. Clicking this + button simply calls QWizard::next() just like clicking \uicontrol Next does. - A page entered directly from a commit page has its \gui Back button disabled. + A page entered directly from a commit page has its \uicontrol Back button disabled. \sa isCommitPage() */ @@ -3748,7 +3748,7 @@ void QWizardPage::setButtonText(QWizard::WizardButton which, const QString &text this text is returned. By default, the text on buttons depends on the QWizard::wizardStyle. - For example, on Mac OS X, the \gui Next button is called \gui + For example, on Mac OS X, the \uicontrol Next button is called \uicontrol Continue. \sa setButtonText(), QWizard::buttonText(), QWizard::setButtonText() @@ -3768,7 +3768,7 @@ QString QWizardPage::buttonText(QWizard::WizardButton which) const /*! This virtual function is called by QWizard::nextId() to find - out which page to show when the user clicks the \gui Next button. + out which page to show when the user clicks the \uicontrol Next button. The return value is the ID of the next page, or -1 if no page follows. @@ -3778,7 +3778,7 @@ QString QWizardPage::buttonText(QWizard::WizardButton which) const By reimplementing this function, you can specify a dynamic page order. For example: - \snippet examples/dialogs/licensewizard/licensewizard.cpp 18 + \snippet dialogs/licensewizard/licensewizard.cpp 18 \sa QWizard::nextId() */ @@ -3845,7 +3845,7 @@ void QWizardPage::setField(const QString &name, const QVariant &value) Example: - \snippet examples/dialogs/classwizard/classwizard.cpp 17 + \snippet dialogs/classwizard/classwizard.cpp 17 \sa QWizard::field(), setField(), registerField() */ @@ -3868,8 +3868,8 @@ QVariant QWizardPage::field(const QString &name) const explicitly about each other. If \a name ends with an asterisk (\c *), the field is a mandatory - field. When a page has mandatory fields, the \gui Next and/or - \gui Finish buttons are enabled only when all mandatory fields + field. When a page has mandatory fields, the \uicontrol Next and/or + \uicontrol Finish buttons are enabled only when all mandatory fields are filled. This requires a \a changedSignal to be specified, to tell QWizard to recheck the value stored by the mandatory field. diff --git a/src/widgets/doc/images/assistant-toolbar.png b/src/widgets/doc/images/assistant-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..1b41825c640180fab878e2ecfef7aa9dbb601048 GIT binary patch literal 6532 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 Xort~+{jibZA7=p7rz#~+o(KOEO|1Wo literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/buttonbox-gnomelayout-vertical.png b/src/widgets/doc/images/buttonbox-gnomelayout-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..e7843dc22d6ee97a14c1c1afd679a0e7ae8f6425 GIT binary patch literal 5027 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 ONJCXu1*>HB?0*2@51~H* literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/buttonbox-kdelayout-horizontal.png b/src/widgets/doc/images/buttonbox-kdelayout-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..5da11f4d7a4b956ae88aeef820a63a37234cf9b2 GIT binary patch literal 2862 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 E3nu6o&;S4c literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/buttonbox-mac-modeless-horizontal.png b/src/widgets/doc/images/buttonbox-mac-modeless-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..2e853d34fbbd36bcf83aebc35573adbdd4a2b71a GIT binary patch literal 4123 zcma)92T)U6x2DKNT2Mjhpj0J5Py zF4Bd7)C7JQxe=G}So=FM9(=j=VR&RS=mIcu%&`(h3BG#F^vY01dQ7&ITL8j+Dv zE}iWqFH@Y|C%E{%&K8;%kIa3@$mp2PFLJW199A+i#y(BehbDpJgsD?~<3(=jjjfpn z{CiGOb3_ok8dF`MnLV*~HoogJYQi@zo6q590*Hx&>nYlw33u7lVW^$g1mmlgHAIfQ zjW$47yc51HbCl&VmJ~8G5Hvp2&4O6qq{Ub(iV(g@6G*LLKenWgy$!+zc+ae$utc2V ze8VeAR6VygZ0?(LgUMb!w~t;z|Mt31#{Mr}JG|aS>_6Tg%}f`u903=h7IWBR_{wZ| z^om1fT!w;*y)(V2iwYkvFV~CcA(U6gT|Zx66B83=X6DfCL5)n{)fHvG(yOWJCk(9Y zXAcAKfq8j{$jxq}IRZFe_ACg4Km%P}Wk}=+X)!ec1%wLZ~94PNPGQIiE!fcsQ%77E&S&Xpjb8lElF7;^JaY45_%Nh-%2^Vq@e=V zySHMN7=Km|GqpV`DrIlrBcB%^SW1?wmp$(9=^N!12lv;HUVL?ln||%}l`jqXVyC`@ z-Fp^@lm`hmp`op{wZDhUj1}@d-QCwtjt`m2m-ymT0{rqGh9=C|h&w#v5+6r@nJ3BA zwBG7bMPIxkbb`#K)w|J!CF{zXoK0t^uq&(nd-afMSGBIK>So-LfAXzwHnpJo+SwI! z4B9j|4z60W)lFqTJ-t1WxoaCE$%8km_+gEcH!UTj7jg{^dG zpEaY`se_4afd zq`Q9ua^#XW#wz08mbc<#6#(Tbuu|ro0@vY$OYbO$0vDu{{ShzszCt9B@xX7fuk(?W zk^svmCiGH?@;L}m;`W}9myyKRNbv#xcUp{UdU=~Y-TGASJ^Z4@f#l`}WV`hXwZ@tsL zsr9Xxl4cV%%dG%5`M*ozCUxOUoit&vuQWD(!!6l#>VAXm{b$?1oBd&jMlruoSDt5m z7sa?(Iq6V5JZc2`oU9}aq!k_w?ynuf@HsQL1!u)ovYnibzYmw5=#N%AUR0%M2*Ui+ z#!q@!he5%3A#n5<;K%S0$|4w2=qG{+4RcM${ox&5erJGI z6hiGf8OxO@2poRJu{St47g*&4L<%jRh% z6$i5;tOYfLuV3rXbVD$)_ z6>lo5d!D_iW2F`wcxcym@=3a5^d|qnPn-OzOHn92nPKQA^Bbttu4oUA6QwF}Ju0eS zq@gKAfMHj57?pAD2K3uAq`2%MwLD-;kDef0RyRDB!)?A_{xmL>^W$;3m6N+(385Eh zx}p-BIe%yD{j(Oq)%f;S>-mFNpEQ-tCv-Kr?cZ=Wu8hCWfIXNslw^KVPX~MRX4_@5 zVKtgJuFBcM|JNKIFBJXuZSB)aMUDcN;#{h#=S?k2BGyim$KL4@2!^k~;eLv`_8gS4 zh?Rh(J}-4)J8eS^mP?3%kB={8cg+hm6-Ydr*HqNAJHZR^+4j?ka;2y4(VlmVr)#(A zV-53l<1wZye=f&y_|S(w>4Z9c8%J@ftTxQg{!DCmYsA%Y!gi<4?K*y}WD2Bao)yFIK8u=G_8KjJ zZe2=TWzc}IhTpF4^tQK6ltJp%f#U*xMQy%C4^={98Y6MR9zxY5X*@HD}!hb`h|K*L=cV6ZB5=XK!2sUZ%uch`iLziwb`UAbtI1e|inF52P+ zUO`UoXco#d_gz}*`DAnW@h3SLD?9rqzttOntBPDOGwn@5HBISN-*iunyzKtHKiWz^ zJBFCZ<|if9?&f;)V9}z|6UOs4{pO3DmgS77vO%e=%frzt27JP)B{64sbrZU_=6>XR zR)ZgK!Tk|}Zc~742lfe$<9odgT3TL(OV}s`YKv`M`Vb`du8V-W&3#grch*1~HBImU~d1zdOg zW%@!z_m@V;Njl0gg3`eD`H+(R0&9Hc`9ua2$0gp~?J)?9HB8UHA#&f4&e$Zmv{IsR z-;SmBhg#nZ>sUY;d#9T7qldV>Mh`P&Ob4uByh|Km%H?&@~-L&_sHg9xSU=IHg*i~S_<*Hg#YNpQEN$%2{ zi+YA2soAV5C>T2_Q2zR~&WHw5hzC^IB8`mz&^Q1mlO^}=XV*y{_Qp7BEpzB;>tWbp zEq$LQbStB;MQEk>nFNOqGJ|t9d>ck0Ku1#KK+sq+Z;-}}RY0lvq^rVf0^~ zniV!Uq0@P`!9pYNz6% z*zZR9R`0klDV|0lZzYRLgUwLvITP7Gx&k>$U(^hIe8goIuV|o#>~1k2XtbF+x|4f_ zD22I&?@W(>jE$ANi(Hd;A#kv-th!cIdGchlR)J)VCWvgb^d{kvJeWmxrjWjR0qzw# z`n0i6F%%y*xiXG^U3#x>@-}!Olj*#<>=p9mAlo>soRiwe9ZExctMyn=4maC1Ta2jp zok{`+ZSzX|gvz?9zizKYLPa+x&1;^{G$D{_^5Bh(Ckcp#bhIcyVTDHy=da2fG9+<# zmZW?PA;J%KUt+{o$1DyYX$)X!cPe4>c%tEh{*} zzGL$zeslf9AAr17T1D)(=-poj;O*m|Nj7HyFf#`?6QM;9RV!1Rm)xQSPaJpF>h0fM zyK?bt?uu{ejUzVXO(H(|js9hD&C)0QvK~R=`~GHC_rV8a(th|Avog~55I#`U#TgS- zrsdkNO}*apP}6dR9Xg?Cr6{32K5}Q#Q=a``-gH%5uy1gu`yk1`WwE*1#msenPIXLI zL0ZGUaoNbp^Kif3o~99LR#4^1aIaokg~M|O(Pp7I>iPWD1$Tv^{23e^+F=koUb^lC zJQ6o$JNl){*saIVOx!>Hro}A*zc7a?+3|VpwLq{rVy-1Y7BUMG7M6)Pkprlm7?yT* zbqVR`$%P$kXZj1OHrO*I!(VFp@w?jmCHj$252sQ&r}^EA(a{%3c+i~dj%fKDW*oGo z$aGny>L?WtVl!2oc(Hq+`U(o~Md;=Wtn{*FJErNBfA+8+sPDk}0?r$y#(`m8M|V!A z=dTQBIK~f}h3(?ELd=nR$^y$iV=xMeiahCcq~pDre8q?pOI9K#aC0s(mFhYI`3P3Z z5+Expdj`ZA15&Sc82dbqI8MO*`>h@JRPEMeCx@ST(9aNF#pt{XYLOHk9n6oxSPaAG z&v`>Y4)7;ParWCziC(U-m>6++nKZLXZJM5va+7>M5)2_pLQfFKGPuX1zWAn~#E$)~ z=f+l3rl-}_md-gY)lTO`E~?NPand^Y`o{9Zq-p~#&cTWZddW9#W1)Lf0aR2}`*tFb z(+J&Qin9(hlyKFc=(Npq(!P*3g$(C_95k2-d#z51EQZI3v$KH$IxqZCU@JckZ7bg4xQ=KbD-3xTG|ajvlJLKnxbgYB3aZ z4gvM+PZ4SFy%KYzXRj&#o=f>=`?6-4ug6X9H($^fLzAq1V9Z8v5-G~1D=mPOi-3qoZ=oeh zmEL;^C6s^=dME*&;Pu}1Ja1XcFYkxXq355E1Va6=%jM_L7&^?N3av9lltft_1KV4Y&`f zKfFQ$5(Y<1wWnVJgYv$oPl^2coVquv{Xp^qz(d#tA~Dr}HM`%`+BzdX-V1-QmEg$y z@*B5eV?OTYnAC=&DgXe`)YP=Mw}0_sFNFM(rNn3*7<gcJ+*5BaBdLDY4>}%Or?PRrSA9D?x>#LUSza7C2*4>Z&;YY3-3=zNnw{fiuIS!PI@W?t5G)a(gNm7)Jd7tmF-ejby3iJV9S&29a_3!vWK{`b`5Z@tfJ|W?C*0 zxVJZ+_<+8QalTJ;<=Uy&Hq%mzIP!V4&r>RV#!DJxE^TWB*Sp}3)pmz5o^S^{`;rrT z5YbARtryx4Po?WRsH>A9`fh-*7|b`!@$oS^Ik_j2lZS_go!xI6-TqLDoi3zxZu=dB z;pfIdzKAfIj!tofMUD_vfQ7X)2S@4U=a)XLc&Ijfw006Ea(6j zovT*EbK)Hqv{_RICHIIC;+0y40d~Aqr*2ez%#pXq_hgdZ%`(Q!((%kO|Hr&2?}Uek zXKTc!cH5^N_h)N3h7Lbx5pT-H8NCxIIg%B93!hSsaBW&d+F9hTw^bQmhviwx9RsRa zS~NXHryI4Mi|_^oL%qf^mHw+35Zg>gYMo)6&(glg;`#%ira@Y3E$GRYZGBJk0s(la z2%IUC7~d#cA3`MmiY)odJ}dJ1#=^ovTMTzo;riA>8!0L22ezn~n3(A3tnjflnyUfh zqgoD8s7mPBsjp|Oy!o8RZC6(~I=4%`02*iksb_{(IUQ=}Lb{@r!^Y;M0JEFrk4*H^ z@wfD6l91YQKCQg#N2e~ajcxM zec*WEHi@!_3|)22a>P{7)56$yIn!n;qoX4x#>T@VqxL6k9lqpP%GuxVqydY1=8-m2BXgEwp5B%hithnx z?H$BbLYSV}+1>Rv%2|kF;kHt;Vr_G|8?H}!A=ZNm`C;LFMOtf7 zs21OkrKLBnUw3wNd}tZ+!SIh8Ne5%gCQ0iqUzp#I!*isV?!`60EXTO8c;)^(5QRPk zA#7DOkg@pYWZUwRC5$n*Iat>doltn_@k4EItit|1=oK_QV}Nv~dON-#aLcHSani~w zNYJgs?u%F#)dC+8-Jhi!3+y)_ZF`9@7ck|cSI#B-n@D95rPL+#J|_TVW{AP#?Q zv`pL%48It(@YBeDtmO$h1TUddpbn?$hq&)(%48_&JD!H%N#u<@jh~+C5?po_{dY$L zatOZv>>*R*^kn=k#(J$OMK-YaT04^5Eb+t$Wbk}uI$w&6$Dc*IS@bwH=IIB4GoHsI zlNh^4`$=1UC^X`>>cnRr;F>3TsTWCp>P4gwA#qBUT?WoA;J^FlH1g#M+;MK8HO_l#lFF1+wo03WNgX!*P`35d;JVE>tsEBLM z5uSF#w2?9RfV;z)V^=kgy#)j~{O%d7kv*un<&a6@lUe&2QGZvr!TpXtZv_|sAy;IY ztK{44eZc)j>zb`lxIQK}(KJ~2p>O&xxa4r(~H zS@axWtI^(KqK=MjQVeKe&Je3iJbXfrz=FJsmUEP-d8bB71~-1*A8hLto|)ij!s?iNKlNhd6a>dWC}@4UM7W!ryYRE*^qi z=~&%RCX;ub-f+_W?hMBcirVfSiCq{4TlS~Yq}sV~i@9mouA@rlkH7iH*H~Ft6vzfJ z?shuUaU>)tCM6b+IwtPT5d!#%)doQM`aUEV!@0LKpIaP3vto6%o52MurdHK(mDU2t zJndF}B)kF}HA;Gg$}d+?Gm%+Fv5h>Bt+ADc{U9&5sy<4roL+Z54pfd#PEI~3)<(P3 zRf>B-qa50oI6v~qhKLdO;_G_N*C{F{vFl0g=_|%0KeidSP{YN(e+-UTUBjBhP(3c+ zn`)eV^Z8RZQW97YXnN=_T=j93A2rPn)5ZWQOfi8adD%r-gGy^I*AS+oPV6se0N=H1 zcvlUQ+=2O5XSA$M3Dq}OJqQvppt3eAXy`0AIgV`AQ5c6*jmHR0b5heu&ZyEQ)GmF5 zY>CJRlsn8RC5_%U8^vWjn-3A+?!gBTbxT;WpC%eeAFnRR>VpqIZ+9WRPH=h|nR7?K za$CSth`Zh2f{HbTydg-dC3!IW7jgUtdi)}h|Ar)l`u`DC{Mc-wj8u zAgC87Xxw=e{j~W_2_@2l7R&d_-Mo(?t6G!a+b87PV^LEMtLq-%npP`A-nk8+11+3- z_b(uwCE~CtLri(9&W-q-;ty+UZ^yUqZqD7KDf!5fr8?8vK%>nheZSJP)Mf%sKDD!# z0ef;3bwTsm+055@{tPOnXCjm$tEq8Aruxf9(F*nZ^}9YI{V0C;`AMFC;(iZUJ0I22UCSiG+H1(Btan=H}kLdnc@y5fv(=-E&LxcJgbBWfrr=#TGLQ zK_`tQ^>OEi7dt}~*6qDqdsH z(U5-){Ac97#hBigc6ReC{n_^A?8}hd6$TF5O7jPu9vCHKG==uaRJsjI^@9C9pGh)ZQ5Ihu8|jGs;uG& zP^39C`Z0->g-M{LVA3VyUINwWq;6hAdw`34u;jT1EPz|*5SEjhYl}SswGD@Qr73u+ z7Yx%~R}<)C*bK_{gm)_e&~(}a#2MK4DpbB$SSO?x-cU(j-&;9B%6p}1FGGp$aBTYZ zkq3vM&R>UGs$F{dSL%ZBg{j=!T=?Pq0Mj&=L(AaJ4hLqxu$`<9PX=II4R_?l9y&k8 z1(8zxHQX+8YNaG9h7OG3xJ{OR8YUm1Z=oeR;uC$F?E1hKOMRuS{1>v{g_Op)HG>Zc zrhPT0Qp0|CC<(-#Wh2V+bYe*5e=o`;WJd-Rhttxg@21cG_=agz_U;AmTT2ahkfE33vd6>i3{b%7dtjxVw64;72&)d0CfKL|eqQKfuqqLk+U2fLWfcK?VJYs3(NSF6axPTGt;ijsSYEXJ zYAraJQe@Z^{I1U*c81&+hzdonHg-a8|lq52$-%_!j<+hK3IHLWb8iT2s*=aG_X0Bj#m! z+%0{D(6GOC&Dtk$5)hAV-~pCjp4;8u_wn(ms;IE>F)E-yhB~ncRt0L`(pIRNqd*Yu z5^neh0pT;rC;-g+<(A(^b literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/buttonbox-maclayout-horizontal.png b/src/widgets/doc/images/buttonbox-maclayout-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..89ae84dea014cd0233f953ca4a316a4ab2c85a3c GIT binary patch literal 5409 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 QNI;;jtff?@X!-7c0Agw-v;Y7A literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/buttonbox-winlayout-horizontal.png b/src/widgets/doc/images/buttonbox-winlayout-horizontal.png new file mode 100644 index 0000000000000000000000000000000000000000..dd4ce1c313452c0090ac9a954dd1538c279c0b4b GIT binary patch literal 2780 zcmZuzdpy(YA77!N$R)S5qZ89*h<=rBLarmNoE){xB5@M4xor&-IxekT(n1`iTw)=Y zwK10?L#|OS!_0i83!0`f*~V|2Ugver@AdoR`+Yyp=ktA@&+~kq&-eYjlTM#48z4X05Ge1EJ3RuVUAt2C3_0?w`=zfm2)CdlRyV!w;WVa}2 zY+|?KQa~WZ2)M2FS;EMtoKcMKkdA%#aa->8m(E{1pfQiGn~>|Q$(m-x>+Ag|JPhPV zb_9A~xSIx2;N_d8ZgJbxRBgac8aw1N_HO$d&E3r7AAFJ?ISL|EjoMs<*q0NjIWm4P zb<(oQ=S<_9yN%0+MJwOa_Jsm01ZLy<*oz*YAE)k~2FV51@smKN_D_D_44OOv0<|iZ z*ETJ4qok_^fwXb*{I!NGehs!WWL8myvu+ix^ORQs^url@bglPqrxg~wYP~)w&yQfX zfBH7n-G&Z2wv=Ld3|aqi_sC{7*9%w2<&RFh{1tRQi>+qA4aZV-*oJFYD~`fyRplR? zY|NG{wq&3!1(V|)tc|~vFVClFy&lEOv5uxvl8n99zGkUr7^RJX@d5=akH;B>+;d!s z_3;}+bAFZ+y7*LW+Kp(^QgbwiB#!f-za=6GSrk(sQ9t<*km$Ufe~3Xw9DD$suG}#j zoCTInD>b-~E`9G?F{ra>tPuA;y|KC?X&{gFIKL*8n64{;EDumd1}ICyj!#+pJ?g2B z3d|FjKM3H;NB2H|c|X3<05;+GDtUUK^1Q-Y82x01ERfuY(^5BXr8?tF92^i(0Q>P& z;BHU#@D}j~fwIAJD=J`Ke`?`urCOO=XG>)3Kf{_gSuCKYI)bM@KQmDRgK6x_9d_6R zxI8~00laUZ9QlIcdOQPuo=*6Y4!x^5^QNff?8=9p<&HL`h1%WG7YrHA2C_n8{fJeG znu$i$@Yj1`;cUYNSvZ<_!`uQ-S{=(rs}OZD&S{;CJ6xKVnQ+=3e~e zcVE8JytjXWKW$gOtSmnB7S9A}GwhXR&_jL%VGJ&raM{)A51>wrbL`Gp44by7syP(a z()*nypNKy&{pZ)$y+}S!iE{xrYB%J$VCCLCY?xuq888&ualH0@L`U<80-MM`lg&A~ z*Z{y{hp#7habYjtkbxHO5cYNFWR6%+-=D|}p^o6T*B!cB%yBK=VnWJlB>V@lmO&&Q zd+xW1kEgNWVGofrMFe-hxZCF8;4ot+Mk->iAOI>O1jNu zB!o^NjIC3DRX`%U53GBv#i21v)5p4Nz8tC63q&V`RCOfU(}U1Z^NE40IHuiDDKGR; zzl7Vb7O><$b3BJ0t;2#~<|h^Sn(aPj0lDz5^32ghAcXXZD^m~YTD-;Bdh_YbW?y{> zN2#`UM1e^Z$%BO(hlFz8{z3zdPx-_;73KXYdmYwK$Vsl}&!@RtRH>+fEo5p7gPm(~ zR(M2y+>A(it~YpPVF?X2x=M17;Zd}k|A~1SOS-;X=4EW|d)nDEs{auIGDzDs5s5Lc zufmK0ZC0E-rXLVrp6}(y$zhhoDSJU`o}Sd`-H><<*@n?&WB|{}T+xR9gHHBwV-26K zZ5VkwpU4arhEtC^8A6s&o3qdr>*kZ*1DX*J>2W%_XTa2!GD~e;!JxO?k)U{LK;LLW zOerIqx6Gw=i5^^rQR*V@_=TbAIW7yiXE8-v;V27J-QGjR-Mo9jhlR_u*@&Uawfgi_ zIRs<-Qj+d$DJ?1D6X(Jy{%xRi_^oK~Mrh8fg4ai{h8vUKw$RMlV3;~ZfOf^+qPwQ^ z3AKF&oC!G^FyfgsYEnzOMeM!YPviS0mvJtu;2G@__H@skq*LQ1T=2+5!%ZO*ymhCR zQO|y)EwoWZ^?~O+B_=K_8t|2HyeUc%B2&-!(nWzBzI4$T87;b*c~@3iB_du~WJckN z@(yC#@kV5Q#BCR>5XHd>g$EeAjVPT1egzeD+fC|Rc`#mNm$9EAg7WtPi(5FNlZG2; zy$G=OH?cn*91zFcI-D&)zDh~vT!x{F<$?0`BDh+v64LIdS!L*qa7p1UkLHWpILd8?Ml9DPd)2=i;V zHGlp2=VsWugO3(}##Dg4Eg(i-p@kCG;>l+Nunoc@WNxL~70Fc(f6`Q}@T z+fUk+=y1%F@Z0g&pwNU{KF}O^5GF`6^zWNaf(RLn4G8x`|9pTipH~01a8E%bu`@_@ z&Wg_~!$h<@5h7-qS|@M(^J?vh6{XXH(3wQHZiefQ**yhY1j;^k#uK{q1}+jkcFsAV z4BFDf&^H>?8;c^$F@Jw$X%72aJ6LhfW5}5(6&~&3;`@+J9*l7E}eV$q~9L2Y literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/buttonbox-winlayout-vertical.png b/src/widgets/doc/images/buttonbox-winlayout-vertical.png new file mode 100644 index 0000000000000000000000000000000000000000..539de1aa1aa7d08cd103b2b4ad287aa85cc5a1a0 GIT binary patch literal 3184 zcmb7H2{hFI7N@jXDm@W~9z$iT5dJfkkZHz{Wej5pqeclSN-BGnESa&)WJ_WOV;PL4 zRDb*0*b+lXgb~J&Whla%$^X6cdheWf&O7Ix^ZWkpx%cBZGu7itwS@+;u5VU6bXTxfLAX43z zuarmNH!%vUtQ2>0NVB)As@B=A?dtnEC*)9gPu9L~c09QPY!8&QJvYz-|AyIyj&2Nk zK!a8!6K3DG25&QKpW%uwSy4kFbJ2ZkxNUFu<%IhX=DOo{Ye%v2BgjDC^{hu^NMS6r z)^&HR-p9Mm*zU>J>--xZu9~MvWIh#z6q>Xor#RZ38*w|Ubx#YW$l^yfQ{VoeqMzF& z!kw2#1seLg%=FI6tHkIQ)t^yEMi|5#c<}R|)3plV&}ROO<*LiiYy9I5Rt_v|H z+lrO6p8r!g?{Bt+gXPk=SFIECnHr$6xgz=vYmMQBdp(Woa)X{rZA~xw}Le*-SfoF$xF}6KGpQ+W;=E5bZb?J zyrV?HlW^Fj(hqpZR+Na+$MkD8DQ zrLm-!BQ^81MH=r2Z>P=>D2Jcz`+D}IXBi@&wWS}ljx&p?L)p*%4a zj8d8GnHZa7v!b$4HhNKMz1aRasx6!D+AHaarj&g8LC@^&^`p0%I|eV(!_g4t!Y{l?Il@m9#sjwq#INRow^>~cK&teYoc)y8YM;Bl?ps+Q zxUfR2J97kLSXiK9J)T%yjgU!pDFF~jt;J}XrCzeJeD++ef{Li0(NY|SaVp)ciKrQ{ z&-v6OO&;%qH*3CQ1Y`0Bf zj1_~dSqq6hAv_vYbjF9b(28cMM4F4R*5-AlC9Eu+4sJ{HL|S3ThneXf0&^}sC!fV= zF<>l7vA6^UDWBY=~He?TDKdmQ;0;pzp3%qMv zA@)fn6dcRU@};7%N0xVQ^w#QDZAZc&O4(eE^y$rvTv1a{V$f#$Ho63$dwDu9e~%T` z4N`G>brdh%k&(-NB`JB#R|u8TGH=)8fj^vGB+(JhDvd|rphR@UcAa$p){3!WOO2&~ z>$MYh?O<8o3+rc?^Tv|sOBpY&%t=;S2#Mr~mSNk32H!5zw)&JV*MU2|W>bglV}-TKA#JolRh6Wu8=6H3cke4Ir#$Nr`u1z31-mvWc zc-u8jw_1C>f>YGqcv1F+Ra%eNn49-^GMXk#As_pL<^+NtJgyY9j`W_+AJ01<9|V`Q zagWMFR2P2#h8t9ZmTb>7t&d`(P$kv#VLp5uOohEhcZ;G!cX3FD2cCk$K!!A71UB9$ z91kP`WElGuII1#r2ANZ{CU($gIRIZ%kh=missv9oQ-X??W2@kx*(x7Q4|rUGL0+aM zH1i$DBCz0MfL#}O{3L^1{>$+b3E*o3a#vx(itxY<0x%STokRV$jRp1vr{o$~{&l;Q z>kN0I+0i}P36vY2=WNaB#Nwz}7BvmNH*pe6y^s|1aY`CgLbazKRy0wIOAl1-()Dq= zs=AJEm^!_%Bd$ecx_H=w9hXIwkSOF*?-w}SGjo&hh0_SLe$5Qr zM!2K>6^7X=Dc7;U8Cv>N}kA5jjs?rgEK&ff9pEc6+=WJ}FX>iQu5O4ylkghNGRY1)6zOro1-45G z+IdZCMxt1Q|H2VFkh>nUjr2u=7zLas5Kok2D})9l!euJOyeH2x$lm=4c8wY+-$+d$ z_Pwo896kR3%sI{yRCe-Ho1Fp_>_SdBk1?-GAR@3U4Hm%Qw&%BjCvyO)^&iNPr7FFZ zs9@VC2yDSreBqYMN7GBH@v|3jDSz(UM*@h0&rWsrt-RCw!k6@_-k;VZQ!40?2ND*I z#RGwBZKTvRo#I2fSC*vjqp%XqQX1~LCveOQxMPGUTEc^AVLTDpoArwUzh$o~@Q`gt z1gB5z$WGyKCxso3a7Swk&b_rGr~b0qr7XfV*_kK)HGTin>VJNY8C|fw+t(h{<9~Y^ R#rc!qF@~5K6&s=-{R4r128sXx literal 0 HcmV?d00001 diff --git a/doc/src/images/cde-calendarwidget.png b/src/widgets/doc/images/cde-calendarwidget.png similarity index 100% rename from doc/src/images/cde-calendarwidget.png rename to src/widgets/doc/images/cde-calendarwidget.png diff --git a/doc/src/images/cde-checkbox.png b/src/widgets/doc/images/cde-checkbox.png similarity index 100% rename from doc/src/images/cde-checkbox.png rename to src/widgets/doc/images/cde-checkbox.png diff --git a/doc/src/images/cde-combobox.png b/src/widgets/doc/images/cde-combobox.png similarity index 100% rename from doc/src/images/cde-combobox.png rename to src/widgets/doc/images/cde-combobox.png diff --git a/doc/src/images/cde-dateedit.png b/src/widgets/doc/images/cde-dateedit.png similarity index 100% rename from doc/src/images/cde-dateedit.png rename to src/widgets/doc/images/cde-dateedit.png diff --git a/doc/src/images/cde-datetimeedit.png b/src/widgets/doc/images/cde-datetimeedit.png similarity index 100% rename from doc/src/images/cde-datetimeedit.png rename to src/widgets/doc/images/cde-datetimeedit.png diff --git a/doc/src/images/cde-dial.png b/src/widgets/doc/images/cde-dial.png similarity index 100% rename from doc/src/images/cde-dial.png rename to src/widgets/doc/images/cde-dial.png diff --git a/doc/src/images/cde-doublespinbox.png b/src/widgets/doc/images/cde-doublespinbox.png similarity index 100% rename from doc/src/images/cde-doublespinbox.png rename to src/widgets/doc/images/cde-doublespinbox.png diff --git a/doc/src/images/cde-fontcombobox.png b/src/widgets/doc/images/cde-fontcombobox.png similarity index 100% rename from doc/src/images/cde-fontcombobox.png rename to src/widgets/doc/images/cde-fontcombobox.png diff --git a/doc/src/images/cde-frame.png b/src/widgets/doc/images/cde-frame.png similarity index 100% rename from doc/src/images/cde-frame.png rename to src/widgets/doc/images/cde-frame.png diff --git a/doc/src/images/cde-groupbox.png b/src/widgets/doc/images/cde-groupbox.png similarity index 100% rename from doc/src/images/cde-groupbox.png rename to src/widgets/doc/images/cde-groupbox.png diff --git a/doc/src/images/cde-horizontalscrollbar.png b/src/widgets/doc/images/cde-horizontalscrollbar.png similarity index 100% rename from doc/src/images/cde-horizontalscrollbar.png rename to src/widgets/doc/images/cde-horizontalscrollbar.png diff --git a/doc/src/images/cde-label.png b/src/widgets/doc/images/cde-label.png similarity index 100% rename from doc/src/images/cde-label.png rename to src/widgets/doc/images/cde-label.png diff --git a/doc/src/images/cde-lcdnumber.png b/src/widgets/doc/images/cde-lcdnumber.png similarity index 100% rename from doc/src/images/cde-lcdnumber.png rename to src/widgets/doc/images/cde-lcdnumber.png diff --git a/doc/src/images/cde-lineedit.png b/src/widgets/doc/images/cde-lineedit.png similarity index 100% rename from doc/src/images/cde-lineedit.png rename to src/widgets/doc/images/cde-lineedit.png diff --git a/doc/src/images/cde-listview.png b/src/widgets/doc/images/cde-listview.png similarity index 100% rename from doc/src/images/cde-listview.png rename to src/widgets/doc/images/cde-listview.png diff --git a/doc/src/images/cde-progressbar.png b/src/widgets/doc/images/cde-progressbar.png similarity index 100% rename from doc/src/images/cde-progressbar.png rename to src/widgets/doc/images/cde-progressbar.png diff --git a/doc/src/images/cde-pushbutton.png b/src/widgets/doc/images/cde-pushbutton.png similarity index 100% rename from doc/src/images/cde-pushbutton.png rename to src/widgets/doc/images/cde-pushbutton.png diff --git a/doc/src/images/cde-radiobutton.png b/src/widgets/doc/images/cde-radiobutton.png similarity index 100% rename from doc/src/images/cde-radiobutton.png rename to src/widgets/doc/images/cde-radiobutton.png diff --git a/doc/src/images/cde-slider.png b/src/widgets/doc/images/cde-slider.png similarity index 100% rename from doc/src/images/cde-slider.png rename to src/widgets/doc/images/cde-slider.png diff --git a/doc/src/images/cde-spinbox.png b/src/widgets/doc/images/cde-spinbox.png similarity index 100% rename from doc/src/images/cde-spinbox.png rename to src/widgets/doc/images/cde-spinbox.png diff --git a/doc/src/images/cde-tableview.png b/src/widgets/doc/images/cde-tableview.png similarity index 100% rename from doc/src/images/cde-tableview.png rename to src/widgets/doc/images/cde-tableview.png diff --git a/doc/src/images/cde-tabwidget.png b/src/widgets/doc/images/cde-tabwidget.png similarity index 100% rename from doc/src/images/cde-tabwidget.png rename to src/widgets/doc/images/cde-tabwidget.png diff --git a/doc/src/images/cde-textedit.png b/src/widgets/doc/images/cde-textedit.png similarity index 100% rename from doc/src/images/cde-textedit.png rename to src/widgets/doc/images/cde-textedit.png diff --git a/doc/src/images/cde-timeedit.png b/src/widgets/doc/images/cde-timeedit.png similarity index 100% rename from doc/src/images/cde-timeedit.png rename to src/widgets/doc/images/cde-timeedit.png diff --git a/doc/src/images/cde-toolbox.png b/src/widgets/doc/images/cde-toolbox.png similarity index 100% rename from doc/src/images/cde-toolbox.png rename to src/widgets/doc/images/cde-toolbox.png diff --git a/doc/src/images/cde-toolbutton.png b/src/widgets/doc/images/cde-toolbutton.png similarity index 100% rename from doc/src/images/cde-toolbutton.png rename to src/widgets/doc/images/cde-toolbutton.png diff --git a/doc/src/images/cde-treeview.png b/src/widgets/doc/images/cde-treeview.png similarity index 100% rename from doc/src/images/cde-treeview.png rename to src/widgets/doc/images/cde-treeview.png diff --git a/src/widgets/doc/images/checkboxes-exclusive.png b/src/widgets/doc/images/checkboxes-exclusive.png new file mode 100644 index 0000000000000000000000000000000000000000..0ada3a046aa376e5b2149f39686970f812568db8 GIT binary patch literal 5079 zcma)AWl$W-vWAclEJz5N06~MhYj75KXK@R-zmV%JVnWo4pN%V?=qP5xvSHL6_zs(NU3R0ezjxZS@g|;^%M!b5tD&jJ1?4 z%gL*Z*L07lwhIZ!wR(pbX>XHnr(%>97KY;Ckso^hzD`=rYdB8Z$zaGnwY3FZ8x3D=%Ue&;Vq zD+2^oe90klUwcu{q67Tdn{V)BA-tRa0$BvI5TlEfKeg;38S7MZZjjKo##Hxv^z|@&cXu-=Xg?2BsKVg#%Vn`1a_0P*$_pl zdk>7aS&EKiGfy=LxB{R2n)2Sv2~5*61c?~b-c0`0-PGDV{S{=toy+^gLcBe6LT%Y` zb34qf&m%=GlrgE7Ms*wc{NoAolySHFkLt|{mcL$qLRg<~*(vhTFMiQ%yob^Gy?&}J)d;P)TbE@muH8s`Sn9^P1l$3}0}4B8(M!LPeX+V^`nFLZ0YP~S zj)-`5h^7Ly7PI!pwu47{NuS|Y%pN{X%g-wd2G^x|phYCa?boh*>iHdL3Y;`k?B`7eYwqxl_S@}L zW{WMQy-_TFW32cM!_kO!utNBQ@nF%1i`e85^J=X^Jy(ex$R}I@ciMxGqRqA`AIi8A z8-PRXX`l694z|#aEJ01*82irpUht$jHawnBoq&ru!nE>Wtr}tVzAkp~*f?o0CTse& zFUKp}KT&{t^WSk}bU(m9#K6=+67?3MlVu|2pY5~@2{t1%?1|Q~GP!C3h7}noLi!~} z+`}H2cF3+i?Tbdi`fK0_#}4rv=~J@F-zIAu`m*7d#Cv;=&⁣P|s`QjSg2+Kcatk zc{P!mPwk*awt(^x7m*L;47E3qFkdbvu{}LnT8axOisd%j-rY)}R+ta{jM*=}a3iU< z?7L)0B@wZ<5)NWDziZ4tHxUUJOhm)69#H3`jEj<)9nhKGx`8Iz~o{O?`LGjplX`H)#l!X68WpF4r)#ZlT*m9K^h&Swb^)JTamsSIFof zo@B=~uCWtC!?E7)JZ^g&%fPwDVua7KJ6(ZDYwX}aOB}!rWRUC)ee$Dqx?x&wT_-k5 z!ST+Hu=0T<%GW^#PI^&;KGQH=dB5{&057)CMakR_(Ii*uyL;<$tr9}x#f+2kr@v$R z&M2e|ErLoih>3Xr1I9pHV1^}o;?in3!liW`%9W11ji4$q02fu{49+fC*jsNYnH>+v zc3*91Pidxqc@q0-uK&?r!Pm_;{1`a4jhb+1BdcLkJ}Lxt2RS20$J-11%cq?|Ux-eI zx`PNpOP`Ndd@-RLFwx*}_bXv-vhO9rw9Nm7;~QnpCXv-Xnc!2}DZKqMw2IA6fox-q z8Fo@)*ge`j6q{Z$uz*4%lIV9O2aAbT<{AC*eGpGMUK)_4p8U)nbzXR?Uh911k+{S1 zW=?oTuwY>@dZKsH#KWHNbuG89kHDU(1Pg?M@Mi{3bzA?h zqjy6>@YOdyg0uX9QqW9CqS}to+4iOCm;k6~j2uW}W;I#C$N*$>IjYU*XxWW1)^@rya#IWOZDQ3WDj0|MMFFKd+7_* zwQ?&}l@rpzzfuTst34P%WJVE#YkvCPeI&2w z5K+PwZ`7*TkZl}hxqgVH++Mrc@o+Ejc0Jb1S&<(`@s2wG`jj(Kqx)nXgD=cmtoDBiKIua8Au>R9R`|wEoqRYRUg(chmCvK)|A743Q}yKyA#b zvi8DqJTlh``>1_)&Bgo;gf{0m>5ySmlfAXw*SGDc%6p)tr5dzkBH&oHtHbLLkm5Fo z5LsgW!5s9P;bI(FJzMg=eJZpTgs*o-V9J~odaj4qdiVAb#0FD((=?2yU+U^QJuhWh zgb#F^Gg4dV>Ob|U2| zati8rvy{KRvg1C-6Z*Z}uEuB4x@l2g;^8FF`N`4ig;dq9R^(K#>q7b>LcoF12}q-Q zH*oQD(V@m|CZ3ZXz6ob5=z_$;$OSLNPCuBk^K5`$PL-g8t6mr@3Vm$Bd-vg<)GkV7 z{`chvwKol4t;ICJljQHM&5$-H2O-6)Ia#)3a=)w3c7G2xh=#!6cdvHHuas3D3 zzZmj3`5&vyJgYG4pS0n(;-#z++^A3}?q2OiuhM60V4IO%Q)5a*1%5IU>#XkJu1fzg zv37oVgEe1m-Wdg%m09J&CchV5DPd!m)xkRk?zpmRUgu$vk%!|9<&s5Iut?VEx zA|_YHLoYEFy&KM<7U5m)y?1j#d6tttnct5Y21iFAyOU9e)--Tzt&d*xm!ITY>?0ARa`%7VxGI^ zt2t8eL_U);?J)&kDYF=@A~`v|xn{D;`D1&QU->{EQZY5uwmQJ2?Fib{h1Kj*?7{2c zSwoapLj5zG)%_gwHL#VMaBT#X%wHJaL23p#5$xwi6oBc*6O1(c+ImSZpP z`Q^9IBG<$BP)B&9{hSnVyS3K@%gxwh{_k=zNWeC2nMfvsiizWh!CcLA3tr8>oeIST zJs(ZmV*fIm#e;HF7=8kSd7T>zQOAI!4Mam>ZUYP05)S(%80A()LP6jxNhjm=3K)7j zjb%^^a*o&u0OpL_G>c4DW>waixW%uK*` zaUV2IlA>dyV0{oB0*5WYVP0iiRxu|e32OxDm%*f}{uFN#^13}ClC(FI(~jtcPD(kL zwwTic?3YZ(v=wRZHb#KVFX%I^o*bgvuCM>8a!!=$`^Hx;0=htb z%;!g+ua__jVTAy(>UO-#2QxKg(m$OUc9v%eHq)rtq_E0TI`#aRy(*H0CtsUNDNQ8s zG-I0Nm?%gZ=8D#=>28n9r_|LA{js$kZpmXxnUCKz=Zy4R!M~W@^V*V6 z)N$~{_aBhH{BDU^vzG>?F;_EcY?5dReQ-_Mx}SgeGMo5=MbWueS;M`GA#Eur zs5O??R~w;r8rdk}ntMpEX`AbSm6HABX_5HC1HCpbx`|?&bKQ;WvC*m8e3RcUpPl3# zemR@z-csU#?3djF;kZl;e^@5~3T3yZ(;|rCv0XC48I#{E&EFBdT^9hl96EIAC7LpK z>AGVVpWk|`_?eiP#AC`f+)=#1baruZ;&*h}+)m7CB^Vb?vH%Tmr+3cbmn#P-QlU?F z^zM#D;I+UB3JP7@P(iQlswoqzseTiV&G?7ViM0rEpp2(3s$c)a4@vlZoAzplaO{)O z(e-7TFMxl!qiUq~T)K^rFZHmw-4QYU>2u88E@^x8^IY^nQq{mO=xpF;YfGS)Q8;q- zQaH1ms<{OjgUQ8;3ov^!d3kxgq@;S|o|aG3kgJVNU_0w0%t@?`Z`19I%qo`Gog%}v z$rG636~bqrnpclc!>oFo|BSZ(fKqSDVGfq)6Brg(Gh;*mz|YA;1=#Env9Ms6PboNd zyPT4??T1RZkx1e|AtRzHJXOld%6J2>-BVIhu<-F4C1E9RXBq%bKp-`}Vj_cxNEQX3 z-H&F^9kF>_U*?RzY7XHZzI=sd8v1P#S&~#wke4T2RRCt4#xfm4usy4A_dXzL>epmO z;Y6`f>gUmfP4sQHLvx;()g!h)(6>DpnwsthlgGthz6b~1@+T)JtL6$L5eoUfALZ|! z#Gp{z-^eCCy^NT}=*r#Sl67?r`<9(qPo^E-GbSHZx18*as)(3n|7MX&PQwmUT{$Oa zfdv^5u7znx-h9fJ2uR7!#_8$^x-*2iQV|gmsb=%}bqMsJ@-%jNGoJy18SIJF}Gy=S6aPmBUpC+!BHrn;BIK`jaRHVu9`8l}2+H50%wO z6=BeGDQl3|Qw*lnq{%u_O3X+;k1416d)vIU@~!td8Fs|{{=zN;OxDEbD*K<3=l){i~Z2at)_8ri(Ei zy;xVNOt7 z_y!9X`Id&O5V73IPwms8Xyh)drpd2i_g-K53@-ox literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/checkboxes-non-exclusive.png b/src/widgets/doc/images/checkboxes-non-exclusive.png new file mode 100644 index 0000000000000000000000000000000000000000..4211aaedfb4841ea2417d73799aae90494c02a3f GIT binary patch literal 5614 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/graphicsview-items.png b/src/widgets/doc/images/graphicsview-items.png similarity index 100% rename from doc/src/images/graphicsview-items.png rename to src/widgets/doc/images/graphicsview-items.png diff --git a/doc/src/images/graphicsview-pathitem.png b/src/widgets/doc/images/graphicsview-pathitem.png similarity index 100% rename from doc/src/images/graphicsview-pathitem.png rename to src/widgets/doc/images/graphicsview-pathitem.png diff --git a/doc/src/images/graphicsview-pixmapitem.png b/src/widgets/doc/images/graphicsview-pixmapitem.png similarity index 100% rename from doc/src/images/graphicsview-pixmapitem.png rename to src/widgets/doc/images/graphicsview-pixmapitem.png diff --git a/doc/src/images/graphicsview-polygonitem.png b/src/widgets/doc/images/graphicsview-polygonitem.png similarity index 100% rename from doc/src/images/graphicsview-polygonitem.png rename to src/widgets/doc/images/graphicsview-polygonitem.png diff --git a/doc/src/images/graphicsview-rectitem.png b/src/widgets/doc/images/graphicsview-rectitem.png similarity index 100% rename from doc/src/images/graphicsview-rectitem.png rename to src/widgets/doc/images/graphicsview-rectitem.png diff --git a/doc/src/images/graphicsview-zorder.png b/src/widgets/doc/images/graphicsview-zorder.png similarity index 100% rename from doc/src/images/graphicsview-zorder.png rename to src/widgets/doc/images/graphicsview-zorder.png diff --git a/doc/src/images/gridlayout.png b/src/widgets/doc/images/gridlayout.png similarity index 100% rename from doc/src/images/gridlayout.png rename to src/widgets/doc/images/gridlayout.png diff --git a/doc/src/images/gtk-calendarwidget.png b/src/widgets/doc/images/gtk-calendarwidget.png similarity index 100% rename from doc/src/images/gtk-calendarwidget.png rename to src/widgets/doc/images/gtk-calendarwidget.png diff --git a/doc/src/images/gtk-checkbox.png b/src/widgets/doc/images/gtk-checkbox.png similarity index 100% rename from doc/src/images/gtk-checkbox.png rename to src/widgets/doc/images/gtk-checkbox.png diff --git a/doc/src/images/gtk-combobox.png b/src/widgets/doc/images/gtk-combobox.png similarity index 100% rename from doc/src/images/gtk-combobox.png rename to src/widgets/doc/images/gtk-combobox.png diff --git a/doc/src/images/gtk-dateedit.png b/src/widgets/doc/images/gtk-dateedit.png similarity index 100% rename from doc/src/images/gtk-dateedit.png rename to src/widgets/doc/images/gtk-dateedit.png diff --git a/doc/src/images/gtk-datetimeedit.png b/src/widgets/doc/images/gtk-datetimeedit.png similarity index 100% rename from doc/src/images/gtk-datetimeedit.png rename to src/widgets/doc/images/gtk-datetimeedit.png diff --git a/doc/src/images/gtk-dial.png b/src/widgets/doc/images/gtk-dial.png similarity index 100% rename from doc/src/images/gtk-dial.png rename to src/widgets/doc/images/gtk-dial.png diff --git a/doc/src/images/gtk-doublespinbox.png b/src/widgets/doc/images/gtk-doublespinbox.png similarity index 100% rename from doc/src/images/gtk-doublespinbox.png rename to src/widgets/doc/images/gtk-doublespinbox.png diff --git a/doc/src/images/gtk-fontcombobox.png b/src/widgets/doc/images/gtk-fontcombobox.png similarity index 100% rename from doc/src/images/gtk-fontcombobox.png rename to src/widgets/doc/images/gtk-fontcombobox.png diff --git a/doc/src/images/gtk-frame.png b/src/widgets/doc/images/gtk-frame.png similarity index 100% rename from doc/src/images/gtk-frame.png rename to src/widgets/doc/images/gtk-frame.png diff --git a/doc/src/images/gtk-groupbox.png b/src/widgets/doc/images/gtk-groupbox.png similarity index 100% rename from doc/src/images/gtk-groupbox.png rename to src/widgets/doc/images/gtk-groupbox.png diff --git a/doc/src/images/gtk-horizontalscrollbar.png b/src/widgets/doc/images/gtk-horizontalscrollbar.png similarity index 100% rename from doc/src/images/gtk-horizontalscrollbar.png rename to src/widgets/doc/images/gtk-horizontalscrollbar.png diff --git a/doc/src/images/gtk-label.png b/src/widgets/doc/images/gtk-label.png similarity index 100% rename from doc/src/images/gtk-label.png rename to src/widgets/doc/images/gtk-label.png diff --git a/doc/src/images/gtk-lcdnumber.png b/src/widgets/doc/images/gtk-lcdnumber.png similarity index 100% rename from doc/src/images/gtk-lcdnumber.png rename to src/widgets/doc/images/gtk-lcdnumber.png diff --git a/doc/src/images/gtk-lineedit.png b/src/widgets/doc/images/gtk-lineedit.png similarity index 100% rename from doc/src/images/gtk-lineedit.png rename to src/widgets/doc/images/gtk-lineedit.png diff --git a/doc/src/images/gtk-listview.png b/src/widgets/doc/images/gtk-listview.png similarity index 100% rename from doc/src/images/gtk-listview.png rename to src/widgets/doc/images/gtk-listview.png diff --git a/doc/src/images/gtk-progressbar.png b/src/widgets/doc/images/gtk-progressbar.png similarity index 100% rename from doc/src/images/gtk-progressbar.png rename to src/widgets/doc/images/gtk-progressbar.png diff --git a/doc/src/images/gtk-pushbutton.png b/src/widgets/doc/images/gtk-pushbutton.png similarity index 100% rename from doc/src/images/gtk-pushbutton.png rename to src/widgets/doc/images/gtk-pushbutton.png diff --git a/doc/src/images/gtk-radiobutton.png b/src/widgets/doc/images/gtk-radiobutton.png similarity index 100% rename from doc/src/images/gtk-radiobutton.png rename to src/widgets/doc/images/gtk-radiobutton.png diff --git a/doc/src/images/gtk-slider.png b/src/widgets/doc/images/gtk-slider.png similarity index 100% rename from doc/src/images/gtk-slider.png rename to src/widgets/doc/images/gtk-slider.png diff --git a/doc/src/images/gtk-spinbox.png b/src/widgets/doc/images/gtk-spinbox.png similarity index 100% rename from doc/src/images/gtk-spinbox.png rename to src/widgets/doc/images/gtk-spinbox.png diff --git a/doc/src/images/gtk-tableview.png b/src/widgets/doc/images/gtk-tableview.png similarity index 100% rename from doc/src/images/gtk-tableview.png rename to src/widgets/doc/images/gtk-tableview.png diff --git a/doc/src/images/gtk-tabwidget.png b/src/widgets/doc/images/gtk-tabwidget.png similarity index 100% rename from doc/src/images/gtk-tabwidget.png rename to src/widgets/doc/images/gtk-tabwidget.png diff --git a/doc/src/images/gtk-textedit.png b/src/widgets/doc/images/gtk-textedit.png similarity index 100% rename from doc/src/images/gtk-textedit.png rename to src/widgets/doc/images/gtk-textedit.png diff --git a/doc/src/images/gtk-timeedit.png b/src/widgets/doc/images/gtk-timeedit.png similarity index 100% rename from doc/src/images/gtk-timeedit.png rename to src/widgets/doc/images/gtk-timeedit.png diff --git a/doc/src/images/gtk-toolbox.png b/src/widgets/doc/images/gtk-toolbox.png similarity index 100% rename from doc/src/images/gtk-toolbox.png rename to src/widgets/doc/images/gtk-toolbox.png diff --git a/doc/src/images/gtk-toolbutton.png b/src/widgets/doc/images/gtk-toolbutton.png similarity index 100% rename from doc/src/images/gtk-toolbutton.png rename to src/widgets/doc/images/gtk-toolbutton.png diff --git a/doc/src/images/gtk-treeview.png b/src/widgets/doc/images/gtk-treeview.png similarity index 100% rename from doc/src/images/gtk-treeview.png rename to src/widgets/doc/images/gtk-treeview.png diff --git a/doc/src/images/javastyle/branchindicatorimage.png b/src/widgets/doc/images/javastyle/branchindicatorimage.png similarity index 100% rename from doc/src/images/javastyle/branchindicatorimage.png rename to src/widgets/doc/images/javastyle/branchindicatorimage.png diff --git a/doc/src/images/javastyle/button.png b/src/widgets/doc/images/javastyle/button.png similarity index 100% rename from doc/src/images/javastyle/button.png rename to src/widgets/doc/images/javastyle/button.png diff --git a/doc/src/images/javastyle/checkbox.png b/src/widgets/doc/images/javastyle/checkbox.png similarity index 100% rename from doc/src/images/javastyle/checkbox.png rename to src/widgets/doc/images/javastyle/checkbox.png diff --git a/doc/src/images/javastyle/checkboxexample.png b/src/widgets/doc/images/javastyle/checkboxexample.png similarity index 100% rename from doc/src/images/javastyle/checkboxexample.png rename to src/widgets/doc/images/javastyle/checkboxexample.png diff --git a/doc/src/images/javastyle/combobox.png b/src/widgets/doc/images/javastyle/combobox.png similarity index 100% rename from doc/src/images/javastyle/combobox.png rename to src/widgets/doc/images/javastyle/combobox.png diff --git a/doc/src/images/javastyle/comboboximage.png b/src/widgets/doc/images/javastyle/comboboximage.png similarity index 100% rename from doc/src/images/javastyle/comboboximage.png rename to src/widgets/doc/images/javastyle/comboboximage.png diff --git a/doc/src/images/javastyle/conceptualpushbuttontree.png b/src/widgets/doc/images/javastyle/conceptualpushbuttontree.png similarity index 100% rename from doc/src/images/javastyle/conceptualpushbuttontree.png rename to src/widgets/doc/images/javastyle/conceptualpushbuttontree.png diff --git a/doc/src/images/javastyle/dockwidget.png b/src/widgets/doc/images/javastyle/dockwidget.png similarity index 100% rename from doc/src/images/javastyle/dockwidget.png rename to src/widgets/doc/images/javastyle/dockwidget.png diff --git a/doc/src/images/javastyle/dockwidgetimage.png b/src/widgets/doc/images/javastyle/dockwidgetimage.png similarity index 100% rename from doc/src/images/javastyle/dockwidgetimage.png rename to src/widgets/doc/images/javastyle/dockwidgetimage.png diff --git a/doc/src/images/javastyle/groupbox.png b/src/widgets/doc/images/javastyle/groupbox.png similarity index 100% rename from doc/src/images/javastyle/groupbox.png rename to src/widgets/doc/images/javastyle/groupbox.png diff --git a/doc/src/images/javastyle/groupboximage.png b/src/widgets/doc/images/javastyle/groupboximage.png similarity index 100% rename from doc/src/images/javastyle/groupboximage.png rename to src/widgets/doc/images/javastyle/groupboximage.png diff --git a/doc/src/images/javastyle/header.png b/src/widgets/doc/images/javastyle/header.png similarity index 100% rename from doc/src/images/javastyle/header.png rename to src/widgets/doc/images/javastyle/header.png diff --git a/doc/src/images/javastyle/headerimage.png b/src/widgets/doc/images/javastyle/headerimage.png similarity index 100% rename from doc/src/images/javastyle/headerimage.png rename to src/widgets/doc/images/javastyle/headerimage.png diff --git a/doc/src/images/javastyle/menu.png b/src/widgets/doc/images/javastyle/menu.png similarity index 100% rename from doc/src/images/javastyle/menu.png rename to src/widgets/doc/images/javastyle/menu.png diff --git a/doc/src/images/javastyle/menubar.png b/src/widgets/doc/images/javastyle/menubar.png similarity index 100% rename from doc/src/images/javastyle/menubar.png rename to src/widgets/doc/images/javastyle/menubar.png diff --git a/doc/src/images/javastyle/menubarimage.png b/src/widgets/doc/images/javastyle/menubarimage.png similarity index 100% rename from doc/src/images/javastyle/menubarimage.png rename to src/widgets/doc/images/javastyle/menubarimage.png diff --git a/doc/src/images/javastyle/menuimage.png b/src/widgets/doc/images/javastyle/menuimage.png similarity index 100% rename from doc/src/images/javastyle/menuimage.png rename to src/widgets/doc/images/javastyle/menuimage.png diff --git a/doc/src/images/javastyle/progressbar.png b/src/widgets/doc/images/javastyle/progressbar.png similarity index 100% rename from doc/src/images/javastyle/progressbar.png rename to src/widgets/doc/images/javastyle/progressbar.png diff --git a/doc/src/images/javastyle/progressbarimage.png b/src/widgets/doc/images/javastyle/progressbarimage.png similarity index 100% rename from doc/src/images/javastyle/progressbarimage.png rename to src/widgets/doc/images/javastyle/progressbarimage.png diff --git a/doc/src/images/javastyle/pushbutton.png b/src/widgets/doc/images/javastyle/pushbutton.png similarity index 100% rename from doc/src/images/javastyle/pushbutton.png rename to src/widgets/doc/images/javastyle/pushbutton.png diff --git a/doc/src/images/javastyle/rubberband.png b/src/widgets/doc/images/javastyle/rubberband.png similarity index 100% rename from doc/src/images/javastyle/rubberband.png rename to src/widgets/doc/images/javastyle/rubberband.png diff --git a/doc/src/images/javastyle/rubberbandimage.png b/src/widgets/doc/images/javastyle/rubberbandimage.png similarity index 100% rename from doc/src/images/javastyle/rubberbandimage.png rename to src/widgets/doc/images/javastyle/rubberbandimage.png diff --git a/doc/src/images/javastyle/scrollbar.png b/src/widgets/doc/images/javastyle/scrollbar.png similarity index 100% rename from doc/src/images/javastyle/scrollbar.png rename to src/widgets/doc/images/javastyle/scrollbar.png diff --git a/doc/src/images/javastyle/scrollbarimage.png b/src/widgets/doc/images/javastyle/scrollbarimage.png similarity index 100% rename from doc/src/images/javastyle/scrollbarimage.png rename to src/widgets/doc/images/javastyle/scrollbarimage.png diff --git a/doc/src/images/javastyle/sizegrip.png b/src/widgets/doc/images/javastyle/sizegrip.png similarity index 100% rename from doc/src/images/javastyle/sizegrip.png rename to src/widgets/doc/images/javastyle/sizegrip.png diff --git a/doc/src/images/javastyle/sizegripimage.png b/src/widgets/doc/images/javastyle/sizegripimage.png similarity index 100% rename from doc/src/images/javastyle/sizegripimage.png rename to src/widgets/doc/images/javastyle/sizegripimage.png diff --git a/doc/src/images/javastyle/slider.png b/src/widgets/doc/images/javastyle/slider.png similarity index 100% rename from doc/src/images/javastyle/slider.png rename to src/widgets/doc/images/javastyle/slider.png diff --git a/doc/src/images/javastyle/sliderimage.png b/src/widgets/doc/images/javastyle/sliderimage.png similarity index 100% rename from doc/src/images/javastyle/sliderimage.png rename to src/widgets/doc/images/javastyle/sliderimage.png diff --git a/doc/src/images/javastyle/spinbox.png b/src/widgets/doc/images/javastyle/spinbox.png similarity index 100% rename from doc/src/images/javastyle/spinbox.png rename to src/widgets/doc/images/javastyle/spinbox.png diff --git a/doc/src/images/javastyle/spinboximage.png b/src/widgets/doc/images/javastyle/spinboximage.png similarity index 100% rename from doc/src/images/javastyle/spinboximage.png rename to src/widgets/doc/images/javastyle/spinboximage.png diff --git a/doc/src/images/javastyle/tab.png b/src/widgets/doc/images/javastyle/tab.png similarity index 100% rename from doc/src/images/javastyle/tab.png rename to src/widgets/doc/images/javastyle/tab.png diff --git a/doc/src/images/javastyle/tabwidget.png b/src/widgets/doc/images/javastyle/tabwidget.png similarity index 100% rename from doc/src/images/javastyle/tabwidget.png rename to src/widgets/doc/images/javastyle/tabwidget.png diff --git a/doc/src/images/javastyle/titlebar.png b/src/widgets/doc/images/javastyle/titlebar.png similarity index 100% rename from doc/src/images/javastyle/titlebar.png rename to src/widgets/doc/images/javastyle/titlebar.png diff --git a/doc/src/images/javastyle/titlebarimage.png b/src/widgets/doc/images/javastyle/titlebarimage.png similarity index 100% rename from doc/src/images/javastyle/titlebarimage.png rename to src/widgets/doc/images/javastyle/titlebarimage.png diff --git a/doc/src/images/javastyle/toolbar.png b/src/widgets/doc/images/javastyle/toolbar.png similarity index 100% rename from doc/src/images/javastyle/toolbar.png rename to src/widgets/doc/images/javastyle/toolbar.png diff --git a/doc/src/images/javastyle/toolbarimage.png b/src/widgets/doc/images/javastyle/toolbarimage.png similarity index 100% rename from doc/src/images/javastyle/toolbarimage.png rename to src/widgets/doc/images/javastyle/toolbarimage.png diff --git a/doc/src/images/javastyle/toolbox.png b/src/widgets/doc/images/javastyle/toolbox.png similarity index 100% rename from doc/src/images/javastyle/toolbox.png rename to src/widgets/doc/images/javastyle/toolbox.png diff --git a/doc/src/images/javastyle/toolboximage.png b/src/widgets/doc/images/javastyle/toolboximage.png similarity index 100% rename from doc/src/images/javastyle/toolboximage.png rename to src/widgets/doc/images/javastyle/toolboximage.png diff --git a/doc/src/images/javastyle/toolbutton.png b/src/widgets/doc/images/javastyle/toolbutton.png similarity index 100% rename from doc/src/images/javastyle/toolbutton.png rename to src/widgets/doc/images/javastyle/toolbutton.png diff --git a/doc/src/images/javastyle/toolbuttonimage.png b/src/widgets/doc/images/javastyle/toolbuttonimage.png similarity index 100% rename from doc/src/images/javastyle/toolbuttonimage.png rename to src/widgets/doc/images/javastyle/toolbuttonimage.png diff --git a/doc/src/images/javastyle/windowstabimage.png b/src/widgets/doc/images/javastyle/windowstabimage.png similarity index 100% rename from doc/src/images/javastyle/windowstabimage.png rename to src/widgets/doc/images/javastyle/windowstabimage.png diff --git a/doc/src/images/licensewizard-flow.png b/src/widgets/doc/images/licensewizard-flow.png similarity index 100% rename from doc/src/images/licensewizard-flow.png rename to src/widgets/doc/images/licensewizard-flow.png diff --git a/doc/src/images/macintosh-calendarwidget.png b/src/widgets/doc/images/macintosh-calendarwidget.png similarity index 100% rename from doc/src/images/macintosh-calendarwidget.png rename to src/widgets/doc/images/macintosh-calendarwidget.png diff --git a/doc/src/images/macintosh-checkbox.png b/src/widgets/doc/images/macintosh-checkbox.png similarity index 100% rename from doc/src/images/macintosh-checkbox.png rename to src/widgets/doc/images/macintosh-checkbox.png diff --git a/doc/src/images/macintosh-combobox.png b/src/widgets/doc/images/macintosh-combobox.png similarity index 100% rename from doc/src/images/macintosh-combobox.png rename to src/widgets/doc/images/macintosh-combobox.png diff --git a/doc/src/images/macintosh-dateedit.png b/src/widgets/doc/images/macintosh-dateedit.png similarity index 100% rename from doc/src/images/macintosh-dateedit.png rename to src/widgets/doc/images/macintosh-dateedit.png diff --git a/doc/src/images/macintosh-datetimeedit.png b/src/widgets/doc/images/macintosh-datetimeedit.png similarity index 100% rename from doc/src/images/macintosh-datetimeedit.png rename to src/widgets/doc/images/macintosh-datetimeedit.png diff --git a/doc/src/images/macintosh-dial.png b/src/widgets/doc/images/macintosh-dial.png similarity index 100% rename from doc/src/images/macintosh-dial.png rename to src/widgets/doc/images/macintosh-dial.png diff --git a/doc/src/images/macintosh-doublespinbox.png b/src/widgets/doc/images/macintosh-doublespinbox.png similarity index 100% rename from doc/src/images/macintosh-doublespinbox.png rename to src/widgets/doc/images/macintosh-doublespinbox.png diff --git a/doc/src/images/macintosh-fontcombobox.png b/src/widgets/doc/images/macintosh-fontcombobox.png similarity index 100% rename from doc/src/images/macintosh-fontcombobox.png rename to src/widgets/doc/images/macintosh-fontcombobox.png diff --git a/doc/src/images/macintosh-frame.png b/src/widgets/doc/images/macintosh-frame.png similarity index 100% rename from doc/src/images/macintosh-frame.png rename to src/widgets/doc/images/macintosh-frame.png diff --git a/doc/src/images/macintosh-groupbox.png b/src/widgets/doc/images/macintosh-groupbox.png similarity index 100% rename from doc/src/images/macintosh-groupbox.png rename to src/widgets/doc/images/macintosh-groupbox.png diff --git a/doc/src/images/macintosh-horizontalscrollbar.png b/src/widgets/doc/images/macintosh-horizontalscrollbar.png similarity index 100% rename from doc/src/images/macintosh-horizontalscrollbar.png rename to src/widgets/doc/images/macintosh-horizontalscrollbar.png diff --git a/doc/src/images/macintosh-label.png b/src/widgets/doc/images/macintosh-label.png similarity index 100% rename from doc/src/images/macintosh-label.png rename to src/widgets/doc/images/macintosh-label.png diff --git a/doc/src/images/macintosh-lcdnumber.png b/src/widgets/doc/images/macintosh-lcdnumber.png similarity index 100% rename from doc/src/images/macintosh-lcdnumber.png rename to src/widgets/doc/images/macintosh-lcdnumber.png diff --git a/doc/src/images/macintosh-lineedit.png b/src/widgets/doc/images/macintosh-lineedit.png similarity index 100% rename from doc/src/images/macintosh-lineedit.png rename to src/widgets/doc/images/macintosh-lineedit.png diff --git a/doc/src/images/macintosh-listview.png b/src/widgets/doc/images/macintosh-listview.png similarity index 100% rename from doc/src/images/macintosh-listview.png rename to src/widgets/doc/images/macintosh-listview.png diff --git a/src/widgets/doc/images/macintosh-menu.png b/src/widgets/doc/images/macintosh-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..59bdceaab64dce20d0eaf01774fab5f7a42592af GIT binary patch literal 6891 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 C^bC;z literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/mdi-tile.png b/src/widgets/doc/images/mdi-tile.png new file mode 100644 index 0000000000000000000000000000000000000000..1486d9654e99c2f2c737e35798b4451331d72a24 GIT binary patch literal 31624 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 V`J?Ldlrb11^oWK!MFgAB{|D3GRZai^ literal 0 HcmV?d00001 diff --git a/doc/src/images/motif-calendarwidget.png b/src/widgets/doc/images/motif-calendarwidget.png similarity index 100% rename from doc/src/images/motif-calendarwidget.png rename to src/widgets/doc/images/motif-calendarwidget.png diff --git a/doc/src/images/motif-checkbox.png b/src/widgets/doc/images/motif-checkbox.png similarity index 100% rename from doc/src/images/motif-checkbox.png rename to src/widgets/doc/images/motif-checkbox.png diff --git a/doc/src/images/motif-combobox.png b/src/widgets/doc/images/motif-combobox.png similarity index 100% rename from doc/src/images/motif-combobox.png rename to src/widgets/doc/images/motif-combobox.png diff --git a/doc/src/images/motif-dateedit.png b/src/widgets/doc/images/motif-dateedit.png similarity index 100% rename from doc/src/images/motif-dateedit.png rename to src/widgets/doc/images/motif-dateedit.png diff --git a/doc/src/images/motif-datetimeedit.png b/src/widgets/doc/images/motif-datetimeedit.png similarity index 100% rename from doc/src/images/motif-datetimeedit.png rename to src/widgets/doc/images/motif-datetimeedit.png diff --git a/doc/src/images/motif-dial.png b/src/widgets/doc/images/motif-dial.png similarity index 100% rename from doc/src/images/motif-dial.png rename to src/widgets/doc/images/motif-dial.png diff --git a/doc/src/images/motif-doublespinbox.png b/src/widgets/doc/images/motif-doublespinbox.png similarity index 100% rename from doc/src/images/motif-doublespinbox.png rename to src/widgets/doc/images/motif-doublespinbox.png diff --git a/doc/src/images/motif-fontcombobox.png b/src/widgets/doc/images/motif-fontcombobox.png similarity index 100% rename from doc/src/images/motif-fontcombobox.png rename to src/widgets/doc/images/motif-fontcombobox.png diff --git a/doc/src/images/motif-frame.png b/src/widgets/doc/images/motif-frame.png similarity index 100% rename from doc/src/images/motif-frame.png rename to src/widgets/doc/images/motif-frame.png diff --git a/doc/src/images/motif-groupbox.png b/src/widgets/doc/images/motif-groupbox.png similarity index 100% rename from doc/src/images/motif-groupbox.png rename to src/widgets/doc/images/motif-groupbox.png diff --git a/doc/src/images/motif-horizontalscrollbar.png b/src/widgets/doc/images/motif-horizontalscrollbar.png similarity index 100% rename from doc/src/images/motif-horizontalscrollbar.png rename to src/widgets/doc/images/motif-horizontalscrollbar.png diff --git a/doc/src/images/motif-label.png b/src/widgets/doc/images/motif-label.png similarity index 100% rename from doc/src/images/motif-label.png rename to src/widgets/doc/images/motif-label.png diff --git a/doc/src/images/motif-lcdnumber.png b/src/widgets/doc/images/motif-lcdnumber.png similarity index 100% rename from doc/src/images/motif-lcdnumber.png rename to src/widgets/doc/images/motif-lcdnumber.png diff --git a/doc/src/images/motif-lineedit.png b/src/widgets/doc/images/motif-lineedit.png similarity index 100% rename from doc/src/images/motif-lineedit.png rename to src/widgets/doc/images/motif-lineedit.png diff --git a/doc/src/images/motif-listview.png b/src/widgets/doc/images/motif-listview.png similarity index 100% rename from doc/src/images/motif-listview.png rename to src/widgets/doc/images/motif-listview.png diff --git a/src/widgets/doc/images/motif-menubar.png b/src/widgets/doc/images/motif-menubar.png new file mode 100644 index 0000000000000000000000000000000000000000..f1d9f4bb3dae9da13d1fdb352ad22cae29eb1a54 GIT binary patch literal 1350 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/plastique-pushbutton.png b/src/widgets/doc/images/plastique-pushbutton.png similarity index 100% rename from doc/src/images/plastique-pushbutton.png rename to src/widgets/doc/images/plastique-pushbutton.png diff --git a/doc/src/images/plastique-radiobutton.png b/src/widgets/doc/images/plastique-radiobutton.png similarity index 100% rename from doc/src/images/plastique-radiobutton.png rename to src/widgets/doc/images/plastique-radiobutton.png diff --git a/src/widgets/doc/images/plastique-sizegrip.png b/src/widgets/doc/images/plastique-sizegrip.png new file mode 100644 index 0000000000000000000000000000000000000000..09a551efab5383c6b4154683c5cb58af07bcf636 GIT binary patch literal 8168 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 O0000-iFHn literal 0 HcmV?d00001 diff --git a/doc/src/images/plastique-slider.png b/src/widgets/doc/images/plastique-slider.png similarity index 100% rename from doc/src/images/plastique-slider.png rename to src/widgets/doc/images/plastique-slider.png diff --git a/doc/src/images/plastique-spinbox.png b/src/widgets/doc/images/plastique-spinbox.png similarity index 100% rename from doc/src/images/plastique-spinbox.png rename to src/widgets/doc/images/plastique-spinbox.png diff --git a/doc/src/images/plastique-statusbar.png b/src/widgets/doc/images/plastique-statusbar.png similarity index 100% rename from doc/src/images/plastique-statusbar.png rename to src/widgets/doc/images/plastique-statusbar.png diff --git a/src/widgets/doc/images/plastique-tabbar-truncated.png b/src/widgets/doc/images/plastique-tabbar-truncated.png new file mode 100644 index 0000000000000000000000000000000000000000..8e906d99280c95fbea2227c9dc66c5a476cec425 GIT binary patch literal 2986 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 literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/plastique-tabbar.png b/src/widgets/doc/images/plastique-tabbar.png new file mode 100644 index 0000000000000000000000000000000000000000..3371dda1b6b95c94a7b4eee9c27defa070422e53 GIT binary patch literal 2721 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 bd^73)Sr6uZw(PC600000NkvXXu0mjfU#2#i literal 0 HcmV?d00001 diff --git a/doc/src/images/plastique-tableview.png b/src/widgets/doc/images/plastique-tableview.png similarity index 100% rename from doc/src/images/plastique-tableview.png rename to src/widgets/doc/images/plastique-tableview.png diff --git a/doc/src/images/plastique-tabwidget.png b/src/widgets/doc/images/plastique-tabwidget.png similarity index 100% rename from doc/src/images/plastique-tabwidget.png rename to src/widgets/doc/images/plastique-tabwidget.png diff --git a/doc/src/images/plastique-textedit.png b/src/widgets/doc/images/plastique-textedit.png similarity index 100% rename from doc/src/images/plastique-textedit.png rename to src/widgets/doc/images/plastique-textedit.png diff --git a/doc/src/images/plastique-timeedit.png b/src/widgets/doc/images/plastique-timeedit.png similarity index 100% rename from doc/src/images/plastique-timeedit.png rename to src/widgets/doc/images/plastique-timeedit.png diff --git a/doc/src/images/plastique-toolbox.png b/src/widgets/doc/images/plastique-toolbox.png similarity index 100% rename from doc/src/images/plastique-toolbox.png rename to src/widgets/doc/images/plastique-toolbox.png diff --git a/doc/src/images/plastique-toolbutton.png b/src/widgets/doc/images/plastique-toolbutton.png similarity index 100% rename from doc/src/images/plastique-toolbutton.png rename to src/widgets/doc/images/plastique-toolbutton.png diff --git a/doc/src/images/plastique-treeview.png b/src/widgets/doc/images/plastique-treeview.png similarity index 100% rename from doc/src/images/plastique-treeview.png rename to src/widgets/doc/images/plastique-treeview.png diff --git a/doc/src/images/progressBar-stylesheet.png b/src/widgets/doc/images/progressBar-stylesheet.png similarity index 100% rename from doc/src/images/progressBar-stylesheet.png rename to src/widgets/doc/images/progressBar-stylesheet.png diff --git a/doc/src/images/progressBar2-stylesheet.png b/src/widgets/doc/images/progressBar2-stylesheet.png similarity index 100% rename from doc/src/images/progressBar2-stylesheet.png rename to src/widgets/doc/images/progressBar2-stylesheet.png diff --git a/doc/src/images/propagation-custom.png b/src/widgets/doc/images/propagation-custom.png similarity index 100% rename from doc/src/images/propagation-custom.png rename to src/widgets/doc/images/propagation-custom.png diff --git a/doc/src/images/propagation-standard.png b/src/widgets/doc/images/propagation-standard.png similarity index 100% rename from doc/src/images/propagation-standard.png rename to src/widgets/doc/images/propagation-standard.png diff --git a/doc/src/images/qcalendarwidget-grid.png b/src/widgets/doc/images/qcalendarwidget-grid.png similarity index 100% rename from doc/src/images/qcalendarwidget-grid.png rename to src/widgets/doc/images/qcalendarwidget-grid.png diff --git a/doc/src/images/qcalendarwidget-maximum.png b/src/widgets/doc/images/qcalendarwidget-maximum.png similarity index 100% rename from doc/src/images/qcalendarwidget-maximum.png rename to src/widgets/doc/images/qcalendarwidget-maximum.png diff --git a/doc/src/images/qcalendarwidget-minimum.png b/src/widgets/doc/images/qcalendarwidget-minimum.png similarity index 100% rename from doc/src/images/qcalendarwidget-minimum.png rename to src/widgets/doc/images/qcalendarwidget-minimum.png diff --git a/doc/src/images/qcolumnview.png b/src/widgets/doc/images/qcolumnview.png similarity index 100% rename from doc/src/images/qcolumnview.png rename to src/widgets/doc/images/qcolumnview.png diff --git a/doc/src/images/qdesktopwidget.png b/src/widgets/doc/images/qdesktopwidget.png similarity index 100% rename from doc/src/images/qdesktopwidget.png rename to src/widgets/doc/images/qdesktopwidget.png diff --git a/src/widgets/doc/images/qformlayout-kde.png b/src/widgets/doc/images/qformlayout-kde.png new file mode 100644 index 0000000000000000000000000000000000000000..c32bb124994b351858dcb8cb72824c1ae4975e97 GIT binary patch literal 1703 zcmX}te^iq99tZG;Cs2O)0}=1Ysly;d=dMqdMbq?AQ6WVin`-S&Mp4N;`VuGlUlNOz^0Z{$?xaVN+ z6R*yi$>nF*wfdox9A#UqSHt*P^|8=;kJ`JN4b1tMxv!kZ%Yqs{D1Ll?81mp}t|%F9 zK@WvZfw}>qP|N*Cc}|V^xj4aRe%=QwyU$IbG*;Bbz3>Nk-L)O99@+ z%YKNh>rq79Op)+HPc#FG$zj%JmD!!Z^0wenFn@G)PW_DN>_!~N^Twk+%w{OcnwyzS zcPAhI0Je|&g>yP8i@L6UD*d%AhA3uip7e&_79VXO4vbMI8{*HA6`v(j2b)9RB8%^yR>H77NF=>vigju)Q ziIKB8%DTOcgFWuK5$(A?&*N}MMBWwwVbgE6HC}y?$Km{2)T#lWaFgyu7lQw6>F0hc z-SkM=e6)j;t+NJQ=09Hi&>46&=*k3RdiIYIM@xI)rqsUie$v_4Gc6X1kmIcXC8%R+ zadq>gfkulc0arQwS8aRNUHzdb``=-q&lBeGTTD^6UtU=C4em;6p_UfGPDf&Fp{`J( zy3_uKbhj(ncP`|0XQF!upoBf}qLc?2#IgQ&)#o(<=qG*c``>Pl&W3RWI`aP}#k*6o zSk_MP&gb`v_P*~{&eeRmuX%5I)^(ri7w?{B)h!v}K}2UZXPIt=|TaWFcuOrsNU3Zz*ww zKeKW})kt!A$6dkPTAmjm0fVXLX|7rXZdk@D=gfQh1~+;pDvvI1 zpx7j)8TG&}9Jbh~*O(i;PBG8lEx^Z;7iKWe#~%HYSU*g?vnMdWD$)M%oUk*x+?V&? zif1&{AHxS5Qd+4!J{7zCn~Q?wV2B*t`TbYkI~o-_fO%$0R8@rU%$<)1HpltLKTRx8 zfS(M6vl@MkW*VH(`^8W2jWY96+&NmMFXm0KM_wZzLHxGRv7h=+>>Gb;0RrW}7vnO& z4z`u}Z6kMa1l)qAjj8a*r{S}n9_3mYAmQ{ysfHK^;~JmIR`$Lia3vnOw&*Is+9ZN3 z#W*QFs~bFZW#$;d26iv$jitog9u6kkXCl3=0Qvr#As$}$u(cEq%teJ>@%n2i3w40% z6qqW4C#%b%1@R1ZBQ#e;|7u-G*u=Zi6OFn;x+XFH3I*s=9d`cYteqAxH#-d2X+Jg&zVf0~>D+)Q=cYa6E7{o|+VfWJ{+)5Zu<8OSVO z(s7$;3W|%PG+j0uMveI1_k;D67amp~6!_VW0uXQpX?LYnP7hbG@I54_A+Gj<+o>96 zzmyNsELCDd-Ya3GDyb*6J4Ni3*SCX4`rqJ8++T6-pIcYUVb_&`VPr||FMm8^t0{e# bwq)JfWB7AMT$Do|UAQ>Hq;!5qf<*NnxW(Dk literal 0 HcmV?d00001 diff --git a/src/widgets/doc/images/qformlayout-mac.png b/src/widgets/doc/images/qformlayout-mac.png new file mode 100644 index 0000000000000000000000000000000000000000..0a0824efb6579be3b70764492439407d4dc04bd5 GIT binary patch literal 1706 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 literal 0 HcmV?d00001 diff --git a/doc/src/images/qformlayout-with-6-children.png b/src/widgets/doc/images/qformlayout-with-6-children.png similarity index 100% rename from doc/src/images/qformlayout-with-6-children.png rename to src/widgets/doc/images/qformlayout-with-6-children.png diff --git a/doc/src/images/qgraphicsproxywidget-embed.png b/src/widgets/doc/images/qgraphicsproxywidget-embed.png similarity index 100% rename from doc/src/images/qgraphicsproxywidget-embed.png rename to src/widgets/doc/images/qgraphicsproxywidget-embed.png diff --git a/doc/src/images/qgridlayout-with-5-children.png b/src/widgets/doc/images/qgridlayout-with-5-children.png similarity index 100% rename from doc/src/images/qgridlayout-with-5-children.png rename to src/widgets/doc/images/qgridlayout-with-5-children.png diff --git a/doc/src/images/qhboxlayout-with-5-children.png b/src/widgets/doc/images/qhboxlayout-with-5-children.png similarity index 100% rename from doc/src/images/qhboxlayout-with-5-children.png rename to src/widgets/doc/images/qhboxlayout-with-5-children.png diff --git a/doc/src/images/qmdisubwindowlayout.png b/src/widgets/doc/images/qmdisubwindowlayout.png similarity index 100% rename from doc/src/images/qmdisubwindowlayout.png rename to src/widgets/doc/images/qmdisubwindowlayout.png diff --git a/src/widgets/doc/images/qscrollarea-noscrollbars.png b/src/widgets/doc/images/qscrollarea-noscrollbars.png new file mode 100644 index 0000000000000000000000000000000000000000..a1520f3e2114e7ed7eae115299eebf49e5634aa6 GIT binary patch literal 54671 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