diff options
602 files changed, 10415 insertions, 9239 deletions
diff --git a/FAQ.txt b/FAQ.txt deleted file mode 100644 index 1d2266d..0000000 --- a/FAQ.txt +++ /dev/null @@ -1,18 +0,0 @@ -This is a list of Frequently Asked Questions regarding this Qt release. - -Q: I'm using a Unix system and I downloaded the Zip package. However, when I try -to run the configure script, I get the following error message: -"bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory" -A: The problem here is converting files from Windows style line endings (CRLF) -to Unix style line endings (LF). To avoid this problem, uncompress the file -again and give the option "-a" to unzip, which will then add the correct line -endings. - -Q: I'm running Windows XP and I downloaded the qt-win-eval-%VERSION%-vs2008.exe -version of Qt. However, when I try to run the examples I get an error saying: -"The application failed to start because the application configuration is -incorrect. Reinstalling the application may fix this problem.". I reinstalled -the package but the error persists. What am I doing wrong? -A: The problem is an incorrect version of the CRT. Visual studio requires CRT90 -while Windows XP comes with CRT80. To solve this problem, please install the -2008 CRT redistributable package from Microsoft. diff --git a/demos/browser/data/defaultbookmarks.xbel b/demos/browser/data/defaultbookmarks.xbel index 1d20ac0..dce5297 100644 --- a/demos/browser/data/defaultbookmarks.xbel +++ b/demos/browser/data/defaultbookmarks.xbel @@ -30,6 +30,9 @@ <bookmark href="http://xkcd.com/"> <title>xkcd</title> </bookmark> + <bookmark href="http://twitter.com/qtbynokia"> + <title>Twitter</title> + </bookmark> </folder> <folder folded="yes"> <title>Bookmarks Menu</title> diff --git a/doc/src/bughowto.qdoc b/doc/src/bughowto.qdoc index b6520f3..645154b 100644 --- a/doc/src/bughowto.qdoc +++ b/doc/src/bughowto.qdoc @@ -43,7 +43,6 @@ \page bughowto.html \title How to Report a Bug \brief Information about ways to report bugs in Qt. - \ingroup howto If you think you have found a bug in Qt, we would like to hear about it so that we can fix it. diff --git a/doc/src/classes.qdoc b/doc/src/classes.qdoc index d9a0ae9..864445f 100644 --- a/doc/src/classes.qdoc +++ b/doc/src/classes.qdoc @@ -40,6 +40,18 @@ ****************************************************************************/ /*! + \group classlists + \title Class and Function Indexes + \brief Collections of classes and functions grouped together into lists. + + The following documents contain collections of classes, grouped by + subject area or related to particular functionality, or comprehensive + lists of classes and functions. + + \generatelist{related} +*/ + +/*! \group groups \title Grouped Classes \ingroup classlists @@ -56,11 +68,9 @@ \title Qt's Classes \ingroup classlists - This is a list of all Qt classes. For a shorter list of the most - frequently used Qt classes, see \l{Qt's Main Classes}. For a list - of the classes provided for compatibility with Qt3, see \l{Qt 3 - compatibility classes}. For classes that have been deprecated, see - the \l{Obsolete Classes} list. + This is a list of all Qt classes. For a list of the classes provided + for compatibility with Qt3, see \l{Qt 3 compatibility classes}. For + classes that have been deprecated, see the \l{Obsolete Classes} list. \generatelist classes @@ -128,17 +138,6 @@ */ /*! - \page mainclasses.html - \title Qt's Main Classes - \ingroup classlists - - These are the most frequently used Qt classes. For the complete - list see \link classes.html Qt's Classes \endlink. - - \generatelist mainclasses -*/ - -/*! \page compatclasses.html \title Qt 3 Compatibility Classes \ingroup classlists diff --git a/doc/src/exportedfunctions.qdoc b/doc/src/classes/exportedfunctions.qdoc index c51ace4..c51ace4 100644 --- a/doc/src/exportedfunctions.qdoc +++ b/doc/src/classes/exportedfunctions.qdoc diff --git a/doc/src/qtassistant.qdoc b/doc/src/classes/phonon-namespace.qdoc index 9e52ccf..8007ddf 100644 --- a/doc/src/qtassistant.qdoc +++ b/doc/src/classes/phonon-namespace.qdoc @@ -40,15 +40,15 @@ ****************************************************************************/ /*! - \module QtAssistant - \title QtAssistant Module - \contentspage Qt's Modules - \previouspage QtHelp - \nextpage QtTest - \ingroup modules + \namespace Phonon + \brief The Phonon namespace contains classes and functions for multimedia applications. + \since 4.4 - \brief The QtAssistant module provides a means of launching \QA - to provide online help. + This namespace contains classes to access multimedia functions for + audio and video playback. Those classes are not dependent on any specific + framework, but rather use exchangeable backends to do the work. - \sa {Qt Assistant Manual} + See the \l{Phonon Module} page for general information about the + framework and the \l{Phonon Overview} for an introductory tour of its + features. */ diff --git a/doc/src/classes/qtdesigner-api.qdoc b/doc/src/classes/qtdesigner-api.qdoc deleted file mode 100644 index 60dd9f8..0000000 --- a/doc/src/classes/qtdesigner-api.qdoc +++ /dev/null @@ -1,1413 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \class QDesignerMemberSheetExtension - - \brief The QDesignerMemberSheetExtension class allows you to - manipulate a widget's member functions which is displayed when - configuring connections using Qt Designer's mode for editing - signals and slots. - - \inmodule QtDesigner - - QDesignerMemberSheetExtension is a collection of functions that is - typically used to query a widget's member functions, and to - manipulate the member functions' appearance in \QD's signals and - slots editing mode. For example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 2 - - When implementing a custom widget plugin, a pointer to \QD's - current QDesignerFormEditorInterface object (\c formEditor in the - example above) is provided by the - QDesignerCustomWidgetInterface::initialize() function's parameter. - - The member sheet (and any other extension), can be retrieved by - querying \QD's extension manager using the qt_extension() - function. When you want to release the extension, you only need to - delete the pointer. - - All widgets have a default member sheet used in \QD's signals and - slots editing mode with the widget's member functions. But - QDesignerMemberSheetExtension also provides an interface for - creating custom member sheet extensions. - - \warning \QD uses the QDesignerMemberSheetExtension to facilitate - the signal and slot editing mode. Whenever a connection between - two widgets is requested, \QD will query for the widgets' member - sheet extensions. If a widget has an implemented member sheet - extension, this extension will override the default member sheet. - - To create a member sheet extension, your extension class must - inherit from both QObject and QDesignerMemberSheetExtension. Then, - since we are implementing an interface, we must ensure that it's - made known to the meta object system using the Q_INTERFACES() - macro: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 3 - - This enables \QD to use qobject_cast() to query for - supported interfaces using nothing but a QObject pointer. - - In \QD the extensions are not created until they are - required. For that reason, when implementing a member sheet - extension, you must also create a QExtensionFactory, i.e a class - that is able to make an instance of your extension, and register - it using \QD's \l {QExtensionManager}{extension manager}. - - When a widget's member sheet extension is required, \QD's \l - {QExtensionManager}{extension manager} will run through all its - registered factories calling QExtensionFactory::createExtension() - for each until the first one that is able to create a member sheet - extension for that widget, is found. This factory will then make - an instance of the extension. If no such factory is found, \QD - will use the default member sheet. - - There are four available types of extensions in \QD: - QDesignerContainerExtension, QDesignerMemberSheetExtension, - QDesignerPropertySheetExtension and - QDesignerTaskMenuExtension. \QD's behavior is the same whether the - requested extension is associated with a multi page container, a - member sheet, a property sheet or a task menu. - - The QExtensionFactory class provides a standard extension - factory, and can also be used as an interface for custom - extension factories. You can either create a new - QExtensionFactory and reimplement the - QExtensionFactory::createExtension() function. For example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 4 - - Or you can use an existing factory, expanding the - QExtensionFactory::createExtension() function to make the factory - able to create a member sheet extension as well. For example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 5 - - For a complete example using an extension class, see \l - {designer/taskmenuextension}{Task Menu Extension example}. The - example shows how to create a custom widget plugin for Qt - Designer, and how to to use the QDesignerTaskMenuExtension class - to add custom items to \QD's task menu. - - \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget - Extensions} -*/ - -/*! - \fn QDesignerMemberSheetExtension::~QDesignerMemberSheetExtension() - - Destroys the member sheet extension. -*/ - -/*! - \fn int QDesignerMemberSheetExtension::count() const - - Returns the extension's number of member functions. -*/ - -/*! - \fn int QDesignerMemberSheetExtension::indexOf(const QString &name) const - - Returns the index of the member function specified by the given \a - name. - - \sa memberName() -*/ - -/*! - \fn QString QDesignerMemberSheetExtension::memberName(int index) const - - Returns the name of the member function with the given \a index. - - \sa indexOf() -*/ - -/*! - \fn QString QDesignerMemberSheetExtension::memberGroup(int index) const - - Returns the name of the member group specified for the function - with the given \a index. - - \sa indexOf(), setMemberGroup() -*/ - -/*! - \fn void QDesignerMemberSheetExtension::setMemberGroup(int index, const QString &group) - - Sets the member group of the member function with the given \a - index, to \a group. - - \sa indexOf(), memberGroup() -*/ - -/*! - \fn bool QDesignerMemberSheetExtension::isVisible(int index) const - - Returns true if the member function with the given \a index is - visible in \QD's signal and slot editor, otherwise false. - - \sa indexOf(), setVisible() -*/ - -/*! - \fn void QDesignerMemberSheetExtension::setVisible(int index, bool visible) - - If \a visible is true, the member function with the given \a index - is visible in \QD's signals and slots editing mode; otherwise the - member function is hidden. - - \sa indexOf(), isVisible() -*/ - -/*! - \fn virtual bool QDesignerMemberSheetExtension::isSignal(int index) const - - Returns true if the member function with the given \a index is a - signal, otherwise false. - - \sa indexOf() -*/ - -/*! - \fn bool QDesignerMemberSheetExtension::isSlot(int index) const - - Returns true if the member function with the given \a index is a - slot, otherwise false. - - \sa indexOf() -*/ - -/*! - \fn bool QDesignerMemberSheetExtension::inheritedFromWidget(int index) const - - Returns true if the member function with the given \a index is - inherited from QWidget, otherwise false. - - \sa indexOf() -*/ - -/*! - \fn QString QDesignerMemberSheetExtension::declaredInClass(int index) const - - Returns the name of the class in which the member function with - the given \a index is declared. - - \sa indexOf() -*/ - -/*! - \fn QString QDesignerMemberSheetExtension::signature(int index) const - - Returns the signature of the member function with the given \a - index. - - \sa indexOf() -*/ - -/*! - \fn QList<QByteArray> QDesignerMemberSheetExtension::parameterTypes(int index) const - - Returns the parameter types of the member function with the given - \a index, as a QByteArray list. - - \sa indexOf(), parameterNames() -*/ - -/*! - \fn QList<QByteArray> QDesignerMemberSheetExtension::parameterNames(int index) const - - Returns the parameter names of the member function with the given - \a index, as a QByteArray list. - - \sa indexOf(), parameterTypes() -*/ - - -// Doc: Interface only - -/*! - \class QDesignerLayoutDecorationExtension - \brief The QDesignerLayoutDecorationExtension class provides an extension to a layout in \QD. - \inmodule QtDesigner - \internal -*/ - -/*! - \enum QDesignerLayoutDecorationExtension::InsertMode - - This enum describes the modes that are used to insert items into a layout. - - \value InsertWidgetMode Widgets are inserted into empty cells in a layout. - \value InsertRowMode Whole rows are inserted into a vertical or grid layout. - \value InsertColumnMode Whole columns are inserted into a horizontal or grid layout. -*/ - -/*! - \fn virtual QDesignerLayoutDecorationExtension::~QDesignerLayoutDecorationExtension() - - Destroys the extension. -*/ - -/*! - \fn virtual QList<QWidget*> QDesignerLayoutDecorationExtension::widgets(QLayout *layout) const - - Returns the widgets that are managed by the given \a layout. - - \sa insertWidget(), removeWidget() -*/ - -/*! - \fn QRect QDesignerLayoutDecorationExtension::itemInfo(int index) const - - Returns the rectangle covered by the item at the given \a index in the layout. -*/ - -/*! - \fn int QDesignerLayoutDecorationExtension::indexOf(QWidget *widget) const - - Returns the index of the specified \a widget in the layout. -*/ - -/*! - \fn int QDesignerLayoutDecorationExtension::indexOf(QLayoutItem *item) const - - Returns the index of the specified layout \a item. -*/ - -/*! - \fn QDesignerLayoutDecorationExtension::InsertMode QDesignerLayoutDecorationExtension::currentInsertMode() const - - Returns the current insertion mode. -*/ - -/*! - \fn int QDesignerLayoutDecorationExtension::currentIndex() const - - Returns the current index in the layout. -*/ - -/*! - \fn QPair<int, int> QDesignerLayoutDecorationExtension::currentCell() const - - Returns a pair containing the row and column of the current cell in the layout. -*/ - -/*! - \fn void QDesignerLayoutDecorationExtension::insertWidget(QWidget *widget, const QPair<int, int> &cell) - - Inserts the given \a widget into the specified \a cell in the layout. - - \sa removeWidget() -*/ - -/*! - \fn void QDesignerLayoutDecorationExtension::removeWidget(QWidget *widget) - - Removes the specified \a widget from the layout. - - \sa insertWidget() -*/ - -/*! - \fn void QDesignerLayoutDecorationExtension::insertRow(int row) - - Inserts a new row into the form at the position specified by \a row. -*/ - -/*! - \fn void QDesignerLayoutDecorationExtension::insertColumn(int column) - - Inserts a new column into the form at the position specified by \a column. -*/ - -/*! - \fn void QDesignerLayoutDecorationExtension::simplify() - - Simplifies the layout by removing unnecessary empty rows and columns, and by changing the - number of rows or columns spanned by widgets. -*/ - -/*! - \fn int QDesignerLayoutDecorationExtension::findItemAt(const QPoint &position) const - - Returns the index of the item in the layout that covers the given \a position. -*/ - -/*! - \fn int QDesignerLayoutDecorationExtension::findItemAt(int row, int column) const - - Returns the item in the layout that occupies the specified \a row and \a column in the layout. - - Currently, this only applies to grid layouts. -*/ - -/*! - \fn void QDesignerLayoutDecorationExtension::adjustIndicator(const QPoint &position, int index) - - Adjusts the indicator for the item specified by \a index so that - it lies at the given \a position on the form. -*/ - - -// Doc: Interface only - -/*! - \class QDesignerContainerExtension - \brief The QDesignerContainerExtension class allows you to add pages to - a custom multi-page container in Qt Designer's workspace. - \inmodule QtDesigner - - QDesignerContainerExtension provide an interface for creating - custom container extensions. A container extension consists of a - collection of functions that \QD needs to manage a multi-page - container plugin, and a list of the container's pages. - - \image containerextension-example.png - - \warning This is \e not an extension for container plugins in - general, only custom \e multi-page containers. - - To create a container extension, your extension class must inherit - from both QObject and QDesignerContainerExtension. For example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 6 - - Since we are implementing an interface, we must ensure that it's - made known to the meta object system using the Q_INTERFACES() - macro. This enables \QD to use the qobject_cast() function to - query for supported interfaces using nothing but a QObject - pointer. - - You must reimplement several functions to enable \QD to manage a - custom multi-page container widget: \QD uses count() to keep track - of the number pages in your container, widget() to return the page - at a given index in the list of the container's pages, and - currentIndex() to return the list index of the selected page. \QD - uses the addWidget() function to add a given page to the - container, expecting it to be appended to the list of pages, while - it expects the insertWidget() function to add a given page to the - container by inserting it at a given index. - - In \QD the extensions are not created until they are - required. For that reason you must also create a - QExtensionFactory, i.e a class that is able to make an instance of - your extension, and register it using \QD's \l - {QExtensionManager}{extension manager}. - - When a container extension is required, \QD's \l - {QExtensionManager}{extension manager} will run through all its - registered factories calling QExtensionFactory::createExtension() - for each until the first one that is able to create a container - extension, is found. This factory will then create the extension - for the plugin. - - There are four available types of extensions in \QD: - QDesignerContainerExtension , QDesignerMemberSheetExtension, - QDesignerPropertySheetExtension and QDesignerTaskMenuExtension. - \QD's behavior is the same whether the requested extension is - associated with a multi page container, a member sheet, a property - sheet or a task menu. - - The QExtensionFactory class provides a standard extension factory, - and can also be used as an interface for custom extension - factories. You can either create a new QExtensionFactory and - reimplement the QExtensionFactory::createExtension() function. For - example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 7 - - Or you can use an existing factory, expanding the - QExtensionFactory::createExtension() function to make the factory - able to create a container extension as well. For example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 8 - - For a complete example using the QDesignerContainerExtension - class, see the \l {designer/containerextension}{Container - Extension example}. The example shows how to create a custom - multi-page plugin for \QD. - - \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget - Extensions} -*/ - -/*! - \fn QDesignerContainerExtension::~QDesignerContainerExtension() - - Destroys the extension. -*/ - -/*! - \fn int QDesignerContainerExtension::count() const - - Returns the number of pages in the container. -*/ - -/*! - \fn QWidget *QDesignerContainerExtension::widget(int index) const - - Returns the page at the given \a index in the extension's list of - pages. - - \sa addWidget(), insertWidget() -*/ - -/*! - \fn int QDesignerContainerExtension::currentIndex() const - - Returns the index of the currently selected page in the - container. - - \sa setCurrentIndex() -*/ - -/*! - \fn void QDesignerContainerExtension::setCurrentIndex(int index) - - Sets the currently selected page in the container to be the - page at the given \a index in the extension's list of pages. - - \sa currentIndex() -*/ - -/*! - \fn void QDesignerContainerExtension::addWidget(QWidget *page) - - Adds the given \a page to the container by appending it to the - extension's list of pages. - - \sa insertWidget(), remove(), widget() -*/ - -/*! - \fn void QDesignerContainerExtension::insertWidget(int index, QWidget *page) - - Adds the given \a page to the container by inserting it at the - given \a index in the extension's list of pages. - - \sa addWidget(), remove(), widget() -*/ - -/*! - \fn void QDesignerContainerExtension::remove(int index) - - Removes the page at the given \a index from the extension's list - of pages. - - \sa addWidget(), insertWidget() -*/ - - -// Doc: Interface only - -/*! - \class QDesignerTaskMenuExtension - \brief The QDesignerTaskMenuExtension class allows you to add custom - menu entries to Qt Designer's task menu. - \inmodule QtDesigner - - QDesignerTaskMenuExtension provides an interface for creating - custom task menu extensions. It is typically used to create task - menu entries that are specific to a plugin in \QD. - - \QD uses the QDesignerTaskMenuExtension to feed its task - menu. Whenever a task menu is requested, \QD will query - for the selected widget's task menu extension. - - \image taskmenuextension-example-faded.png - - A task menu extension is a collection of QActions. The actions - appear as entries in the task menu when the plugin with the - specified extension is selected. The image above shows the custom - \gui {Edit State...} action which appears in addition to \QD's - default task menu entries: \gui Cut, \gui Copy, \gui Paste etc. - - To create a custom task menu extension, your extension class must - inherit from both QObject and QDesignerTaskMenuExtension. For - example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 9 - - Since we are implementing an interface, we must ensure that it - is made known to the meta-object system using the Q_INTERFACES() - macro. This enables \QD to use the qobject_cast() function to - query for supported interfaces using nothing but a QObject - pointer. - - You must reimplement the taskActions() function to return a list - of actions that will be included in \QD task menu. Optionally, you - can reimplement the preferredEditAction() function to set the - action that is invoked when selecting your plugin and pressing - \key F2. The preferred edit action must be one of the actions - returned by taskActions() and, if it's not defined, pressing the - \key F2 key will simply be ignored. - - In \QD, extensions are not created until they are required. A - task menu extension, for example, is created when you click the - right mouse button over a widget in \QD's workspace. For that - reason you must also construct an extension factory, using either - QExtensionFactory or a subclass, and register it using \QD's - \l {QExtensionManager}{extension manager}. - - When a task menu extension is required, \QD's \l - {QExtensionManager}{extension manager} will run through all its - registered factories calling QExtensionFactory::createExtension() - for each until it finds one that is able to create a task menu - extension for the selected widget. This factory will then make an - instance of the extension. - - There are four available types of extensions in \QD: - QDesignerContainerExtension, QDesignerMemberSheetExtension, - QDesignerPropertySheetExtension, and QDesignerTaskMenuExtension. - \QD's behavior is the same whether the requested extension is - associated with a container, a member sheet, a property sheet or a - task menu. - - The QExtensionFactory class provides a standard extension factory, - and can also be used as an interface for custom extension - factories. You can either create a new QExtensionFactory and - reimplement the QExtensionFactory::createExtension() function. For - example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 10 - - Or you can use an existing factory, expanding the - QExtensionFactory::createExtension() function to make the factory - able to create a task menu extension as well. For example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 11 - - For a complete example using the QDesignerTaskMenuExtension class, - see the \l {designer/taskmenuextension}{Task Menu Extension - example}. The example shows how to create a custom widget plugin - for \QD, and how to to use the QDesignerTaskMenuExtension - class to add custom items to \QD's task menu. - - \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget - Extensions} -*/ - -/*! - \fn QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension() - - Destroys the task menu extension. -*/ - -/*! - \fn QAction *QDesignerTaskMenuExtension::preferredEditAction() const - - Returns the action that is invoked when selecting a plugin with - the specified extension and pressing \key F2. - - The action must be one of the actions returned by taskActions(). -*/ - -/*! - \fn QList<QAction*> QDesignerTaskMenuExtension::taskActions() const - - Returns the task menu extension as a list of actions which will be - included in \QD's task menu when a plugin with the specified - extension is selected. - - The function must be reimplemented to add actions to the list. -*/ - - -// Doc: Interface only - -/*! - \class QDesignerCustomWidgetCollectionInterface - - \brief The QDesignerCustomWidgetCollectionInterface class allows - you to include several custom widgets in one single library. - - \inmodule QtDesigner - - When implementing a custom widget plugin, you build it as a - separate library. If you want to include several custom widget - plugins in the same library, you must in addition subclass - QDesignerCustomWidgetCollectionInterface. - - QDesignerCustomWidgetCollectionInterface contains one single - function returning a list of the collection's - QDesignerCustomWidgetInterface objects. For example, if you have - several custom widgets \c CustomWidgetOne, \c CustomWidgetTwo and - \c CustomWidgetThree, the class definition may look like this: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 12 - - In the class constructor you add the interfaces to your custom - widgets to the list which you return in the customWidgets() - function: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 13 - - Note that instead of exporting each custom widget plugin using the - Q_EXPORT_PLUGIN2() macro, you export the entire collection. The - Q_EXPORT_PLUGIN2() macro ensures that \QD can access and construct - the custom widgets. Without this macro, there is no way for \QD to - use them. - - \sa QDesignerCustomWidgetInterface, {Creating Custom Widgets for - Qt Designer} -*/ - -/*! - \fn QDesignerCustomWidgetCollectionInterface::~QDesignerCustomWidgetCollectionInterface() { - - Destroys the custom widget collection interface. -*/ - -/*! - \fn QList<QDesignerCustomWidgetInterface*> QDesignerCustomWidgetCollectionInterface::customWidgets() const - - Returns a list of interfaces to the collection's custom widgets. -*/ - - -// Doc: Interface only - -/*! - \class QDesignerCustomWidgetInterface - - \brief The QDesignerCustomWidgetInterface class enables Qt Designer - to access and construct custom widgets. - - \inmodule QtDesigner - - QDesignerCustomWidgetInterface provides a custom widget with an - interface. The class contains a set of functions that must be subclassed - to return basic information about the widget, such as its class name and - the name of its header file. Other functions must be implemented to - initialize the plugin when it is loaded, and to construct instances of - the custom widget for \QD to use. - - When implementing a custom widget you must subclass - QDesignerCustomWidgetInterface to expose your widget to \QD. For - example, this is the declaration for the plugin used in the - \l{Custom Widget Plugin Example}{Custom Widget Plugin example} that - enables an analog clock custom widget to be used by \QD: - - \snippet examples/designer/customwidgetplugin/customwidgetplugin.h 0 - - Note that the only part of the class definition that is specific - to this particular custom widget is the class name. In addition, - since we are implementing an interface, we must ensure that it's - made known to the meta object system using the Q_INTERFACES() - macro. This enables \QD to use the qobject_cast() function to - query for supported interfaces using nothing but a QObject - pointer. - - After \QD loads a custom widget plugin, it calls the interface's - initialize() function to enable it to set up any resources that it - may need. This function is called with a QDesignerFormEditorInterface - parameter that provides the plugin with a gateway to all of \QD's API. - - \QD constructs instances of the custom widget by calling the plugin's - createWidget() function with a suitable parent widget. Plugins must - construct and return an instance of a custom widget with the specified - parent widget. - - In the implementation of the class you must remember to export - your custom widget plugin to \QD using the Q_EXPORT_PLUGIN2() - macro. For example, if a library called \c libcustomwidgetplugin.so - (on Unix) or \c libcustomwidget.dll (on Windows) contains a widget - class called \c MyCustomWidget, we can export it by adding the - following line to the file containing the plugin implementation: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 14 - - This macro ensures that \QD can access and construct the custom widget. - Without this macro, there is no way for \QD to use it. - - When implementing a custom widget plugin, you build it as a - separate library. If you want to include several custom widget - plugins in the same library, you must in addition subclass - QDesignerCustomWidgetCollectionInterface. - - \warning If your custom widget plugin contains QVariant - properties, be aware that only the following \l - {QVariant::Type}{types} are supported: - - \list - \o QVariant::ByteArray - \o QVariant::Bool - \o QVariant::Color - \o QVariant::Cursor - \o QVariant::Date - \o QVariant::DateTime - \o QVariant::Double - \o QVariant::Int - \o QVariant::Point - \o QVariant::Rect - \o QVariant::Size - \o QVariant::SizePolicy - \o QVariant::String - \o QVariant::Time - \o QVariant::UInt - \endlist - - For a complete example using the QDesignerCustomWidgetInterface - class, see the \l {designer/customwidgetplugin}{Custom Widget - Example}. The example shows how to create a custom widget plugin - for \QD. - - \sa QDesignerCustomWidgetCollectionInterface {Creating Custom - Widgets for Qt Designer} -*/ - -/*! - \fn QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface() - - Destroys the custom widget interface. -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::name() const - - Returns the class name of the custom widget supplied by the interface. - - The name returned \e must be identical to the class name used for the - custom widget. -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::group() const - - Returns the name of the group to which the custom widget belongs. -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::toolTip() const - - Returns a short description of the widget that can be used by \QD - in a tool tip. -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::whatsThis() const - - Returns a description of the widget that can be used by \QD in - "What's This?" help for the widget. -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::includeFile() const - - Returns the path to the include file that \l uic uses when - creating code for the custom widget. -*/ - -/*! - \fn QIcon QDesignerCustomWidgetInterface::icon() const - - Returns the icon used to represent the custom widget in \QD's - widget box. -*/ - -/*! - \fn bool QDesignerCustomWidgetInterface::isContainer() const - - Returns true if the custom widget is intended to be used as a - container; otherwise returns false. - - Most custom widgets are not used to hold other widgets, so their - implementations of this function will return false, but custom - containers will return true to ensure that they behave correctly - in \QD. -*/ - -/*! - \fn QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent) - - Returns a new instance of the custom widget, with the given \a - parent. -*/ - -/*! - \fn bool QDesignerCustomWidgetInterface::isInitialized() const - - Returns true if the widget has been initialized; otherwise returns - false. - - \sa initialize() -*/ - -/*! - \fn void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor) - - Initializes the widget for use with the specified \a formEditor - interface. - - \sa isInitialized() -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::domXml() const - - Returns the XML that is used to describe the custom widget's - properties to \QD. -*/ - -/*! - \fn QString QDesignerCustomWidgetInterface::codeTemplate() const - - This function is reserved for future use by \QD. - - \omit - Returns the code template that \QD includes in forms that contain - the custom widget when they are saved. - \endomit -*/ - -/*! - \macro QDESIGNER_WIDGET_EXPORT - \relates QDesignerCustomWidgetInterface - \since 4.1 - - This macro is used when defining custom widgets to ensure that they are - correctly exported from plugins for use with \QD. - - On some platforms, the symbols required by \QD to create new widgets - are removed from plugins by the build system, making them unusable. - Using this macro ensures that the symbols are retained on those platforms, - and has no side effects on other platforms. - - For example, the \l{designer/worldtimeclockplugin}{World Time Clock Plugin} - example exports a custom widget class with the following declaration: - - \snippet examples/designer/worldtimeclockplugin/worldtimeclock.h 0 - \dots - \snippet examples/designer/worldtimeclockplugin/worldtimeclock.h 2 - - \sa {Creating Custom Widgets for Qt Designer} -*/ - - -// Doc: Abstract class - -/*! - \class QDesignerDnDItemInterface - \brief The QDesignerDnDItemInterface class provides an interface that is used to manage items - during a drag and drop operation. - \inmodule QtDesigner - \internal -*/ - -/*! - \enum QDesignerDnDItemInterface::DropType - - This enum describes the result of a drag and drop operation. - - \value MoveDrop The item was moved. - \value CopyDrop The item was copied. -*/ - -/*! - \fn QDesignerDnDItemInterface::QDesignerDnDItemInterface() - - Constructs a new interface to a drag and drop item. -*/ - -/*! - \fn QDesignerDnDItemInterface::~QDesignerDnDItemInterface() - - Destroys the interface to the item. -*/ - -/*! - \fn DomUI *QDesignerDnDItemInterface::domUi() const - - Returns a user interface object for the item. -*/ - -/*! - \fn QWidget *QDesignerDnDItemInterface::widget() const - - Returns the widget being copied or moved in the drag and drop operation. - - \sa source() -*/ - -/*! - \fn QWidget *QDesignerDnDItemInterface::decoration() const - - Returns the widget used to represent the item. -*/ - -/*! - \fn QPoint QDesignerDnDItemInterface::hotSpot() const - - Returns the cursor's hotspot. - - \sa QDrag::hotSpot() -*/ - -/*! - \fn DropType QDesignerDnDItemInterface::type() const - - Returns the type of drag and drop operation in progress. -*/ - -/*! - \fn QWidget *QDesignerDnDItemInterface::source() const - - Returns the widget that is the source of the drag and drop operation; i.e. the original - container of the widget being dragged. - - \sa widget() -*/ - - -// Doc: Abstract class - -/*! - \class QDesignerIconCacheInterface - \brief The QDesignerIconCacheInterface class provides an interface to \QD's icon cache. - \inmodule QtDesigner - \internal -*/ - -/*! - \fn QDesignerIconCacheInterface::QDesignerIconCacheInterface(QObject *parent) - - Constructs a new interface with the given \a parent. -*/ - -/*! - \fn QIcon QDesignerIconCacheInterface::nameToIcon(const QString &filePath, const QString &qrcPath) - - Returns the icon associated with the name specified by \a filePath in the resource - file specified by \a qrcPath. - - If \a qrcPath refers to a valid resource file, the name used for the file path is a path - within those resources; otherwise the file path refers to a local file. - - \sa {The Qt Resource System}, nameToPixmap() -*/ - -/*! - \fn QPixmap QDesignerIconCacheInterface::nameToPixmap(const QString &filePath, const QString &qrcPath) - - Returns the pixmap associated with the name specified by \a filePath in the resource - file specified by \a qrcPath. - - If \a qrcPath refers to a valid resource file, the name used for the file path is a path - within those resources; otherwise the file path refers to a local file. - - \sa {The Qt Resource System}, nameToIcon() -*/ - -/*! - \fn QString QDesignerIconCacheInterface::iconToFilePath(const QIcon &icon) const - - Returns the file path associated with the given \a icon. The file path is a path within - an application resources. -*/ - -/*! - \fn QString QDesignerIconCacheInterface::iconToQrcPath(const QIcon &icon) const - - Returns the path to the resource file that refers to the specified \a icon. The resource - path refers to a local file. -*/ - -/*! - \fn QString QDesignerIconCacheInterface::pixmapToFilePath(const QPixmap &pixmap) const - - Returns the file path associated with the given \a pixmap. The file path is a path within - an application resources. -*/ - -/*! - \fn QString QDesignerIconCacheInterface::pixmapToQrcPath(const QPixmap &pixmap) const - - Returns the path to the resource file that refers to the specified \a pixmap. The resource - path refers to a local file. -*/ - -/*! - \fn QList<QPixmap> QDesignerIconCacheInterface::pixmapList() const - - Returns a list of pixmaps for the icons provided by the icon cache. -*/ - -/*! - \fn QList<QIcon> QDesignerIconCacheInterface::iconList() const - - Returns a list of icons provided by the icon cache. -*/ - -/*! - \fn QString QDesignerIconCacheInterface::resolveQrcPath(const QString &filePath, const QString &qrcPath, const QString &workingDirectory) const - - Returns a path to a resource specified by the \a filePath within - the resource file located at \a qrcPath. If \a workingDirectory is - a valid path to a directory, the path returned will be relative to - that directory; otherwise an absolute path is returned. - - \omit - ### Needs checking - \endomit -*/ - - -// Doc: Interface only - -/*! - \class QDesignerPropertySheetExtension - - \brief The QDesignerPropertySheetExtension class allows you to - manipulate a widget's properties which is displayed in Qt - Designer's property editor. - - \sa QDesignerDynamicPropertySheetExtension - - \inmodule QtDesigner - - QDesignerPropertySheetExtension provides a collection of functions that - are typically used to query a widget's properties, and to - manipulate the properties' appearance in the property editor. For - example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 15 - - Note that if you change the value of a property using the - QDesignerPropertySheetExtension::setProperty() function, the undo - stack is not updated. To ensure that a property's value can be - reverted using the undo stack, you must use the - QDesignerFormWindowCursorInterface::setProperty() function, or its - buddy \l - {QDesignerFormWindowCursorInterface::setWidgetProperty()}{setWidgetProperty()}, - instead. - - When implementing a custom widget plugin, a pointer to \QD's - current QDesignerFormEditorInterface object (\c formEditor in the - example above) is provided by the - QDesignerCustomWidgetInterface::initialize() function's parameter. - - The property sheet, or any other extension, can be retrieved by - querying \QD's extension manager using the qt_extension() - function. When you want to release the extension, you only need to - delete the pointer. - - All widgets have a default property sheet which populates \QD's - property editor with the widget's properties (i.e the ones defined - with the Q_PROPERTY() macro). But QDesignerPropertySheetExtension - also provides an interface for creating custom property sheet - extensions. - - \warning \QD uses the QDesignerPropertySheetExtension to feed its - property editor. Whenever a widget is selected in its workspace, - \QD will query for the widget's property sheet extension. If the - selected widget has an implemented property sheet extension, this - extension will override the default property sheet. - - To create a property sheet extension, your extension class must - inherit from both QObject and - QDesignerPropertySheetExtension. Then, since we are implementing - an interface, we must ensure that it's made known to the meta - object system using the Q_INTERFACES() macro: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 16 - - This enables \QD to use qobject_cast() to query for supported - interfaces using nothing but a QObject pointer. - - In \QD the extensions are not created until they are - required. For that reason, when implementing a property sheet - extension, you must also create a QExtensionFactory, i.e a class - that is able to make an instance of your extension, and register - it using \QD's \l {QExtensionManager}{extension manager}. - - When a property sheet extension is required, \QD's \l - {QExtensionManager}{extension manager} will run through all its - registered factories calling QExtensionFactory::createExtension() - for each until the first one that is able to create a property - sheet extension for the selected widget, is found. This factory - will then make an instance of the extension. If no such factory - can be found, \QD will use the default property sheet. - - There are four available types of extensions in \QD: - QDesignerContainerExtension, QDesignerMemberSheetExtension, - QDesignerPropertySheetExtension and QDesignerTaskMenuExtension. Qt - Designer's behavior is the same whether the requested extension is - associated with a multi page container, a member sheet, a property - sheet or a task menu. - - The QExtensionFactory class provides a standard extension factory, - and can also be used as an interface for custom extension - factories. You can either create a new QExtensionFactory and - reimplement the QExtensionFactory::createExtension() function. For - example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 17 - - Or you can use an existing factory, expanding the - QExtensionFactory::createExtension() function to make the factory - able to create a property sheet extension extension as well. For - example: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 18 - - For a complete example using an extension class, see the \l - {designer/taskmenuextension}{Task Menu Extension example}. The - example shows how to create a custom widget plugin for Qt - Designer, and how to to use the QDesignerTaskMenuExtension class - to add custom items to \QD's task menu. - - \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget - Extensions} -*/ - -/*! - \fn QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension() - - Destroys the property sheet extension. -*/ - -/*! - \fn int QDesignerPropertySheetExtension::count() const - - Returns the selected widget's number of properties. -*/ - -/*! - \fn int QDesignerPropertySheetExtension::indexOf(const QString &name) const - - Returns the index for a given property \a name. - - \sa propertyName() -*/ - -/*! - \fn QString QDesignerPropertySheetExtension::propertyName(int index) const - - Returns the name of the property at the given \a index. - - \sa indexOf() -*/ - -/*! - \fn QString QDesignerPropertySheetExtension::propertyGroup(int index) const - - Returns the property group for the property at the given \a index. - - \QD's property editor supports property groups, i.e. sections of - related properties. A property can be related to a group using the - setPropertyGroup() function. The default group of any property is - the name of the class that defines it. For example, the - QObject::objectName property appears within the QObject property - group. - - \sa indexOf(), setPropertyGroup() -*/ - -/*! - \fn void QDesignerPropertySheetExtension::setPropertyGroup(int index, const QString &group) - - Sets the property group for the property at the given \a index to - \a group. - - Relating a property to a group makes it appear within that group's - section in the property editor. The default property group of any - property is the name of the class that defines it. For example, - the QObject::objectName property appears within the QObject - property group. - - \sa indexOf(), property(), propertyGroup() -*/ - -/*! - \fn bool QDesignerPropertySheetExtension::hasReset(int index) const - - Returns true if the property at the given \a index has a reset - button in \QD's property editor, otherwise false. - - \sa indexOf(), reset() -*/ - -/*! - \fn bool QDesignerPropertySheetExtension::reset(int index) - - Resets the value of the property at the given \a index, to the - default value. Returns true if a default value could be found, otherwise false. - - \sa indexOf(), hasReset(), isChanged() -*/ - -/*! - \fn bool QDesignerPropertySheetExtension::isVisible(int index) const - - Returns true if the property at the given \a index is visible in - \QD's property editor, otherwise false. - - \sa indexOf(), setVisible() -*/ - -/*! - \fn void QDesignerPropertySheetExtension::setVisible(int index, bool visible) - - If \a visible is true, the property at the given \a index is - visible in \QD's property editor; otherwise the property is - hidden. - - \sa indexOf(), isVisible() -*/ - -/*! - \fn bool QDesignerPropertySheetExtension::isAttribute(int index) const - - Returns true if the property at the given \a index is an attribute, - which will be \e excluded from the UI file, otherwise false. - - \sa indexOf(), setAttribute() -*/ - -/*! - \fn void QDesignerPropertySheetExtension::setAttribute(int index, bool attribute) - - If \a attribute is true, the property at the given \a index is - made an attribute which will be \e excluded from the UI file; - otherwise it will be included. - - \sa indexOf(), isAttribute() -*/ - -/*! - \fn QVariant QDesignerPropertySheetExtension::property(int index) const - - Returns the value of the property at the given \a index. - - \sa indexOf(), setProperty(), propertyGroup() -*/ - -/*! - \fn void QDesignerPropertySheetExtension::setProperty(int index, const QVariant &value) - - Sets the \a value of the property at the given \a index. - - \warning If you change the value of a property using this - function, the undo stack is not updated. To ensure that a - property's value can be reverted using the undo stack, you must - use the QDesignerFormWindowCursorInterface::setProperty() - function, or its buddy \l - {QDesignerFormWindowCursorInterface::setWidgetProperty()}{setWidgetProperty()}, - instead. - - \sa indexOf(), property(), propertyGroup() -*/ - -/*! - \fn bool QDesignerPropertySheetExtension::isChanged(int index) const - - Returns true if the value of the property at the given \a index - differs from the property's default value, otherwise false. - - \sa indexOf(), setChanged(), reset() -*/ - -/*! - \fn void QDesignerPropertySheetExtension::setChanged(int index, bool changed) - - Sets whether the property at the given \a index is different from - its default value, or not, depending on the \a changed parameter. - - \sa indexOf(), isChanged() -*/ - -// Doc: Interface only - -/*! - \class QDesignerDynamicPropertySheetExtension - - \brief The QDesignerDynamicPropertySheetExtension class allows you to - manipulate a widget's dynamic properties in Qt Designer's property editor. - - \sa QDesignerPropertySheetExtension, {QObject#Dynamic Properties}{Dynamic Properties} - - \inmodule QtDesigner - \since 4.3 -*/ - -/*! - \fn QDesignerDynamicPropertySheetExtension::~QDesignerDynamicPropertySheetExtension() - - Destroys the dynamic property sheet extension. -*/ - -/*! - \fn bool QDesignerDynamicPropertySheetExtension::dynamicPropertiesAllowed() const - - Returns true if the widget supports dynamic properties; otherwise returns false. -*/ - -/*! - \fn int QDesignerDynamicPropertySheetExtension::addDynamicProperty(const QString &propertyName, const QVariant &value) - - Adds a dynamic property named \a propertyName and sets its value to \a value. - Returns the index of the property if it was added successfully; otherwise returns -1 to - indicate failure. -*/ - -/*! - \fn bool QDesignerDynamicPropertySheetExtension::removeDynamicProperty(int index) - - Removes the dynamic property at the given \a index. - Returns true if the operation succeeds; otherwise returns false. -*/ - -/*! - \fn bool QDesignerDynamicPropertySheetExtension::isDynamicProperty(int index) const - - Returns true if the property at the given \a index is a dynamic property; otherwise - returns false. -*/ - -/*! - \fn bool QDesignerDynamicPropertySheetExtension::canAddDynamicProperty(const QString &propertyName) const - - Returns true if \a propertyName is a valid, unique name for a dynamic - property; otherwise returns false. - -*/ diff --git a/doc/src/qtdemo.qdoc b/doc/src/demos/qtdemo.qdoc index 60f896a..60f896a 100644 --- a/doc/src/qtdemo.qdoc +++ b/doc/src/demos/qtdemo.qdoc diff --git a/doc/src/deployment/deployment-plugins.qdoc b/doc/src/deployment/deployment-plugins.qdoc new file mode 100644 index 0000000..b02bdd8 --- /dev/null +++ b/doc/src/deployment/deployment-plugins.qdoc @@ -0,0 +1,236 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page deployment-plugins.html + \title Deploying Plugins + \brief A guide to plugins-specific aspects of deploying Qt and Qt Application + + This document explains how to deploy plugin libraries that Qt or + your application should load at runtime. If you use + \l{How to Create Qt Plugins#Static Plugins}{static plugins}, then the + plugin code is already part of your application executable, and no + separate deployment steps are required. + + \tableofcontents + + \section1 The Plugin Directory + + When the application is run, Qt will first treat the application's + executable directory as the \c{pluginsbase}. For example if the + application is in \c{C:\Program Files\MyApp} and has a style plugin, + Qt will look in \c{C:\Program Files\MyApp\styles}. (See + QCoreApplication::applicationDirPath() for how to find out where + the application's executable is.) Qt will also look in the + directory specified by + QLibraryInfo::location(QLibraryInfo::PluginsPath), which typically + is located in \c QTDIR/plugins (where \c QTDIR is the directory + where Qt is installed). If you want Qt to look in additional + places you can add as many paths as you need with calls to + QCoreApplication::addLibraryPath(). And if you want to set your + own path or paths you can use QCoreApplication::setLibraryPaths(). + You can also use a \c qt.conf file to override the hard-coded + paths that are compiled into the Qt library. For more information, + see the \l {Using qt.conf} documentation. Yet another possibility + is to set the \c QT_PLUGIN_PATH environment variable before running + the application. If set, Qt will look for plugins in the + paths (separated by the system path separator) specified in the variable. + + \section1 Loading and Verifying Plugins Dynamically + + When loading plugins, the Qt library does some sanity checking to + determine whether or not the plugin can be loaded and used. This + provides the ability to have multiple versions and configurations of + the Qt library installed side by side. + + \list + \o Plugins linked with a Qt library that has a higher version number + will not be loaded by a library with a lower version number. + + \br + \bold{Example:} Qt 4.3.0 will \e{not} load a plugin built with Qt 4.3.1. + + \o Plugins linked with a Qt library that has a lower major version + number will not be loaded by a library with a higher major version + number. + + \br + \bold{Example:} Qt 4.3.1 will \e{not} load a plugin built with Qt 3.3.1. + \br + \bold{Example:} Qt 4.3.1 will load plugins built with Qt 4.3.0 and Qt 4.2.3. + + \o The Qt library and all plugins are built using a \e {build + key}. The build key in the Qt library is examined against the build + key in the plugin, and if they match, the plugin is loaded. If the + build keys do not match, then the Qt library refuses to load the + plugin. + + \br \bold{Rationale:} See the \l{#The Build Key}{The Build Key} section below. + \endlist + + When building plugins to extend an application, it is important to ensure + that the plugin is configured in the same way as the application. This means + that if the application was built in release mode, plugins should be built + in release mode, too. + + If you configure Qt to be built in both debug and release modes, + but only build applications in release mode, you need to ensure that your + plugins are also built in release mode. By default, if a debug build of Qt is + available, plugins will \e only be built in debug mode. To force the + plugins to be built in release mode, add the following line to the plugin's + project file: + + \snippet doc/src/snippets/code/doc_src_plugins-howto.qdoc 3 + + This will ensure that the plugin is compatible with the version of the library + used in the application. + + \section2 The Build Key + + When loading plugins, Qt checks the build key of each plugin against its + own configuration to ensure that only compatible plugins are loaded; any + plugins that are configured differently are not loaded. + + The build key contains the following information: + \list + \o Architecture, operating system and compiler. + + \e {Rationale:} + In cases where different versions of the same compiler do not + produce binary compatible code, the version of the compiler is + also present in the build key. + + \o Configuration of the Qt library. The configuration is a list + of the missing features that affect the available API in the + library. + + \e {Rationale:} + Two different configurations of the same version of + the Qt library are not binary compatible. The Qt library that + loads the plugin uses the list of (missing) features to + determine if the plugin is binary compatible. + + \e {Note:} There are cases where a plugin can use features that are + available in two different configurations. However, the + developer writing plugins would need to know which features are + in use, both in their plugin and internally by the utility + classes in Qt. The Qt library would require complex feature + and dependency queries and verification when loading plugins. + Requiring this would place an unnecessary burden on the developer, and + increase the overhead of loading a plugin. To reduce both + development time and application runtime costs, a simple string + comparision of the build keys is used. + + \o Optionally, an extra string may be specified on the configure + script command line. + + \e {Rationale:} + When distributing binaries of the Qt library with an + application, this provides a way for developers to write + plugins that can only be loaded by the library with which the + plugins were linked. + \endlist + + For debugging purposes, it is possible to override the run-time build key + checks by configuring Qt with the \c QT_NO_PLUGIN_CHECK preprocessor macro + defined. + + \section1 The Plugin Cache + + In order to speed up loading and validation of plugins, some of + the information that is collected when plugins are loaded is cached + through QSettings. This includes information about whether or not + a plugin was successfully loaded, so that subsequent load operations + don't try to load an invalid plugin. However, if the "last modified" + timestamp of a plugin has changed, the plugin's cache entry is + invalidated and the plugin is reloaded regardless of the values in + the cache entry, and the cache entry itself is updated with the new + result. + + This also means that the timestamp must be updated each time the + plugin or any dependent resources (such as a shared library) is + updated, since the dependent resources might influence the result + of loading a plugin. + + Sometimes, when developing plugins, it is necessary to remove entries + from the plugin cache. Since Qt uses QSettings to manage the plugin + cache, the locations of plugins are platform-dependent; see + \l{QSettings#Platform-Specific Notes}{the QSettings documentation} + for more information about each platform. + + For example, on Windows the entries are stored in the registry, and the + paths for each plugin will typically begin with either of these two strings: + + \snippet doc/src/snippets/code/doc_src_plugins-howto.qdoc 6 + + \section1 Debugging Plugins + + There are a number of issues that may prevent correctly-written plugins from + working with the applications that are designed to use them. Many of these + are related to differences in the way that plugins and applications have been + built, often arising from separate build systems and processes. + + The following table contains descriptions of the common causes of problems + developers experience when creating plugins: + + \table + \header \o Problem \o Cause \o Solution + \row \o Plugins sliently fail to load even when opened directly by the + application. \QD shows the plugin libraries in its + \gui{Help|About Plugins} dialog, but no plugins are listed under each + of them. + \o The application and its plugins are built in different modes. + \o Either share the same build information or build the plugins in both + debug and release modes by appending the \c debug_and_release to + the \l{qmake Variable Reference#CONFIG}{CONFIG} variable in each of + their project files. + \row \o A valid plugin that replaces an invalid (or broken) plugin fails to load. + \o The entry for the plugin in the plugin cache indicates that the original + plugin could not be loaded, causing Qt to ignore the replacement. + \o Either ensure that the plugin's timestamp is updated, or delete the + entry in the \l{#The Plugin Cache}{plugin cache}. + \endtable + + You can also use the \c QT_DEBUG_PLUGINS environment variable to obtain + diagnostic information from Qt about each plugin it tries to load. Set this + variable to a non-zero value in the environment from which your application is + launched. +*/ diff --git a/doc/src/deployment.qdoc b/doc/src/deployment/deployment.qdoc index 9f8ee8f..75b870f 100644 --- a/doc/src/deployment.qdoc +++ b/doc/src/deployment/deployment.qdoc @@ -39,20 +39,9 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! - \group deployment + \page deployment.html \title Deploying Qt Applications - \ingroup buildsystem Deploying an Qt application does not require any C++ programming. All you need to do is to build Qt and your @@ -200,7 +189,7 @@ \o \l{Deploying Qt for Embedded Linux Applications}{Qt for Embedded Linux} \endlist - \sa Installation {Window System Specific Notes} + \sa Installation {Platform-Specific Documentation} */ /*! @@ -208,7 +197,6 @@ \contentspage Deploying Qt Applications \title Deploying an Application on X11 Platforms - \ingroup deployment Due to the proliferation of Unix systems (commercial Unices, Linux distributions, etc.), deployment on Unix is a complex @@ -529,7 +517,6 @@ \contentspage Deploying Qt Applications \title Deploying an Application on Windows - \ingroup deployment This documentation will describe how to determine which files you should include in your distribution, and how to make sure that the @@ -933,7 +920,6 @@ \contentspage Deploying Qt Applications \title Deploying an Application on Mac OS X - \ingroup deployment Starting with version 4.5, Qt now includes a \l {macdeploy}{deployment tool} that automates the prodecures described in this document. diff --git a/doc/src/qt-conf.qdoc b/doc/src/deployment/qt-conf.qdoc index ce32aa8..229fa45 100644 --- a/doc/src/qt-conf.qdoc +++ b/doc/src/deployment/qt-conf.qdoc @@ -43,7 +43,6 @@ \page qt-conf.html \title Using qt.conf - \ingroup deployment The \c qt.conf file overrides the hard-coded paths that are compiled into the Qt library. These paths are accessible using the diff --git a/doc/src/qtconfig.qdoc b/doc/src/deployment/qtconfig.qdoc index 2e02fe6..2e02fe6 100644 --- a/doc/src/qtconfig.qdoc +++ b/doc/src/deployment/qtconfig.qdoc diff --git a/doc/src/desktop-integration.qdoc b/doc/src/desktop-integration.qdoc deleted file mode 100644 index 1c10ed9..0000000 --- a/doc/src/desktop-integration.qdoc +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page desktop-integration.html - \title Desktop Integration - \ingroup gui-programming - - Various classes in Qt are designed to help developers integrate applications into - users' desktop environments. These classes enable developers to take advantage - of native services while still using a cross-platform API. - - \tableofcontents - - \section1 Opening External Resources - - Although Qt provides facilities to handle and display resources, such as - \l{QImageIOHandler}{common image formats} and \l{QTextDocument}{HTML}, - it is sometimes necessary to open files and external resources using external - applications. - - QDesktopServices provides an interface to services offered by the user's desktop - environment. In particular, the \l{QDesktopServices::}{openUrl()} function is - used to open resources using the appropriate application, which may have been - specifically configured by the user. - - \section1 System Tray Icons - - Many modern desktop environments feature docks or panels with \e{system trays} - in which applications can install icons. Applications often use system tray icons - to display status information, either by updating the icon itself or by showing - information in "balloon messages". Additionally, many applications provide - pop-up menus that can be accessed via their system tray icons. - - The QSystemTrayIcon class exposes all of the above features via an intuitive - Qt-style API that can be used on all desktop platforms. - - \section1 Desktop Widgets - - On systems where the user's desktop is displayed using more than one screen, - certain types of applications may need to obtain information about the - configuration of the user's workspace to ensure that new windows and dialogs - are opened in appropriate locations. - - The QDesktopWidget class can be used to monitor the positions of widgets and - notify applications about changes to the way the desktop is split over the - available screens. This enables applications to implement policies for - positioning new windows so that, for example, they do not distract a user - who is working on a specific task. - - -*/ diff --git a/doc/src/activeqt-dumpcpp.qdoc b/doc/src/development/activeqt-dumpcpp.qdoc index 63e35ee..8c743a1 100644 --- a/doc/src/activeqt-dumpcpp.qdoc +++ b/doc/src/development/activeqt-dumpcpp.qdoc @@ -93,15 +93,15 @@ for each \c coclass and \c interface declared in the type library. coclasses marked with the \c control attribute will be wrapped by a QAxWidget subclass. - Those classes that wrap creatable
coclasses
(i.e. coclasses that are not marked + Those classes that wrap creatable coclasses (i.e. coclasses that are not marked as \c noncreatable) have a default constructor; this is typically a single class of type \c Application. \snippet doc/src/snippets/code/doc_src_activeqt-dumpcpp.qdoc 0 All other classes can only be created by passing an IDispatch interface pointer - to the constructor; those classes should however not
be created explicitly. - Instead, use the appropriate API of already created
objects. + to the constructor; those classes should however not be created explicitly. + Instead, use the appropriate API of already created objects. \snippet doc/src/snippets/code/doc_src_activeqt-dumpcpp.qdoc 1 @@ -123,16 +123,16 @@ By default, methods and property returning subobjects will use the type as in the type library. The caller of the function is responsible for deleting or - reparenting the object
returned. If the \c -compat switch is set, properties + reparenting the object returned. If the \c -compat switch is set, properties and method returning a COM object have the return type \c IDispatch*, and - the namespace will not declare wrapper classes for
interfaces. + the namespace will not declare wrapper classes for interfaces. In this case, create the correct wrapper class explicitly: \snippet doc/src/snippets/code/doc_src_activeqt-dumpcpp.qdoc 4 You can of course use the IDispatch* returned directly, in which case you have to - call
\c Release() when finished with the interface. + call \c Release() when finished with the interface. All classes in the namespace are tagged with a macro that allows you to export or import them from a DLL. To do that, declare the macro to expand to diff --git a/doc/src/activeqt-dumpdoc.qdoc b/doc/src/development/activeqt-dumpdoc.qdoc index 55ab2d7..55ab2d7 100644 --- a/doc/src/activeqt-dumpdoc.qdoc +++ b/doc/src/development/activeqt-dumpdoc.qdoc diff --git a/doc/src/activeqt-idc.qdoc b/doc/src/development/activeqt-idc.qdoc index 974eddc..974eddc 100644 --- a/doc/src/activeqt-idc.qdoc +++ b/doc/src/development/activeqt-idc.qdoc diff --git a/doc/src/activeqt-testcon.qdoc b/doc/src/development/activeqt-testcon.qdoc index 9fcfed6..9fcfed6 100644 --- a/doc/src/activeqt-testcon.qdoc +++ b/doc/src/development/activeqt-testcon.qdoc diff --git a/doc/src/assistant-manual.qdoc b/doc/src/development/assistant-manual.qdoc index 1b82b1a..b26efcc 100644 --- a/doc/src/assistant-manual.qdoc +++ b/doc/src/development/assistant-manual.qdoc @@ -642,8 +642,8 @@ \endtable In addition to those \QA specific tags, the tags for generating and registering - documentation can be used. See \l{QtHelp Module#Creating a Qt Help Collection}{Qt Help Collection} - documentation for more information. + documentation can be used. See \l{The Qt Help Framework#Creating a Qt Help Collection} + {Qt Help Collection} documentation for more information. An example of a help collection file that uses all the available tags is shown below: diff --git a/doc/src/debug.qdoc b/doc/src/development/debug.qdoc index bedf73d..f0fe128 100644 --- a/doc/src/debug.qdoc +++ b/doc/src/development/debug.qdoc @@ -39,22 +39,9 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Qt Debugging Techniques -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page debug.html \title Debugging Techniques - \ingroup buildsystem Here we present some useful hints to help you with debugging your Qt-based software. diff --git a/doc/src/designer-manual.qdoc b/doc/src/development/designer-manual.qdoc index 5d8587a..5d8587a 100644 --- a/doc/src/designer-manual.qdoc +++ b/doc/src/development/designer-manual.qdoc diff --git a/doc/src/developing-on-mac.qdoc b/doc/src/development/developing-on-mac.qdoc index 2546ef1..dee6d4d 100644 --- a/doc/src/developing-on-mac.qdoc +++ b/doc/src/development/developing-on-mac.qdoc @@ -44,7 +44,7 @@ \title Developing Qt Applications on Mac OS X \brief A overview of items to be aware of when developing Qt applications on Mac OS X - \ingroup platform-notes + \ingroup platform-specific \tableofcontents diff --git a/doc/src/classes/q3popupmenu.qdoc b/doc/src/development/developing-with-qt.qdoc index c20dadc..9fa2242 100644 --- a/doc/src/classes/q3popupmenu.qdoc +++ b/doc/src/development/developing-with-qt.qdoc @@ -40,37 +40,35 @@ ****************************************************************************/ /*! - \class Q3PopupMenu - \brief The Q3PopupMenu class is a thin compatibility wrapper around QMenu. - \compat + \page developing-with-qt.html + \title Cross Platform Development with Qt - Use QMenu in new applications. Note that the menu's actions must - be \l {Q3Action}s. -*/ - -/*! - \fn Q3PopupMenu::Q3PopupMenu(QWidget *parent, const char *name) - - Constructs a menu with the given \a parent and \a name. -*/ - -/*! - \fn int Q3PopupMenu::exec() - - Pops up the menu and returns the ID of the action that was - selected. - - \sa QMenu::exec() -*/ - -/*! - \fn int Q3PopupMenu::exec(const QPoint & pos, int indexAtPoint) - - Pops up the menu at coordinate \a pos and returns the ID of the - action that was selected. - - If \a indexAtPoint is specified, the menu will pop up with the - item at index \a indexAtPoint under the mouse cursor. + Qt is provided with a set of build tools to help developers automate + the process of building and installing Qt applications. - \sa QMenu::exec() + \table 100% + \header \o Development \o Cross-Platform Issues \o Specific Tools + \row + \o + \list + \o \l {Debugging Techniques} + \o \l {Qt's Tools} + \o \l {The Qt Resource System} + \o \l {Using Precompiled Headers} + \endlist + \o + \list + \o \l {Cross Compiling Qt for Embedded Linux Applications} + \o \l {Deploying Qt Applications} + \o \l {Installation}{Installing Qt} + \o \l {Window System Specific Notes} + \endlist + \o + \list + \o \l lupdate and \l lrelease + \o \l {moc}{Meta-Object Compiler (moc)} + \o \l {User Interface Compiler (uic)} + \o \l {Resource Compiler (rcc)} + \endlist + \endtable */ diff --git a/doc/src/moc.qdoc b/doc/src/development/moc.qdoc index ee57f7e..747c68d 100644 --- a/doc/src/moc.qdoc +++ b/doc/src/development/moc.qdoc @@ -42,7 +42,6 @@ /*! \page moc.html \title Using the Meta-Object Compiler (moc) - \ingroup buildsystem \ingroup qttools \keyword moc diff --git a/doc/src/qmake-manual.qdoc b/doc/src/development/qmake-manual.qdoc index 2a0ad9a..181ba6a 100644 --- a/doc/src/qmake-manual.qdoc +++ b/doc/src/development/qmake-manual.qdoc @@ -45,7 +45,6 @@ \startpage {index.html}{Qt Reference Documentation} \nextpage qmake Tutorial - \ingroup buildsystem \ingroup qttools \keyword qmake @@ -3843,7 +3842,6 @@ \contentspage {qmake Manual}{Contents} \previouspage qmake Advanced Usage \nextpage qmake Reference - \ingroup buildsystem \target Introduction @@ -4262,8 +4260,7 @@ \snippet examples/designer/worldtimeclockplugin/worldtimeclockplugin.pro 0 - See the \l{Qt Examples#Qt Designer}{Qt Designer examples} for more - examples of plugin-based projects. + See the \l{Qt Designer Examples} for more examples of plugin-based projects. \section1 Building and Installing in Debug and Release Modes diff --git a/doc/src/qmsdev.qdoc b/doc/src/development/qmsdev.qdoc index b6126a5..ceed4c1 100644 --- a/doc/src/qmsdev.qdoc +++ b/doc/src/development/qmsdev.qdoc @@ -1,12 +1,41 @@ /**************************************************************************** ** -** Documentation of Visual Studio Integration Plugin. -** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/doc/src/qtestlib.qdoc b/doc/src/development/qtestlib.qdoc index 57683e6..13a5b7c 100644 --- a/doc/src/qtestlib.qdoc +++ b/doc/src/development/qtestlib.qdoc @@ -42,9 +42,9 @@ /*! \page qtestlib-manual.html \title QTestLib Manual - \ingroup architecture \brief An overview of Qt's unit testing framework. + \ingroup frameworks-technologies \keyword qtestlib The QTestLib framework, provided by Nokia, is a tool for unit @@ -383,7 +383,6 @@ \nextpage {Chapter 1: Writing a Unit Test}{Chapter 1} \title QTestLib Tutorial - \ingroup howto This tutorial gives a short introduction to how to use some of the features of the QTestLib framework. It is divided into four diff --git a/doc/src/rcc.qdoc b/doc/src/development/rcc.qdoc index 5eb5547..1da641c 100644 --- a/doc/src/rcc.qdoc +++ b/doc/src/development/rcc.qdoc @@ -42,7 +42,6 @@ /*! \page rcc.html \title Resource Compiler (rcc) - \ingroup buildsystem \ingroup qttools \keyword rcc diff --git a/doc/src/tools-list.qdoc b/doc/src/development/tools-list.qdoc index 509a1e7..01f71d3 100644 --- a/doc/src/tools-list.qdoc +++ b/doc/src/development/tools-list.qdoc @@ -42,7 +42,6 @@ /*! \group qttools \title Qt's Tools - \ingroup buildsystem Qt is supplied with several command line and graphical tools to ease and speed the development process. Each tool is listed here diff --git a/doc/src/uic.qdoc b/doc/src/development/uic.qdoc index f774fa8..b05643c 100644 --- a/doc/src/uic.qdoc +++ b/doc/src/development/uic.qdoc @@ -42,7 +42,6 @@ /*! \page uic.html \title User Interface Compiler (uic) - \ingroup buildsystem \ingroup qttools \keyword uic diff --git a/doc/src/distributingqt.qdoc b/doc/src/distributingqt.qdoc deleted file mode 100644 index 0739976..0000000 --- a/doc/src/distributingqt.qdoc +++ /dev/null @@ -1,154 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/**************************************************************************** -** -** Documentation on deploying Qt. -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - -/* -\page distributingqt.html - -\title Deploying Qt Applications - -This document lists the platform-specific files needed to distribute -Qt applications. We do not include any compiler-specific files that -may also be required. (See also, \link winsystem.html Window -System-specific Notes\endlink.) - -\tableofcontents - -Also see the "deployment" articles in -\e{\link http://qt.nokia.com/doc/qq/ Qt Quarterly\endlink}: -\list -\i \link http://qt.nokia.com/doc/qq/qq09-mac-deployment.html -Deploying Applications on Mac OS X\endlink -\i \link http://qt.nokia.com/doc/qq/qq10-windows-deployment.html -Deploying Applications on Windows\endlink -\i \link http://qt.nokia.com/doc/qq/qq11-unix-deployment.html -Deploying Applications on X11\endlink -\endlist - -\section1 Static Qt Applications - -To distribute static Qt applications, you need the following file for -all platforms: - -\list -\i your application's executable -\endlist - -\section1 Dynamic Qt Applications - -To distribute dynamic Qt applications, you will need the following -files for all platforms: - -\list -\i application executable -\i the Qt library -\endlist - -The Qt library must either be in the same directory as the application -executable or in a directory which is included in the system library -path. - -The library is provided by the following platform specific files: - -\table -\header \i Platform \i File -\row \i Windows \i \c qt[version].dll -\row \i Unix/Linux \i \c libqt[version].so -\row \i Mac \i \c libqt[version].dylib -\endtable - -\e version includes the three version numbers. - -\section2 Distributing Plugins - -You must include any plugin files required by the application. - -Plugins must be put into a subdirectory under a directory known to -Qt as a plugin directory. The subdirectory must have the name of the -plugin category (e.g. \c styles, \c sqldrivers, \c designer, etc.). - -Qt searches in the following directories for plugin categories: - -\list -\i Application specific plugin paths -\i Build-directory of Qt -\i The application directory -\endlist - -Application specific plugin paths can be added using -QCoreApplication::addLibraryPath(). The build-directory of Qt is hardcoded -in the Qt library and can be changed as a part of the installation -process. - -\section1 Dynamic Dialogs - -For dynamic dialogs if you use QWidgetFactory, you need the following -files for all platforms: - -\list -\i The same files as used for dynamic Qt applications -\i The QUI Library -\endlist - -The QUI library is provided by the following platform specific files: -\table -\header \i Platform \i File -\row \i Windows \i\c qui.lib -\row \i Unix/Linux \i\c libqui.so -\row \i Mac \i \c libqui.dylib -\endtable - -The QUI library must either be in the same directory as the -application executable or in a directory which is included in the -system library path. - -*/ diff --git a/doc/src/examples-overview.qdoc b/doc/src/examples-overview.qdoc deleted file mode 100644 index 50c19fa..0000000 --- a/doc/src/examples-overview.qdoc +++ /dev/null @@ -1,367 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page examples-overview.html - \title An Overview of Qt's Examples - \brief A short guide to the different categories of examples included with Qt. - \ingroup howto - - Qt is supplied with a variety of examples that cover almost every aspect - of development. These examples are ordered by functional area, but many - examples often use features from many parts of Qt to highlight one area - in particular. - - This document provides a brief overview of each example category and - provides links to the more formal \l{Qt Examples}{list of examples}. - - \section1 \l{Qt Examples#Widgets}{Widgets} - - \l{Qt Examples#Widgets}{\inlineimage widget-examples.png - } - - Qt comes with a large range of standard widgets that users of modern - applications have come to expect. - - You can also develop your own custom widgets and controls, and use them - alongside standard widgets. - - It is even possible to provide custom styles and themes for widgets that can - be used to change the appearance of standard widgets and appropriately - written custom widgets. - - \section1 \l{Qt Examples#Dialogs}{Dialogs} - - \l{Qt Examples#Dialogs}{\inlineimage dialog-examples.png - } - - Qt includes standard dialogs for many common operations, such as file - selection, printing, and color selection. - - Custom dialogs can also be created for specialized modal or modeless - interactions with users. - - \section1 \l{Qt Examples#Main Windows}{Main Windows} - - \l{Qt Examples#Main Windows}{\inlineimage mainwindow-examples.png - } - - All the standard features of application main windows are provided by Qt. - - Main windows can have pull down menus, tool bars, and dock windows. These - separate forms of user input are unified in an integrated action system that - also supports keyboard shortcuts and accelerator keys in menu items. - - \section1 \l{Qt Examples#Layouts}{Layouts} - - \l{Qt Examples#Layouts}{\inlineimage layout-examples.png - } - - Qt uses a layout-based approach to widget management. Widgets are arranged in - the optimal positions in windows based on simple layout rules, leading to a - consistent look and feel. - - Custom layouts can be used to provide more control over the positions and - sizes of child widgets. - - \section1 \l{Qt Examples#Painting}{Painting} - - \l{Qt Examples#Painting}{\inlineimage painting-examples.png - } - - Qt's painting system is able to render vector graphics, images, and outline - font-based text with sub-pixel accuracy accuracy using anti-aliasing to - improve rendering quality. - - These examples show the most common techniques that are used when painting - with Qt, from basic concepts such as drawing simple primitives to the use of - transformations. - - \section1 \l{Qt Examples#Item Views}{Item Views} - - \l{Qt Examples#Item Views}{\inlineimage itemview-examples.png - } - - Item views are widgets that typically display data sets. Qt 4's model/view - framework lets you handle large data sets by separating the underlying data - from the way it is represented to the user, and provides support for - customized rendering through the use of delegates. - - \section1 \l{Qt Examples#Graphics View}{Graphics View} - - \l{Qt Examples#Graphics View}{\inlineimage graphicsview-examples.png - } - - Qt is provided with a comprehensive canvas through the GraphicsView - classes. - - These examples demonstrate the fundamental aspects of canvas programming - with Qt. - - \section1 \l{Qt Examples#Rich Text}{Rich Text} - - \l{Qt Examples#Rich Text}{\inlineimage richtext-examples.png - } - - Qt provides powerful document-oriented rich text engine that supports Unicode - and right-to-left scripts. Documents can be manipulated using a cursor-based - API, and their contents can be imported and exported as both HTML and in a - custom XML format. - - \section1 \l{Qt Examples#Tools}{Tools} - - \l{Qt Examples#Tools}{\inlineimage tool-examples.png - } - - Qt is equipped with a range of capable tool classes, from containers and - iterators to classes for string handling and manipulation. - - Other classes provide application infrastructure support, handling plugin - loading and managing configuration files. - - \section1 \l{Qt Examples#Desktop}{Desktop} - - \l{Qt Examples#Desktop}{\inlineimage desktop-examples.png - } - - Qt provides features to enable applications to integrate with the user's - preferred desktop environment. - - Features such as system tray icons, access to the desktop widget, and - support for desktop services can be used to improve the appearance of - applications and take advantage of underlying desktop facilities. - - \section1 \l{Qt Examples#Drag and Drop}{Drag and Drop} - - \l{Qt Examples#Drag and Drop}{\inlineimage draganddrop-examples.png - } - - Qt supports native drag and drop on all platforms via an extensible - MIME-based system that enables applications to send data to each other in the - most appropriate formats. - - Drag and drop can also be implemented for internal use by applications. - - \section1 \l{Qt Examples#Threads}{Threads} - - \l{Qt Examples#Threads}{\inlineimage thread-examples.png - } - - Qt 4 makes it easier than ever to write multithreaded applications. More - classes have been made usable from non-GUI threads, and the signals and slots - mechanism can now be used to communicate between threads. - - Additionally, it is now possible to move objects between threads. - - \section1 \l{Qt Examples#Concurrent Programming}{Concurrent Programming} - - The QtConcurrent namespace includes a collection of classes and functions - for straightforward concurrent programming. - - These examples show how to apply the basic techniques of concurrent - programming to simple problems. - - \section1 \l{Qt Examples#Network}{Network} - - \l{Qt Examples#Network}{\inlineimage network-examples.png - } - - Qt is provided with an extensive set of network classes to support both - client-based and server side network programming. - - These examples demonstrate the fundamental aspects of network programming - with Qt. - - \section1 \l{Qt Examples#XML}{XML} - - \l{Qt Examples#XML}{\inlineimage xml-examples.png - } - - XML parsing and handling is supported through SAX and DOM compliant APIs. - - Qt's SAX compliant classes allow you to parse XML incrementally; the DOM - classes enable more complex document-level operations to be performed on - XML files. - - \section1 \l{Qt Examples#XQuery, XPath}{XQuery, XPath} - - Qt provides an XQuery/XPath engine, QtXmlPatterns, for querying XML - files and custom data models, similar to the model/view framework. - - \section1 \l{Qt Examples#OpenGL}{OpenGL} - - \l{Qt Examples#OpenGL}{\inlineimage opengl-examples.png - } - - Qt provides support for integration with OpenGL implementations on all - platforms, giving developers the opportunity to display hardware accelerated - 3D graphics alongside a more conventional user interface. - - These examples demonstrate the basic techniques used to take advantage of - OpenGL in Qt applications. - - \section1 \l{Qt Examples#Multimedia}{Multimedia} - - \l{Qt Examples#Multimedia} - - Qt provides low-level audio support on linux,windows and mac platforms by default and - an audio plugin API to allow developers to implement there own audio support for - custom devices and platforms. - - These examples demonstrate the basic techniques used to take advantage of - Audio API in Qt applications. - - \section1 \l{Qt Examples#SQL}{SQL} - - \l{Qt Examples#SQL}{\inlineimage sql-examples.png - } - - Qt provides extensive database interoperability, with support for products - from both open source and proprietary vendors. - - SQL support is integrated with Qt's model/view architecture, making it easier - to provide GUI integration for your database applications. - - \section1 \l{Qt Examples#Help System}{Help System} - - \l{Qt Examples#Help System}{\inlineimage assistant-examples.png - } - - Support for interactive help is provided by the Qt Assistant application. - Developers can take advantages of the facilities it offers to display - specially-prepared documentation to users of their applications. - - \section1 \l{Qt Examples#Qt Designer}{Qt Designer} - - \l{Qt Examples#Qt Designer}{\inlineimage designer-examples.png - } - - Qt Designer is a capable graphical user interface designer that lets you - create and configure forms without writing code. GUIs created with - Qt Designer can be compiled into an application or created at run-time. - - \section1 \l{Qt Examples#UiTools}{UiTools} - - \l{Qt Examples#UiTools}{\inlineimage uitools-examples.png - } - - Qt is equipped with a range of capable tool classes, from containers and - iterators to classes for string handling and manipulation. - - Other classes provide application infrastructure support, handling plugin - loading and managing configuration files. - - \section1 \l{Qt Examples#Qt Linguist}{Qt Linguist} - - \l{Qt Examples#Qt Linguist}{\inlineimage linguist-examples.png - } - - Internationalization is a core feature of Qt. These examples show how to - access translation and localization facilities at run-time. - - \section1 \l{Qt Examples#Qt Script}{Qt Script} - - \l{Qt Examples#Qt Script}{\inlineimage qtscript-examples.png - } - - Qt is provided with a powerful embedded scripting environment through the QtScript - classes. - - These examples demonstrate the fundamental aspects of scripting applications - with Qt. - - \section1 \l{Qt Examples#Phonon Multimedia Framework}{Phonon Multimedia Framework} - - \l{Qt Examples#Phonon Multimedia Framework}{\inlineimage phonon-examples.png - } - - The Phonon Multimedia Framework brings multimedia support to Qt applications. - - The examples and demonstrations provided show how to play music and movies - using the Phonon API. - - \section1 \l{Qt Examples#WebKit}{WebKit} - - \l{Qt Examples#WebKit}{\inlineimage webkit-examples.png - } - - Qt provides an integrated Web browser component based on WebKit, the popular - open source browser engine. - - These examples and demonstrations show a range of different uses for WebKit, - from displaying Web pages within a Qt user interface to an implementation of - a basic function Web browser. - - \section1 \l{Qt Examples#State Machine}{State Machine} - - Qt provides a powerful hierchical finite state machine through the Qt State - Machine classes. - - These examples demonstrate the fundamental aspects of implementing - Statecharts with Qt. - - \section1 \l{Qt Examples#Qt for Embedded Linux}{Qt for Embedded Linux} - - \l{Qt Examples#Qt for Embedded Linux}{\inlineimage qt-embedded-examples.png - } - - These examples show how to take advantage of features specifically designed - for use on systems with limited resources, specialized hardware, and small - screens. - - \section1 \l{Qt Examples#ActiveQt}{ActiveQt} - - Qt is supplied with a number of example applications and demonstrations that - have been written to provide developers with examples of the Qt API in use, - highlight good programming practice, and showcase features found in each of - Qt's core technologies. - - The example and demo launcher can be used to explore the different categories - available. It provides an overview of each example, lets you view the - documentation in Qt Assistant, and is able to launch examples and demos. - - \section1 \l{http://qt.nokia.com/doc/qq}{Another Source of Examples} - - One more valuable source for examples and explanations of Qt - features is the archive of the \l {http://qt.nokia.com/doc/qq} - {Qt Quarterly}. - -*/ diff --git a/doc/src/examples.qdoc b/doc/src/examples.qdoc deleted file mode 100644 index 0181e09..0000000 --- a/doc/src/examples.qdoc +++ /dev/null @@ -1,437 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page examples.html - \title Qt Examples - \brief Information about the example programs provided with Qt. - \ingroup howto - - This is the list of examples in Qt's \c examples directory. The - examples demonstrate Qt features in small, self-contained - programs. They are not all designed to be impressive when you run - them, but their source code is carefully written to show good Qt - programming practices. You can launch any of these programs from the - \l{Examples and Demos Launcher} application. - - If you are new to Qt, you should probably start by going through - the \l{Tutorials} before you have a look at the - \l{mainwindows/application}{Application} example. - - In addition to the examples and the tutorial, Qt includes a - \l{Qt Demonstrations}{selection of demos} that deliberately show off - Qt's features. You might want to look at these as well. - - One more valuable source for examples and explanations of Qt - features is the archive of the \l {Qt Quarterly}. - - In the list below, examples marked with an asterisk (*) are fully - documented. Eventually, all the examples will be fully documented, - but sometimes we include an example before we have time to write - about it, because someone might need it right now. - - Categories: - - \tableofcontents - - \section1 ActiveQt - - \list - \o \l{activeqt/comapp}{COM App}\raisedaster - \o \l{Dot Net Example (ActiveQt)}{Dot Net}\raisedaster - \o \l{activeqt/hierarchy}{Hierarchy}\raisedaster - \o \l{activeqt/menus}{Menus}\raisedaster - \o \l{activeqt/multiple}{Multiple}\raisedaster - \o \l{activeqt/opengl}{OpenGL}\raisedaster - \o \l{activeqt/qutlook}{Qutlook}\raisedaster - \o \l{activeqt/simple}{Simple}\raisedaster - \o \l{activeqt/webbrowser}{Web Browser}\raisedaster - \o \l{activeqt/wrapper}{Wrapper}\raisedaster - \endlist - - \section1 Animation - - \list - \o \l{animation/moveblocks}{Move Blocks}\raisedaster - \o \l{animation/stickman}{Stick man}\raisedaster - \endlist - - \section1 Concurrent Programming - - \list - \o \l{qtconcurrent/imagescaling}{QtConcurrent Asynchronous Image Scaling} - \o \l{qtconcurrent/map}{QtConcurrent Map} - \o \l{qtconcurrent/progressdialog}{QtConcurrent Progress Dialog} - \o \l{qtconcurrent/runfunction}{QtConcurrent Run Function} - \o \l{qtconcurrent/wordcount}{QtConcurrent Word Count} - \endlist - - \section1 D-Bus - \list - \o \l{dbus/dbus-chat}{Chat} - \o \l{dbus/complexpingpong}{Complex Ping Pong} - \o \l{dbus/listnames}{List Names} - \o \l{dbus/pingpong}{Ping Pong} - \o \l{dbus/remotecontrolledcar}{Remote Controlled Car} - \endlist - - \section1 Desktop - - \list - \o \l{desktop/screenshot}{Screenshot}\raisedaster - \o \l{desktop/systray}{System Tray}\raisedaster - \endlist - - \section1 Dialogs - - \list - \o \l{dialogs/classwizard}{Class Wizard}\raisedaster - \o \l{dialogs/configdialog}{Config Dialog} - \o \l{dialogs/extension}{Extension}\raisedaster - \o \l{dialogs/findfiles}{Find Files}\raisedaster - \o \l{dialogs/licensewizard}{License Wizard}\raisedaster - \o \l{dialogs/standarddialogs}{Standard Dialogs} - \o \l{dialogs/tabdialog}{Tab Dialog}\raisedaster - \o \l{dialogs/trivialwizard}{Trivial Wizard} - \endlist - - \section1 Drag and Drop - - \list - \o \l{draganddrop/delayedencoding}{Delayed Encoding}\raisedaster - \o \l{draganddrop/draggableicons}{Draggable Icons} - \o \l{draganddrop/draggabletext}{Draggable Text} - \o \l{draganddrop/dropsite}{Drop Site} - \o \l{draganddrop/fridgemagnets}{Fridge Magnets}\raisedaster - \o \l{draganddrop/puzzle}{Drag and Drop Puzzle} - \endlist - - \section1 Graphics View - - \list - \o \l{graphicsview/collidingmice}{Colliding Mice}\raisedaster - \o \l{graphicsview/diagramscene}{Diagram Scene}\raisedaster - \o \l{graphicsview/dragdroprobot}{Drag and Drop Robot} - \o \l{graphicsview/elasticnodes}{Elastic Nodes} - \o \l{graphicsview/portedasteroids}{Ported Asteroids} - \o \l{graphicsview/portedcanvas}{Ported Canvas} - \endlist - - \section1 Help System - - \list - \o \l{help/simpletextviewer}{Simple Text Viewer}\raisedaster - \endlist - - \section1 Item Views - - \list - \o \l{itemviews/addressbook}{Address Book}\raisedaster - \o \l{itemviews/basicsortfiltermodel}{Basic Sort/Filter Model} - \o \l{itemviews/chart}{Chart} - \o \l{itemviews/coloreditorfactory}{Color Editor Factory}\raisedaster - \o \l{itemviews/combowidgetmapper}{Combo Widget Mapper}\raisedaster - \o \l{itemviews/customsortfiltermodel}{Custom Sort/Filter Model}\raisedaster - \o \l{itemviews/dirview}{Dir View} - \o \l{itemviews/editabletreemodel}{Editable Tree Model}\raisedaster - \o \l{itemviews/fetchmore}{Fetch More}\raisedaster - \o \l{itemviews/frozencolumn}{Frozen Column}\raisedaster - \o \l{itemviews/pixelator}{Pixelator}\raisedaster - \o \l{itemviews/puzzle}{Puzzle} - \o \l{itemviews/simpledommodel}{Simple DOM Model}\raisedaster - \o \l{itemviews/simpletreemodel}{Simple Tree Model}\raisedaster - \o \l{itemviews/simplewidgetmapper}{Simple Widget Mapper}\raisedaster - \o \l{itemviews/spinboxdelegate}{Spin Box Delegate}\raisedaster - \o \l{itemviews/stardelegate}{Star Delegate}\raisedaster - \endlist - - \section1 Layouts - - \list - \o \l{layouts/basiclayouts}{Basic Layouts}\raisedaster - \o \l{layouts/borderlayout}{Border Layout} - \o \l{layouts/dynamiclayouts}{Dynamic Layouts} - \o \l{layouts/flowlayout}{Flow Layout} - \endlist - - \section1 Main Windows - - \list - \o \l{mainwindows/application}{Application}\raisedaster - \o \l{mainwindows/dockwidgets}{Dock Widgets}\raisedaster - \o \l{mainwindows/mdi}{MDI} - \o \l{mainwindows/menus}{Menus}\raisedaster - \o \l{mainwindows/recentfiles}{Recent Files} - \o \l{mainwindows/sdi}{SDI} - \endlist - - \section1 Network - - \list - \o \l{network/blockingfortuneclient}{Blocking Fortune Client}\raisedaster - \o \l{network/broadcastreceiver}{Broadcast Receiver} - \o \l{network/broadcastsender}{Broadcast Sender} - \o \l{network/network-chat}{Network Chat} - \o \l{network/fortuneclient}{Fortune Client}\raisedaster - \o \l{network/fortuneserver}{Fortune Server}\raisedaster - \o \l{network/ftp}{FTP}\raisedaster - \o \l{network/http}{HTTP} - \o \l{network/loopback}{Loopback} - \o \l{network/threadedfortuneserver}{Threaded Fortune Server}\raisedaster - \o \l{network/torrent}{Torrent} - \o \l{network/googlesuggest}{Google Suggest} - \endlist - - \section1 OpenGL - - \list - \o \l{opengl/2dpainting}{2D Painting}\raisedaster - \o \l{opengl/framebufferobject}{Framebuffer Object} - \o \l{opengl/framebufferobject2}{Framebuffer Object 2} - \o \l{opengl/grabber}{Grabber} - \o \l{opengl/hellogl}{Hello GL}\raisedaster - \o \l{opengl/overpainting}{Overpainting}\raisedaster - \o \l{opengl/pbuffers}{Pixel Buffers} - \o \l{opengl/pbuffers2}{Pixel Buffers 2} - \o \l{opengl/samplebuffers}{Sample Buffers} - \o \l{opengl/textures}{Textures} - \endlist - - \section1 Painting - - \list - \o \l{painting/basicdrawing}{Basic Drawing}\raisedaster - \o \l{painting/concentriccircles}{Concentric Circles}\raisedaster - \o \l{painting/fontsampler}{Font Sampler} - \o \l{painting/imagecomposition}{Image Composition}\raisedaster - \o \l{painting/painterpaths}{Painter Paths}\raisedaster - \o \l{painting/svggenerator}{SVG Generator}\raisedaster - \o \l{painting/svgviewer}{SVG Viewer} - \o \l{painting/transformations}{Transformations}\raisedaster - \endlist - - \section1 Phonon Multimedia Framework - - \list - \o \l{phonon/capabilities}{Capabilities}\raisedaster - \o \l{phonon/musicplayer}{Music Player}\raisedaster - \endlist - - \section1 Multimedia - - \list - \o \l{multimedia/audio/audiodevices}{Audio Devices}\raisedaster - \o \l{multimedia/audio/audiooutput}{Audio Output}\raisedaster - \o \l{multimedia/audio/audioinput}{Audio Input}\raisedaster - \endlist - - \section1 Qt Designer - - \list - \o \l{designer/calculatorbuilder}{Calculator Builder}\raisedaster - \o \l{designer/calculatorform}{Calculator Form}\raisedaster - \o \l{designer/customwidgetplugin}{Custom Widget Plugin}\raisedaster - \o \l{designer/taskmenuextension}{Task Menu Extension}\raisedaster - \o \l{designer/containerextension}{Container Extension}\raisedaster - \o \l{designer/worldtimeclockbuilder}{World Time Clock Builder}\raisedaster - \o \l{designer/worldtimeclockplugin}{World Time Clock Plugin}\raisedaster - \endlist - - \section1 Qt Linguist - - \list - \o \l{linguist/hellotr}{Hello tr()}\raisedaster - \o \l{linguist/arrowpad}{Arrow Pad}\raisedaster - \o \l{linguist/trollprint}{Troll Print}\raisedaster - \endlist - - \section1 Qt for Embedded Linux - - \list - \o \l{qws/svgalib}{Accelerated Graphics Driver}\raisedaster - \o \l{qws/dbscreen}{Double Buffered Graphics Driver}\raisedaster - \o \l{qws/mousecalibration}{Mouse Calibration}\raisedaster - \o \l{qws/ahigl}{OpenGL for Embedded Systems}\raisedaster - \o \l{qws/simpledecoration}{Simple Decoration}\raisedaster - \endlist - - \section1 Qt Script - - \list - \o \l{script/calculator}{Calculator}\raisedaster - \o \l{script/context2d}{Context2D}\raisedaster - \o \l{script/defaultprototypes}{Default Prototypes}\raisedaster - \o \l{script/helloscript}{Hello Script}\raisedaster - \o \l{script/qstetrix}{Qt Script Tetrix}\raisedaster - \o \l{script/customclass}{Custom Script Class}\raisedaster - \endlist - - \section1 Rich Text - - \list - \o \l{richtext/calendar}{Calendar}\raisedaster - \o \l{richtext/orderform}{Order Form}\raisedaster - \o \l{richtext/syntaxhighlighter}{Syntax Highlighter}\raisedaster - \o \l{richtext/textobject}{Text Object}\raisedaster - \endlist - - \section1 SQL - - \list - \o \l{sql/cachedtable}{Cached Table}\raisedaster - \o \l{sql/drilldown}{Drill Down}\raisedaster - \o \l{sql/querymodel}{Query Model} - \o \l{sql/relationaltablemodel}{Relational Table Model} - \o \l{sql/tablemodel}{Table Model} - \o \l{sql/sqlwidgetmapper}{SQL Widget Mapper}\raisedaster - \endlist - - \section1 State Machine - - \list - \o \l{statemachine/eventtransitions}{Event Transitions}\raisedaster - \o \l{statemachine/factorial}{Factorial States}\raisedaster - \o \l{statemachine/pingpong}{Ping Pong States}\raisedaster - \o \l{statemachine/rogue}{Rogue}\raisedaster - \o \l{statemachine/trafficlight}{Traffic Light}\raisedaster - \o \l{statemachine/twowaybutton}{Two-way Button}\raisedaster - \endlist - - \section1 Threads - - \list - \o \l{threads/queuedcustomtype}{Queued Custom Type}\raisedaster - \o \l{threads/mandelbrot}{Mandelbrot}\raisedaster - \o \l{threads/semaphores}{Semaphores}\raisedaster - \o \l{threads/waitconditions}{Wait Conditions}\raisedaster - \endlist - - \section1 Tools - - \list - \o \l{tools/codecs}{Codecs} - \o \l{tools/completer}{Completer}\raisedaster - \o \l{tools/customcompleter}{Custom Completer}\raisedaster - \o \l{tools/customtype}{Custom Type}\raisedaster - \o \l{tools/customtypesending}{Custom Type Sending}\raisedaster - \o \l{tools/echoplugin}{Echo Plugin}\raisedaster - \o \l{tools/i18n}{I18N} - \o \l{tools/plugandpaint}{Plug & Paint}\raisedaster - \o Plug & Paint Plugins: \l{tools/plugandpaintplugins/basictools}{Basic Tools}\raisedaster - and \l{tools/plugandpaintplugins/extrafilters}{Extra Filters}\raisedaster - \o \l{tools/regexp}{RegExp} - \o \l{tools/settingseditor}{Settings Editor} - \o \l{tools/styleplugin}{Style Plugin}\raisedaster - \o \l{tools/treemodelcompleter}{Tree Model Completer}\raisedaster - \o \l{tools/undoframework}{Undo Framework}\raisedaster - \endlist - - \section1 UiTools - - \list - \o \l{uitools/multipleinheritance}{Multiple Inheritance}\raisedaster - \o \l{uitools/textfinder}{Text Finder}\raisedaster - \endlist - - \section1 WebKit - - \list - \o \l{webkit/previewer}{Previewer}\raisedaster - \o \l{webkit/formextractor}{Form Extractor} - \o \l{webkit/googlechat}{Google Chat} - \o \l{webkit/fancybrowser}{Fancy Browser} - \endlist - - \section1 Widgets - - \list - \o \l{widgets/analogclock}{Analog Clock}\raisedaster - \o \l{widgets/calculator}{Calculator}\raisedaster - \o \l{widgets/calendarwidget}{Calendar Widget}\raisedaster - \o \l{widgets/charactermap}{Character Map}\raisedaster - \o \l{widgets/codeeditor}{Code Editor}\raisedaster - \o \l{widgets/digitalclock}{Digital Clock}\raisedaster - \o \l{widgets/groupbox}{Group Box}\raisedaster - \o \l{widgets/icons}{Icons}\raisedaster - \o \l{widgets/imageviewer}{Image Viewer}\raisedaster - \o \l{widgets/lineedits}{Line Edits}\raisedaster - \o \l{widgets/movie}{Movie} - \o \l{widgets/scribble}{Scribble}\raisedaster - \o \l{widgets/shapedclock}{Shaped Clock}\raisedaster - \o \l{widgets/sliders}{Sliders}\raisedaster - \o \l{widgets/spinboxes}{Spin Boxes}\raisedaster - \o \l{widgets/styles}{Styles}\raisedaster - \o \l{widgets/stylesheet}{Style Sheet}\raisedaster - \o \l{widgets/tablet}{Tablet}\raisedaster - \o \l{widgets/tetrix}{Tetrix}\raisedaster - \o \l{widgets/tooltips}{Tooltips}\raisedaster - \o \l{widgets/wiggly}{Wiggly}\raisedaster - \o \l{widgets/windowflags}{Window Flags}\raisedaster - \endlist - - \section1 XML - - \list - \o \l{xml/dombookmarks}{DOM Bookmarks} - \o \l{xml/saxbookmarks}{SAX Bookmarks} - \o \l{xml/streambookmarks}{QXmlStream Bookmarks}\raisedaster - \o \l{xml/rsslisting}{RSS-Listing} - \o \l{xml/xmlstreamlint}{XML Stream Lint Example}\raisedaster - \endlist - - \section1 XQuery, XPath - - \list - \o \l{xmlpatterns/recipes}{Recipes} - \o \l{xmlpatterns/filetree}{File System Example} - \o \l{xmlpatterns/qobjectxmlmodel}{QObject XML Model Example} - \o \l{xmlpatterns/xquery/globalVariables}{C++ Source Code Analyzer Example} - \o \l{xmlpatterns/trafficinfo}{Traffic Info}\raisedaster - \o \l{xmlpatterns/schema}{XML Schema Validation}\raisedaster - \endlist - - \section1 Inter-Process Communication - \list - \o \l{ipc/localfortuneclient}{Local Fortune Client}\raisedaster - \o \l{ipc/localfortuneserver}{Local Fortune Server}\raisedaster - \o \l{ipc/sharedmemory}{Shared Memory}\raisedaster - \endlist -*/ diff --git a/doc/src/examples/application.qdoc b/doc/src/examples/application.qdoc index 7b7b881..dcab9e7 100644 --- a/doc/src/examples/application.qdoc +++ b/doc/src/examples/application.qdoc @@ -289,7 +289,7 @@ When restoring the position and size of a window, it's important to call QWidget::resize() before QWidget::move(). The reason why - is given in the \l{geometry.html}{Window Geometry} overview. + is given in the \l{Window Geometry} overview. \snippet examples/mainwindows/application/mainwindow.cpp 37 \snippet examples/mainwindows/application/mainwindow.cpp 39 diff --git a/doc/src/examples/drilldown.qdoc b/doc/src/examples/drilldown.qdoc index fff3b60..b62ecc5 100644 --- a/doc/src/examples/drilldown.qdoc +++ b/doc/src/examples/drilldown.qdoc @@ -389,9 +389,7 @@ the item's hover events, animating the item when the mouse cursor is hovering over the image (by default, no items accept hover events). Please see the \l{The Graphics View Framework} - documentation and the - \l{Qt Examples#Graphics View}{Graphics View examples} for more - details. + documentation and the \l{Graphics View Examples} for more details. \snippet examples/sql/drilldown/view.cpp 5 diff --git a/doc/src/examples/qtscriptcalculator.qdoc b/doc/src/examples/qtscriptcalculator.qdoc index 21aad23..7adce5a 100644 --- a/doc/src/examples/qtscriptcalculator.qdoc +++ b/doc/src/examples/qtscriptcalculator.qdoc @@ -42,7 +42,6 @@ /*! \example script/calculator \title QtScript Calculator Example - \ingroup scripting In this simple QtScript example, we show how to implement the functionality of a calculator widget. diff --git a/doc/src/examples/trafficinfo.qdoc b/doc/src/examples/trafficinfo.qdoc index 76d0810..500cf31 100644 --- a/doc/src/examples/trafficinfo.qdoc +++ b/doc/src/examples/trafficinfo.qdoc @@ -159,5 +159,5 @@ The rest of the code in this example is just for representing the time and station information to the user, and uses techniques described in the - \l{Qt Examples#Widgets}{Widgets examples}. + \l{Widgets Examples}. */ diff --git a/doc/src/datastreamformat.qdoc b/doc/src/files-and-resources/datastreamformat.qdoc index eac550c..4226d0b 100644 --- a/doc/src/datastreamformat.qdoc +++ b/doc/src/files-and-resources/datastreamformat.qdoc @@ -39,22 +39,9 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Documentation of the Format of the QDataStream operators. -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page datastreamformat.html \title Format of the QDataStream Operators - \ingroup architecture \brief Representations of data types that can be serialized by QDataStream. The \l QDataStream allows you to serialize some of the Qt data types. diff --git a/doc/src/resources.qdoc b/doc/src/files-and-resources/resources.qdoc index f8e9124..a799646 100644 --- a/doc/src/resources.qdoc +++ b/doc/src/files-and-resources/resources.qdoc @@ -40,9 +40,20 @@ ****************************************************************************/ /*! + \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 - \ingroup buildsystem \keyword resource system diff --git a/doc/src/accessible.qdoc b/doc/src/frameworks-technologies/accessible.qdoc index 8daff5a..7f1a2b1 100644 --- a/doc/src/accessible.qdoc +++ b/doc/src/frameworks-technologies/accessible.qdoc @@ -40,9 +40,15 @@ ****************************************************************************/ /*! + \group accessibility + \title Accessibility Classes +*/ + +/*! \page accessible.html \title Accessibility - \ingroup accessibility + + \ingroup frameworks-technologies \tableofcontents @@ -90,6 +96,10 @@ accessibility. \section2 Accessibility in Qt + + These classes provide support for accessible applications. + + \annotatedlist accessibility When we communicate with the assistive technologies, we need to describe Qt's user interface in a way that they can understand. Qt @@ -249,6 +259,19 @@ produce interfaces. We will give examples of both approaches later. + \section2 Enabling Accessibility Support + + By default, Qt applications are run with accessibility support + enabled on Windows and Mac OS X. On Unix/X11 platforms, applications + must be launched in an environment with the \c QT_ACCESSIBILITY + variable set to 1. For example, this is set in the following way with + the bash shell: + + \snippet doc/src/snippets/code/doc_src_qt4-accessibility.qdoc environment + + Accessibility features are built into Qt by default when the libraries + are configured and built. + \section1 Implementing Accessibility To provide accessibility support for a widget or other user @@ -274,9 +297,10 @@ \endlist In general, it is recommended that you are somewhat familiar with - MSAA, which Qt originally was built for. You should also study - the enum values of QAccessible, which describe the roles, actions, - relationships, and events that you need to consider. + MSAA, which Qt's accessibility support originally was built for. + You should also study the enum values of QAccessible, which + describe the roles, actions, relationships, and events that you + need to consider. Note that you can examine how Qt's widgets implement their accessibility. One major problem with the MSAA standard is that diff --git a/doc/src/qaxcontainer.qdoc b/doc/src/frameworks-technologies/activeqt-container.qdoc index 59f059f..47be4be 100644 --- a/doc/src/qaxcontainer.qdoc +++ b/doc/src/frameworks-technologies/activeqt-container.qdoc @@ -40,12 +40,8 @@ ****************************************************************************/ /*! - \module QAxContainer - \title QAxContainer Module - \contentspage Qt's Modules - \previouspage QtTest - \nextpage QAxServer - \ingroup modules + \page activeqt-container.html + \title Using ActiveX controls and COM objects in Qt \brief The QAxContainer module is a Windows-only extension for accessing ActiveX controls and COM objects. @@ -69,7 +65,7 @@ interface to the Windows Script Host. \endlist - Some \l{Qt Examples#ActiveQt}{example applications} that use + Some \l{ActiveQt Examples}{example applications} that use standard ActiveX controls to provide high-level user interface functionality are provided. @@ -219,42 +215,4 @@ that doesn't provide introspection (ie. ActivePython or ActivePerl). You need to call the function directly on the respective QAxScript object. - - \section1 License Information - - The QAxContainer module is not covered by the \l{GNU General Public License (GPL)}, - the \l{GNU Lesser General Public License (LGPL)}, or the - \l{Qt Commercial Editions}{Qt Commercial License}. Instead, it is distributed under - the following license. - - \legalese - Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\br - All rights reserved. - - Contact: Nokia Corporation (qt-info@nokia.com)\br - - You may use this file under the terms of the BSD license as follows:\br - - "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.\br - * 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.\br - * 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." - \endlegalese */ diff --git a/doc/src/qaxserver.qdoc b/doc/src/frameworks-technologies/activeqt-server.qdoc index 63c1e13..4491be3 100644 --- a/doc/src/qaxserver.qdoc +++ b/doc/src/frameworks-technologies/activeqt-server.qdoc @@ -40,15 +40,11 @@ ****************************************************************************/ /*! - \module QAxServer - \title QAxServer Module - \contentspage Qt's Modules - \previouspage QAxContainer - \nextpage QtDBus module - \ingroup modules + \page activeqt-server.html + \title Building ActiveX servers and controls with Qt \brief The QAxServer module is a Windows-only static library that - you can use to turn a standard Qt binary into a COM server. + you can use to turn a standard Qt binary into a COM server. The QAxServer module is part of the \l ActiveQt framework. It consists of three classes: @@ -60,7 +56,7 @@ \o QAxAggregated can be subclassed to implement additional COM interfaces. \endlist - Some \l{Qt Examples#ActiveQt}{example implementations} of ActiveX + Some \l{ActiveQt Examples}{example implementations} of ActiveX controls and COM objects are provided. \sa {ActiveQt Framework} @@ -625,8 +621,8 @@ If the web browser supports scripting use JavaScript, VBScript and forms to script the control. The - \l{Qt Examples#ActiveQt}{ActiveQt examples} include demonstration - HTML pages for the example controls. + \l{ActiveQt Examples} include demonstration HTML pages for the example + controls. \section2 Supported and Unsupported ActiveX Clients @@ -857,42 +853,4 @@ QAxAggregated subclass. \snippet doc/src/snippets/code/doc_src_qaxserver.qdoc 20 - - \section1 License Information - - The QAxContainer module is not covered by the \l{GNU General Public License (GPL)}, - the \l{GNU Lesser General Public License (LGPL)}, or the - \l{Qt Commercial Editions}{Qt Commercial License}. Instead, it is distributed under - the following license. - - \legalese - Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\br - All rights reserved. - - Contact: Nokia Corporation (qt-info@nokia.com)\br - - You may use this file under the terms of the BSD license as follows:\br - - "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.\br - * 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.\br - * 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." - \endlegalese */ diff --git a/doc/src/activeqt.qdoc b/doc/src/frameworks-technologies/activeqt.qdoc index b3f0856..75c598a 100644 --- a/doc/src/activeqt.qdoc +++ b/doc/src/frameworks-technologies/activeqt.qdoc @@ -40,11 +40,23 @@ ****************************************************************************/ /*! + \group activeqt-tools + \title Tools for ActiveQt + \brief Tools to help integrate Qt applications with ActiveX components. + + These tools provide support for integrating Qt with ActiveX components. + + \generatelist{related} + + \sa {ActiveQt Framework} +*/ + +/*! \page activeqt.html \title ActiveQt Framework \brief An overview of Qt's ActiveX and COM integration on Windows. - \ingroup platform-notes + \ingroup platform-specific \keyword ActiveQt Qt's ActiveX and COM support allows Qt for Windows developers to: diff --git a/doc/src/animation.qdoc b/doc/src/frameworks-technologies/animation.qdoc index 7fd7850..d495aeb 100644 --- a/doc/src/animation.qdoc +++ b/doc/src/frameworks-technologies/animation.qdoc @@ -40,12 +40,18 @@ ****************************************************************************/ /*! + \group animation + \title Animation Framework +*/ + +/*! \page animation-overview.html \title The Animation Framework - \ingroup architecture - \ingroup animation + \brief An overview of the Animation Framework + \ingroup frameworks-technologies + \keyword Animation The animation framework is part of the Kinetic project, and aims @@ -108,6 +114,13 @@ For detailed descriptions of the classes' function and roles in the framework, please look up their class descriptions. + \section1 Classes in the Animation Framework + + These classes provide a framework for creating both simple and complex + animations. + + \annotatedlist animation + \section1 Animating Qt Properties As mentioned in the previous section, the QPropertyAnimation class diff --git a/doc/src/containers.qdoc b/doc/src/frameworks-technologies/containers.qdoc index 49dae63..2d19b7e 100644 --- a/doc/src/containers.qdoc +++ b/doc/src/frameworks-technologies/containers.qdoc @@ -40,9 +40,25 @@ ****************************************************************************/ /*! - \group containers + \group tools + \title Non-GUI Classes + \ingroup groups + + \brief Collection classes such as list, queue, stack and string, along + with other classes that can be used without needing QApplication. + + The non-GUI classes are general-purpose collection and string classes + that may be used independently of the GUI classes. + + In particular, these classes do not depend on QApplication at all, + and so can be used in non-GUI programs. + +*/ + +/*! + \page containers.html \title Generic Containers - \ingroup architecture + \ingroup frameworks-technologies \ingroup groups \keyword container class \keyword container classes @@ -82,7 +98,23 @@ \section1 The Container Classes - Qt provides the following container classes: + Qt provides the following sequential containers: QList, + QLinkedList, QVector, QStack, and QQueue. For most + applications, QList is the best type to use. Although it is + implemented as an array-list, it provides very fast prepends and + appends. If you really need a linked-list, use QLinkedList; if you + want your items to occupy consecutive memory locations, use QVector. + QStack and QQueue are convenience classes that provide LIFO and + FIFO semantics. + + Qt also provides these associative containers: QMap, + QMultiMap, QHash, QMultiHash, and QSet. The "Multi" containers + conveniently support multiple values associated with a single + key. The "Hash" containers provide faster lookup by using a hash + function instead of a binary search on a sorted set. + + As special cases, the QCache and QContiguousCache classes provide + efficient hash-lookup of objects in a limited cache storage. \table \header \o Class \o Summary @@ -607,6 +639,9 @@ \o QCache<Key, T> provides a cache to store objects of a certain type T associated with keys of type Key. + \o QContiguousCache<T> provides an efficient way of caching data + that is typically accessed in a contiguous way. + \o QPair<T1, T2> stores a pair of elements. \endlist diff --git a/doc/src/qdbusadaptors.qdoc b/doc/src/frameworks-technologies/dbus-adaptors.qdoc index 92a618d..0a4dea7 100644 --- a/doc/src/qdbusadaptors.qdoc +++ b/doc/src/frameworks-technologies/dbus-adaptors.qdoc @@ -39,50 +39,12 @@ ** ****************************************************************************/ -/** -*- mode: C++ -*- -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - /*! \page usingadaptors.html \title Using QtDBus Adaptors + \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 @@ -129,6 +91,9 @@ \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. @@ -246,6 +211,9 @@ \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 @@ -374,6 +342,10 @@ \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 @@ -399,6 +371,10 @@ \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 diff --git a/doc/src/introtodbus.qdoc b/doc/src/frameworks-technologies/dbus-intro.qdoc index bd1aefc..b1fcc44 100644 --- a/doc/src/introtodbus.qdoc +++ b/doc/src/frameworks-technologies/dbus-intro.qdoc @@ -42,10 +42,10 @@ /*! \page intro-to-dbus.html \title Introduction to D-Bus + \brief An introduction to Inter-Process Communication and Remote Procedure Calling with D-Bus. \keyword QtDBus - \ingroup architecture - \brief An introduction to Inter-Process Communication and Remote Procedure Calling with D-Bus. + \ingroup frameworks-technologies \section1 Introduction diff --git a/doc/src/frameworks-technologies/desktop-integration.qdoc b/doc/src/frameworks-technologies/desktop-integration.qdoc new file mode 100644 index 0000000..73a810f --- /dev/null +++ b/doc/src/frameworks-technologies/desktop-integration.qdoc @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \group desktop + \title Desktop Integration Classes +*/ + +/*! + \page desktop-integration.html + \title Desktop Integration + \brief Integrating with the user's desktop environment. + + \ingroup best-practices + + Qt applications behave well in the user's desktop environment, but certain + integrations require additional, and sometimes platform specific, techniques. + + \tableofcontents + + \section1 Useful Classes + + Various classes in Qt are designed to help developers integrate applications into + users' desktop environments. These classes enable developers to take advantage + of native services while still using a cross-platform API. + + \annotatedlist desktop + + \section1 Setting the Application Icon + + In order to change the icon of the executable application file + itself, as it is presented on the desktop (i.e., prior to + application execution), it is necessary to employ another, + platform-dependent technique. + + \tableofcontents {1 Setting the Application Icon} + + \section1 Opening External Resources + + Although Qt provides facilities to handle and display resources, such as + \l{QImageIOHandler}{common image formats} and \l{QTextDocument}{HTML}, + it is sometimes necessary to open files and external resources using external + applications. + + QDesktopServices provides an interface to services offered by the user's desktop + environment. In particular, the \l{QDesktopServices::}{openUrl()} function is + used to open resources using the appropriate application, which may have been + specifically configured by the user. + + \section1 System Tray Icons + + Many modern desktop environments feature docks or panels with \e{system trays} + in which applications can install icons. Applications often use system tray icons + to display status information, either by updating the icon itself or by showing + information in "balloon messages". Additionally, many applications provide + pop-up menus that can be accessed via their system tray icons. + + The QSystemTrayIcon class exposes all of the above features via an intuitive + Qt-style API that can be used on all desktop platforms. + + \section1 Desktop Widgets + + On systems where the user's desktop is displayed using more than one screen, + certain types of applications may need to obtain information about the + configuration of the user's workspace to ensure that new windows and dialogs + are opened in appropriate locations. + + The QDesktopWidget class can be used to monitor the positions of widgets and + notify applications about changes to the way the desktop is split over the + available screens. This enables applications to implement policies for + positioning new windows so that, for example, they do not distract a user + who is working on a specific task. +*/ diff --git a/doc/src/dnd.qdoc b/doc/src/frameworks-technologies/dnd.qdoc index 661c621..5815a1d 100644 --- a/doc/src/dnd.qdoc +++ b/doc/src/frameworks-technologies/dnd.qdoc @@ -40,11 +40,19 @@ ****************************************************************************/ /*! + \group draganddrop + \title Drag And Drop Classes + + \brief Classes dealing with drag and drop and mime type encoding and decoding. +*/ + +/*! \page dnd.html \title Drag and Drop - \ingroup architecture \brief An overview of the drag and drop system provided by Qt. + \ingroup frameworks-technologies + Drag and drop provides a simple visual mechanism which users can use to transfer information between and within applications. (In the literature this is referred to as a "direct manipulation model".) Drag @@ -60,6 +68,13 @@ \l{Using Drag and Drop with Item Views} and \l{The Graphics View Framework} documents. + \section1 Drag and Drop Classes + + These classes deal with drag and drop and the necessary mime type + encoding and decoding. + + \annotatedlist draganddrop + \section1 Configuration The QApplication object provides some properties that are related @@ -432,115 +447,3 @@ request data in response to e.g. a QDragMoveEvent, an empty QByteArray is returned. */ - -/*! - \page porting4-dnd.html - \title Porting to Qt 4 - Drag and Drop - \contentspage {Porting Guides}{Contents} - \previouspage Porting to Qt 4 - Virtual Functions - \nextpage Porting UI Files to Qt 4 - \ingroup porting - \brief An overview of the porting process for applications that use drag and drop. - - Qt 4 introduces a new set of classes to handle drag and drop operations - that aim to be easier to use than their counterparts in Qt 3. As a result, - the way that drag and drop is performed is quite different to the way - developers of Qt 3 applications have come to expect. In this guide, we - show the differences between the old and new APIs and indicate where - applications need to be changed when they are ported to Qt 4. - - \tableofcontents - - \section1 Dragging - - In Qt 3, drag operations are encapsulated by \c QDragObject (see Q3DragObject) - and its subclasses. These objects are typically constructed on the heap in - response to mouse click or mouse move events, and ownership of them is - transferred to Qt so that they can be deleted when the corresponding drag and - drop operations have been completed. The drag source has no control over how - the drag and drop operation is performed once the object's - \l{Q3DragObject::}{drag()} function is called, and it receives no information - about how the operation ended. - - \snippet doc/src/snippets/code/doc_src_dnd.qdoc 0 - - Similarly, in Qt 4, drag operations are also initiated when a QDrag object - is constructed and its \l{QDrag::}{exec()} function is called. In contrast, - these objects are typically constructed on the stack rather than the heap - since each drag and drop operation is performed synchronously as far as the - drag source is concerned. One key benefit of this is that the drag source - can receive information about how the operation ended from the value returned - by \l{QDrag::}{exec()}. - - \snippet doc/src/snippets/porting4-dropevents/window.cpp 2 - \snippet doc/src/snippets/porting4-dropevents/window.cpp 3 - \dots 8 - \snippet doc/src/snippets/porting4-dropevents/window.cpp 4 - \snippet doc/src/snippets/porting4-dropevents/window.cpp 5 - - A key difference in the above code is the use of the QMimeData class to hold - information about the data that is transferred. Qt 3 relies on subclasses - of \c QDragObject to provide support for specific MIME types; in Qt 4, the - use of QMimeData as a generic container for data makes the relationship - between MIME type and data more tranparent. QMimeData is described in more - detail later in this document. - - \section1 Dropping - - In both Qt 3 and Qt 4, it is possible to prepare a custom widget to accept - dropped data by enabling the \l{QWidget::}{acceptDrops} property of a widget, - usually in the widget's constructor. As a result, the widget will receive - drag enter events that can be handled by its \l{QWidget::}{dragEnterEvent()} - function. - As in Qt 3, custom widgets in Qt 4 handle these events by determining - whether the data supplied by the drag and drop operation can be dropped onto - the widget. Since the classes used to encapsulate MIME data are different in - Qt 3 and Qt 4, the exact implementations differ. - - In Qt 3, the drag enter event is handled by checking whether each of the - standard \c QDragObject subclasses can decode the data supplied, and - indicating success or failure of these checks via the event's - \l{QDragEnterEvent::}{accept()} function, as shown in this simple example: - - \snippet doc/src/snippets/code/doc_src_dnd.qdoc 1 - - In Qt 4, you can examine the MIME type describing the data to determine - whether the widget should accept the event or, for common data types, you - can use convenience functions: - - \snippet doc/src/snippets/porting4-dropevents/window.cpp 0 - - The widget has some control over the type of drag and drop operation to be - performed. In the above code, the action proposed by the drag source is - accepted, but - \l{Drag and Drop#Overriding Proposed Actions}{this can be overridden} if - required. - - In both Qt 3 and Qt 4, it is necessary to accept a given drag event in order - to receive the corresponding drop event. A custom widget in Qt 3 that can - accept dropped data in the form of text or images might provide an - implementation of \l{QWidget::}{dropEvent()} that looks like the following: - - \snippet doc/src/snippets/code/doc_src_dnd.qdoc 2 - - In Qt 4, the event is handled in a similar way: - - \snippet doc/src/snippets/porting4-dropevents/window.cpp 1 - - It is also possible to extract data stored for a particular MIME type if it - was specified by the drag source. - - \section1 MIME Types and Data - - In Qt 3, data to be transferred in drag and drop operations is encapsulated - in instances of \c QDragObject and its subclasses, representing specific - data formats related to common MIME type and subtypes. - - In Qt 4, only the QMimeData class is used to represent data, providing a - container for data stored in multiple formats, each associated with - a relevant MIME type. Since arbitrary MIME types can be specified, there is - no need for an extensive class hierarchy to represent different kinds of - information. Additionally, QMimeData it provides some convenience functions - to allow the most common data formats to be stored and retrieved with less - effort than for arbitrary MIME types. -*/ diff --git a/doc/src/eventsandfilters.qdoc b/doc/src/frameworks-technologies/eventsandfilters.qdoc index a67e523..0430bcd 100644 --- a/doc/src/eventsandfilters.qdoc +++ b/doc/src/frameworks-technologies/eventsandfilters.qdoc @@ -40,11 +40,25 @@ ****************************************************************************/ /*! + \group events + \title Event Classes + \ingroup groups + + \brief Classes used to create and handle events. + + These classes are used to create and handle events. + + For more information see the \link object.html Object model\endlink + and \link signalsandslots.html Signals and Slots\endlink. +*/ + +/*! \page eventsandfilters.html \title Events and Event Filters - \ingroup architecture \brief A guide to event handling in Qt. + \ingroup frameworks-technologies + In Qt, events are objects, derived from the abstract QEvent class, that represent things that have happened either within an application or as a result of outside activity that the application needs to know diff --git a/doc/src/gestures.qdoc b/doc/src/frameworks-technologies/gestures.qdoc index 49a9ae3..316d74d 100644 --- a/doc/src/gestures.qdoc +++ b/doc/src/frameworks-technologies/gestures.qdoc @@ -34,7 +34,7 @@ ** met: http://www.gnu.org/copyleft/gpl.html. ** ** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. +** contact the sales department at http://www.example.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/doc/src/graphicsview.qdoc b/doc/src/frameworks-technologies/graphicsview.qdoc index b1c6b6c..8d7ea2c 100644 --- a/doc/src/graphicsview.qdoc +++ b/doc/src/frameworks-technologies/graphicsview.qdoc @@ -40,13 +40,18 @@ ****************************************************************************/ /*! + \group graphicsview-api + \title Graphics View Classes +*/ + +/*! \page graphicsview.html \title The Graphics View Framework - \ingroup architecture - \ingroup multimedia \brief An overview of the Graphics View framework for interactive 2D graphics. + \ingroup frameworks-technologies + \keyword Graphics View \keyword GraphicsView \keyword Graphics @@ -193,6 +198,12 @@ \img graphicsview-items.png + \section1 Classes in the Graphics View Framework + + These classes provide a framework for creating interactive applications. + + \annotatedlist graphicsview-api + \section1 The Graphics View Coordinate System Graphics View is based on the Cartesian coordinate system; items' diff --git a/doc/src/implicit-sharing.qdoc b/doc/src/frameworks-technologies/implicit-sharing.qdoc index cc0b28b..4eb9443 100644 --- a/doc/src/implicit-sharing.qdoc +++ b/doc/src/frameworks-technologies/implicit-sharing.qdoc @@ -45,10 +45,14 @@ /*! \group shared \title Implicitly Shared Classes - \ingroup architecture - \ingroup groups +*/ + +/*! + \page implicit-sharing.html + \title Implicit Sharing + \ingroup frameworks-technologies - \brief Classes that use reference counting for fast copying. + \brief Reference counting for fast copying. \keyword implicit data sharing \keyword implicit sharing @@ -98,7 +102,8 @@ Implicit sharing takes place behind the scenes; the programmer does not need to worry about it. Even in multithreaded applications, implicit sharing takes place, as explained in - \l{Threads and Implicit Sharing}. + \l{Thread-Support in Qt Modules#Threads and Implicitly Shared Classes} + {Threads and Implicitly Shared Classes}. When implementing your own implicitly shared classes, use the QSharedData and QSharedDataPointer classes. @@ -141,4 +146,7 @@ \warning Do not copy an implicitly shared container (QMap, QVector, etc.) while you are iterating over it using an non-const \l{STL-style iterator}. + + \keyword implicitly shared classes + \annotatedlist shared */ diff --git a/doc/src/ipc.qdoc b/doc/src/frameworks-technologies/ipc.qdoc index 9ca8a0d..f253643 100644 --- a/doc/src/ipc.qdoc +++ b/doc/src/frameworks-technologies/ipc.qdoc @@ -40,25 +40,15 @@ ****************************************************************************/ /*! - \group ipc + \page ipc.html \title Inter-Process Communication in Qt - \ingroup groups - \ingroup architecture \brief Inter-Process communication in Qt applications. + \ingroup frameworks-technologies + Qt provides several ways to implement Inter-Process Communication (IPC) in Qt applications. - \section1 D-Bus - - The \l{QtDBus} module is a Unix-only library - you can use to implement IPC using the D-Bus protocol. It extends - Qt's \l{signalsandslots.html} {Signals and Slots} mechanism to the - IPC level, allowing a signal emitted by one process to be - connected to a slot in another process. This \l {Introduction to - D-Bus} page has detailed information on how to use the \l{QtDBus} - module. - \section1 TCP/IP The cross-platform \l{QtNetwork} module provides classes that make @@ -77,6 +67,16 @@ access to resources shared by the system, as well as to communicate between processes. + \section1 D-Bus + + The \l{QtDBus} module is a Unix-only library + you can use to implement IPC using the D-Bus protocol. It extends + Qt's \l{signalsandslots.html} {Signals and Slots} mechanism to the + IPC level, allowing a signal emitted by one process to be + connected to a slot in another process. This \l {Introduction to + D-Bus} page has detailed information on how to use the \l{QtDBus} + module. + \section1 Qt COmmunications Protocol (QCOP) The QCopChannel class implements a protocol for transferring messages @@ -86,6 +86,4 @@ IPC level, allowing a signal emitted by one process to be connected to a slot in another process, but unlike QtDBus, QCOP does not depend on a third party library. - */ - diff --git a/doc/src/model-view-programming.qdoc b/doc/src/frameworks-technologies/model-view-programming.qdoc index 13f5e5a..b38edd8 100644 --- a/doc/src/model-view-programming.qdoc +++ b/doc/src/frameworks-technologies/model-view-programming.qdoc @@ -40,15 +40,21 @@ ****************************************************************************/ /*! + \group model-view + \title Model/View Classes +*/ + +/*! \page model-view-programming.html \nextpage An Introduction to Model/View Programming \startpage index.html Qt Reference Documentation \title Model/View Programming - \ingroup architecture \brief A guide to the extensible model/view architecture used by Qt's item view classes. + \ingroup frameworks-technologies + \list \o \l{An Introduction to Model/View Programming} \tableofcontents{1 An Introduction to Model/View Programming} @@ -74,7 +80,14 @@ \tableofcontents{1 Model Subclassing Reference} \endlist - See also the list of \l{Model/View Classes}. + \keyword Model/View Classes + \section1 All 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 diff --git a/doc/src/phonon.qdoc b/doc/src/frameworks-technologies/phonon.qdoc index 610ad30..48c09b8 100644 --- a/doc/src/phonon.qdoc +++ b/doc/src/frameworks-technologies/phonon.qdoc @@ -42,7 +42,7 @@ /*! \page phonon-overview.html \title Phonon Overview - \ingroup multimedia + \ingroup frameworks-technologies \tableofcontents @@ -556,88 +556,3 @@ output as a single audio stream. */ -/*! - \namespace Phonon - \brief The Phonon namespace contains classes and functions for multimedia applications. - \since 4.4 - - This namespace contains classes to access multimedia functions for - audio and video playback. Those classes are not dependent on any specific - framework, but rather use exchangeable backends to do the work. - - See the \l{Phonon Module} page for general information about the - framework and the \l{Phonon Overview} for an introductory tour of its - features. -*/ - -/*! - \page phonon-module.html - \module Phonon - \title Phonon Module - \contentspage Qt's Modules - \previouspage QtXmlPatterns - \nextpage Qt3Support - \ingroup modules - - \brief The Phonon module contains namespaces and classes for multimedia functionality. - - \generatelist{classesbymodule Phonon} - - Phonon is a cross-platform multimedia framework that enables the use of - audio and video content in Qt applications. The \l{Phonon Overview} - document provides an introduction to the architecture and features included - in Phonon. The \l{Phonon} namespace contains a list of all classes, functions - and namespaces provided by the module. - - Applications that use Phonon's classes need to - be configured to be built against the Phonon module. - The following declaration in a \c qmake project file ensures that - an application is compiled and linked appropriately: - - \snippet doc/src/snippets/code/doc_src_phonon.qdoc 1 - - The Phonon module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. - - \section1 Qt Backends - - Qt Backends are currently developed for Phonon version 4.1. The Phonon - project has moved on and introduced new features that the Qt Backends do not - implement. We have chosen not to document the part of Phonon that we do not - support. Any class or function not appearing in our documentation can be - considered unsupported. - - \section1 License Information - - Qt Commercial Edition licensees that wish to distribute applications that - use the Phonon module need to be aware of their obligations under the - GNU Lesser General Public License (LGPL). - - Developers using the Open Source Edition can choose to redistribute - the module under the appropriate version of the GNU LGPL; version 2.1 - for applications and libraries licensed under the GNU GPL version 2, - or version 3 for applications and libraries licensed under the GNU - GPL version 2. - - \legalese - This file is part of the KDE project - - Copyright (C) 2005-2007 Matthias Kretz <kretz@kde.org> \BR - Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - Contact: Nokia Corporation (qt-info@nokia.com) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License version 2 as published by the Free Software Foundation. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - \endlegalese -*/ diff --git a/doc/src/plugins-howto.qdoc b/doc/src/frameworks-technologies/plugins-howto.qdoc index 2a099bc..4d6896c 100644 --- a/doc/src/plugins-howto.qdoc +++ b/doc/src/frameworks-technologies/plugins-howto.qdoc @@ -40,10 +40,27 @@ ****************************************************************************/ /*! + \group plugins + \title Plugin Classes + \ingroup groups + + \brief Plugin related classes. + + These classes deal with shared libraries, (e.g. .so and DLL files), + and with Qt plugins. + + See the \link plugins-howto.html plugins documentation\endlink. + + See also the \l{ActiveQt framework} for Windows. +*/ + +/*! \page plugins-howto.html \title How to Create Qt Plugins - \brief A guide to creating plugins to extend Qt applications and functionality provided by Qt. - \ingroup howto + \brief A guide to creating plugins to extend Qt applications and + functionality provided by Qt. + + \ingroup frameworks-technologies \keyword QT_DEBUG_PLUGINS \keyword QT_NO_PLUGIN_CHECK @@ -99,27 +116,6 @@ \row \o QTextCodecPlugin \o \c codecs \o Case Sensitive \endtable - But where is the \c{plugins} directory? When the application - is run, Qt will first treat the application's executable directory - as the \c{pluginsbase}. For example if the application is in - \c{C:\Program Files\MyApp} and has a style plugin, Qt will look in - \c{C:\Program Files\MyApp\styles}. (See - QCoreApplication::applicationDirPath() for how to find out where - the application's executable is.) Qt will also look in the - directory specified by - QLibraryInfo::location(QLibraryInfo::PluginsPath), which typically - is located in \c QTDIR/plugins (where \c QTDIR is the directory - where Qt is installed). If you want Qt to look in additional - places you can add as many paths as you need with calls to - QCoreApplication::addLibraryPath(). And if you want to set your - own path or paths you can use QCoreApplication::setLibraryPaths(). - You can also use a \c qt.conf file to override the hard-coded - paths that are compiled into the Qt library. For more information, - see the \l {Using qt.conf} documentation. Yet another possibility - is to set the \c QT_PLUGIN_PATH environment variable before running - the application. If set, Qt will look for plugins in the - paths (separated by the system path separator) specified in the variable. - Suppose that you have a new style class called \c MyStyle that you want to make available as a plugin. The required code is straightforward, here is the class definition (\c @@ -150,39 +146,6 @@ virtual functions that must be reimplemented for each type of plugin. - Qt applications automatically know which plugins are available, - because plugins are stored in the standard plugin subdirectories. - Because of this applications don't require any code to find and load - plugins, since Qt handles them automatically. - - The default directory for plugins is \c{QTDIR/plugins} (where \c - QTDIR is the directory where Qt is installed), with each type of - plugin in a subdirectory for that type, e.g. \c styles. If you - want your applications to use plugins and you don't want to use - the standard plugins path, have your installation process - determine the path you want to use for the plugins, and save the - path, e.g. using QSettings, for the application to read when it - runs. The application can then call - QCoreApplication::addLibraryPath() with this path and your - plugins will be available to the application. Note that the final - part of the path (e.g., \c styles) cannot be changed. - - The normal way to include a plugin with an application is either - to \l{Static Plugins}{compile it in with the application} or to - compile it into a dynamic library and use it like any other - library. - - If you want the plugin to be loadable then one approach is to - create a subdirectory under the application and place the plugin - in that directory. If you distribute any of the plugins that come - with Qt (the ones located in the \c plugins directory), you must - copy the sub-directory under \c plugins where the plugin is - located to your applications root folder (i.e., do not include the - \c plugins directory). - - For more information about deployment, - see the \l {Deploying Qt Applications} documentation. - The \l{Style Plugin Example} shows how to implement a plugin that extends the QStylePlugin base class. @@ -236,110 +199,49 @@ that extends Qt applications. Please note that a QCoreApplication must have been initialized before plugins can be loaded. - \section1 Loading and Verifying Plugins Dynamically - - When loading plugins, the Qt library does some sanity checking to - determine whether or not the plugin can be loaded and used. This - provides the ability to have multiple versions and configurations of - the Qt library installed side by side. - - \list - \o Plugins linked with a Qt library that has a higher version number - will not be loaded by a library with a lower version number. - - \br - \bold{Example:} Qt 4.3.0 will \e{not} load a plugin built with Qt 4.3.1. - - \o Plugins linked with a Qt library that has a lower major version - number will not be loaded by a library with a higher major version - number. - - \br - \bold{Example:} Qt 4.3.1 will \e{not} load a plugin built with Qt 3.3.1. - \br - \bold{Example:} Qt 4.3.1 will load plugins built with Qt 4.3.0 and Qt 4.2.3. - - \o The Qt library and all plugins are built using a \e {build - key}. The build key in the Qt library is examined against the build - key in the plugin, and if they match, the plugin is loaded. If the - build keys do not match, then the Qt library refuses to load the - plugin. - - \br \bold{Rationale:} See the \l{#The Build Key}{The Build Key} section below. - \endlist - - When building plugins to extend an application, it is important to ensure - that the plugin is configured in the same way as the application. This means - that if the application was built in release mode, plugins should be built - in release mode, too. - - If you configure Qt to be built in both debug and release modes, - but only build applications in release mode, you need to ensure that your - plugins are also built in release mode. By default, if a debug build of Qt is - available, plugins will \e only be built in debug mode. To force the - plugins to be built in release mode, add the following line to the plugin's - project file: + \section1 Locating Plugins - \snippet doc/src/snippets/code/doc_src_plugins-howto.qdoc 3 - - This will ensure that the plugin is compatible with the version of the library - used in the application. - - \section2 The Build Key + Qt applications automatically know which plugins are available, + because plugins are stored in the standard plugin subdirectories. + Because of this applications don't require any code to find and load + plugins, since Qt handles them automatically. - When loading plugins, Qt checks the build key of each plugin against its - own configuration to ensure that only compatible plugins are loaded; any - plugins that are configured differently are not loaded. + During development, the directory for plugins is \c{QTDIR/plugins} + (where \c QTDIR is the directory where Qt is installed), with each + type of plugin in a subdirectory for that type, e.g. \c styles. If + you want your applications to use plugins and you don't want to use + the standard plugins path, have your installation process + determine the path you want to use for the plugins, and save the + path, e.g. using QSettings, for the application to read when it + runs. The application can then call + QCoreApplication::addLibraryPath() with this path and your + plugins will be available to the application. Note that the final + part of the path (e.g., \c styles) cannot be changed. - The build key contains the following information: - \list - \o Architecture, operating system and compiler. - - \e {Rationale:} - In cases where different versions of the same compiler do not - produce binary compatible code, the version of the compiler is - also present in the build key. - - \o Configuration of the Qt library. The configuration is a list - of the missing features that affect the available API in the - library. - - \e {Rationale:} - Two different configurations of the same version of - the Qt library are not binary compatible. The Qt library that - loads the plugin uses the list of (missing) features to - determine if the plugin is binary compatible. - - \e {Note:} There are cases where a plugin can use features that are - available in two different configurations. However, the - developer writing plugins would need to know which features are - in use, both in their plugin and internally by the utility - classes in Qt. The Qt library would require complex feature - and dependency queries and verification when loading plugins. - Requiring this would place an unnecessary burden on the developer, and - increase the overhead of loading a plugin. To reduce both - development time and application runtime costs, a simple string - comparision of the build keys is used. - - \o Optionally, an extra string may be specified on the configure - script command line. - - \e {Rationale:} - When distributing binaries of the Qt library with an - application, this provides a way for developers to write - plugins that can only be loaded by the library with which the - plugins were linked. - \endlist + If you want the plugin to be loadable then one approach is to + create a subdirectory under the application and place the plugin + in that directory. If you distribute any of the plugins that come + with Qt (the ones located in the \c plugins directory), you must + copy the sub-directory under \c plugins where the plugin is + located to your applications root folder (i.e., do not include the + \c plugins directory). - For debugging purposes, it is possible to override the run-time build key - checks by configuring Qt with the \c QT_NO_PLUGIN_CHECK preprocessor macro - defined. + For more information about deployment, + see the \l {Deploying Qt Applications} and \l {Deploying Plugins} + documentation. \section1 Static Plugins + The normal and most flexible way to include a plugin with an + application is to compile it into a dynamic library that is shipped + separately, and detected and loaded at runtime. + Plugins can be linked statically against your application. If you build the static version of Qt, this is the only option for - including Qt's predefined plugins. + including Qt's predefined plugins. Using static plugins makes the + deployment less error-prone, but has the disadvantage that no + functionality from plugins can be added without a complete rebuild + and redistribution of the application. When compiled as a static library, Qt provides the following static plugins: @@ -406,65 +308,4 @@ defined. \sa QPluginLoader, QLibrary, {Plug & Paint Example} - - \section1 The Plugin Cache - - In order to speed up loading and validation of plugins, some of - the information that is collected when plugins are loaded is cached - through QSettings. This includes information about whether or not - a plugin was successfully loaded, so that subsequent load operations - don't try to load an invalid plugin. However, if the "last modified" - timestamp of a plugin has changed, the plugin's cache entry is - invalidated and the plugin is reloaded regardless of the values in - the cache entry, and the cache entry itself is updated with the new - result. - - This also means that the timestamp must be updated each time the - plugin or any dependent resources (such as a shared library) is - updated, since the dependent resources might influence the result - of loading a plugin. - - Sometimes, when developing plugins, it is necessary to remove entries - from the plugin cache. Since Qt uses QSettings to manage the plugin - cache, the locations of plugins are platform-dependent; see - \l{QSettings#Platform-Specific Notes}{the QSettings documentation} - for more information about each platform. - - For example, on Windows the entries are stored in the registry, and the - paths for each plugin will typically begin with either of these two strings: - - \snippet doc/src/snippets/code/doc_src_plugins-howto.qdoc 6 - - \section1 Debugging Plugins - - There are a number of issues that may prevent correctly-written plugins from - working with the applications that are designed to use them. Many of these - are related to differences in the way that plugins and applications have been - built, often arising from separate build systems and processes. - - The following table contains descriptions of the common causes of problems - developers experience when creating plugins: - - \table - \header \o Problem \o Cause \o Solution - \row \o Plugins sliently fail to load even when opened directly by the - application. \QD shows the plugin libraries in its - \gui{Help|About Plugins} dialog, but no plugins are listed under each - of them. - \o The application and its plugins are built in different modes. - \o Either share the same build information or build the plugins in both - debug and release modes by appending the \c debug_and_release to - the \l{qmake Variable Reference#CONFIG}{CONFIG} variable in each of - their project files. - \row \o A valid plugin that replaces an invalid (or broken) plugin fails to load. - \o The entry for the plugin in the plugin cache indicates that the original - plugin could not be loaded, causing Qt to ignore the replacement. - \o Either ensure that the plugin's timestamp is updated, or delete the - entry in the \l{#The Plugin Cache}{plugin cache}. - \endtable - - You can also use the \c QT_DEBUG_PLUGINS environment variable to obtain - diagnostic information from Qt about each plugin it tries to load. Set this - variable to a non-zero value in the environment from which your application is - launched. */ diff --git a/doc/src/qthelp.qdoc b/doc/src/frameworks-technologies/qthelp.qdoc index 3cffa39..2529631 100644 --- a/doc/src/qthelp.qdoc +++ b/doc/src/frameworks-technologies/qthelp.qdoc @@ -40,29 +40,36 @@ ****************************************************************************/ /*! - \module QtHelp - \title QtHelp Module - \contentspage Qt's Modules - \previouspage QtUiTools - \nextpage QtAssistant - \ingroup modules + \group helpsystem + \title Help System + \ingroup groups - \brief The QtHelp module provides classes for integrating - online documentation in applications. + \brief Classes used to provide online-help for applications. - To include the definitions of the module's classes, use the - following directive: + \keyword help system - \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 0 + These classes provide for all forms of online-help in your application, + with three levels of detail: - To link against the module, add this line to your \l qmake \c - .pro file: + \list 1 + \o Tool Tips and Status Bar message - flyweight help, extremely brief, + entirely integrated in the user interface, requiring little + or no user interaction to invoke. + \o What's This? - lightweight, but can be + a three-paragraph explanation. + \o Online Help - can encompass any amount of information, + but is typically slower to call up, somewhat separated + from the user's work, and often users feel that using online + help is a digression from their real task. + \endlist - \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 1 +*/ - \note These classes are part of the \l{Open Source Versions of Qt} and - \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial - users. +/*! + \page qthelp-framework.html + \title The Qt Help Framework + \brief Integrating Documentation in Applications + \ingroup frameworks-technologies \section1 Topics @@ -229,41 +236,6 @@ For further information on how to use the API, have a look at the QHelpEngine class reference. - - \section1 License Information - - The QtHelp module uses the CLucene indexing library to provide full-text - searching capabilities for Qt Assistant and applications that use the - features of QtHelp. - - Qt Commercial Edition licensees that wish to distribute applications that - use these features of the QtHelp module need to be aware of their - obligations under the GNU Lesser General Public License (LGPL). - - Developers using the Open Source Edition can choose to redistribute - the module under the appropriate version of the GNU LGPL; version 2.1 - for applications and libraries licensed under the GNU GPL version 2, - or version 3 for applications and libraries licensed under the GNU - GPL version 3. - - \legalese - Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team \BR - Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - \endlegalese */ /*! diff --git a/doc/src/frameworks-technologies/qundo.qdoc b/doc/src/frameworks-technologies/qundo.qdoc new file mode 100644 index 0000000..7b6cae7 --- /dev/null +++ b/doc/src/frameworks-technologies/qundo.qdoc @@ -0,0 +1,113 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page qundo.html + \title Overview of Qt's Undo Framework + \keyword Undo framework + \ingroup frameworks-technologies + + \section1 Introduction + + Qt's Undo Framework is an implementation of the Command pattern, for + implementing undo/redo functionality in applications. + + The Command pattern is based on the idea that all editing in + an application is done by creating instances of command objects. + Command objects apply changes to the document and are stored + on a command stack. Furthermore, each command knows how to undo its + changes to bring the document back to its previous state. As long + as the application only uses command objects to change the state of + the document, it is possible to undo a sequence of commands by + traversing the stack downwards and calling undo + on each command in turn. It is also possible to redo a sequence of + commands by traversing the stack upwards and calling + redo on each command. + + \section1 Classes + + The framework consists of four classes: + + \list + \i \l QUndoCommand is the base class of all commands stored on an + undo stack. It can apply (redo) or undo a single change in the document. + \i \l QUndoStack is a list of QUndoCommand objects. It contains all the + commands executed on the document and can roll the document's state + backwards or forwards by undoing or redoing them. + \i \l QUndoGroup is a group of undo stacks. It is useful when an application + contains more than one undo stack, typically one for each opened + document. QUndoGroup provides a single pair of undo/redo slots for all + the stacks in the group. It forwards undo and redo requests to + the active stack, which is the stack associated with the document that + is currently being edited by the user. + \i \l QUndoView is a widget which shows the contents of an undo stack. Clicking + on a command in the view rolls the document's state backwards or + forwards to that command. + \endlist + + \section1 Concepts + + The following concepts are supported by the framework: + + \list + \i \bold{Clean state:} Used to signal when the document enters and leaves a + state that has been saved to disk. This is typically used to disable or + enable the save actions, and to update the document's title bar. + \i \bold{Command compression:} Used to compress sequences of commands into a + single command. + For example: In a text editor, the commands that insert individual + characters into the document can be compressed into a single command that + inserts whole sections of text. These bigger changes are more convenient + for the user to undo and redo. + \i \bold{Command macros:} A sequence of commands, all of which are undone or + redone in one step. + These simplify the task of writing an application, since a set of simpler + commands can be composed into more complex commands. For example, a command + that moves a set of selected objects in a document can be created by + combining a set of commands, each of which moves a single object. + \endlist + + QUndoStack provides convenient undo and redo QAction objects that + can be inserted into a menu or a toolbar. The text properties of these + actions always reflect what command will be undone or redone when + they are triggered. Similarly, QUndoGroup provides undo and redo actions + that always behave like the undo and redo actions of the active stack. +*/ diff --git a/doc/src/frameworks-technologies/richtext.qdoc b/doc/src/frameworks-technologies/richtext.qdoc new file mode 100644 index 0000000..7125b81 --- /dev/null +++ b/doc/src/frameworks-technologies/richtext.qdoc @@ -0,0 +1,1226 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \group richtext-processing + \title Rich Text Processing APIs +*/ + +/*! + \page richtext.html + \title Rich Text Processing + \brief An overview of Qt's rich text processing, editing and display features. + + \ingroup frameworks-technologies + + \nextpage Rich Text Document Structure + + The Scribe framework provides a set of classes for reading and manipulating + structured rich text documents. Unlike previous rich text support in Qt, the + new classes are centered around the QTextDocument class rather than raw + textual information. This enables the developer to create and modify + structured rich text documents without having to prepare content in an + intermediate markup format. + + The information within a document can be accessed via two complementary + interfaces: A cursor-based interface is used for editing, and a read-only + hierarchical interface provides a high level overview of the document + structure. The main advantage of the cursor-based interface is that the + text can be edited using operations that mimic a user's interaction with + an editor, without losing the underlying structure of the document. The + read-only hierarchical interface is most useful when performing operations + such as searching and document export. + + This document is divided up into chapters for convenient reference: + + \list + \i \l{Rich Text Document Structure} outlines + the different kinds of elements in a QTextDocument, and describes how + they are arranged in a document structure. + \i \l{The QTextCursor Interface} explains how rich + text documents can be edited using the cursor-based interface. + \i \l{Document Layouts} briefly explains the role of document layouts. + \i \l{Common Rich Text Editing Tasks} examines some + common tasks that involve reading or manipulating rich text documents. + \i \l{Advanced Rich Text Processing} examines advanced rich text editing tasks. + \i \l{Supported HTML Subset} lists the HTML tags supported by QTextDocument. + \endlist + + \section1 Rich Text Processing APIs + + Qt provides an extensive collection of classes for parsing, rendering + manipulating and editing rich text. + + \annotatedlist richtext-processing +*/ + +/*! + \page richtext-structure.html + \contentspage richtext.html Contents + \previouspage Rich Text Processing + \nextpage The QTextCursor Interface + + \title Rich Text Document Structure + + \tableofcontents + + Text documents are represented by the QTextDocument class, which + contains information about the document's internal representation, its + structure, and keeps track of modifications to provide undo/redo + facilities. + + The structured representation of a text document presents its contents as + a hierarchy of text blocks, frames, tables, and other objects. These provide + a logical structure to the document and describe how their contents will be + displayed. Generally, frames and tables are used to group other + structures while text blocks contain the actual textual information. + + New elements are created and inserted into the document programmatically + \l{richtext-cursor.html}{with a QTextCursor} or by using an editor + widget, such as QTextEdit. Elements can be given a particular format when + they are created; otherwise they take the cursor's current format for the + element. + + \table + \row + \i \inlineimage richtext-document.png + \i \bold{Basic structure} + + The "top level" of a document might be populated in the way shown. + Each document always contains a root frame, and this always contains + at least one text block. + + For documents with some textual content, the root + frame usually contains a sequence of blocks and other elements. + + Sequences of frames and tables are always separated by text blocks in a + document, even if the text blocks contain no information. This ensures that + new elements can always be inserted between existing structures. + \endtable + + In this chapter, we look at each of the structural elements + used in a rich text document, outline their features and uses, and show + how to examine their contents. Document editing is described in + \l{richtext-cursor.html}{The QTextCursor Interface}. + + \section1 Rich Text Documents + + QTextDocument objects contain all the information required to construct + rich text documents. + Text documents can be accessed in two complementary ways: as a linear + buffer for editors to use, and as an object hierarchy that is useful to + layout engines. + In the hierarchical document model, objects generally correspond to + visual elements such as frames, tables, and lists. At a lower level, + these elements describe properties such as the text style and alignment. + The linear representation of the document is used for editing and + manipulation of the document's contents. + + Although QTextEdit makes it easy to display and edit rich text, documents + can also be used independently of any editor widget, for example: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 0 + + Alternatively, they can be extracted from an existing editor: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 1 + + This flexibility enables applications to handle multiple rich text + documents without the overhead of multiple editor widgets, or requiring + documents to be stored in some intermediate format. + + An empty document contains a root frame which itself contains a single + empty text block. Frames provide logical separation between parts of the document, but + also have properties that determine how they will appear when rendered. + A table is a specialized type of frame that consists of a number of + cells, arranged into rows and columns, each of which can contain + further structure and text. Tables provide management and layout + features that allow flexible configurations of cells to be created. + + Text blocks contain text fragments, each of which specifies text and + character format information. Textual properties are defined both at + the character level and at the block level. At the character level, + properties such as font family, text color, and font weight can be + specified. The block level properties control the higher level + appearance and behavior of the text, such as the direction of text + flow, alignment, and background color. + + The document structure is not manipulated directly. Editing is + performed through a cursor-based interface. + The \l{richtext-cursor.html}{text cursor interface} + automatically inserts new document elements into the root frame, and + ensures that it is padded with empty blocks where necessary. + + We obtain the root frame in the following manner: + + \snippet doc/src/snippets/textdocument-frames/xmlwriter.h 0 + \snippet doc/src/snippets/textdocument-frames/xmlwriter.cpp 0 + + When navigating the document structure, it is useful to begin at the + root frame because it provides access to the entire document structure. + + + \section1 Document Elements + + Rich text documents usually consist of common elements such as paragraphs, + frames, tables, and lists. These are represented in a QTextDocument + by the QTextBlock, QTextFrame, QTextTable, and QTextList classes. + Unlike the other elements in a document, images are represented by + specially formatted text fragments. This enables them to be placed + formatted inline with the surrounding text. + + The basic structural building blocks in documents are QTextBlock and + QTextFrame. Blocks themselves contain fragments of rich text + (QTextFragment), but these do not directly influence the high level + structure of a document. + + Elements which can group together other document elements are typically + subclasses of QTextObject, and fall into two categories: Elements that + group together text blocks are subclasses of QTextBlockGroup, and those + that group together frames and other elements are subclasses of QTextFrame. + + \section2 Text Blocks + + Text blocks are provided by the QTextBlock class. + + Text blocks group together fragments of text with different character formats, + and are used to represent paragraphs in the document. Each block + typically contains a number of text fragments with different styles. + Fragments are created when text is inserted into the document, and more + of them are added when the document is edited. The document splits, merges, + and removes fragments to efficiently represent the different styles + of text in the block. + + The fragments within a given block can be examined by using a + QTextBlock::iterator to traverse the block's internal structure: + + \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 3 + \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 5 + \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 6 + + Blocks are also used to represent list items. As a result, blocks can + define their own character formats which contain information about + block-level decoration, such as the type of bullet points used for + list items. The formatting for the block itself is described by the + QTextBlockFormat class, and describes properties such as text alignment, + indentation, and background color. + + Although a given document may contain complex structures, once we have a + reference to a valid block in the document, we can navigate between each + of the text blocks in the order in which they were written: + + \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 0 + \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 1 + \snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 2 + + This method is useful for when you want to extract just the rich text from a + document because it ignores frames, tables, and other types of structure. + + QTextBlock provides comparison operators that make it easier to manipulate + blocks: \l{QTextBlock::operator==()}{operator==()} and + \l{QTextBlock::operator!=()}{operator!=()} are used to test whether two + blocks are the same, and \l{QTextBlock::operator<()}{operator<()} is used + to determine which one occurs first in a document. + + \section2 Frames + + Frames are provided by the QTextFrame class. + + Text frames group together blocks of text and child frames, creating + document structures that are larger than paragraphs. The format of a frame + specifies how it is rendered and positioned on the page. Frames are + either inserted into the text flow, or they float on the left or right + hand side of the page. + Each document contains a root frame that contains all the other document + elements. As a result, all frames except the root frame have a parent + frame. + + Since text blocks are used to separate other document elements, each + frame will always contain at least one text block, and zero or more + child frames. We can inspect the contents of a frame by using a + QTextFrame::iterator to traverse the frame's child elements: + + \snippet doc/src/snippets/textdocument-frames/xmlwriter.cpp 1 + \snippet doc/src/snippets/textdocument-frames/xmlwriter.cpp 2 + + Note that the iterator selects both frames and blocks, so it is necessary + to check which it is referring to. This allows us to navigate the document + structure on a frame-by-frame basis yet still access text blocks if + required. Both the QTextBlock::iterator and QTextFrame::iterator classes + can be used in complementary ways to extract the required structure from + a document. + + \section2 Tables + + Tables are provided by the QTextTable class. + + Tables are collections of cells that are arranged in rows and columns. + Each table cell is a document element with its own character format, but it + can also contain other elements, such as frames and text blocks. Table cells + are automatically created when the table is constructed, or when extra rows + or columns are added. They can also be moved between tables. + + QTextTable is a subclass of QTextFrame, so tables are treated like frames + in the document structure. For each frame that we encounter in the + document, we can test whether it represents a table, and deal with it in a + different way: + + \snippet doc/src/snippets/textdocument-tables/xmlwriter.cpp 0 + \snippet doc/src/snippets/textdocument-tables/xmlwriter.cpp 1 + + The cells within an existing table can be examined by iterating through + the rows and columns. + + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 9 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 10 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 11 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 12 + + + \section2 Lists + + Lists are provided by the QTextList class. + + Lists are sequences of text blocks that are formatted in the usual way, but + which also provide the standard list decorations such as bullet points and + enumerated items. Lists can be nested, and will be indented if the list's + format specifies a non-zero indentation. + + We can refer to each list item by its index in the list: + + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 0 + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 1 + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 2 + + Since QTextList is a subclass of QTextBlockGroup, it does not group the + list items as child elements, but instead provides various functions for + managing them. This means that any text block we find when traversing a + document may actually be a list item. We can ensure that list items are + correctly identified by using the following code: + + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 3 + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 4 + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 5 + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 6 + \snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 7 + + + \section2 Images + + Images in QTextDocument are represented by text fragments that reference + external images via the resource mechanism. Images are created using the + cursor interface, and can be modified later by changing the character + format of the image's text fragment: + + \snippet doc/src/snippets/textdocument-imageformat/main.cpp 0 + \snippet doc/src/snippets/textdocument-imageformat/main.cpp 1 + \snippet doc/src/snippets/textdocument-imageformat/main.cpp 2 + + The fragment that represents the image can be found by iterating over + the fragments in the text block that contains the image. +*/ + +/*! + \page richtext-cursor.html + \contentspage richtext.html Contents + \previouspage Rich Text Document Structure + \nextpage Document Layouts + + \title The QTextCursor Interface + + \tableofcontents + + Documents can be edited via the interface provided by the QTextCursor + class; cursors are either created using a constructor or obtained from + an editor widget. The cursor is used to perform editing operations that + correspond exactly to those the user is able to make themselves in an + editor. As a result, information about the document structure is also + available through the cursor, and this allows the structure to be + modified. The use of a cursor-oriented interface for editing makes the + process of writing a custom editor simpler for developers, since the + editing operations can be easily visualized. + + The QTextCursor class also maintains information about any text it + has selected in the document, again following a model that is + conceptually similar to the actions made by the user to select text + in an editor. + + Rich text documents can have multiple cursors + associated with them, and each of these contains information about their + position in the document and any selections that they may hold. This + cursor-based paradigm makes common operations, such as cutting and pasting + text, simple to implement programmatically, yet it also allows more complex + editing operations to be performed on the document. + + This chapter describes most of the common editing operations that you + will need to perform using a cursor, from basic insertion of text and + document elements to more complex manipulation of document structures. + + \section1 Cursor-Based Editing + + At the simplest level, text documents are made up of a string of characters, + marked up in some way to represent the block structure of the text within the + document. QTextCursor provides a cursor-based interface that allows the + contents of a QTextDocument to be manipulated at the character level. Since + the elements (blocks, frames, tables, etc.) are also encoded in the character + stream, the document structure can itself be changed by the cursor. + + The cursor keeps track of its location within its parent document, and can + report information about the surrounding structure, such as the enclosing + text block, frame, table, or list. The formats of the enclosing structures + can also be directly obtained through the cursor. + + \section2 Using a Cursor + + The main use of a cursor is to insert or modify text within a block. + We can use a text editor's cursor to do this: + + \snippet doc/src/snippets/textblock-formats/main.cpp 0 + + Alternatively, we can obtain a cursor directly from a document: + + \snippet doc/src/snippets/textdocument-images/main.cpp 0 + + The cursor is positioned at the start of the document so that we can write + into the first (empty) block in the document. + + \section2 Grouping Cursor Operations + + A series of editing operations can be packaged together so that they can + be replayed, or undone together in a single action. This is achieved by + using the \c beginEditBlock() and \c endEditBlock() functions in the + following way, as in the following example where we select the word that + contains the cursor: + + \snippet doc/src/snippets/textdocument-selections/mainwindow.cpp 0 + + If editing operations are not grouped, the document automatically records + the individual operations so that they can be undone later. Grouping + operations into larger packages can make editing more efficient both for + the user and for the application, but care has to be taken not to group too + many operations together as the user may want find-grained control over the + undo process. + + \section2 Multiple Cursors + + Multiple cursors can be used to simultaneously edit the same document, + although only one will be visible to the user in a QTextEdit widget. + The QTextDocument ensures that each cursor writes text correctly and + does not interfere with any of the others. + + \omit + \snippet doc/src/snippets/textdocument-cursors/main.cpp 0 + \snippet doc/src/snippets/textdocument-cursors/main.cpp 1 + \endomit + + \section1 Inserting Document Elements + + QTextCursor provides several functions that can be used to change the + structure of a rich text document. Generally, these functions allow + document elements to be created with relevant formatting information, + and they are inserted into the document at the cursor's position. + + The first group of functions insert block-level elements, and update the + cursor position, but they do not return the element that was inserted: + + \list + \i \l{QTextCursor::insertBlock()}{insertBlock()} inserts a new text block + (paragraph) into a document at the cursor's position, and moves the + cursor to the start of the new block. + \i \l{QTextCursor::insertFragment()}{insertFragment()} inserts an existing + text fragment into a document at the cursor's position. + \i \l{QTextCursor::insertImage()}{insertImage()} inserts an image into a + document at the cursor's position. + \i \l{QTextCursor::insertText()}{insertText()} inserts text into the + document at the cursor's position. + \endlist + + You can examine the contents of the element that was inserted through the + cursor interface. + + The second group of functions insert elements that provide structure to + the document, and return the structure that was inserted: + + \list + \i \l{QTextCursor::insertFrame()}{insertFrame()} inserts a frame into the + document \e after the cursor's current block, and moves the cursor to + the start of the empty block in the new frame. + \i \l{QTextCursor::insertList()}{insertList()} inserts a list into the + document at the cursor's position, and moves the cursor to the start + of the first item in the list. + \i \l{QTextCursor::insertTable()}{insertTable()} inserts a table into + the document \e after the cursor's current block, and moves the cursor + to the start of the block following the table. + \endlist + + These elements either contain or group together other elements in the + document. + + \section2 Text and Text Fragments + + Text can be inserted into the current block in the current character + format, or in a custom format that is specified with the text: + + \snippet doc/src/snippets/textdocument-charformats/main.cpp 0 + + Once the character format has been used with a cursor, that format becomes + the default format for any text inserted with that cursor until another + character format is specified. + + If a cursor is used to insert text without specifying a character format, + the text will be given the character format used at that position in the + document. + + \section2 Blocks + + Text blocks are inserted into the document with the + \l{QTextCursor::insertBlock()}{insertBlock()} function. + + \snippet doc/src/snippets/textblock-formats/main.cpp 1 + + The cursor is positioned at the start of the new block. + + \section2 Frames + + Frames are inserted into a document using the cursor, and will be placed + within the cursor's current frame \e after the current block. + The following code shows how a frame can be inserted between two text + blocks in a document's root frame. We begin by finding the cursor's + current frame: + + \snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 0 + + We insert some text in this frame then set up a frame format for the + child frame: + + \snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 1 + + The frame format will give the frame an external margin of 32 pixels, + internal padding of 8 pixels, and a border that is 4 pixels wide. + See the QTextFrameFormat documentation for more information about + frame formats. + + The frame is inserted into the document after the preceding text: + + \snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 2 + + We add some text to the document immediately after we insert the frame. + Since the text cursor is positioned \e{inside the frame} when it is inserted + into the document, this text will also be inserted inside the frame. + + Finally, we position the cursor outside the frame by taking the last + available cursor position inside the frame we recorded earlier: + + \snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 3 + + The text that we add last is inserted after the child frame in the + document. Since each frame is padded with text blocks, this ensures that + more elements can always be inserted with a cursor. + + \section2 Tables + + Tables are inserted into the document using the cursor, and will be + placed within the cursor's current frame \e after the current block: + + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 0 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 3 + + Tables can be created with a specific format that defines the overall + properties of the table, such as its alignment, background color, and + the cell spacing used. It can also determine the constraints on each + column, allowing each of them to have a fixed width, or resize according + to the available space. + + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 2 + + The columns in the table created above will each take up a certain + percentage of the available width. Note that the table format is + optional; if you insert a table without a format, some sensible + default values will be used for the table's properties. + + Since cells can contain other document elements, they too can be + formatted and styled as necessary. + + Text can be added to the table by navigating to each cell with the cursor + and inserting text. + + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 4 + + We can create a simple timetable by following this approach: + + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 5 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 6 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 7 + \snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 8 + + \section2 Lists + + Lists of block elements can be automatically created and inserted into the + document at the current cursor position. Each list that is created in this + way requires a list format to be specified: + + \snippet doc/src/snippets/textdocument-lists/mainwindow.cpp 0 + + The above code first checks whether the cursor is within an existing list + and, if so, gives the list format for the new list a suitable level of + indentation. This allows nested lists to be created with increasing + levels of indentation. A more sophisticated implementation would also use + different kinds of symbol for the bullet points in each level of the list. + + \section2 Images + + Inline images are added to documents through the cursor in the usual manner. + Unlike many other elements, all of the image properties are specified by the + image's format. This means that a QTextImageFormat object has to be + created before an image can be inserted: + + \snippet doc/src/snippets/textdocument-images/main.cpp 1 + + The image name refers to an entry in the application's resource file. + The method used to derive this name is described in + \l{resources.html}{The Qt Resource System}. + + \section1 Examples + + Rich text is stored in text documents that can either be created by + importing HTML from an external source, or generated using a QTextCursor. + + \section2 Manipulating Rich Text + + The easiest way to use a rich text document is through + the QTextEdit class, providing an editable view onto a document. The code + below imports HTML into a document, and displays the document using a + text edit widget. + + \snippet doc/src/snippets/scribe-overview/main.cpp 1 + + You can retrieve the document from the text edit using the + document() function. The document can then be edited programmatically + using the QTextCursor class. This class is modeled after a screen + cursor, and editing operations follow the same semantics. The following + code changes the first line of the document to a bold font, leaving all + other font properties untouched. The editor will be automatically + updated to reflect the changes made to the underlying document data. + + \snippet doc/src/snippets/scribe-overview/main.cpp 0 + + Note that the cursor was moved from the start of the first line to the + end, but that it retained an anchor at the start of the line. This + demonstrates the cursor-based selection facilities of the + QTextCursor class. + + \section2 Generating a Calendar + + Rich text can be generated very quickly using the cursor-based + approach. The following example shows a simple calendar in a + QTextEdit widget with bold headers for the days of the week: + + \snippet doc/src/snippets/textdocument-blocks/mainwindow.cpp 0 + \codeline + \snippet doc/src/snippets/textdocument-blocks/mainwindow.cpp 1 + \snippet doc/src/snippets/textdocument-blocks/mainwindow.cpp 2 + \snippet doc/src/snippets/textdocument-blocks/mainwindow.cpp 3 + + The above example demonstrates how simple it is to quickly generate new + rich text documents using a minimum amount of code. Although we have + generated a crude fixed-pitch calendar to avoid quoting too much code, + Scribe provides much more sophisticated layout and formatting features. +*/ + +/*! + \page richtext-layouts.html + \contentspage richtext.html Contents + \previouspage The QTextCursor Interface + \nextpage Common Rich Text Editing Tasks + + \title Document Layouts + + \tableofcontents + + The layout of a document is only relevant when it is to be displayed on + a device, or when some information is requested that requires a visual + representation of the document. Until this occurs, the document does + not need to be formatted and prepared for a device. + + \section1 Overview + + Each document's layout is managed by a subclass of the + QAbstractTextDocumentLayout class. This class provides a common + interface for layout and rendering engines. The default rendering + behavior is currently implemented in a private class. This approach + makes it possible to create custom layouts, and provides the + mechanism used when preparing pages for printing or exporting to + Portable Document Format (PDF) files. + + \section1 Example - Shaped Text Layout + + Sometimes it is important to be able to format plain text within an + irregularly-shaped region, perhaps when rendering a custom widget, for + example. Scribe provides generic features, such as those provided by + the QTextLayout class, to help developers perform word-wrapping and + layout tasks without the need to create a document first. + + \img plaintext-layout.png + + Formatting and drawing a paragraph of plain text is straightforward. + The example below will lay out a paragraph of text, using a single + font, around the right hand edge of a circle. + + \snippet doc/src/snippets/plaintextlayout/window.cpp 0 + + We create a text layout, specifying the text string we want to display + and the font to use. We ensure that the text we supplied is formatted + correctly by obtaining text lines from the text format, and wrapping + the remaining text using the available space. The lines are positioned + as we move down the page. + + The formatted text can be drawn onto a paint device; in the above code, + the text is drawn directly onto a widget. + */ + + /*! + \page richtext-common-tasks.html + \contentspage richtext.html Contents + \previouspage Document Layouts + \nextpage Advanced Rich Text Processing + + \title Common Rich Text Editing Tasks + + \tableofcontents + + There are a number of tasks that are often performed by developers + when editing and processing text documents using Qt. These include the use + of display widgets such as QTextBrowser and QTextEdit, creation of + documents with QTextDocument, editing using a QTextCursor, and + exporting the document structure. + This document outlines some of the more common ways of using the rich + text classes to perform these tasks, showing convenient patterns that can + be reused in your own applications. + + \section1 Using QTextEdit + + A text editor widget can be constructed and used to display HTML in the + following way: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 2 + + By default, the text editor contains a document with a root frame, inside + which is an empty text block. This document can be obtained so that it can + be modified directly by the application: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 3 + + The text editor's cursor may also be used to edit a document: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 4 + + Although a document can be edited using many cursors at once, a QTextEdit + only displays a single cursor at a time. Therefore, if we want to update the + editor to display a particular cursor or its selection, we need to set the + editor's cursor after we have modified the document: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 5 + + \section1 Selecting Text + + Text is selected by moving the cursor using operations that are similar to + those performed by a user in a text editor. To select text between two + points in the document, we need to position the cursor at the first point + then move it using a special mode (\l{QTextCursor::MoveMode}) with a + move operation (\l{QTextCursor::MoveOperation}). + When we select the text, we leave the selection anchor at the old cursor + position just as the user might do by holding down the Shift key when + selecting text: + + \snippet doc/src/snippets/textdocument-selections/mainwindow.cpp 1 + + In the above code, a whole word is selected using this method. QTextCursor + provides a number of common move operations for selecting individual + characters, words, lines, and whole blocks. + + \section1 Finding Text + + QTextDocument provides a cursor-based interface for searching, making + it easy to find and modify text in the style of a text editor. The following + code finds all the instances of a particular word in a document, and changes + the color of each: + + \snippet doc/src/snippets/textdocument-find/main.cpp 0 + \snippet doc/src/snippets/textdocument-find/main.cpp 1 + + Note that the cursor does not have to be moved after each search and replace + operation; it is always positioned at the end of the word that was just + replaced. + + \section1 Printing Documents + + QTextEdit is designed for the display of large rich text documents that are + read on screen, rendering them in the same way as a web browser. As a result, + it does not automatically break the contents of the document into page-sized + pieces that are suitable for printing. + + QTextDocument provides a \l{QTextDocument::print()}{print()} function to + allow documents to be printed using the QPrinter class. The following code + shows how to prepare a document in a QTextEdit for printing with a QPrinter: + + \snippet doc/src/snippets/textdocument-printing/mainwindow.cpp 0 + + The document is obtained from the text editor, and a QPrinter is constructed + then configured using a QPrintDialog. If the user accepts the printer's + configuration then the document is formatted and printed using the + \l{QTextDocument::print()}{print()} function. +*/ + +/*! + \page richtext-advanced-processing.html + \contentspage richtext.html Contents + \previouspage Common Rich Text Editing Tasks + \nextpage Supported HTML Subset + + \title Advanced Rich Text Processing + + \section1 Handling Large Files + + Qt does not limit the size of files that are used for text + processing. In most cases, this will not present a problem. For + especially large files, however, you might experience that your + application will become unresponsive or that you will run out of + memory. The size of the files you can load depends on your + hardware and on Qt's and your own application's implementation. + + If you are faced with this problem, we recommend that you address the + following issues: + + \list + \o You should consider breaking up large paragraphs into smaller + ones as Qt handles small paragraphs better. You could also + insert line breaks at regular intervals, which will look the + same as one large paragraph in a QTextEdit. + \o You can reduce the amount of blocks in a QTextDocument with + \l{QTextDocument::}{maximumBlockCount()}. The document is only + as large as the number of blocks as far as QTextEdit is concerned. + \o When adding text to a text edit, it is an advantage to add it + in an edit block (see example below). The result is that the + text edit does not need to build the entire document structure at once. + \endlist + + We give an example of the latter technique from the list. We assume that + the text edit is visible. + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 6 + + \omit + Ideas for other sections: + + * Hiding QTextBlock elements. + * Changing the word wrapping mode in QTextEdit. Custom word wrapping? + \endomit +*/ + +/*! + \page richtext-html-subset.html + \title Supported HTML Subset + \brief Describes the support for HTML markup in text widgets. + + \contentspage richtext.html Contents + \previouspage Common Rich Text Editing Tasks + + Qt's text widgets are able to display rich text, specified using a subset of \l{HTML 4} + markup. Widgets that use QTextDocument, such as QLabel and QTextEdit, are able to display + rich text specified in this way. + + \tableofcontents + + \section1 Using HTML Markup in Text Widgets + + Widgets automatically detect HTML markup and display rich text accordingly. For example, + setting a label's \l{QLabel::}{text} property with the string \c{"<b>Hello</b> <i>Qt!</i>"} + will result in the label displaying text like this: \bold{Hello} \e{Qt!} + + When HTML markup is used for text, Qt follows the rules defined by the \l{HTML 4} + specification. This includes default properties for text layout, such as the + direction of the text flow (left-to-right) which can be changed by applying the + \l{#Block Attributes}{\c dir} attribute to blocks of text. + + \section1 Supported Tags + + The following table lists the HTML tags supported by Qt's + \l{Rich Text Processing}{rich text} engine: + + \table + \header \o Tag + \o Description + \o Comment + \row \o \c a + \o Anchor or link + \o Supports the \c href and \c name attributes. + \row \o \c address + \o Address + \o + \row \o \c b + \o Bold + \o + \row \o \c big + \o Larger font + \o + \row \o \c blockquote + \o Indented paragraph + \o + \row \o \c body + \o Document body + \o Supports the \c bgcolor attribute, which + can be a Qt \l{QColor::setNamedColor()}{color name} + or a \c #RRGGBB color specification. + \row \o \c br + \o Line break + \o + \row \o \c center + \o Centered paragraph + \o + \row \o \c cite + \o Inline citation + \o Same as \c i. + \row \o \c code + \o Code + \o Same as \c tt. + \row \o \c dd + \o Definition data + \o + \row \o \c dfn + \o Definition + \o Same as \c i. + \row \o \c div + \o Document division + \o Supports the standard \l{block attributes}. + \row \o \c dl + \o Definition list + \o Supports the standard \l{block attributes}. + \row \o \c dt + \o Definition term + \o Supports the standard \l{block attributes}. + \row \o \c em + \o Emphasized + \o Same as \c i. + \row \o \c font + \o Font size, family, and/or color + \o Supports the following attributes: + \c size, \c face, and \c color (Qt + \l{QColor::setNamedColor()}{color names} or + \c #RRGGBB). + \row \o \c h1 + \o Level 1 heading + \o Supports the standard \l{block attributes}. + \row \o \c h2 + \o Level 2 heading + \o Supports the standard \l{block attributes}. + \row \o \c h3 + \o Level 3 heading + \o Supports the standard \l{block attributes}. + \row \o \c h4 + \o Level 4 heading + \o Supports the standard \l{block attributes}. + \row \o \c h5 + \o Level 5 heading + \o Supports the standard \l{block attributes}. + \row \o \c h6 + \o Level 6 heading + \o Supports the standard \l{block attributes}. + \row \o \c head + \o Document header + \o + \row \o \c hr + \o Horizontal line + \o Supports the \c width attribute, which can + be specified as an absolute or relative (\c %) value. + \row \o \c html + \o HTML document + \o + \row \o \c i + \o Italic + \o + \row \o \c img + \o Image + \o Supports the \c src, \c source + (for Qt 3 compatibility), \c width, and \c height + attributes. + \row \o \c kbd + \o User-entered text + \o + \row \o \c meta + \o Meta-information + \o If a text encoding is specified using the \c{meta} tag, + it is picked up by Qt::codecForHtml(). + Likewise, if an encoding is specified to + QTextDocument::toHtml(), the encoding is stored using + a \c meta tag, for example: + + \snippet doc/src/snippets/code/doc_src_richtext.qdoc 7 + + \row \o \c li + \o List item + \o + \row \o \c nobr + \o Non-breakable text + \o + \row \o \c ol + \o Ordered list + \o Supports the standard \l{list attributes}. + \row \o \c p + \o Paragraph + \o Left-aligned by default. Supports the standard + \l{block attributes}. + \row \o \c pre + \o Preformated text + \o + \row \o \c qt + \o Qt rich-text document + \o Synonym for \c html. Provided for compatibility with + earlier versions of Qt. + \row \o \c s + \o Strikethrough + \o + \row \o \c samp + \o Sample code + \o Same as \c tt. + \row \o \c small + \o Small font + \o + \row \o \c span + \o Grouped elements + \o + \row \o \c strong + \o Strong + \o Same as \c b. + \row \o \c sub + \o Subscript + \o + \row \o \c sup + \o Superscript + \o + \row \o \c table + \o Table + \o Supports the following attributes: \c border, + \c bgcolor (Qt \l{QColor::setNamedColor()}{color names} + or \c #RRGGBB), \c cellspacing, \c cellpadding, + \c width (absolute or relative), and \c height. + \row \o \c tbody + \o Table body + \o Does nothing. + \row \o \c td + \o Table data cell + \o Supports the standard \l{table cell attributes}. + \row \o \c tfoot + \o Table footer + \o Does nothing. + \row \o \c th + \o Table header cell + \o Supports the standard \l{table cell attributes}. + \row \o \c thead + \o Table header + \o If the \c thead tag is specified, it is used when printing tables + that span multiple pages. + \row \o \c title + \o Document title + \o The value specified using the \c + title tag is available through + QTextDocument::metaInformation(). + \row \o \c tr + \o Table row + \o Supports the \c bgcolor attribute, which + can be a Qt \l{QColor::setNamedColor()}{color name} + or a \c #RRGGBB color specification. + \row \o \c tt + \o Typewrite font + \o + \row \o \c u + \o Underlined + \o + \row \o \c ul + \o Unordered list + \o Supports the standard \l{list attributes}. + \row \o \c var + \o Variable + \o Same as \c i. + \endtable + + \section1 Block Attributes + + The following attributes are supported by the \c div, \c dl, \c + dt, \c h1, \c h2, \c h3, \c h4, \c h5, \c h6, \c p tags: + + \list + \o \c align (\c left, \c right, \c center, \c justify) + \o \c dir (\c ltr, \c rtl) + \endlist + + \section1 List Attributes + + The following attribute is supported by the \c ol and \c ul tags: + + \list + \o \c type (\c 1, \c a, \c A, \c square, \c disc, \c circle) + \endlist + + \section1 Table Cell Attributes + + The following attributes are supported by the \c td and \c th + tags: + + \list + \o \c width (absolute, relative, or no-value) + \o \c bgcolor (Qt \l{QColor::setNamedColor()}{color names} or \c #RRGGBB) + \o \c colspan + \o \c rowspan + \o \c align (\c left, \c right, \c center, \c justify) + \o \c valign (\c top, \c middle, \c bottom) + \endlist + + \section1 CSS Properties + The following table lists the CSS properties supported by Qt's + \l{Rich Text Processing}{rich text} engine: + + \table + \header \o Property + \o Values + \o Description + \row + \o \c background-color + \o <color> + \o Background color for elements + \row + \o \c background-image + \o <uri> + \o Background image for elements + \row \o \c color + \o <color> + \o Text foreground color + \row \o \c font-family + \o <family name> + \o Font family name + \row \o \c font-size + \o [ small | medium | large | x-large | xx-large ] | <size>pt | <size>px + \o Font size relative to the document font, or specified in points or pixels + \row \o \c font-style + \o [ normal | italic | oblique ] + \o + \row \o \c font-weight + \o [ normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 ] + \o Specifies the font weight used for text, where \c normal and \c bold + are mapped to the corresponding QFont weights. Numeric values are + 8 times the equivalent QFont weight values. + \row \o \c text-decoration + \o none | [ underline || overline || line-through ] + \o Additional text effects + \row \o \c font + \o [ [ <'font-style'> || <'font-weight'> ]? <'font-size'> <'font-family'> ] + \o Font shorthand property + \row \o \c text-indent + \o <length>px + \o First line text indentation in pixels + \row \o \c white-space + \o normal | pre | nowrap | pre-wrap + \o Declares how whitespace in HTML is handled. + \row \o \c margin-top + \o <length>px + \o Top paragraph margin in pixels + \row \o \c margin-bottom + \o <length>px + \o Bottom paragraph margin in pixels + \row \o \c margin-left + \o <length>px + \o Left paragraph margin in pixels + \row \o \c margin-right + \o <length>px + \o Right paragraph margin in pixels + \row \o \c padding-top + \o <length>px + \o Top table cell padding in pixels + \row \o \c padding-bottom + \o <length>px + \o Bottom table cell padding in pixels + \row \o \c padding-left + \o <length>px + \o Left table cell padding in pixels + \row \o \c padding-right + \o <length>px + \o Right table cell padding in pixels + \row \o \c padding + \o <length>px + \o Shorthand for setting all the padding properties at once. + \row \o \c vertical-align + \o baseline | sub | super | middle | top | bottom + \o Vertical text alignment. For vertical alignment in text table cells only middle, top, and bottom apply. + \row \o \c border-color + \o <color> + \o Border color for text tables. + \row \o \c border-style + \o none | dotted | dashed | dot-dash | dot-dot-dash | solid | double | groove | ridge | inset | outset + \o Border style for text tables. + \row \o \c background + \o [ <'background-color'> || <'background-image'> ] + \o Background shorthand property + \row \o \c page-break-before + \o [ auto | always ] + \o Make it possible to enforce a page break before the paragraph/table + \row \o \c page-break-after + \o [ auto | always ] + \o Make it possible to enforce a page break after the paragraph/table + \row \o float + \o [ left | right | none ] + \o Specifies where an image or a text will be placed in another element. Note that the \c float property is + only supported for tables and images. + \row \o \c text-transform + \o [ uppercase | lowercase ] + \o Select the transformation that will be performed on the text prior to displaying it. + \row \o \c font-variant + \o small-caps + \o Perform the smallcaps transformation on the text prior to displaying it. + \row \o \c word-spacing + \o <width>px + \o Specifies an alternate spacing between each word. + \endtable + + \section1 Supported CSS Selectors + + All CSS 2.1 selector classes are supported except pseudo-class selectors such + as \c{:first-child}, \c{:visited} and \c{:hover}. + +*/ diff --git a/doc/src/statemachine.qdoc b/doc/src/frameworks-technologies/statemachine.qdoc index f479c77..3513199 100644 --- a/doc/src/statemachine.qdoc +++ b/doc/src/frameworks-technologies/statemachine.qdoc @@ -40,10 +40,16 @@ ****************************************************************************/ /*! + \group statemachine + \title State Machine Classes +*/ + +/*! \page statemachine-api.html \title The State Machine Framework \brief An overview of the State Machine framework for constructing and executing state graphs. - \ingroup architecture + + \ingroup frameworks-technologies \tableofcontents @@ -69,6 +75,12 @@ states can be configured to set properties and invoke methods on QObjects. Qt's event system is used to drive the state machines. + \section1 Classes in the State Machine Framework + + These classes are provided by qt for creating event-driven state machines. + + \annotatedlist statemachine + \section1 A Simple State Machine To demonstrate the core functionality of the State Machine API, let's look diff --git a/doc/src/templates.qdoc b/doc/src/frameworks-technologies/templates.qdoc index 4705d09..39d76ee 100644 --- a/doc/src/templates.qdoc +++ b/doc/src/frameworks-technologies/templates.qdoc @@ -42,7 +42,6 @@ /*! \page templates.html \title Why Doesn't Qt Use Templates for Signals and Slots? - \ingroup architecture \brief The reasoning behind Qt's implementation of signals and slots. Templates are a builtin mechanism in C++ that allows the compiler to diff --git a/doc/src/threads.qdoc b/doc/src/frameworks-technologies/threads.qdoc index 351113a..bc65daf 100644 --- a/doc/src/threads.qdoc +++ b/doc/src/frameworks-technologies/threads.qdoc @@ -40,11 +40,19 @@ ****************************************************************************/ /*! + \group thread + \title Threading Classes +*/ + +/*! \page threads.html \title Thread Support in Qt - \ingroup architecture \brief A detailed discussion of thread handling in Qt. + \ingroup frameworks-technologies + + \nextpage Starting Threads with QThread + Qt provides thread support in the form of platform-independent threading classes, a thread-safe way of posting events, and signal-slot connections across threads. This makes it easy to @@ -56,18 +64,39 @@ Earlier versions of Qt offered an option to build the library without thread support. Since Qt 4.0, threads are always enabled. + \section1 Topics: + + \list + \o \l{Recommended Reading} + \o \l{The Threading Classes} + \o \l{Starting Threads with QThread} + \o \l{Synchronizing Threads} + \o \l{Reentrancy and Thread-Safety} + \o \l{Threads and QObjects} + \o \l{Concurrent Programming} + \o \l{Thread-Support in Qt Modules} + \endlist + + \section1 Recommended Reading + This document is intended for an audience that has knowledge of, and experience with, multithreaded applications. If you are new - to threading see our \l{#reading}{Recommended Reading} list. + to threading see our Recommended Reading list: - Topics: - - \tableofcontents + \list + \o \l{Threads Primer: A Guide to Multithreaded Programming} + \o \l{Thread Time: The Multithreaded Programming Guide} + \o \l{Pthreads Programming: A POSIX Standard for Better Multiprocessing} + \o \l{Win32 Multithreaded Programming} + \endlist \section1 The Threading Classes - Qt includes the following thread classes: + These classes are relevant to threaded applications. + + \annotatedlist thread +\omit \list \o QThread provides the means to start a new thread. \o QThreadStorage provides per-thread data storage. @@ -85,12 +114,30 @@ \o QAtomicInt provides atomic operations on integers. \o QAtomicPointer provides atomic operations on pointers. \endlist +\endomit \note Qt's threading classes are implemented with native threading APIs; e.g., Win32 and pthreads. Therefore, they can be used with threads of the same native API. +*/ - \section2 Creating a Thread +/*! + \page threads-starting.html + \title Starting Threads with QThread + + \contentspage Thread Support in Qt + \nextpage Synchronizing Threads + + A QThread instance represents a thread and provides the means to + \l{QThread::start()}{start()} a thread, which will then execute the + reimplementation of QThread::run(). The \c run() implementation is for a + thread what the \c main() entry point is for the application. All code + executed in a call stack that starts in the \c run() function is executed + by the new thread, and the thread finishes when the function returns. + QThread emits signals to indicate that the thread started or finished + executing. + + \section1 Creating a Thread To create a thread, subclass QThread and reimplement its \l{QThread::run()}{run()} function. For example: @@ -102,22 +149,34 @@ \dots \snippet doc/src/snippets/threads/threads.cpp 2 + \section1 Starting a Thread + Then, create an instance of the thread object and call - QThread::start(). The code that appears in the + QThread::start(). Note that you must create the QApplication (or + QCoreApplication) object before you can create a QThread. + + The function will return immediately and the + main thread will continue. The code that appears in the \l{QThread::run()}{run()} reimplementation will then be executed - in a separate thread. Creating threads is explained in more - detail in the QThread documentation. + in a separate thread. + + Creating threads is explained in more detail in the QThread + documentation. Note that QCoreApplication::exec() must always be called from the main thread (the thread that executes \c{main()}), not from a QThread. In GUI applications, the main thread is also called the GUI thread because it's the only thread that is allowed to perform GUI-related operations. +*/ - In addition, you must create the QApplication (or - QCoreApplication) object before you can create a QThread. - - \section2 Synchronizing Threads +/*! + \page threads-synchronizing.html + \title Synchronizing Threads + + \previouspage Starting Threads with QThread + \contentspage Thread Support in Qt + \nextpage Reentrancy and Thread-Safety The QMutex, QReadWriteLock, QSemaphore, and QWaitCondition classes provide means to synchronize threads. While the main idea @@ -162,105 +221,18 @@ Note that Qt's synchronization classes rely on the use of properly aligned pointers. For instance, you cannot use packed classes with MSVC. +*/ - \target qtconcurrent intro - \section1 QtConcurrent - - The QtConcurrent namespace provides high-level APIs that make it - possible to write multi-threaded programs without using low-level - threading primitives such as mutexes, read-write locks, wait - conditions, or semaphores. Programs written with QtConcurrent - automatically adjust the number of threads used according to the - number of processor cores available. This means that applications - written today will continue to scale when deployed on multi-core - systems in the future. - - QtConcurrent includes functional programming style APIs for - parallel list processing, including a MapReduce and FilterReduce - implementation for shared-memory (non-distributed) systems, and - classes for managing asynchronous computations in GUI - applications: - - \list - - \o QtConcurrent::map() applies a function to every item in a container, - modifying the items in-place. - - \o QtConcurrent::mapped() is like map(), except that it returns a new - container with the modifications. - - \o QtConcurrent::mappedReduced() is like mapped(), except that the - modified results are reduced or folded into a single result. - - \o QtConcurrent::filter() removes all items from a container based on the - result of a filter function. - - \o QtConcurrent::filtered() is like filter(), except that it returns a new - container with the filtered results. - - \o QtConcurrent::filteredReduced() is like filtered(), except that the - filtered results are reduced or folded into a single result. - - \o QtConcurrent::run() runs a function in another thread. - - \o QFuture represents the result of an asynchronous computation. - - \o QFutureIterator allows iterating through results available via QFuture. - - \o QFutureWatcher allows monitoring a QFuture using signals-and-slots. - - \o QFutureSynchronizer is a convenience class that automatically - synchronizes several QFutures. - - \endlist - - Qt Concurrent supports several STL-compatible container and iterator types, - but works best with Qt containers that have random-access iterators, such as - QList or QVector. The map and filter functions accept both containers and begin/end iterators. - - STL Iterator support overview: - - \table - \header - \o Iterator Type - \o Example classes - \o Support status - \row - \o Input Iterator - \o - \o Not Supported - \row - \o Output Iterator - \o - \o Not Supported - \row - \o Forward Iterator - \o std::slist - \o Supported - \row - \o Bidirectional Iterator - \o QLinkedList, std::list - \o Supported - \row - \o Random Access Iterator - \o QList, QVector, std::vector - \o Supported and Recommended - \endtable +/*! + \page threads-reentrancy.html + \title Reentrancy and Thread-Safety - Random access iterators can be faster in cases where Qt Concurrent is iterating - over a large number of lightweight items, since they allow skipping to any point - in the container. In addition, using random access iterators allows Qt Concurrent - to provide progress information trough QFuture::progressValue() and QFutureWatcher:: - progressValueChanged(). - - The non in-place modifying functions such as mapped() and filtered() makes a - copy of the container when called. If you are using STL containers this copy operation - might take some time, in this case we recommend specifying the begin and end iterators - for the container instead. - \keyword reentrant \keyword thread-safe - \section1 Reentrancy and Thread-Safety + + \previouspage Synchronizing Threads + \contentspage Thread Support in Qt + \nextpage Threads and QObjects Throughout the documentation, the terms \e{reentrant} and \e{thread-safe} are used to mark classes and functions to indicate @@ -346,8 +318,15 @@ that are somewhat different for its C APIs. When using other object-oriented C++ class libraries with Qt, be sure the definitions are understood. +*/ + +/*! + \page threads-qobject.html + \title Threads and QObjects - \section1 Threads and QObjects + \previouspage Reentrancy and Thread Safety + \contentspage Thread Support in Qt + \nextpage Concurrent Programming QThread inherits QObject. It emits signals to indicate that the thread started or finished executing, and provides a few slots as @@ -358,8 +337,12 @@ post events to objects that "live" in other threads. This is possible because each thread is allowed to have its own event loop. + + Topics: + + \tableofcontents - \section2 QObject Reentrancy + \section1 QObject Reentrancy QObject is reentrant. Most of its non-GUI subclasses, such as QTimer, QTcpSocket, QUdpSocket, QFtp, and QProcess, are also @@ -402,7 +385,7 @@ the \l{network/blockingfortuneclient}{Blocking Fortune Client} example. - \section2 Per-Thread Event Loop + \section1 Per-Thread Event Loop Each thread can have its own event loop. The initial thread starts its event loops using QCoreApplication::exec(); other @@ -463,7 +446,7 @@ be used to dispatch events to objects living in the thread from which the function is called. - \section2 Accessing QObject Subclasses from Other Threads + \section1 Accessing QObject Subclasses from Other Threads QObject and all of its subclasses are not thread-safe. This includes the entire event delivery system. It is important to keep @@ -487,7 +470,7 @@ QThread::run() implementation, because signal emission is thread-safe. - \section2 Signals and Slots Across Threads + \section1 Signals and Slots Across Threads Qt supports three types of signal-slot connections: @@ -529,37 +512,117 @@ Similarly, the \l{network/blockingfortuneclient}{Blocking Fortune Client} example uses a separate thread for communicating with a TCP server asynchronously. +*/ - \section1 Threads and Implicit Sharing +/*! + \page threads-qtconcurrent.html + \title Concurrent Programming - Qt uses an optimization called \l{implicit sharing} for many of - its value class, notably QImage and QString. Beginning with Qt 4, - implicit shared classes can safely be copied across threads, like - any other value classes. They are fully - \l{#reentrant}{reentrant}. The implicit sharing is really - \e implicit. + \previouspage Threads and QObjects + \contentspage Thread Support in Qt + \nextpage Thread-Support in Qt Modules - In many people's minds, implicit sharing and multithreading are - incompatible concepts, because of the way the reference counting - is typically done. Qt, however, uses atomic reference counting to - ensure the integrity of the shared data, avoiding potential - corruption of the reference counter. + \target qtconcurrent intro - Note that atomic reference counting does not guarantee - \l{#thread-safe}{thread-safety}. Proper locking should be used - when sharing an instance of an implicitly shared class between - threads. This is the same requirement placed on all - \l{#reentrant}{reentrant} classes, shared or not. Atomic reference - counting does, however, guarantee that a thread working on its - own, local instance of an implicitly shared class is safe. We - recommend using \l{Signals and Slots Across Threads}{signals and - slots} to pass data between threads, as this can be done without - the need for any explicit locking. + The QtConcurrent namespace provides high-level APIs that make it + possible to write multi-threaded programs without using low-level + threading primitives such as mutexes, read-write locks, wait + conditions, or semaphores. Programs written with QtConcurrent + automatically adjust the number of threads used according to the + number of processor cores available. This means that applications + written today will continue to scale when deployed on multi-core + systems in the future. - To sum it up, implicitly shared classes in Qt 4 are really \e - implicitly shared. Even in multithreaded applications, you can - safely use them as if they were plain, non-shared, reentrant - value-based classes. + QtConcurrent includes functional programming style APIs for + parallel list processing, including a MapReduce and FilterReduce + implementation for shared-memory (non-distributed) systems, and + classes for managing asynchronous computations in GUI + applications: + + \list + + \o QtConcurrent::map() applies a function to every item in a container, + modifying the items in-place. + + \o QtConcurrent::mapped() is like map(), except that it returns a new + container with the modifications. + + \o QtConcurrent::mappedReduced() is like mapped(), except that the + modified results are reduced or folded into a single result. + + \o QtConcurrent::filter() removes all items from a container based on the + result of a filter function. + + \o QtConcurrent::filtered() is like filter(), except that it returns a new + container with the filtered results. + + \o QtConcurrent::filteredReduced() is like filtered(), except that the + filtered results are reduced or folded into a single result. + + \o QtConcurrent::run() runs a function in another thread. + + \o QFuture represents the result of an asynchronous computation. + + \o QFutureIterator allows iterating through results available via QFuture. + + \o QFutureWatcher allows monitoring a QFuture using signals-and-slots. + + \o QFutureSynchronizer is a convenience class that automatically + synchronizes several QFutures. + + \endlist + + Qt Concurrent supports several STL-compatible container and iterator types, + but works best with Qt containers that have random-access iterators, such as + QList or QVector. The map and filter functions accept both containers and begin/end iterators. + + STL Iterator support overview: + + \table + \header + \o Iterator Type + \o Example classes + \o Support status + \row + \o Input Iterator + \o + \o Not Supported + \row + \o Output Iterator + \o + \o Not Supported + \row + \o Forward Iterator + \o std::slist + \o Supported + \row + \o Bidirectional Iterator + \o QLinkedList, std::list + \o Supported + \row + \o Random Access Iterator + \o QList, QVector, std::vector + \o Supported and Recommended + \endtable + + Random access iterators can be faster in cases where Qt Concurrent is iterating + over a large number of lightweight items, since they allow skipping to any point + in the container. In addition, using random access iterators allows Qt Concurrent + to provide progress information trough QFuture::progressValue() and QFutureWatcher:: + progressValueChanged(). + + The non in-place modifying functions such as mapped() and filtered() makes a + copy of the container when called. If you are using STL containers this copy operation + might take some time, in this case we recommend specifying the begin and end iterators + for the container instead. +*/ + +/*! + \page threads-modules.html + \title Thread-Support in Qt Modules + + \previouspage Concurrent Programming + \contentspage Thread Support in Qt \section1 Threads and the SQL Module @@ -573,8 +636,8 @@ \section1 Painting in Threads - QPainter can be used to paint onto QImage, QPrinter, and QPicture - paint devices. Painting onto QPixmaps and QWidgets is \e not + QPainter can be used in a thread to paint onto QImage, QPrinter, and + QPicture paint devices. Painting onto QPixmaps and QWidgets is \e not supported. On Mac OS X the automatic progress dialog will not be displayed if you are printing from outside the GUI thread. @@ -601,16 +664,37 @@ \section1 Threads and the SVG module - The QSvgGenerator and QSvgRenderer classes in the QtSvg module - are reentrant. + The QSvgGenerator and QSvgRenderer classes in the QtSvg module + are reentrant. - \target reading - \section1 Recommended Reading + \section1 Threads and Implicitly Shared Classes - \list - \o \l{Threads Primer: A Guide to Multithreaded Programming} - \o \l{Thread Time: The Multithreaded Programming Guide} - \o \l{Pthreads Programming: A POSIX Standard for Better Multiprocessing} - \o \l{Win32 Multithreaded Programming} - \endlist + Qt uses an optimization called \l{implicit sharing} for many of + its value class, notably QImage and QString. Beginning with Qt 4, + implicit shared classes can safely be copied across threads, like + any other value classes. They are fully + \l{Reentrancy and Thread-Safety}{reentrant}. The implicit sharing + is really \e implicit. + + In many people's minds, implicit sharing and multithreading are + incompatible concepts, because of the way the reference counting + is typically done. Qt, however, uses atomic reference counting to + ensure the integrity of the shared data, avoiding potential + corruption of the reference counter. + + Note that atomic reference counting does not guarantee + \l{Reentrancy and Thread-Safety}{thread-safety}. Proper locking should be used + when sharing an instance of an implicitly shared class between + threads. This is the same requirement placed on all + \l{Reentrancy and Thread-Safety}{reentrant} classes, shared or not. Atomic reference + counting does, however, guarantee that a thread working on its + own, local instance of an implicitly shared class is safe. We + recommend using \l{Signals and Slots Across Threads}{signals and + slots} to pass data between threads, as this can be done without + the need for any explicit locking. + + To sum it up, implicitly shared classes in Qt 4 are really \e + implicitly shared. Even in multithreaded applications, you can + safely use them as if they were plain, non-shared, reentrant + value-based classes. */ diff --git a/doc/src/unicode.qdoc b/doc/src/frameworks-technologies/unicode.qdoc index b4ba26a..2daefc5 100644 --- a/doc/src/unicode.qdoc +++ b/doc/src/frameworks-technologies/unicode.qdoc @@ -39,20 +39,41 @@ ** ****************************************************************************/ +/*! + \group string-processing + \title Classes for String Data + + \brief Classes for working with string data. + + These classes are relevant when working with string data. See the + \l{Unicode in Qt}{information about support for Unicode in Qt} for + more information. +*/ + + /*! \page unicode.html - \title Unicode - \ingroup architecture - \ingroup text-processing + \title Unicode in Qt \brief Information about support for Unicode in Qt. + \keyword Unicode + + \ingroup frameworks-technologies + Unicode is a multi-byte character set, portable across all major computing platforms and with decent coverage over most of the world. It is also single-locale; it includes no code pages or other complexities that make software harder to write and test. There is no competing character set that's reasonably cross-platform. For these reasons, Unicode 4.0 is used as the native character set for Qt. + + \section1 Qt's Classes for Working with Strings + + These classes are relevant when working with string data. For information + about rendering text, see the \l{Rich Text Processing} overview, and if + your string data is in XML, see the \l{XML Processing} overview. + \annotatedlist string-processing \section1 Information about Unicode on the Web diff --git a/doc/src/geometry.qdoc b/doc/src/geometry.qdoc deleted file mode 100644 index 9143548..0000000 --- a/doc/src/geometry.qdoc +++ /dev/null @@ -1,150 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page geometry.html - \title Window Geometry - \ingroup architecture - \brief An overview of window geometry handling and management. - - QWidget provides several functions that deal with a widget's - geometry. Some of these functions operate on the pure client area - (i.e. the window excluding the window frame), others include the - window frame. The differentiation is done in a way that covers the - most common usage transparently. - - \list - \o \bold{Including the window frame:} - \l{QWidget::x()}{x()}, - \l{QWidget::y()}{y()}, - \l{QWidget::frameGeometry()}{frameGeometry()}, - \l{QWidget::pos()}{pos()}, and - \l{QWidget::move()}{move()}. - \o \bold{Excluding the window frame:} - \l{QWidget::geometry()}{geometry()}, - \l{QWidget::width()}{width()}, - \l{QWidget::height()}{height()}, - \l{QWidget::rect()}{rect()}, and - \l{QWidget::size()}{size()}. - \endlist - - Note that the distinction only matters for decorated top-level - widgets. For all child widgets, the frame geometry is equal to the - widget's client geometry. - - This diagram shows most of the functions in use: - \img geometry.png Geometry diagram - - Topics: - - \tableofcontents - - \section1 X11 Peculiarities - - On X11, a window does not have a frame until the window manager - decorates it. This happens asynchronously at some point in time - after calling QWidget::show() and the first paint event the - window receives, or it does not happen at all. Bear in mind that - X11 is policy-free (others call it flexible). Thus you cannot - make any safe assumption about the decoration frame your window - will get. Basic rule: There's always one user who uses a window - manager that breaks your assumption, and who will complain to - you. - - Furthermore, a toolkit cannot simply place windows on the screen. All - Qt can do is to send certain hints to the window manager. The window - manager, a separate process, may either obey, ignore or misunderstand - them. Due to the partially unclear Inter-Client Communication - Conventions Manual (ICCCM), window placement is handled quite - differently in existing window managers. - - X11 provides no standard or easy way to get the frame geometry - once the window is decorated. Qt solves this problem with nifty - heuristics and clever code that works on a wide range of window - managers that exist today. Don't be surprised if you find one - where QWidget::frameGeometry() returns wrong results though. - - Nor does X11 provide a way to maximize a window. - QWidget::showMaximized() has to emulate the feature. Its result - depends on the result of QWidget::frameGeometry() and the - capability of the window manager to do proper window placement, - neither of which can be guaranteed. - - \section1 Restoring a Window's Geometry - - Since version 4.2, Qt provides functions that saves and restores a - window's geometry and state for you. QWidget::saveGeometry() - saves the window geometry and maximized/fullscreen state, while - QWidget::restoreGeometry() restores it. The restore function also - checks if the restored geometry is outside the available screen - geometry, and modifies it as appropriate if it is. - - The rest of this document describes how to save and restore the - geometry using the geometry properties. On Windows, this is - basically storing the result of QWidget::geometry() and calling - QWidget::setGeometry() in the next session before calling - \l{QWidget::show()}{show()}. On X11, this won't work because an - invisible window doesn't have a frame yet. The window manager - will decorate the window later. When this happens, the window - shifts towards the bottom/right corner of the screen depending on - the size of the decoration frame. Although X provides a way to - avoid this shift, most window managers fail to implement this - feature. - - A workaround is to call \l{QWidget::setGeometry()}{setGeometry()} - after \l{QWidget::show()}{show()}. This has the two disadvantages - that the widget appears at a wrong place for a millisecond - (results in flashing) and that currently only every second window - manager gets it right. A safer solution is to store both - \l{QWidget::pos()}{pos()} and \l{QWidget::size()}{size()} and to - restore the geometry using \l{QWidget::resize()} and - \l{QWidget::move()}{move()} before calling - \l{QWidget::show()}{show()}, as demonstrated in the following - code snippets (from the \l{mainwindows/application}{Application} - example): - - \snippet examples/mainwindows/application/mainwindow.cpp 35 - \codeline - \snippet examples/mainwindows/application/mainwindow.cpp 38 - - This method works on Windows, Mac OS X, and most X11 window - managers. -*/ diff --git a/doc/src/demos.qdoc b/doc/src/getting-started/demos.qdoc index 69a943a..1eac06f 100644 --- a/doc/src/demos.qdoc +++ b/doc/src/getting-started/demos.qdoc @@ -43,13 +43,28 @@ \page demos.html \title Qt Demonstrations \brief Information about the demonstration programs provided with Qt. - \ingroup howto + + \previouspage Qt Examples + \contentspage How to Learn Qt + \nextpage What's New in Qt 4.5 This is the list of demonstrations in Qt's \c demos directory. These are larger and more complicated programs than the \l{Qt Examples} and are used to highlight certain features of - Qt. You can launch any of these programs from the - \l{Examples and Demos Launcher} application. + Qt. + + \table 50% + \header + \o {2,1} Getting an Overview + \row + \o \inlineimage qtdemo-small.png + \o + If you run the \l{Examples and Demos Launcher}, you'll see many of Qt's + widgets in action. + + The \l{Qt Widget Gallery} also provides overviews of selected Qt + widgets in each of the styles used on various supported platforms. + \endtable If you are new to Qt, and want to start developing applications, you should probably start by going through the \l{Tutorials}. diff --git a/doc/src/getting-started/examples.qdoc b/doc/src/getting-started/examples.qdoc new file mode 100644 index 0000000..253a4e4 --- /dev/null +++ b/doc/src/getting-started/examples.qdoc @@ -0,0 +1,1108 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page examples-overview.html + \raw HTML + <script> + document.location.href = "examples.html"; + </script> + \endraw + Click this \l{Qt Examples}{link} if you don't get redirected. +*/ + +/*! + \page examples.html + \title Qt Examples + \brief The example programs provided with Qt. + + \previouspage Tutorials + \contentspage How to Learn Qt + \nextpage Qt Demonstrations + + Qt is supplied with a variety of examples that cover almost every aspect + of development. They are not all designed to be impressive when you run + them, but their source code is carefully written to show good Qt + programming practices. You can launch any of these programs from the + \l{Examples and Demos Launcher} application. + + These examples are ordered by functional area, but many examples often + use features from many parts of Qt to highlight one area in particular. + If you are new to Qt, you should probably start by going through the + \l{Tutorials} before you have a look at the + \l{mainwindows/application}{Application} example. + + In addition to the examples and the tutorial, Qt includes a + \l{Qt Demonstrations}{selection of demos} that deliberately show off + Qt's features. You might want to look at these as well. + + \table + \row + \o{2,1} \l{Widgets Examples}{\bold Widgets} + \o{2,1} \l{Dialog Examples}{\bold Dialogs} + \row + \i \image widget-examples.png + \i + Qt comes with a large range of standard widgets that users of modern + applications have come to expect. You can also develop your own custom + widgets and controls, and use them alongside standard widgets. + + It is even possible to provide custom styles and themes for widgets that can + be used to change the appearance of standard widgets and appropriately + written custom widgets. + + \i \image dialog-examples.png Dialogs + \i + Qt includes standard dialogs for many common operations, such as file + selection, printing, and color selection. + + Custom dialogs can also be created for specialized modal or modeless + interactions with users. + + \row + \o{2,1} \l{Main Window Examples}{\bold{Main Windows}} + \o{2,1} \l{Layout Examples}{\bold Layouts} + + \row + \i \image mainwindow-examples.png MainWindows + \i All the standard features of application main windows are provided by Qt. + + Main windows can have pull down menus, tool bars, and dock windows. These + separate forms of user input are unified in an integrated action system that + also supports keyboard shortcuts and accelerator keys in menu items. + + \i \image layout-examples.png Layouts + \i + Qt uses a layout-based approach to widget management. Widgets are arranged in + the optimal positions in windows based on simple layout rules, leading to a + consistent look and feel. + + Custom layouts can be used to provide more control over the positions and + sizes of child widgets. + + \row + \o{2,1} \l{Item Views Examples}{\bold{Item Views}} + \o{2,1} \l{Graphics View Examples}{\bold{Graphics View}} + \row + \o \image itemview-examples.png ItemViews + \o + Item views are widgets that typically display data sets. Qt 4's model/view + framework lets you handle large data sets by separating the underlying data + from the way it is represented to the user, and provides support for + customized rendering through the use of delegates. + + \o \image graphicsview-examples.png GraphicsView + \o + Qt is provided with a comprehensive canvas through the GraphicsView + classes. + + \row + \o{2,1} \l{Painting Examples}{\bold{Painting}} + \o{2,1} \l{Rich Text Examples}{\bold{Rich Text}} + \row + \o \image painting-examples.png Painting + \o + Qt's painting system is able to render vector graphics, images, and outline + font-based text with sub-pixel accuracy accuracy using anti-aliasing to + improve rendering quality. + + \o \image richtext-examples.png RichText + \o + Qt provides powerful document-oriented rich text engine that supports Unicode + and right-to-left scripts. Documents can be manipulated using a cursor-based + API, and their contents can be imported and exported as both HTML and in a + custom XML format. + + \row + \o{2,1} \l{Desktop Examples}{\bold Desktop} + \o{2,1} \l{Drag and Drop Examples}{\bold{Drag and Drop}} + \row + \o \image desktop-examples.png + \o + Qt provides features to enable applications to integrate with the user's + preferred desktop environment. + + Features such as system tray icons, access to the desktop widget, and + support for desktop services can be used to improve the appearance of + applications and take advantage of underlying desktop facilities. + + \o \image draganddrop-examples.png DragAndDrop + \o + Qt supports native drag and drop on all platforms via an extensible + MIME-based system that enables applications to send data to each other in the + most appropriate formats. + + Drag and drop can also be implemented for internal use by applications. + + \row + \o{2,1} \l{Threading and Concurrent Programming Examples}{\bold{Threading and Concurrent Programming}} + \o{2,1} \l{Tools Examples}{\bold{Tools}} + \row + \o \image thread-examples.png + \o + Qt 4 makes it easier than ever to write multithreaded applications. More + classes have been made usable from non-GUI threads, and the signals and slots + mechanism can now be used to communicate between threads. + + The QtConcurrent namespace includes a collection of classes and functions + for straightforward concurrent programming. + + \o \image tool-examples.png Tools + \o + Qt is equipped with a range of capable tool classes, from containers and + iterators to classes for string handling and manipulation. + + Other classes provide application infrastructure support, handling plugin + loading and managing configuration files. + + \row + \o{2,1} \l{Network Examples}{\bold{Network}} + \o{2,1} \l{Inter-Process Communication Examples}{\bold{Inter-Process Communication}} + \row + \o \image network-examples.png Network + \o + Qt is provided with an extensive set of network classes to support both + client-based and server side network programming. + + \o \image ipc-examples.png IPC + \o + + \row + \o{2,1} \l{OpenGL Examples}{\bold OpenGL} + \o{2,1} \l{Multimedia Examples}{\bold{Multimedia Framework}} + \row + \o \image opengl-examples.png OpenGL + \o + Qt provides support for integration with OpenGL implementations on all + platforms, giving developers the opportunity to display hardware accelerated + 3D graphics alongside a more conventional user interface. + + \o \image phonon-examples.png + \o + Qt provides low-level audio support on linux,windows and mac platforms by default and + an audio plugin API to allow developers to implement there own audio support for + custom devices and platforms. + + The Phonon Multimedia Framework brings multimedia support to Qt applications. + + \row + \o{2,1} \l{SQL Examples}{\bold{SQL}} + \o{2,1} \l{XML Examples}{\bold{XML}} + \row + \o \image sql-examples.png SQL + \o + Qt provides extensive database interoperability, with support for products + from both open source and proprietary vendors. + + SQL support is integrated with Qt's model/view architecture, making it easier + to provide GUI integration for your database applications. + + \o \image xml-examples.png XML + \o + XML parsing and handling is supported through SAX and DOM compliant APIs + as well as streaming classes. + + The XQuery/XPath and XML Schema engines in the QtXmlPatterns modules + provide classes for querying XML files and custom data models. + + \row + \o{2,1} \l{Qt Designer Examples}{\bold{Qt Designer}} + \o{2,1} \l{UiTools Examples}{\bold UiTools} + \row + \o \image designer-examples.png Designer + \o + Qt Designer is a capable graphical user interface designer that lets you + create and configure forms without writing code. GUIs created with + Qt Designer can be compiled into an application or created at run-time. + + \o \image uitools-examples.png UiTools + \o + + \row + \o{2,1} \l{Qt Linguist Examples}{\bold{Qt Linguist}} + \o{2,1} \l{Qt Script Examples}{\bold{Qt Script}} + \row + \o \image linguist-examples.png QtLinguist + \o + Internationalization is a core feature of Qt. + + \o \image qtscript-examples.png + \o + Qt is provided with a powerful embedded scripting environment through the QtScript + classes. + + \row + \o{2,1} \l{WebKit Examples}{\bold WebKit} + \o{2,1} \l{Help System Examples}{\bold{Help System}} + \row + \o \image webkit-examples.png + \o + Qt provides an integrated Web browser component based on WebKit, the popular + open source browser engine. + + \o \image assistant-examples.png HelpSystem + \o + Support for interactive help is provided by the Qt Assistant application. + Developers can take advantages of the facilities it offers to display + specially-prepared documentation to users of their applications. + + \row + \o{2,1} \l{State Machine Examples}{\bold{State Machine}} + \o{2,1} \l{Animation Framework Examples}{\bold{Animation Framework}} + \row + \o \image statemachine-examples.png + \o + Qt provides a powerful hierarchical finite state machine through the Qt State + Machine classes. + + \o \image animation-examples.png + \o + + \row + \o{2,1} \l{Qt for Embedded Linux Examples}{\bold{Qt for Embedded Linux}} + \o{2,1} \l{ActiveQt Examples}{\bold ActiveQt} + \row + \o \image qt-embedded-examples.png + \o + Systems with limited resources, specialized hardware, and small + screens require special attention. + + \o \image activeqt-examples.png ActiveQt + \o + + \row + \o{2,1} \l{D-Bus Examples}{\bold{D-Bus}} + \o{2,1} \l{Qt Quarterly}{\bold{Qt Quarterly}} + \row + \o \image dbus-examples.png D-Bus + \o + + \o \image qq-thumbnail.png QtQuarterly + \o + One more valuable source for examples and explanations of Qt + features is the archive of the \l {Qt Quarterly}. + + \endtable + +\omit + In the list below, examples marked with an asterisk (*) are fully + documented. Eventually, all the examples will be fully documented, + but sometimes we include an example before we have time to write + about it. +\endomit +*/ + +/*! + \page examples-widgets.html + \title Widgets Examples + + \contentspage Qt Examples + \nextpage Dialog Examples + + \image widget-examples.png + + Qt comes with a large range of standard widgets that users of modern + applications have come to expect. + + You can also develop your own custom widgets and controls, and use them + alongside standard widgets. + + It is even possible to provide custom styles and themes for widgets that can + be used to change the appearance of standard widgets and appropriately + written custom widgets. + + \list + \o \l{widgets/analogclock}{Analog Clock}\raisedaster + \o \l{widgets/calculator}{Calculator}\raisedaster + \o \l{widgets/calendarwidget}{Calendar Widget}\raisedaster + \o \l{widgets/charactermap}{Character Map}\raisedaster + \o \l{widgets/codeeditor}{Code Editor}\raisedaster + \o \l{widgets/digitalclock}{Digital Clock}\raisedaster + \o \l{widgets/groupbox}{Group Box}\raisedaster + \o \l{widgets/icons}{Icons}\raisedaster + \o \l{widgets/imageviewer}{Image Viewer}\raisedaster + \o \l{widgets/lineedits}{Line Edits}\raisedaster + \o \l{widgets/movie}{Movie} + \o \l{widgets/scribble}{Scribble}\raisedaster + \o \l{widgets/shapedclock}{Shaped Clock}\raisedaster + \o \l{widgets/sliders}{Sliders}\raisedaster + \o \l{widgets/spinboxes}{Spin Boxes}\raisedaster + \o \l{widgets/styles}{Styles}\raisedaster + \o \l{widgets/stylesheet}{Style Sheet}\raisedaster + \o \l{widgets/tablet}{Tablet}\raisedaster + \o \l{widgets/tetrix}{Tetrix}\raisedaster + \o \l{widgets/tooltips}{Tooltips}\raisedaster + \o \l{widgets/wiggly}{Wiggly}\raisedaster + \o \l{widgets/windowflags}{Window Flags}\raisedaster + \endlist +*/ + +/*! + \page examples-dialogs.html + \title Dialog Examples + + \previouspage Widgets Examples + \contentspage Qt Examples + \nextpage Main Window Examples + + \image dialog-examples.png + + Qt includes standard dialogs for many common operations, such as file + selection, printing, and color selection. + + Custom dialogs can also be created for specialized modal or modeless + interactions with users. + + \list + \o \l{dialogs/classwizard}{Class Wizard}\raisedaster + \o \l{dialogs/configdialog}{Config Dialog} + \o \l{dialogs/extension}{Extension}\raisedaster + \o \l{dialogs/findfiles}{Find Files}\raisedaster + \o \l{dialogs/licensewizard}{License Wizard}\raisedaster + \o \l{dialogs/standarddialogs}{Standard Dialogs} + \o \l{dialogs/tabdialog}{Tab Dialog}\raisedaster + \o \l{dialogs/trivialwizard}{Trivial Wizard} + \endlist +*/ + +/*! + \page examples-mainwindow.html + \title Main Window Examples + + \previouspage Dialog Examples + \contentspage Qt Examples + \nextpage Layout Examples + + \image mainwindow-examples.png + + All the standard features of application main windows are provided by Qt. + + Main windows can have pull down menus, tool bars, and dock windows. These + separate forms of user input are unified in an integrated action system that + also supports keyboard shortcuts and accelerator keys in menu items. + + \list + \o \l{mainwindows/application}{Application}\raisedaster + \o \l{mainwindows/dockwidgets}{Dock Widgets}\raisedaster + \o \l{mainwindows/mdi}{MDI} + \o \l{mainwindows/menus}{Menus}\raisedaster + \o \l{mainwindows/recentfiles}{Recent Files} + \o \l{mainwindows/sdi}{SDI} + \endlist +*/ + +/*! + \page examples-layouts.html + \title Layout Examples + + \previouspage Main Window Examples + \contentspage Qt Examples + \nextpage Item Views Examples + + \image layout-examples.png + + Qt uses a layout-based approach to widget management. Widgets are arranged in + the optimal positions in windows based on simple layout rules, leading to a + consistent look and feel. + + Custom layouts can be used to provide more control over the positions and + sizes of child widgets. + + \list + \o \l{layouts/basiclayouts}{Basic Layouts}\raisedaster + \o \l{layouts/borderlayout}{Border Layout} + \o \l{layouts/dynamiclayouts}{Dynamic Layouts} + \o \l{layouts/flowlayout}{Flow Layout} + \endlist +*/ + +/*! + \page examples-itemviews.html + \title Item Views Examples + + \previouspage Layout Examples + \contentspage Qt Examples + \nextpage Graphics View Examples + + \image itemview-examples.png + + Item views are widgets that typically display data sets. Qt 4's model/view + framework lets you handle large data sets by separating the underlying data + from the way it is represented to the user, and provides support for + customized rendering through the use of delegates. + + \list + \o \l{itemviews/addressbook}{Address Book}\raisedaster + \o \l{itemviews/basicsortfiltermodel}{Basic Sort/Filter Model} + \o \l{itemviews/chart}{Chart} + \o \l{itemviews/coloreditorfactory}{Color Editor Factory}\raisedaster + \o \l{itemviews/combowidgetmapper}{Combo Widget Mapper}\raisedaster + \o \l{itemviews/customsortfiltermodel}{Custom Sort/Filter Model}\raisedaster + \o \l{itemviews/dirview}{Dir View} + \o \l{itemviews/editabletreemodel}{Editable Tree Model}\raisedaster + \o \l{itemviews/fetchmore}{Fetch More}\raisedaster + \o \l{itemviews/frozencolumn}{Frozen Column}\raisedaster + \o \l{itemviews/pixelator}{Pixelator}\raisedaster + \o \l{itemviews/puzzle}{Puzzle} + \o \l{itemviews/simpledommodel}{Simple DOM Model}\raisedaster + \o \l{itemviews/simpletreemodel}{Simple Tree Model}\raisedaster + \o \l{itemviews/simplewidgetmapper}{Simple Widget Mapper}\raisedaster + \o \l{itemviews/spinboxdelegate}{Spin Box Delegate}\raisedaster + \o \l{itemviews/stardelegate}{Star Delegate}\raisedaster + \endlist +*/ + +/*! + \page examples-graphicsview.html + \title Graphics View Examples + + \previouspage Item Views Examples + \contentspage Qt Examples + \nextpage Painting Examples + + \image graphicsview-examples.png + + Qt is provided with a comprehensive canvas through the GraphicsView + classes. + + These examples demonstrate the fundamental aspects of canvas programming + with Qt. + + \list + \o \l{graphicsview/collidingmice}{Colliding Mice}\raisedaster + \o \l{graphicsview/diagramscene}{Diagram Scene}\raisedaster + \o \l{graphicsview/dragdroprobot}{Drag and Drop Robot} + \o \l{graphicsview/elasticnodes}{Elastic Nodes} + \o \l{graphicsview/portedasteroids}{Ported Asteroids} + \o \l{graphicsview/portedcanvas}{Ported Canvas} + \endlist +*/ + +/*! + \page examples-painting.html + \title Painting Examples + + \previouspage Graphics View Examples + \contentspage Qt Examples + \nextpage Rich Text Examples + + \image painting-examples.png + + Qt's painting system is able to render vector graphics, images, and outline + font-based text with sub-pixel accuracy accuracy using anti-aliasing to + improve rendering quality. + + These examples show the most common techniques that are used when painting + with Qt, from basic concepts such as drawing simple primitives to the use of + transformations. + + \list + \o \l{painting/basicdrawing}{Basic Drawing}\raisedaster + \o \l{painting/concentriccircles}{Concentric Circles}\raisedaster + \o \l{painting/fontsampler}{Font Sampler} + \o \l{painting/imagecomposition}{Image Composition}\raisedaster + \o \l{painting/painterpaths}{Painter Paths}\raisedaster + \o \l{painting/svggenerator}{SVG Generator}\raisedaster + \o \l{painting/svgviewer}{SVG Viewer} + \o \l{painting/transformations}{Transformations}\raisedaster + \endlist +*/ + +/*! + \page examples-richtext.html + \title Rich Text Examples + + \previouspage Painting Examples + \contentspage Qt Examples + \nextpage Desktop Examples + + \image richtext-examples.png + + Qt provides powerful document-oriented rich text engine that supports Unicode + and right-to-left scripts. Documents can be manipulated using a cursor-based + API, and their contents can be imported and exported as both HTML and in a + custom XML format. + + \list + \o \l{richtext/calendar}{Calendar}\raisedaster + \o \l{richtext/orderform}{Order Form}\raisedaster + \o \l{richtext/syntaxhighlighter}{Syntax Highlighter}\raisedaster + \o \l{richtext/textobject}{Text Object}\raisedaster + \endlist +*/ + +/*! + \page examples-desktop.html + \title Desktop Examples + + \previouspage Rich Text Examples + \contentspage Qt Examples + \nextpage Drag and Drop Examples + + \image desktop-examples.png + + Qt provides features to enable applications to integrate with the user's + preferred desktop environment. + + Features such as system tray icons, access to the desktop widget, and + support for desktop services can be used to improve the appearance of + applications and take advantage of underlying desktop facilities. + + \list + \o \l{desktop/screenshot}{Screenshot}\raisedaster + \o \l{desktop/systray}{System Tray}\raisedaster + \endlist +*/ + +/*! + \page examples-draganddrop.html + \title Drag and Drop Examples + + \previouspage Desktop Examples + \contentspage Qt Examples + \nextpage Threading and Concurrent Programming Examples + + \image draganddrop-examples.png + + Qt supports native drag and drop on all platforms via an extensible + MIME-based system that enables applications to send data to each other in the + most appropriate formats. + + Drag and drop can also be implemented for internal use by applications. + + \list + \o \l{draganddrop/delayedencoding}{Delayed Encoding}\raisedaster + \o \l{draganddrop/draggableicons}{Draggable Icons} + \o \l{draganddrop/draggabletext}{Draggable Text} + \o \l{draganddrop/dropsite}{Drop Site} + \o \l{draganddrop/fridgemagnets}{Fridge Magnets}\raisedaster + \o \l{draganddrop/puzzle}{Drag and Drop Puzzle} + \endlist +*/ + +/*! + \page examples-threadandconcurrent.html + \title Threading and Concurrent Programming Examples + + \previouspage Drag and Drop Examples + \contentspage Qt Examples + \nextpage Tools Examples + + \image thread-examples.png + + Qt 4 makes it easier than ever to write multithreaded applications. More + classes have been made usable from non-GUI threads, and the signals and slots + mechanism can now be used to communicate between threads. + + Additionally, it is now possible to move objects between threads. + + \list + \o \l{threads/queuedcustomtype}{Queued Custom Type}\raisedaster + \o \l{threads/mandelbrot}{Mandelbrot}\raisedaster + \o \l{threads/semaphores}{Semaphores}\raisedaster + \o \l{threads/waitconditions}{Wait Conditions}\raisedaster + \endlist + + The QtConcurrent namespace includes a collection of classes and functions + for straightforward concurrent programming. + + These examples show how to apply the basic techniques of concurrent + programming to simple problems. + + \list + \o \l{qtconcurrent/imagescaling}{QtConcurrent Asynchronous Image Scaling} + \o \l{qtconcurrent/map}{QtConcurrent Map} + \o \l{qtconcurrent/progressdialog}{QtConcurrent Progress Dialog} + \o \l{qtconcurrent/runfunction}{QtConcurrent Run Function} + \o \l{qtconcurrent/wordcount}{QtConcurrent Word Count} + \endlist +*/ + +/*! + \page examples.tools.html + \title Tools Examples + + \previouspage Threading and Concurrent Programming Examples + \contentspage Qt Examples + \nextpage Network Examples + + \image tool-examples.png + + Qt is equipped with a range of capable tool classes, from containers and + iterators to classes for string handling and manipulation. + + Other classes provide application infrastructure support, handling plugin + loading and managing configuration files. + + \list + \o \l{tools/codecs}{Codecs} + \o \l{tools/completer}{Completer}\raisedaster + \o \l{tools/customcompleter}{Custom Completer}\raisedaster + \o \l{tools/customtype}{Custom Type}\raisedaster + \o \l{tools/customtypesending}{Custom Type Sending}\raisedaster + \o \l{tools/echoplugin}{Echo Plugin}\raisedaster + \o \l{tools/i18n}{I18N} + \o \l{tools/plugandpaint}{Plug & Paint}\raisedaster + \o Plug & Paint Plugins: \l{tools/plugandpaintplugins/basictools}{Basic Tools}\raisedaster + and \l{tools/plugandpaintplugins/extrafilters}{Extra Filters}\raisedaster + \o \l{tools/regexp}{RegExp} + \o \l{tools/settingseditor}{Settings Editor} + \o \l{tools/styleplugin}{Style Plugin}\raisedaster + \o \l{tools/treemodelcompleter}{Tree Model Completer}\raisedaster + \o \l{tools/undoframework}{Undo Framework}\raisedaster + \endlist +*/ + +/*! + \page examples-network.html + \title Network Examples + + \previouspage Tools Examples + \contentspage Qt Examples + \nextpage Inter-Process Communication Examples + + \image network-examples.png + + Qt is provided with an extensive set of network classes to support both + client-based and server side network programming. + + These examples demonstrate the fundamental aspects of network programming + with Qt. + + \list + \o \l{network/blockingfortuneclient}{Blocking Fortune Client}\raisedaster + \o \l{network/broadcastreceiver}{Broadcast Receiver} + \o \l{network/broadcastsender}{Broadcast Sender} + \o \l{network/network-chat}{Network Chat} + \o \l{network/fortuneclient}{Fortune Client}\raisedaster + \o \l{network/fortuneserver}{Fortune Server}\raisedaster + \o \l{network/ftp}{FTP}\raisedaster + \o \l{network/http}{HTTP} + \o \l{network/loopback}{Loopback} + \o \l{network/threadedfortuneserver}{Threaded Fortune Server}\raisedaster + \o \l{network/torrent}{Torrent} + \o \l{network/googlesuggest}{Google Suggest} + \endlist +*/ + +/*! + \page examples-ipc.html + \title Inter-Process Communication Examples + + \previouspage Network Examples + \contentspage Qt Examples + \nextpage OpenGL Examples + + \image ipc-examples.png + + \list + \o \l{ipc/localfortuneclient}{Local Fortune Client}\raisedaster + \o \l{ipc/localfortuneserver}{Local Fortune Server}\raisedaster + \o \l{ipc/sharedmemory}{Shared Memory}\raisedaster + \endlist +*/ + +/*! + \page examples-opengl.html + \title OpenGL Examples + + \previouspage Inter-Process Communication Examples + \contentspage Qt Examples + \nextpage Multimedia Examples + + \image opengl-examples.png + + Qt provides support for integration with OpenGL implementations on all + platforms, giving developers the opportunity to display hardware accelerated + 3D graphics alongside a more conventional user interface. + + These examples demonstrate the basic techniques used to take advantage of + OpenGL in Qt applications. + + \list + \o \l{opengl/2dpainting}{2D Painting}\raisedaster + \o \l{opengl/framebufferobject}{Framebuffer Object} + \o \l{opengl/framebufferobject2}{Framebuffer Object 2} + \o \l{opengl/grabber}{Grabber} + \o \l{opengl/hellogl}{Hello GL}\raisedaster + \o \l{opengl/overpainting}{Overpainting}\raisedaster + \o \l{opengl/pbuffers}{Pixel Buffers} + \o \l{opengl/pbuffers2}{Pixel Buffers 2} + \o \l{opengl/samplebuffers}{Sample Buffers} + \o \l{opengl/textures}{Textures} + \endlist +*/ + +/*! + \page examples-multimedia.html + \title Multimedia Examples + + \previouspage OpenGL Examples + \contentspage Qt Examples + \nextpage SQL Examples + + \image phonon-examples.png + + \section1 Multimedia + + Qt provides low-level audio support on linux,windows and mac platforms by default and + an audio plugin API to allow developers to implement there own audio support for + custom devices and platforms. + + These examples demonstrate the basic techniques used to take advantage of + Audio API in Qt applications. + + \list + \o \l{multimedia/audio/audiodevices}{Audio Devices} + \o \l{multimedia/audio/audiooutput}{Audio Output} + \o \l{multimedia/audio/audioinput}{Audio Input} + \endlist + + \section1 Phonon + + The Phonon Multimedia Framework brings multimedia support to Qt applications. + + The examples and demonstrations provided show how to play music and movies + using the Phonon API. + + \list + \o \l{phonon/capabilities}{Capabilities}\raisedaster + \o \l{phonon/musicplayer}{Music Player}\raisedaster + \endlist +*/ + +/*! + \page examples-sql.html + \title SQL Examples + + \previouspage Multimedia Examples + \contentspage Qt Examples + \nextpage XML Examples + + \image sql-examples.png + + Qt provides extensive database interoperability, with support for products + from both open source and proprietary vendors. + + SQL support is integrated with Qt's model/view architecture, making it easier + to provide GUI integration for your database applications. + + \list + \o \l{sql/cachedtable}{Cached Table}\raisedaster + \o \l{sql/drilldown}{Drill Down}\raisedaster + \o \l{sql/querymodel}{Query Model} + \o \l{sql/relationaltablemodel}{Relational Table Model} + \o \l{sql/tablemodel}{Table Model} + \o \l{sql/sqlwidgetmapper}{SQL Widget Mapper}\raisedaster + \endlist +*/ + + +/*! + \page examples-xml.html + \title XML Examples + + \previouspage SQL Examples + \contentspage Qt Examples + \nextpage Qt Designer Examples + + \image xml-examples.png XML + + XML parsing and handling is supported through SAX and DOM compliant APIs + as well as streaming classes. + + \list + \o \l{xml/dombookmarks}{DOM Bookmarks} + \o \l{xml/saxbookmarks}{SAX Bookmarks} + \o \l{xml/streambookmarks}{QXmlStream Bookmarks}\raisedaster + \o \l{xml/rsslisting}{RSS-Listing} + \o \l{xml/xmlstreamlint}{XML Stream Lint Example}\raisedaster + \endlist + + The XQuery/XPath and XML Schema engines in the QtXmlPatterns modules + provide classes for querying XML files and custom data models. + + \list + \o \l{xmlpatterns/recipes}{Recipes} + \o \l{xmlpatterns/filetree}{File System Example} + \o \l{xmlpatterns/qobjectxmlmodel}{QObject XML Model Example} + \o \l{xmlpatterns/xquery/globalVariables}{C++ Source Code Analyzer Example} + \o \l{xmlpatterns/trafficinfo}{Traffic Info}\raisedaster + \o \l{xmlpatterns/schema}{XML Schema Validation}\raisedaster + \endlist +*/ + +/*! + \page examples-designer.html + \title Qt Designer Examples + + \previouspage XML Examples + \contentspage Qt Examples + \nextpage UiTools Examples + + \image designer-examples.png QtDesigner + + Qt Designer is a capable graphical user interface designer that lets you + create and configure forms without writing code. GUIs created with + Qt Designer can be compiled into an application or created at run-time. + + \list + \o \l{designer/calculatorbuilder}{Calculator Builder}\raisedaster + \o \l{designer/calculatorform}{Calculator Form}\raisedaster + \o \l{designer/customwidgetplugin}{Custom Widget Plugin}\raisedaster + \o \l{designer/taskmenuextension}{Task Menu Extension}\raisedaster + \o \l{designer/containerextension}{Container Extension}\raisedaster + \o \l{designer/worldtimeclockbuilder}{World Time Clock Builder}\raisedaster + \o \l{designer/worldtimeclockplugin}{World Time Clock Plugin}\raisedaster + \endlist +*/ + +/*! + \page examples-uitools.html + \title UiTools Examples + + \previouspage Qt Designer Examples + \contentspage Qt Examples + \nextpage Qt Linguist Examples + + \image uitools-examples.png UiTools + + \list + \o \l{uitools/multipleinheritance}{Multiple Inheritance}\raisedaster + \o \l{uitools/textfinder}{Text Finder}\raisedaster + \endlist +*/ + +/*! + \page examples-linguist.html + \title Qt Linguist Examples + + \previouspage UiTools Examples + \contentspage Qt Examples + \nextpage Qt Script Examples + + \image linguist-examples.png + + Internationalization is a core feature of Qt. These examples show how to + access translation and localization facilities at run-time. + + \list + \o \l{linguist/hellotr}{Hello tr()}\raisedaster + \o \l{linguist/arrowpad}{Arrow Pad}\raisedaster + \o \l{linguist/trollprint}{Troll Print}\raisedaster + \endlist +*/ + +/*! + \page examples-script.html + \title Qt Script Examples + + \previouspage Qt Linguist Examples + \contentspage Qt Examples + \nextpage WebKit Examples + + \image qtscript-examples.png QtScript + + Qt is provided with a powerful embedded scripting environment through the QtScript + classes. + + These examples demonstrate the fundamental aspects of scripting applications + with Qt. + + \list + \o \l{script/calculator}{Calculator}\raisedaster + \o \l{script/context2d}{Context2D}\raisedaster + \o \l{script/defaultprototypes}{Default Prototypes}\raisedaster + \o \l{script/helloscript}{Hello Script}\raisedaster + \o \l{script/qstetrix}{Qt Script Tetrix}\raisedaster + \o \l{script/customclass}{Custom Script Class}\raisedaster + \endlist +*/ + +/*! + \page examples-webkit.html + \title WebKit Examples + + \previouspage Qt Script Examples + \contentspage Qt Examples + \nextpage Help System Examples + + \image webkit-examples.png WebKit + + Qt provides an integrated Web browser component based on WebKit, the popular + open source browser engine. + + These examples and demonstrations show a range of different uses for WebKit, + from displaying Web pages within a Qt user interface to an implementation of + a basic function Web browser. + + \list + \o \l{webkit/previewer}{Previewer}\raisedaster + \o \l{webkit/formextractor}{Form Extractor} + \o \l{webkit/googlechat}{Google Chat} + \o \l{webkit/fancybrowser}{Fancy Browser} + \endlist +*/ + +/*! + \page examples-helpsystem.html + \title Help System Examples + + \previouspage WebKit Examples + \contentspage Qt Examples + \nextpage State Machine Examples + + \image assistant-examples.png HelpSystem + + Support for interactive help is provided by the Qt Assistant application. + Developers can take advantages of the facilities it offers to display + specially-prepared documentation to users of their applications. + + \list + \o \l{help/simpletextviewer}{Simple Text Viewer}\raisedaster + \endlist +*/ + +/*! + \page examples-statemachine.html + \title State Machine Examples + + \previouspage Help System Examples + \contentspage Qt Examples + \nextpage Animation Framework Examples + + \image statemachine-examples.png StateMachine + + Qt provides a powerful hierarchical finite state machine through the Qt State + Machine classes. + + These examples demonstrate the fundamental aspects of implementing + Statecharts with Qt. + + \list + \o \l{statemachine/eventtransitions}{Event Transitions}\raisedaster + \o \l{statemachine/factorial}{Factorial States}\raisedaster + \o \l{statemachine/pingpong}{Ping Pong States}\raisedaster + \o \l{statemachine/rogue}{Rogue}\raisedaster + \o \l{statemachine/trafficlight}{Traffic Light}\raisedaster + \o \l{statemachine/twowaybutton}{Two-way Button}\raisedaster + \endlist +*/ + +/*! + \page examples-animation.html + \title Animation Framework Examples + + \previouspage State Machine Examples + \contentspage Qt Examples + \nextpage Qt for Embedded Linux Examples + + \image animation-examples.png Animation + + \list + \o \l{animation/moveblocks}{Move Blocks}\raisedaster + \o \l{animation/stickman}{Stick man}\raisedaster + \endlist +*/ + +/*! + \page examples-embeddedlinux.html + \title Qt for Embedded Linux Examples + + \previouspage Animation Framework Examples + \contentspage Qt Examples + \nextpage ActiveQt Examples + + \image qt-embedded-examples.png QtEmbedded + + These examples show how to take advantage of features specifically designed + for use on systems with limited resources, specialized hardware, and small + screens. + + \list + \o \l{qws/svgalib}{Accelerated Graphics Driver}\raisedaster + \o \l{qws/dbscreen}{Double Buffered Graphics Driver}\raisedaster + \o \l{qws/mousecalibration}{Mouse Calibration}\raisedaster + \o \l{qws/ahigl}{OpenGL for Embedded Systems}\raisedaster + \o \l{qws/simpledecoration}{Simple Decoration}\raisedaster + \endlist +*/ + +/*! + \page examples-activeqt.html + \title ActiveQt Examples + + \previouspage Qt for Embedded Linux Examples + \contentspage Qt Examples + \nextpage D-Bus Examples + + \image activeqt-examples.png ActiveQt + + \list + \o \l{activeqt/comapp}{COM App}\raisedaster + \o \l{Dot Net Example (ActiveQt)}{Dot Net}\raisedaster + \o \l{activeqt/hierarchy}{Hierarchy}\raisedaster + \o \l{activeqt/menus}{Menus}\raisedaster + \o \l{activeqt/multiple}{Multiple}\raisedaster + \o \l{activeqt/opengl}{OpenGL}\raisedaster + \o \l{activeqt/qutlook}{Qutlook}\raisedaster + \o \l{activeqt/simple}{Simple}\raisedaster + \o \l{activeqt/webbrowser}{Web Browser}\raisedaster + \o \l{activeqt/wrapper}{Wrapper}\raisedaster + \endlist +*/ + +/*! + \page examples-dbus.html + \title D-Bus Examples + + \previouspage ActiveQt Examples + \contentspage Qt Examples + \nextpage Qt Quarterly + + \list + \o \l{dbus/dbus-chat}{Chat} + \o \l{dbus/complexpingpong}{Complex Ping Pong} + \o \l{dbus/listnames}{List Names} + \o \l{dbus/pingpong}{Ping Pong} + \o \l{dbus/remotecontrolledcar}{Remote Controlled Car} + \endlist +*/ diff --git a/doc/src/how-to-learn-qt.qdoc b/doc/src/getting-started/how-to-learn-qt.qdoc index ee23509..2a1e383 100644 --- a/doc/src/how-to-learn-qt.qdoc +++ b/doc/src/getting-started/how-to-learn-qt.qdoc @@ -41,9 +41,10 @@ /*! \page how-to-learn-qt.html - \brief Links to guides and resources for learning Qt. \title How to Learn Qt - \ingroup howto + \brief Links to guides and resources for learning Qt. + + \nextpage Tutorials We assume that you already know C++ and will be using it for Qt development. See the \l{Qt website} for more information about @@ -79,10 +80,12 @@ common with your projects. You can also read Qt's source code since this is supplied. - \table - \row \o \inlineimage qtdemo-small.png - \o \bold{Getting an Overview} - + \table 50% + \header + \o {2,1} Getting an Overview + \row + \o \inlineimage qtdemo-small.png + \o If you run the \l{Examples and Demos Launcher}, you'll see many of Qt's widgets in action. diff --git a/doc/src/installation.qdoc b/doc/src/getting-started/installation.qdoc index 139a3ce..10791d8 100644 --- a/doc/src/installation.qdoc +++ b/doc/src/getting-started/installation.qdoc @@ -46,8 +46,6 @@ /*! \group installation \title Installation -\ingroup buildsystem -\ingroup topics \brief Installing Qt on supported platforms. The installation procedure is different on each Qt platform. @@ -677,6 +675,20 @@ in the \l{Qt for Windows CE Requirements} document. may cause others to be automatically installed. Other distributions may provide system packages with similar names. + \section1 OpenGL Dependencies + + The configure script will autodetect if OpenGL headers and libraries are + installed on your system, and if so, it will include the QtOpenGL module + in the Qt library. + + If your OpenGL headers or libraries are placed in a non-standard directory, + you may need to change the \c QMAKE_INCDIR_OPENGL and/or + \c QMAKE_LIBDIR_OPENGL in the config file for your system. + + The QGL documentation assumes that you are familiar with OpenGL + programming. If you're new to the subject a good starting point is + \l{http://www.opengl.org/}. + \section1 Phonon Dependencies As described in the \l{Phonon Overview}, Phonon uses the GStreamer multimedia diff --git a/doc/src/known-issues.qdoc b/doc/src/getting-started/known-issues.qdoc index 87955bd..41bdcdf 100644 --- a/doc/src/known-issues.qdoc +++ b/doc/src/getting-started/known-issues.qdoc @@ -42,7 +42,7 @@ /*! \page known-issues.html \title Known Issues in %VERSION% - \ingroup platform-notes + \ingroup platform-specific \brief A summary of known issues in Qt %VERSION% at the time of release. An up-to-date list of known issues with Qt %VERSION% can be found via the @@ -133,6 +133,7 @@ \endlist + \section2 Mac OS X Software Support \list @@ -140,4 +141,34 @@ window will cause it to flash. This behavior has been reported to Apple (bug number 5827676). \endlist + + + \section2 Installing source packages on Unix systems + + \list + \o If you download a Zip source package, you will need to convert + Windows-style line endings (CR/LF) to Unix-style line-endings (LF) when + you uncompress the package. To do this, give the "-a" option when you + run the "unzip' command. + + If you fail to supply the "-a" option when unzipping the package, you + will see the following error message when you attempt to execute the + configure command: + "bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory" + \endlist + + + \section2 Running evaluation packages on Windows XP + + \list + \o If running the qt-win-eval-%VERSION%-vs2008.exe package on a Windows XP + system, you may encounter the following error message: + "The application failed to start because the application configuration + is incorrect. Reinstalling the application may fix this problem.". + + This error occurs because the version of the CRT component on the + system is incorrect. Visual Studio 2008 requires CRT90 while Windows + XP comes with CRT80. To solve this problem, please install the 2008 CRT + redistributable package from Microsoft. + \endlist */ diff --git a/doc/src/getting-started/tutorials.qdoc b/doc/src/getting-started/tutorials.qdoc new file mode 100644 index 0000000..525b6e4 --- /dev/null +++ b/doc/src/getting-started/tutorials.qdoc @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page tutorials.html + \title Tutorials + + \contentspage How to Learn Qt + \nextpage Qt Examples + + \brief Tutorials, guides and overviews to help you learn Qt. + + \nextpage Qt Examples + + A collection of tutorials and "walkthrough" guides are provided with Qt to + help new users get started with Qt development. These documents cover a + range of topics, from basic use of widgets to step-by-step tutorials that + show how an application is put together. + + \table + \row + \o{2,1} \l{Widgets Tutorial}{\bold Widgets} + \o{2,1} \l{Address Book Tutorial}{\bold {Address Book}} + \row + \o \image widget-examples.png Widgets + \o + A beginner's guide to getting started with widgets and layouts to create + GUI applications. + + \o \image addressbook-tutorial.png AddressBook + \o + A seven part guide to creating a fully-functioning address book + application. This tutorial is also available with + \l{Tutoriel "Carnet d'adresses"}{French explanation}. + + \row + \o{2,1} \l{A Quick Start to Qt Designer}{\bold{Qt Designer}} + \o{2,1} \l{Qt Linguist Manual: Programmers#Tutorials}{\bold {Qt Linguist}} + \row + \o \image designer-examples.png QtDesigner + \o + A quick guide through \QD showing the basic steps to create a + form with this interactive tool. + + \o \image linguist-examples.png QtLinguist + \o + A guided tour through the translations process, explaining the + tools provided for developers, translators and release managers. + + \row + \o{2,1} \l{QTestLib Tutorial}{\bold QTestLib} + \o{2,1} \l{qmake Tutorial}{\bold qmake} + \row + \o{2,1} + This tutorial gives a short introduction to how to use some of the + features of Qt's unit-testing framework, QTestLib. It is divided into + four chapters. + + \o{2,1} + This tutorial teaches you how to use \c qmake. We recommend that + you read the \l{qmake Manual}{qmake user guide} after completing + this tutorial. + + \endtable +*/ diff --git a/doc/src/groups.qdoc b/doc/src/groups.qdoc deleted file mode 100644 index 673eff5..0000000 --- a/doc/src/groups.qdoc +++ /dev/null @@ -1,487 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \group advanced - \title Advanced Widgets - \ingroup groups - - \brief Advanced GUI widgets such as tab widgets and progress bars. - - These classes provide more complex user interface widgets (controls). - -*/ - -/*! - \group animation - \ingroup groups - - \title Animation Framework - \brief Classes for animations, states and transitions. - - These classes provide a framework for creating both simple and complex - animations. \l{The Animation Framework} also provides states and animated - transitions, making it easy to create animated stateful forms. -*/ - -/*! - \group abstractwidgets - \title Abstract Widget Classes - \ingroup groups - - \brief Abstract widget classes usable through subclassing. - - These classes are abstract widgets; they are generally not usable in - themselves, but provide functionality that can be used by inheriting - these classes. - -*/ - -/*! - \group accessibility - \title Accessibility Classes - \ingroup groups - \ingroup topics - - \brief Classes that provide support for accessibility. - - Accessible applications are able to be used by users who cannot use - conventional means of interaction. These classes provide support for - accessible applications. - -*/ - -/*! - \group appearance - \title Widget Appearance and Style - \ingroup groups - - \brief Appearance customization with styles, fonts, colors etc. - - These classes are used to customize an application's appearance and - style. - -*/ - -/*! - \group application - \title Main Window and Related Classes - \ingroup groups - - \brief Everything you need for a typical modern main application window, - including menus, toolbars, workspace, etc. - - These classes provide everything you need for a typical modern main - application window, like the main window itself, menu and tool bars, - a status bar, etc. - -*/ - - -/*! - \group basicwidgets - \title Basic Widgets - \ingroup groups - - \brief Basic GUI widgets such as buttons, comboboxes and scroll bars. - - These basic widgets (controls) are designed for direct use. - There are also some \l{Abstract Widget Classes} that are designed for - subclassing, and some more complex \l{Advanced Widgets}. - -*/ - - -/*! - \group database - \title Database Classes - \ingroup groups - - \brief Database related classes, e.g. for SQL databases. - - These classes provide access to SQL databases. -*/ - - -/*! - \group dialogs - \title Standard Dialog Classes - \ingroup groups - - \brief Ready-made dialogs for file, font, color selection and more. - - These classes are complex widgets, composed of simpler widgets; dialog - boxes, generally. -*/ - -/*! - \group desktop - \title Desktop Environment Classes - \ingroup groups - - \brief Classes for interacting with the user's desktop environment. - - These classes provide ways to interact with the user's desktop environment and - take advantage of common services. -*/ - -/*! - \group draganddrop - \title Drag And Drop Classes - \ingroup groups - - \brief Classes dealing with drag and drop and mime type encoding and decoding. - - These classes deal with drag and drop and the necessary mime type - encoding and decoding. See also \link dnd.html Drag and Drop with - Qt. \endlink -*/ - -/*! - \group environment - \title Environment Classes - \ingroup groups - - \brief Classes providing various global services such as event handling, - access to system settings and internationalization. - - These classes providing various global services to your application such as - event handling, access to system settings, internationalization, etc. - -*/ - -/*! - \group events - \title Event Classes - \ingroup groups - - \brief Classes used to create and handle events. - - These classes are used to create and handle events. - - For more information see the \link object.html Object model\endlink - and \link signalsandslots.html Signals and Slots\endlink. -*/ - -/*! - \group geomanagement - \title Layout Classes - \ingroup groups - - \brief Classes handling automatic resizing and moving of widgets, for - composing complex dialogs. - - These classes provide automatic geometry (layout) management of widgets. - -*/ - -/*! - \group graphicsview-api - \title Graphics View Classes - \ingroup groups - - \brief Classes in the Graphics View framework for interactive applications. - - These classes are provided by \l{The Graphics View Framework} for interactive - applications and are part of a larger collection of classes related to - \l{Multimedia, Graphics and Printing}. - - \note These classes are part of the \l{Open Source Versions of Qt} and - \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial users. -*/ - -/*! - \group helpsystem - \title Help System - \ingroup groups - - \brief Classes used to provide online-help for applications. - - \keyword help system - - These classes provide for all forms of online-help in your application, - with three levels of detail: - - \list 1 - \o Tool Tips and Status Bar message - flyweight help, extremely brief, - entirely integrated in the user interface, requiring little - or no user interaction to invoke. - \o What's This? - lightweight, but can be - a three-paragraph explanation. - \o Online Help - can encompass any amount of information, - but is typically slower to call up, somewhat separated - from the user's work, and often users feel that using online - help is a digression from their real task. - \endlist - -*/ - - -/*! - \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. -*/ - -/*! - \group misc - \title Miscellaneous Classes - \ingroup groups - - \brief Various other useful classes. - - These classes are useful classes not fitting into any other category. - -*/ - - -/*! - \group model-view - \title Model/View Classes - \ingroup groups - - \brief Classes that use the model/view design pattern. - - 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). See also - \link model-view-programming.html Model/View Programming\endlink. - -*/ - -/*! - \group multimedia - \title Multimedia, Graphics and Printing - \ingroup groups - - \brief Classes that provide support for graphics (2D, and with OpenGL, 3D), - image encoding, decoding, and manipulation, sound, animation, - printing, etc. - - These classes provide support for graphics (2D, and with OpenGL, 3D), - image encoding, decoding, and manipulation, sound, animation, printing - etc. - - See also this introduction to the \link coordsys.html Qt - coordinate system. \endlink - -*/ - -/*! - \group objectmodel - \title Object Model - \ingroup groups - - \brief The Qt GUI toolkit's underlying object model. - - These classes form the basis of the \l{Qt Object Model}. - -*/ - -/*! - \group organizers - \title Organizers - \ingroup groups - - \brief User interface organizers such as splitters, tab bars, button groups, etc. - - These classes are used to organize and group GUI primitives into more - complex applications or dialogs. - -*/ - - -/*! - \group plugins - \title Plugin Classes - \ingroup groups - - \brief Plugin related classes. - - These classes deal with shared libraries, (e.g. .so and DLL files), - and with Qt plugins. - - See the \link plugins-howto.html plugins documentation\endlink. - - See also the \l{ActiveQt framework} for Windows. - -*/ - -/*! - \group qws - \title Qt for Embedded Linux Classes - \ingroup groups - - \ingroup qt-embedded-linux - \brief Classes that are specific to Qt for Embedded Linux. - - These classes are relevant to \l{Qt for Embedded Linux} users. -*/ - -/*! - \group ssl - \title Secure Sockets Layer (SSL) Classes - \ingroup groups - - \brief Classes for secure communication over network sockets. - \keyword SSL - - The classes below provide support for secure network communication using - the Secure Sockets Layer (SSL) protocol, using the \l{OpenSSL Toolkit} to - perform encryption and protocol handling. - - See the \l{General Qt Requirements} page for information about the - versions of OpenSSL that are known to work with Qt. - - \note Due to import and export restrictions in some parts of the world, we - are unable to supply the OpenSSL Toolkit with Qt packages. Developers wishing - to use SSL communication in their deployed applications should either ensure - that their users have the appropriate libraries installed, or they should - consult a suitably qualified legal professional to ensure that applications - using code from the OpenSSL project are correctly certified for import - and export in relevant regions of the world. - - When the QtNetwork module is built with SSL support, the library is linked - against OpenSSL in a way that requires OpenSSL license compliance. -*/ - -/*! - \group text - \title Text Processing Classes - \ingroup groups - \ingroup text-processing - - \brief Classes for text processing. (See also \l{XML Classes}.) - - These classes are relevant to text processing. See also the - \l{Rich Text Processing} overview and the - \l{XML classes}. -*/ - -/*! - \group thread - \title Threading Classes - \ingroup groups - - \brief Classes that provide threading support. - - These classes are relevant to threaded applications. See - \l{Thread Support in Qt} for an overview of the features - Qt provides to help with multithreaded programming. -*/ - - -/*! - \group time - \title Date and Time Classes - \ingroup groups - - \brief Classes for handling date and time. - - These classes provide system-independent date and time abstractions. - -*/ - -/*! - \group tools - \title Non-GUI Classes - \ingroup groups - - \brief Collection classes such as list, queue, stack and string, along - with other classes that can be used without needing QApplication. - - The non-GUI classes are general-purpose collection and string classes - that may be used independently of the GUI classes. - - In particular, these classes do not depend on QApplication at all, - and so can be used in non-GUI programs. - -*/ - -/*! - \group xml-tools - \title XML Classes - \ingroup groups - - \brief Classes that support XML, via, for example DOM and SAX. - - These classes are relevant to XML users. -*/ - -/*! - \group script - \title Scripting Classes - \ingroup groups - \ingroup scripting - - \brief Qt Script-related classes and overviews. - - These classes are relevant to Qt Script users. -*/ - -/*! - \group scripttools - \title Script Tools - \ingroup groups - \ingroup scripting - - \brief Classes for managing and debugging scripts. - - These classes are relevant to developers who are working with Qt Script's - debugging features. -*/ - -/*! - \group statemachine - \ingroup groups - - \title State Machine Classes - \brief Classes for constructing and executing state graphs. - - These classes are provided by \l{The State Machine Framework} for creating - event-driven state machines. -*/ diff --git a/doc/src/accelerators.qdoc b/doc/src/howtos/accelerators.qdoc index 4376730..bb1b2d7 100644 --- a/doc/src/accelerators.qdoc +++ b/doc/src/howtos/accelerators.qdoc @@ -42,7 +42,8 @@ /*! \page accelerators.html \title Standard Accelerator Keys - \ingroup gui-programming + + \ingroup best-practices Applications invariably need to define accelerator keys for actions. Qt fully supports accelerators, for example with \l Q3Accel::shortcutKey(). diff --git a/doc/src/appicon.qdoc b/doc/src/howtos/appicon.qdoc index 901b854..a664ade 100644 --- a/doc/src/appicon.qdoc +++ b/doc/src/howtos/appicon.qdoc @@ -39,22 +39,11 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Qt Application Icon Usage Documentation. -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page appicon.html \title Setting the Application Icon - \ingroup gui-programming + + \ingroup best-practices The application icon, typically displayed in the top-left corner of an application's top-level windows, is set by calling the diff --git a/doc/src/custom-types.qdoc b/doc/src/howtos/custom-types.qdoc index aa7d386..997c8bc 100644 --- a/doc/src/custom-types.qdoc +++ b/doc/src/howtos/custom-types.qdoc @@ -42,9 +42,10 @@ /*! \page custom-types.html \title Creating Custom Qt Types - \ingroup architecture \brief How to create and register new types with Qt. + \ingroup best-practices + \tableofcontents \section1 Overview diff --git a/doc/src/guibooks.qdoc b/doc/src/howtos/guibooks.qdoc index 3e89738..0a7200e 100644 --- a/doc/src/guibooks.qdoc +++ b/doc/src/howtos/guibooks.qdoc @@ -41,9 +41,8 @@ /*! \page guibooks.html - \title Books about GUI Design - \ingroup gui-programming + \ingroup best-practices This is not a comprehensive list -- there are many other books worth buying. Here we mention just a few user interface books that don't diff --git a/doc/src/qtopenvg.qdoc b/doc/src/howtos/openvg.qdoc index 9f0df58..f2049ce 100644 --- a/doc/src/qtopenvg.qdoc +++ b/doc/src/howtos/openvg.qdoc @@ -40,28 +40,26 @@ ****************************************************************************/ /*! - \module QtOpenVG - \title QtOpenVG Module + \page openvg.html + \title OpenVG Rendering in Qt \since 4.6 - \contentspage Qt's Modules - \previouspage QtOpenGL - \nextpage QtScript - \ingroup modules + \ingroup best-practices - \brief The QtOpenVG module provides support classes for OpenVG painting. - - \tableofcontents + \brief Efficient rendering on embedded devices with OpenVG OpenVG is a standard API from the \l{http://www.khronos.org/openvg}{Khronos Group} for accelerated 2D vector graphics that is appearing in an increasing number of - embedded devices. + embedded devices. The QtOpenVG plugin provides support for OpenVG + painting. OpenVG is optimized for 2D vector operations, and closely matches - the functionality in QPainter. It can therefore be an excellent + the functionality in QPainter. It can therefore be an excellent substitute for the default raster-based QPaintEngine on hardware that supports OpenVG. + \tableofcontents + \section1 Building Qt with OpenVG support OpenVG support can be enabled by passing the \c{-openvg} option @@ -319,6 +317,6 @@ QPixmap, and will not be accelerated. This issue may be addressed in a future version of the engine. - ShivaVG support is highly experimental and limited to Qt/X11. It is + ShivaVG support is highly experimental and limited to Qt/X11. It is provided as an example of how to integrate a non-EGL engine. - */ +*/ diff --git a/doc/src/qtdesigner.qdoc b/doc/src/howtos/qtdesigner.qdoc index 00af297..ae84f93 100644 --- a/doc/src/qtdesigner.qdoc +++ b/doc/src/howtos/qtdesigner.qdoc @@ -40,33 +40,9 @@ ****************************************************************************/ /*! - \module QtDesigner - \title QtDesigner Module - \contentspage Qt's Modules - \previouspage Qt3Support - \nextpage QtUiTools - \ingroup modules - - \brief The QtDesigner module provides classes that allow you to - create your own custom widget plugins for Qt Designer, and classes - that enable you to access Qt Designer's components. - - In addition, the QFormBuilder class provides the possibility of - constructing user interfaces from UI files at run-time. - - To include the definitions of the module's classes, use the - following directive: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 0 - - To link against the module, add this line to your \c qmake .pro - file: - - \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 1 - - \note These classes are part of the \l{Open Source Versions of Qt} and - \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial - users. + \page qtdesigner-components.html + \title Creating and Using Components for Qt Designer + \ingroup best-practices \tableofcontents diff --git a/doc/src/howtos/restoring-geometry.qdoc b/doc/src/howtos/restoring-geometry.qdoc new file mode 100644 index 0000000..c9e6f4f --- /dev/null +++ b/doc/src/howtos/restoring-geometry.qdoc @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page restoring-geometry.html + \title Restoring a Window's Geometry + + \ingroup best-practices + + This document describes how to save and restore a window's + geometry using the geometry properties. On Windows, this is + basically storing the result of QWidget::geometry() and calling + QWidget::setGeometry() in the next session before calling + \l{QWidget::show()}{show()}. + + On X11, this won't work because an invisible window doesn't have + a frame yet. The window manager will decorate the window later. + When this happens, the window shifts towards the bottom/right + corner of the screen depending on the size of the decoration frame. + Although X provides a way to avoid this shift, most window managers + fail to implement this feature. + + Since version 4.2, Qt provides functions that saves and restores a + window's geometry and state for you. QWidget::saveGeometry() + saves the window geometry and maximized/fullscreen state, while + QWidget::restoreGeometry() restores it. The restore function also + checks if the restored geometry is outside the available screen + geometry, and modifies it as appropriate if it is. + + If those functions are not available or cannot be used, then a + workaround is to call \l{QWidget::setGeometry()}{setGeometry()} + after \l{QWidget::show()}{show()}. This has the two disadvantages + that the widget appears at a wrong place for a millisecond + (results in flashing) and that currently only every second window + manager gets it right. A safer solution is to store both + \l{QWidget::pos()}{pos()} and \l{QWidget::size()}{size()} and to + restore the geometry using \l{QWidget::resize()} and + \l{QWidget::move()}{move()} before calling + \l{QWidget::show()}{show()}, as demonstrated in the following + code snippets (from the \l{mainwindows/application}{Application} + example): + + \snippet examples/mainwindows/application/mainwindow.cpp 35 + \codeline + \snippet examples/mainwindows/application/mainwindow.cpp 38 + + This method works on Windows, Mac OS X, and most X11 window + managers. +*/ diff --git a/doc/src/session.qdoc b/doc/src/howtos/session.qdoc index 3e4bff3..8e51b6b 100644 --- a/doc/src/session.qdoc +++ b/doc/src/howtos/session.qdoc @@ -42,7 +42,8 @@ /*! \page session.html \title Session Management - \ingroup gui-programming + + \ingroup best-practices A \e session is a group of running applications, each of which has a particular state. The session is controlled by a service called the \e diff --git a/doc/src/sharedlibrary.qdoc b/doc/src/howtos/sharedlibrary.qdoc index de27c43..1e108a6 100644 --- a/doc/src/sharedlibrary.qdoc +++ b/doc/src/howtos/sharedlibrary.qdoc @@ -39,22 +39,12 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! - \group deployment \page sharedlibrary.html - \ingroup buildsystem - \title Creating Shared Libraries + + \ingroup best-practices + The following sections list certain things that should be taken into account when creating shared libraries. diff --git a/doc/src/timers.qdoc b/doc/src/howtos/timers.qdoc index c1e0023..ed46b76 100644 --- a/doc/src/timers.qdoc +++ b/doc/src/howtos/timers.qdoc @@ -42,9 +42,10 @@ /*! \page timers.html \title Timers - \ingroup architecture \brief How to use timers in your application. + \ingroup best-practices + QObject, the base class of all Qt objects, provides the basic timer support in Qt. With QObject::startTimer(), you start a timer with an interval in milliseconds as argument. The function diff --git a/doc/src/unix-signal-handlers.qdoc b/doc/src/howtos/unix-signal-handlers.qdoc index cecd3f9..4e123bc 100644 --- a/doc/src/unix-signal-handlers.qdoc +++ b/doc/src/howtos/unix-signal-handlers.qdoc @@ -42,9 +42,11 @@ /*! \page unix-signals.html \title Calling Qt Functions From Unix Signal Handlers - \ingroup platform-notes \brief You can't. But don't despair, there is a way... + \ingroup platform-specific + \ingroup best-practices + You \e can't call Qt functions from Unix signal handlers. The standard POSIX rule applies: You can only call async-signal-safe functions from signal handlers. See \l diff --git a/doc/src/images/activeqt-examples.png b/doc/src/images/activeqt-examples.png Binary files differnew file mode 100644 index 0000000..bda8eba --- /dev/null +++ b/doc/src/images/activeqt-examples.png diff --git a/doc/src/images/animation-examples.png b/doc/src/images/animation-examples.png Binary files differnew file mode 100644 index 0000000..bfc5990 --- /dev/null +++ b/doc/src/images/animation-examples.png diff --git a/doc/src/images/ipc-examples.png b/doc/src/images/ipc-examples.png Binary files differnew file mode 100644 index 0000000..815aed3 --- /dev/null +++ b/doc/src/images/ipc-examples.png diff --git a/doc/src/images/qq-thumbnail.png b/doc/src/images/qq-thumbnail.png Binary files differnew file mode 100644 index 0000000..295ef13 --- /dev/null +++ b/doc/src/images/qq-thumbnail.png diff --git a/doc/src/images/statemachine-examples.png b/doc/src/images/statemachine-examples.png Binary files differnew file mode 100644 index 0000000..b2ec66e --- /dev/null +++ b/doc/src/images/statemachine-examples.png diff --git a/doc/src/images/webkit-examples.png b/doc/src/images/webkit-examples.png Binary files differindex 55bbd92..23ddf1c 100644 --- a/doc/src/images/webkit-examples.png +++ b/doc/src/images/webkit-examples.png diff --git a/doc/src/index.qdoc b/doc/src/index.qdoc index 962e63d..b0695b8 100644 --- a/doc/src/index.qdoc +++ b/doc/src/index.qdoc @@ -41,195 +41,124 @@ /*! \page index.html - \keyword Qt Reference Documentation - \if defined(qtopiacore) - \if defined(opensourceedition) - \title Qt for Embedded Linux Reference Documentation (Open Source Edition) - \endif - - \if defined(desktoplightedition) - \title Qt for Embedded Linux Reference Documentation (GUI Framework Edition) - \endif - - \if defined(desktopedition) - \title Qt for Embedded Linux Reference Documentation (Full Framework Edition) - \endif - - \if !defined(opensourceedition) \ - && !defined(desktoplightedition) \ - && !defined(desktopedition) - \title Qt for Embedded Linux Reference Documentation - \endif - - \subtitle Qt for Embedded Linux + \if defined(opensourceedition) + \title Qt Reference Documentation (Open Source Edition) \endif - \if !defined(qtopiacore) - \if defined(opensourceedition) - \title Qt Reference Documentation (Open Source Edition) - \endif - - \if defined(desktoplightedition) - \title Qt Reference Documentation (GUI Framework Edition) - \endif - \if defined(desktopedition) - \title Qt Reference Documentation (Full Framework Edition) - \endif + \if defined(desktoplightedition) + \title Qt Reference Documentation (GUI Framework Edition) + \endif - \if !defined(opensourceedition) \ - && !defined(desktoplightedition) \ - && !defined(desktopedition) - \title Qt Reference Documentation - \endif + \if defined(desktopedition) + \title Qt Reference Documentation (Full Framework Edition) \endif + \if !defined(opensourceedition) \ + && !defined(desktoplightedition) \ + && !defined(desktopedition) + \title Qt Reference Documentation + \endif + \raw HTML - <table cellpadding="2" cellspacing="1" border="0" width="100%" class="indextable"> + <table cellpadding="2" cellspacing="1" border="0" width="95%" class="indextable" align="center"> <tr> <th class="titleheader" width="33%"> - Getting Started - </th> + Getting Started</th> <th class="titleheader" width="33%"> - General - </th> + API Reference</th> <th class="titleheader" width="33%"> - Developer Resources - </th> + Working with Qt</th> </tr> <tr> <td valign="top"> <ul> - <li><strong><a href="qt4-5-intro.html">What's New in Qt 4.5</a></strong></li> - <li><a href="how-to-learn-qt.html">How to Learn Qt</a></li> - <li><a href="installation.html">Installation</a></li> - <li><a href="tutorials.html">Tutorials</a>, <a href="examples.html">Examples</a> and <a href="demos.html">Demonstrations</a></li> - <li><a href="porting4.html">Porting from Qt 3 to Qt 4</a></li> + <li><a href="installation.html">Installation</a> and <a href="how-to-learn-qt.html">First Steps with Qt</a></li> + <li><a href="tutorials.html">Tutorials</a> and <a href="examples.html">Examples</a></li> + <li><a href="demos.html">Demonstrations</a> and <a href="qt4-5-intro.html"><b>New in Qt 4.5</b></a></li> </ul> </td> <td valign="top"> <ul> - <li><a href="http://qt.nokia.com/products">About Qt</a></li> - <li><a href="http://qt.nokia.com/about">About Us</a></li> - <li><a href="commercialeditions.html">Commercial Edition</a></li> - <li><a href="opensourceedition.html">Open Source Edition</a></li> - <li><a href="supported-platforms.html">Supported Platforms</a></li> + <li><a href="classlists.html">C++ Class Documentation</a></li> + <li><a href="frameworks-technologies.html">Frameworks and Technologies</a></li> + <li><a href="best-practices.html">How-To's and Best Practices</a></li> </ul> </td> <td valign="top"> <ul> - <li><a href="http://qt.nokia.com/developer/faqs/">Frequently Asked Questions</a></li> - <li><a href="http://qt.nokia.com/developer/community/">Qt Community Web Sites</a></li> - <li><a href="http://qt.nokia.com/doc/qq/">Qt Quarterly</a></li> - <li><a href="bughowto.html">How to Report a Bug</a></li> - <li><a href="http://qt.nokia.com/developer/">Other Online Resources</a></li> + <li><a href="developing-with-qt.html">Cross-Platform Development with Qt</a></li> + <li><a href="qtestlib-manual.html">Unit Testing</a> and <a href="debug.html">Debugging</a></li> + <li><a href="deployment.html">Deploying Qt Applications</a></li> </ul> </td> </tr> <tr> - <th class="titleheader"> - API Reference - </th> - <th class="titleheader"> - Core Features - </th> - <th class="titleheader"> - Key Technologies - </th> + <th class="largeheader"> + Fundamentals</th> + <th class="largeheader"> + User Interface Design</th> + <th class="largeheader"> + Technologies</th> </tr> <tr> - <td valign="top"> + <td valign="top" class="largeindex"> <ul> - <li><a href="classes.html">All Classes</a></li> - <li><a href="mainclasses.html">Main Classes</a></li> - <li><a href="groups.html">Grouped Classes</a></li> - <li><a href="annotated.html">Annotated Classes</a></li> - <li><a href="modules.html">Qt Classes by Module</a></li> - <li><a href="namespaces.html">All Namespaces</a></li> - <li><a href="hierarchy.html">Inheritance Hierarchy</a></li> - <li><a href="functions.html">All Functions</a></li> - <li><a href="qt-embedded.html">Qt for Embedded Platforms</a></li> - <li><a href="overviews.html">All Overviews and HOWTOs</a></li> - <li><a href="gallery.html">Qt Widget Gallery</a></li> - <li><a href="qtglobal.html">Qt Global Declarations</a></li> + <li><a href="object.html">The Qt Object Model</a></li> + <li><a href="eventsandfilters.html">Event System</a></li> + <li><a href="threads.html">Threading</a></li> + <li><a href="internationalization.html">Internationalization</a></li> + <li><a href="platform-specific.html">Platform Specifics</a></li> </ul> </td> - <td valign="top"> + <td valign="top" class="largeindex"> <ul> - <li><a href="signalsandslots.html">Signals and Slots</a></li> - <li><a href="object.html">Object Model</a></li> - <li><a href="layout.html">Layout Management</a></li> - <li><a href="qt4-mainwindow.html">Main Window Architecture</a></li> - <li><a href="paintsystem.html">Paint System</a></li> - <li><a href="graphicsview.html">Graphics View</a></li> - <li><a href="accessible.html">Accessibility</a></li> - <li><a href="containers.html">Tool and Container Classes</a></li> - <li><a href="richtext.html">Rich Text Processing</a></li> - <li><a href="i18n.html">Internationalization</a></li> - <li><a href="plugins-howto.html">Plugin System</a></li> - <li><a href="threads.html">Multithreaded Programming</a></li> - <li><a href="ipc.html">Inter-Process Communication (IPC)</a></li> - <li><a href="qtestlib-manual.html">Unit Testing Framework</a></li> + <li><a href="widgets-and-layouts.html">Widgets and Layouts</a></li> + <li><a href="application-windows.html">Application Windows</a></li> + <li><a href="paintsystem.html">Painting and Printing</a></li> + <li><a href="graphicsview.html">Canvas UI with Graphics View</a></li> + <li><a href="webintegration.html">Integrating Web Content</a></li> </ul> </td> - <td valign="top"> + <td valign="top" class="largeindex"> <ul> - <li><a href="model-view-programming.html">Model/View Programming</a></li> - <li><a href="stylesheet.html">Style Sheets</a></li> - <li><a href="qthelp.html">Help Module</a></li> - <li><a href="qtnetwork.html">Network Module</a></li> - <li><a href="qtopengl.html">OpenGL Module</a></li> - <li><a href="qtopenvg.html">OpenVG Module</a></li> - <li><a href="qtscript.html">Script Module</a></li> - <li><a href="qtsql.html">SQL Module</a></li> - <li><a href="qtsvg.html">SVG Module</a></li> - <li><a href="qtwebkit.html">WebKit Integration</a></li> - <li><a href="qtxml.html">XML Module</a></li> - <li><a href="qtxmlpatterns.html">XML Patterns: XQuery & XPath</a></li> - <li><a href="phonon-module.html">Phonon Multimedia Framework</a></li> - <li><a href="qtscripttools.html">Script Tools Module</a></li> - <li><a href="activeqt.html">ActiveQt Framework</a></li> + <li><a href="io.html">Input/Output</a> and <a href="resources.html">Resources</a></li> + <li><a href="network-programming.html">Network Programming</a></li> + <li><a href="sql-programming.html">SQL Development</a></li> + <li><a href="xml-processing.html">XML Processing</a></li> + <li><a href="scripting.html">Scripting</a></li> </ul> </td> </tr> <tr> <th class="titleheader"> - Add-ons & Services - </th> + Community and Resources</th> <th class="titleheader"> - Tools - </th> + Contributing</th> <th class="titleheader"> - Licenses & Credits - </th> + Licenses</th> </tr> <tr> <td valign="top"> <ul> - <li><a href="http://qt.nokia.com/products/add-on-products">Qt Solutions</a></li> - <li><a href="http://qt.nokia.com/products/appdev">Partner Add-ons</a></li> - <li><a href="http://qt-apps.org">Third-Party Qt Components (qt-apps.org)</a></li> - <li><a href="http://qt.nokia.com/support-services/support-services/">Support</a></li> - <li><a href="http://qt.nokia.com/support-services/training/">Training</a></li> + <li><a href="http://qt.nokia.com/developer">Online Resources</a></li> + <li><a href="http://labs.qt.nokia.com/blogs">Developer Blogs</a></li> + <li><a href="http://qt.nokia.com/support-services">Support</a>, <a href="http://qt.nokia.com/services-partners">Training and Services</a></li> </ul> </td> <td valign="top"> <ul> - <li><a href="designer-manual.html">Qt Designer</a></li> - <li><a href="assistant-manual.html">Qt Assistant</a></li> - <li><a href="linguist-manual.html">Qt Linguist</a></li> - <li><a href="qmake-manual.html">qmake</a></li> - <li><a href="qttools.html">All Tools</a></li> + <li><a href="bughowto.html">Report Bugs and Make Suggestions</a></li> + <li><a href="http://qt.gitorious.org">Open Repository</a></li> + <li><a href="credits.html">Credits</a></li> </ul> </td> <td valign="top"> <ul> - <li><a href="gpl.html">GNU GPL</a>, <a href="lgpl.html">GNU LGPL</a></li> - <li><a href="3rdparty.html">Third-Party Licenses Used in Qt</a></li> - <li><a href="licenses.html">Other Licenses Used in Qt</a></li> - <li><a href="trademarks.html">Trademark Information</a></li> - <li><a href="credits.html">Credits</a></li> + <li><a href="gpl.html">GNU GPL</a>, <a href="lgpl.html">GNU LGPL</a></li> + <li><a href="commercialeditions.html">Commercial Editions</a></li> + <li><a href="licensing.html">Licenses Used in Qt</a></li> </ul> </td> </tr> diff --git a/doc/src/i18n.qdoc b/doc/src/internationalization/i18n.qdoc index 22f82be..25c35c7 100644 --- a/doc/src/i18n.qdoc +++ b/doc/src/internationalization/i18n.qdoc @@ -41,9 +41,12 @@ /*! \group i18n - \title Internationalization with Qt - \ingroup topics + \title Qt Classes for Internationalization +*/ +/*! + \page internationalization.html + \title Internationalization with Qt \brief Information about Qt's support for internationalization and multiple languages. \keyword internationalization @@ -53,6 +56,14 @@ the application usable by people in countries other than one's own. \tableofcontents + + \section1 Relevant Qt Classes and APIs + + These classes support internationalizing of Qt applications. + + \annotatedlist i18n + + \section1 Languages and Writing Systems In some cases internationalization is simple, for example, making a US application accessible to Australian or British users may require @@ -501,8 +512,4 @@ For details on Mac-specific translation, refer to the Qt/Mac Specific Issues document \l{Qt for Mac OS X - Specific Issues#Translating the Application Menu and Native Dialogs}{here}. - - \section1 Relevant Qt Classes - - These classes are relevant to internationalizing Qt applications. */ diff --git a/doc/src/linguist-manual.qdoc b/doc/src/internationalization/linguist-manual.qdoc index a67d65a..a67d65a 100644 --- a/doc/src/linguist-manual.qdoc +++ b/doc/src/internationalization/linguist-manual.qdoc diff --git a/doc/src/legal/editions.qdoc b/doc/src/legal/editions.qdoc index cf1534d..f29322d 100644 --- a/doc/src/legal/editions.qdoc +++ b/doc/src/legal/editions.qdoc @@ -39,18 +39,6 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Documentation of Qt editions. -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page editions.html \title Qt Editions diff --git a/doc/src/legal/licenses.qdoc b/doc/src/legal/licenses.qdoc index 7414667..7a15f31 100644 --- a/doc/src/legal/licenses.qdoc +++ b/doc/src/legal/licenses.qdoc @@ -42,7 +42,6 @@ /*! \group licensing \title Licensing Information - \ingroup topics \brief Information about licenses and licensing issues. These documents include information about Qt's licenses and the licenses diff --git a/doc/src/modules.qdoc b/doc/src/modules.qdoc index 9b0e58a..2fc6eaf 100644 --- a/doc/src/modules.qdoc +++ b/doc/src/modules.qdoc @@ -44,15 +44,17 @@ \title Qt's Modules \startpage index.html Qt Reference Documentation \nextpage QtCore + + \ingroup classlists Qt 4 consists of several modules, each of which lives in a separate library. - Modules for general software development: - \table 80% + \header \o {2,1} \bold{Modules for general software development} \row \o \l{QtCore} \o Core non-graphical classes used by other modules \row \o \l{QtGui} \o Graphical user interface (GUI) components + \row \o \l{QtMultimedia} \o Classes for low-level multimedia functionality \row \o \l{QtNetwork} \o Classes for network programming \row \o \l{QtOpenGL} \o OpenGL support classes \row \o \l{QtOpenVG} \o OpenVG support classes @@ -65,30 +67,15 @@ \row \o \l{QtXmlPatterns} \o An XQuery & XPath engine for XML and custom data models \row \o \l{Phonon Module}{Phonon} \o Multimedia framework classes \row \o \l{Qt3Support} \o Qt 3 compatibility classes - \endtable - - Modules for working with Qt's tools: - - \table 80% + \header \o {2,1} \bold{Modules for working with Qt's tools} \row \o \l{QtDesigner} \o Classes for extending \QD \row \o \l{QtUiTools} \o Classes for handling \QD forms in applications \row \o \l{QtHelp} \o Classes for online help - \row \o \l{QtAssistant} \o Support for online help \row \o \l{QtTest} \o Tool classes for unit testing - \endtable - - The following extension modules are available in the \l{Qt - Commercial Editions} on Windows: - - \table 80% + \header \o {2,1} \bold{Modules for Windows developers} \row \o \l{QAxContainer} \o Extension for accessing ActiveX controls \row \o \l{QAxServer} \o Extension for writing ActiveX servers - \endtable - - The following extension module is available in all \l {Qt Editions} - on Unix platforms: - - \table 80% + \header \o {2,1} \bold{Modules for Unix developers} \row \o \l{QtDBus} \o Classes for Inter-Process Communication using the D-Bus \endtable @@ -98,9 +85,928 @@ \snippet doc/src/snippets/code/doc_src_modules.qdoc 0 - On Windows, if you do not use \l qmake, the \l{Visual Studio Integration} - available to \l{Qt Commercial Editions}{commercial licensees}, or other - build tools such as CMake, you also need to link against the \c qtmain library. + On Windows, if you do not use \l qmake + or other build tools such as CMake, you also need to link against + the \c qtmain library. \sa {Qt's Classes} */ + +/*! + \module QtCore + \title QtCore Module + \contentspage Qt's Modules + \previouspage Qt's Modules + \nextpage QtGui + \ingroup modules + + \keyword QtCore + + \brief The QtCore module contains core non-GUI functionality. + + All other Qt modules rely on this module. To include the + definitions of the module's classes, use the following directive: + + \snippet doc/src/snippets/code/doc_src_qtcore.qdoc 0 + + The QtCore module is part of all \l{Qt editions}. +*/ + + +/*! + \module QtGui + \title QtGui Module + \contentspage Qt's Modules + \previouspage QtCore + \nextpage QtNetwork + \ingroup modules + + \brief The QtGui module extends QtCore with GUI functionality. + + To include the definitions of both modules' classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtgui.qdoc 0 + + The QtGui module is part of the \l{Qt GUI Framework Edition}, + the \l{Qt Full Framework Edition}, and the \l{Open Source Versions of Qt}. +*/ + +/*! + \module QtMultimedia + \title QtMultimedia Module + \contentspage Qt's Modules + \previouspage QtCore + \nextpage QtNetwork + \ingroup modules + + \brief The QtMultimedia module provides low-level multimedia functionality. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtmultimedia.qdoc 1 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtmultimedia.qdoc 0 + + The functionality provided by the \l{Phonon Module} is on a higher level + and in many cases more suitable for application developers. +*/ + +/*! + \module QtNetwork + \title QtNetwork Module + \contentspage Qt's Modules + \previouspage QtMultimedia + \nextpage QtOpenGL + \ingroup modules + + \brief The QtNetwork module provides classes to make network programming + easier and portable. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtnetwork.qdoc 1 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtnetwork.qdoc 0 + + The QtNetwork module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. +*/ + +/*! + \module QtOpenGL + \title QtOpenGL Module + \contentspage Qt's Modules + \previouspage QtNetwork + \nextpage QtOpenVG + \ingroup modules + + \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 doc/src/snippets/code/doc_src_qtopengl.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtopengl.qdoc 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. + + The QtOpenGL module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. It is available on Windows, X11, and Mac OS X. + \l{Qt for Embedded Linux} supports OpenGL ES (OpenGL for Embedded Systems). + To be able to use the OpenGL API in \l{Qt for Embedded Linux}, it must be + integrated with the Q Window System (QWS). See the + \l{Qt for Embedded Linux and OpenGL} documentation for details. +*/ + +/*! + \module QtOpenVG + \title QtOpenVG Module + \since 4.6 + \contentspage Qt's Modules + \previouspage QtOpenGL + \nextpage QtScript + \ingroup modules + + \brief The QtOpenVG module is a plugin that provides support for + OpenVG painting. + + OpenVG is a standard API from the + \l{http://www.khronos.org/openvg}{Khronos Group} for accelerated + 2D vector graphics that is appearing in an increasing number of + embedded devices. + + OpenVG support can be enabled by passing the \c{-openvg} option + to configure. It is assumed that the following qmake variables + are set to appropriate values in the qmake.conf file for your + platform: + + \list + \o QMAKE_INCDIR_OPENVG + \o QMAKE_LIBDIR_OPENVG + \o QMAKE_LIBS_OPENVG + \endlist + + Most OpenVG implementations are based on EGL, so the following + variables may also need to be set: + + \list + \o QMAKE_INCDIR_EGL + \o QMAKE_LIBDIR_EGL + \o QMAKE_LIBS_EGL + \endlist + + See \l{qmake Variable Reference} for more information on these variables. + + Two kinds of OpenVG engines are currently supported: EGL based, + and engines built on top of OpenGL such as + \l{http://sourceforge.net/projects/shivavg}{ShivaVG}. + EGL based engines are preferred. + + Once the graphics system plugin has been built and installed, + applications can be run as follows to use the plugin: + + \code + app -graphicssystem OpenVG + \endcode + + If ShivaVG is being used, then substitute \c ShivaVG instead of + \c OpenVG in the line above. +*/ + +/*! + \module QtScript + \title QtScript Module + \since 4.3 + \contentspage Qt's Modules + \previouspage QtOpenVG + \nextpage QtScriptTools + \ingroup modules + + \brief The QtScript module provides classes for making Qt applications scriptable. + + The QtScript module only provides core scripting facilities; the + QtScriptTools module provides additional Qt Script-related + components that application developers may find useful. + + \tableofcontents + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtscript.qdoc 0 + + To link against the module, add this line to your \l qmake \c .pro file: + + \snippet doc/src/snippets/code/doc_src_qtscript.qdoc 1 + + The QtScript module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. +*/ + +/*! + \module QtScriptTools + \title QtScriptTools Module + \since 4.5 + \contentspage Qt's Modules + \previouspage QtScript + \nextpage QtSql + \ingroup modules + + \brief The QtScriptTools module provides additional components for applications that use Qt Script. + + \tableofcontents + + \section1 Configuring the Build Process + + Applications that use the Qt Script Tools classes need to + be configured to be built against the QtScriptTools module. + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc.src.qtscripttools.qdoc 0 + + To link against the module, add this line to your \l qmake \c .pro file: + + \snippet doc/src/snippets/code/doc.src.qtscripttools.qdoc 1 + + The QtScriptTools module is part of the \l{Qt Full Framework Edition} and + the \l{Open Source Versions of Qt}. +*/ + +/*! + \module QtSql + \title QtSql Module + \contentspage Qt's Modules + \previouspage QtScript + \nextpage QtSvg + \ingroup modules + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtsql.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtsql.qdoc 1 + + The QtSql module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. +*/ + +/*! + \module QtSvg + \title QtSvg Module + \since 4.1 + \contentspage Qt's Modules + \previouspage QtSql + \nextpage QtWebKit + \ingroup modules + + \brief The QtSvg module provides classes for displaying the contents of SVG + files. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtsvg.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtsvg.qdoc 1 + + The QtSvg module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. + + \section1 License Information + + Some code for arc handling in this module is derived from code with + the following license: + + \legalese + Copyright 2002 USC/Information Sciences Institute + + Permission to use, copy, modify, distribute, and sell this software + and its documentation for any purpose is hereby granted without + fee, provided that the above copyright notice appear in all copies + and that both that copyright notice and this permission notice + appear in supporting documentation, and that the name of + Information Sciences Institute not be used in advertising or + publicity pertaining to distribution of the software without + specific, written prior permission. Information Sciences Institute + makes no representations about the suitability of this software for + any purpose. It is provided "as is" without express or implied + warranty. + + INFORMATION SCIENCES INSTITUTE DISCLAIMS ALL WARRANTIES WITH REGARD + TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL INFORMATION SCIENCES + INSTITUTE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL + DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA + OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + \endlegalese +*/ + +/*! + \module QtXml + \title QtXml Module + \contentspage Qt's Modules + \previouspage QtSvg + \nextpage QtXmlPatterns + \ingroup modules + + \brief The QtXml module provides a stream reader and writer for + XML documents, and C++ implementations of SAX and DOM. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 1 + + Further XML support is provided by the \l{Qt Solutions} group who + provide, for example, classes that support SOAP and MML with the + Qt XML classes. + + This module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. +*/ + +/*! + \module QtXmlPatterns + \title QtXmlPatterns Module + \since 4.4 + \contentspage Qt's Modules + \previouspage QtXml + \nextpage Phonon Module + \ingroup modules + + \brief The QtXmlPatterns module provides support for XPath, + XQuery, XSLT and XML schema-validation. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtxmlpatterns.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qtxmlpatterns.qdoc 1 + + This module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. + + \section1 License Information + + The XML Schema implementation provided by this module contains the \c xml.xsd file + (located in \c{src/xmlpatterns/schema/schemas}) which is licensed under the terms + given below. This module is always built with XML Schema support enabled. + + \legalese + W3C\copyright SOFTWARE NOTICE AND LICENSE + + This license came from: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + + This work (and included software, documentation such as READMEs, or other + related items) is being provided by the copyright holders under the following + license. By obtaining, using and/or copying this work, you (the licensee) + agree that you have read, understood, and will comply with the following + terms and conditions. + + Permission to copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and without + fee or royalty is hereby granted, provided that you include the following on + ALL copies of the software and documentation or portions thereof, including + modifications: + + 1. The full text of this NOTICE in a location viewable to users of the + redistributed or derivative work.\br + 2. Any pre-existing intellectual property disclaimers, notices, or terms + and conditions. If none exist, the W3C Software Short Notice should be + included (hypertext is preferred, text is permitted) + within the body of any redistributed or derivative code.\br + 3. Notice of any changes or modifications to the files, including the date + changes were made. (We recommend you provide URIs to the location from + which the code is derived.) + + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS + MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT + LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR + PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE + ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. + + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR + CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR + DOCUMENTATION. + + The name and trademarks of copyright holders may NOT be used in + advertising or publicity pertaining to the software without specific, written + prior permission. Title to copyright in this software and any associated + documentation will at all times remain with copyright holders. + \endlegalese +*/ + +/*! + \page phonon-module.html + \module Phonon + \title Phonon Module + \contentspage Qt's Modules + \previouspage QtXmlPatterns + \nextpage Qt3Support + \ingroup modules + + \brief The Phonon module contains namespaces and classes for multimedia functionality. + + \generatelist{classesbymodule Phonon} + + Phonon is a cross-platform multimedia framework that enables the use of + audio and video content in Qt applications. The \l{Phonon Overview} + document provides an introduction to the architecture and features included + in Phonon. The \l{Phonon} namespace contains a list of all classes, functions + and namespaces provided by the module. + + Applications that use Phonon's classes need to + be configured to be built against the Phonon module. + The following declaration in a \c qmake project file ensures that + an application is compiled and linked appropriately: + + \snippet doc/src/snippets/code/doc_src_phonon.qdoc 1 + + The Phonon module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. + + \section1 Qt Backends + + Qt Backends are currently developed for Phonon version 4.1. The Phonon + project has moved on and introduced new features that the Qt Backends do not + implement. We have chosen not to document the part of Phonon that we do not + support. Any class or function not appearing in our documentation can be + considered unsupported. + + \section1 License Information + + Qt Commercial Edition licensees that wish to distribute applications that + use the Phonon module need to be aware of their obligations under the + GNU Lesser General Public License (LGPL). + + Developers using the Open Source Edition can choose to redistribute + the module under the appropriate version of the GNU LGPL; version 2.1 + for applications and libraries licensed under the GNU GPL version 2, + or version 3 for applications and libraries licensed under the GNU + GPL version 2. + + \legalese + This file is part of the KDE project + + Copyright (C) 2005-2007 Matthias Kretz <kretz@kde.org> \BR + Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + Contact: Nokia Corporation (qt-info@nokia.com) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + \endlegalese +*/ + +/*! + \module Qt3Support + \title Qt3Support Module + \contentspage Qt's Modules + \previouspage Phonon Module + \nextpage QtDesigner + \ingroup modules + + \keyword Qt3Support + \brief The Qt3Support module provides classes that ease porting + from Qt 3 to Qt 4. + + \warning The classes in this module are intended to be used in + intermediate stages of a porting process and are not intended + to be used in production code. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qt3support.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qt3support.qdoc 1 + + \note Since this module provides compatibility classes for + diverse parts of the Qt 3 API, it has dependencies on the QtCore, + QtGui, QtNetwork, QtSql, and QtXml modules. + + This module is part of the \l{Qt Full Framework Edition} and the + \l{Open Source Versions of Qt}. Most classes offered by this module are + also part of the \l{Qt GUI Framework Edition}. +\if defined(opensourceedition) || defined(desktoplightedition) + Classes that are not available for \l{Qt GUI Framework Edition} + users are marked as such in the class documentation. +\endif + + \sa {Porting to Qt 4} +*/ + +/*! + \module QtDesigner + \title QtDesigner Module + \contentspage Qt's Modules + \previouspage Qt3Support + \nextpage QtUiTools + \ingroup modules + + \brief The QtDesigner module provides classes that allow you to + create your own custom widget plugins for Qt Designer, and classes + that enable you to access Qt Designer's components. + + In addition, the QFormBuilder class provides the possibility of + constructing user interfaces from UI files at run-time. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 0 + + To link against the module, add this line to your \c qmake .pro + file: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 1 + + \note These classes are part of the \l{Open Source Versions of Qt} and + \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial + users. +*/ + +/*! + \module QtUiTools + \title QtUiTools Module + \since 4.1 + \contentspage Qt's Modules + \previouspage QtDesigner + \nextpage QtHelp + \ingroup modules + + \brief The QtUiTools module provides classes to handle forms created + with Qt Designer. + + These forms are processed at run-time to produce dynamically-generated + user interfaces. In order to generate a form at run-time, a resource + file containing a UI file is needed. Applications that use the + form handling classes need to be configured to be built against the + QtUiTools module. This is done by including the following declaration + in a \c qmake project file to ensure that the application is compiled + and linked appropriately. + + \snippet doc/src/snippets/code/doc_src_qtuiloader.qdoc 0 + + A form loader object, provided by the QUiLoader class, is used to + construct the user interface. This user interface can + be retrieved from any QIODevice; for example, a QFile object can be + used to obtain a form stored in a project's resources. The + QUiLoader::load() function takes the user interface description + contained in the file and constructs the form widget. + + To include the definitions of the module's classes, use the following + directive: + + \snippet doc/src/snippets/code/doc_src_qtuiloader.qdoc 1 + + \note These classes are part of the \l{Open Source Versions of Qt} and + \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial + users. + + \sa{Calculator Builder Example}, {World Time Clock Builder Example} +*/ + +/*! + \module QtHelp + \title QtHelp Module + \contentspage Qt's Modules + \previouspage QtUiTools + \nextpage QtTest + \ingroup modules + + \brief The QtHelp module provides classes for integrating + online documentation in applications. + + To include the definitions of the module's classes, use the + following directive: + + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qthelp.qdoc 1 + + These classes are part of the \l{Open Source Versions of Qt} and + \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial + users. + + \section1 License Information + + The QtHelp module uses the CLucene indexing library to provide full-text + searching capabilities for Qt Assistant and applications that use the + features of QtHelp. + + Qt Commercial Edition licensees that wish to distribute applications that + use these features of the QtHelp module need to be aware of their + obligations under the GNU Lesser General Public License (LGPL). + + Developers using the Open Source Edition can choose to redistribute + the module under the appropriate version of the GNU LGPL; version 2.1 + for applications and libraries licensed under the GNU GPL version 2, + or version 3 for applications and libraries licensed under the GNU + GPL version 3. + + \legalese + Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team \BR + Changes are Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + \endlegalese + + \sa {The Qt Help Framework} +*/ + +/*! + \module QtTest + \title QtTest Module + \contentspage Qt's Modules + \previouspage QtHelp + \nextpage QAxContainer + \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 doc/src/snippets/code/doc_src_qttest.qdoc 0 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet doc/src/snippets/code/doc_src_qttest.qdoc 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}. +*/ + +/*! + \module QAxContainer + \title QAxContainer Module + \contentspage Qt's Modules + \previouspage QtTest + \nextpage QAxServer + \ingroup modules + + \brief The QAxContainer module is a Windows-only extension for + accessing ActiveX controls and COM objects. + + \section1 License Information + + The QAxContainer module is not covered by the \l{GNU General Public License (GPL)}, + the \l{GNU Lesser General Public License (LGPL)}, or the + \l{Qt Commercial Editions}{Qt Commercial License}. Instead, it is distributed under + the following license. + + \legalese + Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\br + All rights reserved. + + Contact: Nokia Corporation (qt-info@nokia.com)\br + + You may use this file under the terms of the BSD license as follows:\br + + "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.\br + * 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.\br + * 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." + \endlegalese +*/ + +/*! + \module QAxServer + \title QAxServer Module + \contentspage Qt's Modules + \previouspage QAxContainer + \nextpage QtDBus module + \ingroup modules + + \brief The QAxServer module is a Windows-only static library that + you can use to turn a standard Qt binary into a COM server. + + \section1 License Information + + The QAxContainer module is not covered by the \l{GNU General Public License (GPL)}, + the \l{GNU Lesser General Public License (LGPL)}, or the + \l{Qt Commercial Editions}{Qt Commercial License}. Instead, it is distributed under + the following license. + + \legalese + Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\br + All rights reserved. + + Contact: Nokia Corporation (qt-info@nokia.com)\br + + You may use this file under the terms of the BSD license as follows:\br + + "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.\br + * 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.\br + * 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." + \endlegalese +*/ + +/*! + \module QtDBus + \title QtDBus module + \contentspage Qt's Modules + \previouspage QAxServer + \ingroup modules + + \keyword QtDBus + \target The QDBus compiler + + \brief The QtDBus module is a Unix-only library that you can use + to make Inter-Process Communication using the \l {Introduction to + D-Bus} {D-Bus} protocol. + + Applications using the QtDBus module can provide services to + other, remote applications by exporting objects, as well as use + services exported by those applications by placing calls and + accessing properties. + + The QtDBus module provides an interface that extends the Qt \l + {signalsandslots.html}{Signals and Slots} mechanism, allowing one + to connect to a signal emitted remotely as well as to connect a + local signal to remote slot. + + To use this module, use the following code in your application: + + \snippet doc/src/snippets/code/doc_src_qtdbus.qdoc 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.qdoc 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 + tools are built. + + See the \l {Introduction to D-Bus} page for detailed information on + how to use this module. + + This module is part of all \l{Qt editions}. +*/ + +/*! + \page qtmain.html + \title The qtmain Library + \ingroup licensing + \ingroup platform-specific + \brief Describes the use and license of the qtmain helper library. + + qtmain is a helper library that enables the developer to write a + cross-platform main() function on Windows. If you do not use \l qmake + or other build tools such as CMake, then you need to link against + the \c qtmain library. + + \section1 License Information + + The QAxContainer module is not covered by the \l{GNU General Public License (GPL)}, + the \l{GNU Lesser General Public License (LGPL)}, or the + \l{Qt Commercial Editions}{Qt Commercial License}. Instead, it is distributed under + the following license. + + \legalese + Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\br + All rights reserved. + + Contact: Nokia Corporation (qt-info@nokia.com)\br + + You may use this file under the terms of the BSD license as follows:\br + + "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.\br + * 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.\br + * 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." + \endlegalese +*/ + +/*! + \page qtassistant.html + \title QtAssistant + + This module is no longer needed. Use the QtHelp module to integrate documentation + into your application. + + \sa {QtHelp} +*/ diff --git a/doc/src/qtnetwork.qdoc b/doc/src/network-programming/qtnetwork.qdoc index 7af99bf..0b2e6f9 100644 --- a/doc/src/qtnetwork.qdoc +++ b/doc/src/network-programming/qtnetwork.qdoc @@ -40,46 +40,32 @@ ****************************************************************************/ /*! - \module QtNetwork - \title QtNetwork Module - \contentspage Qt's Modules - \previouspage QtGui - \nextpage QtOpenGL - \ingroup modules + \group network + \title Network Programming API + \brief Classes for Network Programming - \brief The QtNetwork module offers classes that allow you to - write TCP/IP clients and servers. - - The network module provides classes to make network programming - easier and portable. It offers classes such as QFtp that - implement specific application-level protocols, lower-level classes - such as QTcpSocket, QTcpServer and QUdpSocket that represent low - level network concepts, and high level classes such as QNetworkRequest, - QNetworkReply and QNetworkAccessManager to perform network operations using common protocols. + \ingroup groups +*/ - The QtNetwork module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. +/*! + \page network-programming.html + \title Network Programming + \brief An Introduction to Network Programming with Qt - Topics: + The QtNetwork module offers classes that allow you to write TCP/IP clients + and servers. it offers classes such as QFtp that implement specific + application-level protocols, lower-level classes such as QTcpSocket, + QTcpServer and QUdpSocket that represent low level network concepts, + and high level classes such as QNetworkRequest, QNetworkReply and + QNetworkAccessManager to perform network operations using common protocols. \tableofcontents - \section1 Configuring the Build Process - - Applications that use Qt's networking classes need to - be configured to be built against the QtNetwork module. - The following declaration in a \c qmake project file ensures that - an application is compiled and linked appropriately: - - \snippet doc/src/snippets/code/doc_src_qtnetwork.qdoc 0 - - This line is necessary because only the QtCore and QtGui modules - are used in the default build process. + \section1 Qt's Classes for Network Programming - To include the definitions of the module's classes, use the - following directive: + The following classes provide support for network programming in Qt. - \snippet doc/src/snippets/code/doc_src_qtnetwork.qdoc 1 + \annotatedlist network \section1 High Level Network Operations for HTTP and FTP diff --git a/doc/src/classes/qpagesetupdialog.qdoc b/doc/src/network-programming/ssl.qdoc index 5715fa8..44d4196 100644 --- a/doc/src/classes/qpagesetupdialog.qdoc +++ b/doc/src/network-programming/ssl.qdoc @@ -40,45 +40,28 @@ ****************************************************************************/ /*! - \class QPageSetupDialog + \group ssl + \title Secure Sockets Layer (SSL) Classes + \ingroup groups - \brief The QPageSetupDialog class provides a configuration dialog - for the page-related options on a printer. + \brief Classes for secure communication over network sockets. + \keyword SSL - On Windows and Mac OS X the page setup dialog is implemented using - the native page setup dialogs. + The classes below provide support for secure network communication using + the Secure Sockets Layer (SSL) protocol, using the \l{OpenSSL Toolkit} to + perform encryption and protocol handling. - Note that on Windows and Mac OS X custom paper sizes won't be - reflected in the native page setup dialogs. Additionally, custom - page margins set on a QPrinter won't show in the native Mac OS X - page setup dialog. + See the \l{General Qt Requirements} page for information about the + versions of OpenSSL that are known to work with Qt. - \sa QPrinter, QPrintDialog -*/ - - -/*! - \fn QPageSetupDialog::QPageSetupDialog(QPrinter *printer, QWidget *parent) + \note Due to import and export restrictions in some parts of the world, we + are unable to supply the OpenSSL Toolkit with Qt packages. Developers wishing + to use SSL communication in their deployed applications should either ensure + that their users have the appropriate libraries installed, or they should + consult a suitably qualified legal professional to ensure that applications + using code from the OpenSSL project are correctly certified for import + and export in relevant regions of the world. - Constructs a page setup dialog that configures \a printer with \a - parent as the parent widget. + When the QtNetwork module is built with SSL support, the library is linked + against OpenSSL in a way that requires OpenSSL license compliance. */ - -/*! - \since 4.5 - - \fn QPageSetupDialog::QPageSetupDialog(QWidget *parent) - - Constructs a page setup dialog that configures a default-constructed - QPrinter with \a parent as the parent widget. - - \sa printer() -*/ - -/*! - \fn QPrinter *QPageSetupDialog::printer() - - Returns the printer that was passed to the QPageSetupDialog - constructor. -*/ - diff --git a/doc/src/metaobjects.qdoc b/doc/src/objectmodel/metaobjects.qdoc index c11cf4d..961a4c6 100644 --- a/doc/src/metaobjects.qdoc +++ b/doc/src/objectmodel/metaobjects.qdoc @@ -43,7 +43,6 @@ \page metaobjects.html \title Meta-Object System \brief An overview of Qt's meta-object system and introspection capabilities. - \ingroup architecture \keyword meta-object Qt's meta-object system provides the signals and slots mechanism for diff --git a/doc/src/object.qdoc b/doc/src/objectmodel/object.qdoc index 35d2ba3..a3c2292 100644 --- a/doc/src/object.qdoc +++ b/doc/src/objectmodel/object.qdoc @@ -42,9 +42,10 @@ /*! \page object.html \title Qt Object Model - \ingroup architecture \brief A description of the powerful features made possible by Qt's dynamic object model. + \ingroup frameworks-technologies + The standard C++ object model provides very efficient runtime support for the object paradigm. But its static nature is inflexibile in certain problem domains. Graphical user interface @@ -85,6 +86,12 @@ templates; see \l{Why Doesn't Qt Use Templates for Signals and Slots?} + \section1 Important Classes + + These classes form the basis of the Qt Object Model. + + \annotatedlist objectmodel + \target Identity vs Value \section1 Qt Objects: Identity vs Value diff --git a/doc/src/objectmodel/objecttrees.qdoc b/doc/src/objectmodel/objecttrees.qdoc new file mode 100644 index 0000000..bc5353f --- /dev/null +++ b/doc/src/objectmodel/objecttrees.qdoc @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page objecttrees.html + \title Object Trees and Object Ownership + \brief Information about the parent-child pattern used to describe + object ownership in Qt. + + \section1 Overview + + \link QObject QObjects\endlink organize themselves in object trees. + When you create a QObject with another object as parent, it's added to + the parent's \link QObject::children() children() \endlink list, and + is deleted when the parent is. It turns out that this approach fits + the needs of GUI objects very well. For example, a \l QShortcut + (keyboard shortcut) is a child of the relevant window, so when the + user closes that window, the shorcut is deleted too. + + \l QWidget, the base class of everything that appears on the screen, + extends the parent-child relationship. A child normally also becomes a + child widget, i.e. it is displayed in its parent's coordinate system + and is graphically clipped by its parent's boundaries. For example, + when the application deletes a message box after it has been + closed, the message box's buttons and label are also deleted, just as + we'd want, because the buttons and label are children of the message + box. + + You can also delete child objects yourself, and they will remove + themselves from their parents. For example, when the user removes a + toolbar it may lead to the application deleting one of its \l QToolBar + objects, in which case the tool bar's \l QMainWindow parent would + detect the change and reconfigure its screen space accordingly. + + The debugging functions \l QObject::dumpObjectTree() and \l + QObject::dumpObjectInfo() are often useful when an application looks or + acts strangely. + + \target note on the order of construction/destruction of QObjects + \section1 Construction/Destruction Order of QObjects + + When \l {QObject} {QObjects} are created on the heap (i.e., created + with \e new), a tree can be constructed from them in any order, and + later, the objects in the tree can be destroyed in any order. When any + QObject in the tree is deleted, if the object has a parent, the + destructor automatically removes the object from its parent. If the + object has children, the destructor automatically deletes each + child. No QObject is deleted twice, regardless of the order of + destruction. + + When \l {QObject} {QObjects} are created on the stack, the same + behavior applies. Normally, the order of destruction still doesn't + present a problem. Consider the following snippet: + + \snippet doc/src/snippets/code/doc_src_objecttrees.qdoc 0 + + The parent, \c window, and the child, \c quit, are both \l {QObject} + {QObjects} because QPushButton inherits QWidget, and QWidget inherits + QObject. This code is correct: the destructor of \c quit is \e not + called twice because the C++ language standard \e {(ISO/IEC 14882:2003)} + specifies that destructors of local objects are called in the reverse + order of their constructors. Therefore, the destructor of + the child, \c quit, is called first, and it removes itself from its + parent, \c window, before the destructor of \c window is called. + + But now consider what happens if we swap the order of construction, as + shown in this second snippet: + + \snippet doc/src/snippets/code/doc_src_objecttrees.qdoc 1 + + In this case, the order of destruction causes a problem. The parent's + destructor is called first because it was created last. It then calls + the destructor of its child, \c quit, which is incorrect because \c + quit is a local variable. When \c quit subsequently goes out of scope, + its destructor is called again, this time correctly, but the damage has + already been done. +*/ diff --git a/doc/src/properties.qdoc b/doc/src/objectmodel/properties.qdoc index cc28497..f640e31 100644 --- a/doc/src/properties.qdoc +++ b/doc/src/objectmodel/properties.qdoc @@ -42,7 +42,6 @@ /*! \page properties.html \title Qt's Property System - \ingroup architecture \brief An overview of Qt's property system. Qt provides a sophisticated property system similar to the ones diff --git a/doc/src/signalsandslots.qdoc b/doc/src/objectmodel/signalsandslots.qdoc index 07e0ef8..6bdd4bc 100644 --- a/doc/src/signalsandslots.qdoc +++ b/doc/src/objectmodel/signalsandslots.qdoc @@ -42,7 +42,6 @@ /*! \page signalsandslots.html \title Signals and Slots - \ingroup architecture \brief An overview of Qt's signals and slots inter-object communication mechanism. diff --git a/doc/src/objecttrees.qdoc b/doc/src/objecttrees.qdoc deleted file mode 100644 index 183f7cd..0000000 --- a/doc/src/objecttrees.qdoc +++ /dev/null @@ -1,117 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! -\page objecttrees.html -\title Object Trees and Object Ownership -\ingroup architecture -\brief Information about the parent-child pattern used to describe -object ownership in Qt. - -\section1 Overview - -\link QObject QObjects\endlink organize themselves in object trees. -When you create a QObject with another object as parent, it's added to -the parent's \link QObject::children() children() \endlink list, and -is deleted when the parent is. It turns out that this approach fits -the needs of GUI objects very well. For example, a \l QShortcut -(keyboard shortcut) is a child of the relevant window, so when the -user closes that window, the shorcut is deleted too. - -\l QWidget, the base class of everything that appears on the screen, -extends the parent-child relationship. A child normally also becomes a -child widget, i.e. it is displayed in its parent's coordinate system -and is graphically clipped by its parent's boundaries. For example, -when the application deletes a message box after it has been -closed, the message box's buttons and label are also deleted, just as -we'd want, because the buttons and label are children of the message -box. - -You can also delete child objects yourself, and they will remove -themselves from their parents. For example, when the user removes a -toolbar it may lead to the application deleting one of its \l QToolBar -objects, in which case the tool bar's \l QMainWindow parent would -detect the change and reconfigure its screen space accordingly. - -The debugging functions \l QObject::dumpObjectTree() and \l -QObject::dumpObjectInfo() are often useful when an application looks or -acts strangely. - -\target note on the order of construction/destruction of QObjects -\section1 Construction/Destruction Order of QObjects - -When \l {QObject} {QObjects} are created on the heap (i.e., created -with \e new), a tree can be constructed from them in any order, and -later, the objects in the tree can be destroyed in any order. When any -QObject in the tree is deleted, if the object has a parent, the -destructor automatically removes the object from its parent. If the -object has children, the destructor automatically deletes each -child. No QObject is deleted twice, regardless of the order of -destruction. - -When \l {QObject} {QObjects} are created on the stack, the same -behavior applies. Normally, the order of destruction still doesn't -present a problem. Consider the following snippet: - -\snippet doc/src/snippets/code/doc_src_objecttrees.qdoc 0 - -The parent, \c window, and the child, \c quit, are both \l {QObject} -{QObjects} because QPushButton inherits QWidget, and QWidget inherits -QObject. This code is correct: the destructor of \c quit is \e not -called twice because the C++ language standard \e {(ISO/IEC 14882:2003)} -specifies that destructors of local objects are called in the reverse -order of their constructors. Therefore, the destructor of -the child, \c quit, is called first, and it removes itself from its -parent, \c window, before the destructor of \c window is called. - -But now consider what happens if we swap the order of construction, as -shown in this second snippet: - -\snippet doc/src/snippets/code/doc_src_objecttrees.qdoc 1 - -In this case, the order of destruction causes a problem. The parent's -destructor is called first because it was created last. It then calls -the destructor of its child, \c quit, which is incorrect because \c -quit is a local variable. When \c quit subsequently goes out of scope, -its destructor is called again, this time correctly, but the damage has -already been done. - -*/ diff --git a/doc/src/overviews.qdoc b/doc/src/overviews.qdoc index f4085f5..8b986fc 100644 --- a/doc/src/overviews.qdoc +++ b/doc/src/overviews.qdoc @@ -46,3 +46,28 @@ \generatelist overviews */ + +/*! + \group frameworks-technologies + \title Frameworks and Technologies + + \brief Documentation about the frameworks and technologies in Qt + + These documents dive into the frameworks of classes that Qt provides, + and provide background information about the technical solutions used + in Qt's architecture. + + \generatelist{related} +*/ + +/*! + \group best-practices + \title How-To's and Best Practices + + \brief How-To Guides and Best Practices + + These documents provide guidelines and best practices explaining + how to use Qt to solve specific technical problems. + + \generatelist{related} +*/ diff --git a/doc/src/coordsys.qdoc b/doc/src/painting-and-printing/coordsys.qdoc index 6042300..5269ea2 100644 --- a/doc/src/coordsys.qdoc +++ b/doc/src/painting-and-printing/coordsys.qdoc @@ -39,25 +39,16 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Qt Coordinate System Documentation. -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page coordsys.html \title The Coordinate System - \ingroup architecture \brief Information about the coordinate system used by the paint system. + \previouspage Drawing and Filling + \contentspage The Paint System + \nextpage Reading and Writing Image Files + The coordinate system is controlled by the QPainter class. Together with the QPaintDevice and QPaintEngine classes, QPainter form the basis of Qt's painting system, Arthur. QPainter diff --git a/doc/src/paintsystem.qdoc b/doc/src/painting-and-printing/paintsystem.qdoc index 23b5685..4fd29d5 100644 --- a/doc/src/paintsystem.qdoc +++ b/doc/src/painting-and-printing/paintsystem.qdoc @@ -40,9 +40,28 @@ ****************************************************************************/ /*! - \page paintsystem.html + \group painting + \title Painting Classes + \ingroup groups + + \brief Classes that provide support for painting. + + See also this introduction to the \link coordsys.html Qt + coordinate system. \endlink +*/ + +/*! + \group painting-3D + \title Rendering in 3D + \ingroup groups + + \brief Classes that provide support for rendering in 3D. +*/ +/*! + \page paintsystem.html \title The Paint System + \ingroup frameworks-technologies Qt's paint system enables painting on screen and print devices using the same API, and is primarily based on the QPainter, @@ -62,14 +81,211 @@ same painting pipeline making it easy to add support for new features and providing default implementations for unsupported ones. + + \section1 Topics + \list + \o \l{Classes for Painting} + \o \l{Paint Devices and Backends} + \o \l{Drawing and Filling} + \o \l{The Coordinate System} + \o \l{Reading and Writing Image Files} + \o \l{Styling} + \o \l{Printing with Qt} + \endlist + + \section1 Classes for Painting + + These classes provide support for painting onto a paint device. + + \annotatedlist painting Alternatively, Qt provides the QtOpenGL module, offering classes that makes it easy to use OpenGL in Qt applications. Among others, the module provides an OpenGL widget class that can be used just like any other Qt widget, except that it opens an OpenGL display buffer where the OpenGL API can be used to render the contents. +*/ + + +/*! + \page paintsystem-devices.html + \title Paint Devices and Backends + + \contentspage The Paint System + \nextpage Drawing and Filling + + \section1 Creating a Paint Device + + The QPaintDevice class is the base class of objects that can be + painted, i.e. QPainter can draw on any QPaintDevice + subclass. QPaintDevice's drawing capabilities are currently + implemented by the QWidget, QImage, QPixmap, QGLWidget, + QGLPixelBuffer, QPicture and QPrinter subclasses. + + \image paintsystem-devices.png + + \table 100% + \row \o \bold Widget + + The QWidget class is the base class of all user interface + objects. The widget is the atom of the user interface: it receives + mouse, keyboard and other events from the window system, and + paints a representation of itself on the screen. + + \row \o \bold Image + + The QImage class provides a hardware-independent image + representation which is designed and optimized for I/O, and for + direct pixel access and manipulation. QImage supports several + image formats including monochrome, 8-bit, 32-bit and + alpha-blended images. + + One advantage of using QImage as a paint device is that it is + possible to guarantee the pixel exactness of any drawing operation + in a platform-independent way. Another benefit is that the + painting can be performed in another thread than the current GUI + thread. + + \row \o \bold Pixmap + + The QPixmap class is an off-screen image representation which is + designed and optimized for showing images on screen. Unlike + QImage, the pixel data in a pixmap is internal and is managed by + the underlying window system, i.e. pixels can only be accessed + through QPainter functions or by converting the QPixmap to a + QImage. + + To optimize drawing with QPixmap, Qt provides the QPixmapCache + class which can be used to store temporary pixmaps that are + expensive to generate without using more storage space than the + cache limit. + + Qt also provides the QBitmap convenience class, inheriting + QPixmap. QBitmap guarantees monochrome (1-bit depth) pixmaps, and + is mainly used for creating custom QCursor and QBrush objects, + constructing QRegion objects, and for setting masks for pixmaps + and widgets. + + \row \o \bold {OpenGL Widget} + + As mentioned previously, Qt provides the QtOpenGL module offering + classes that makes it easy to use OpenGL in Qt applications. For + example, the QGLWidget enables the OpenGL API for + rendering. + + But QGLWidget is also a QWidget subclass, and can be used by + QPainter as any other paint device. One huge benefit from this is + that it enables Qt to utilize the high performance of OpenGL for + most drawing operations, such as transformations and pixmap + drawing. + + \row \o \bold {Pixel Buffer} + + The QtOpenGL module also provides the QGLPixelBuffer class which + inherits QPaintDevice directly. + + QGLPixelBuffer encapsulates an OpenGL pbuffer. Rendering into a + pbuffer is normally done using full hardware acceleration which + can be significantly faster than rendering into a QPixmap. - \tableofcontents section1 + \row \o \bold {Framebuffer Object} + + The QtOpenGL module also provides the QGLFramebufferObject class + which inherits QPaintDevice directly. + + QGLFramebufferObject encapsulates an OpenGL framebuffer object. + Framebuffer objects can also be used for off-screen rendering, and + offer several advantages over pixel buffers for this purpose. + These are described in the QGLFramebufferObject class documentation. + + \row \o \bold {Picture} + + The QPicture class is a paint device that records and replays + QPainter commands. A picture serializes painter commands to an IO + device in a platform-independent format. QPicture is also + resolution independent, i.e. a QPicture can be displayed on + different devices (for example svg, pdf, ps, printer and screen) + looking the same. + + Qt provides the QPicture::load() and QPicture::save() functions + as well as streaming operators for loading and saving pictures. + + \row \o \bold {Printer} + + The QPrinter class is a paint device that paints on a printer. On + Windows or Mac OS X, QPrinter uses the built-in printer + drivers. On X11, QPrinter generates postscript and sends that to + lpr, lp, or another print program. QPrinter can also print to any + other QPrintEngine object. + + The QPrintEngine class defines an interface for how QPrinter + interacts with a given printing subsystem. The common case when + creating your own print engine, is to derive from both + QPaintEngine and QPrintEngine. + + The output format is by default determined by the platform the + printer is running on, but by explicitly setting the output format + to QPrinter::PdfFormat, QPrinter will generate its output as a PDF + file. + + \row \o \bold {Custom Backends} + + Support for a new backend can be implemented by deriving from the + QPaintDevice class and reimplementing the virtual + QPaintDevice::paintEngine() function to tell QPainter which paint + engine should be used to draw on this particular device. To + actually be able to draw on the device, this paint engine must be + a custom paint engine created by deriving from the QPaintEngine + class. + + \endtable + + \section1 Selecting the Painting Backend + + Since Qt 4.5, it is possible to replace the paint engines and paint + devices used for widgets, pixmaps and the offscreen double buffer. By + default the backends are: + + \table + \row + \o Windows + \o Software Rasterizer + \row + \o X11 + \o X11 + \row + \o Mac OS X + \o CoreGraphics + \row + \o Embedded + \o Software Rasterizer + \endtable + + Passing a command line parameter to the application, such as, + \c{-graphicssystem raster}, specifies that Qt should use the software + rasterizer for this application. The Software rasterizer is fully + supported on all platforms. + + \code + > analogclock -graphicssystem raster + \endcode + + There is also a \c{-graphicssystem opengl} mode that uses OpenGL for + all drawing. Currently, this engine is experimental as it does not draw + everything correctly. + + Qt also supports being configured using \c {-graphicssystem + raster|opengl} in which case all applications will use the + specified graphics system for its graphics. +*/ + +/*! + \page paintsystem-drawing.html + \title Drawing and Filling + + \previouspage Paint Devices and Backends + \contentspage The Paint System + \nextpage The Coordinate System \section1 Drawing @@ -185,134 +401,15 @@ colors around a center point. \endtable +*/ - \section1 Creating a Paint Device - - The QPaintDevice class is the base class of objects that can be - painted, i.e. QPainter can draw on any QPaintDevice - subclass. QPaintDevice's drawing capabilities are currently - implemented by the QWidget, QImage, QPixmap, QGLWidget, - QGLPixelBuffer, QPicture and QPrinter subclasses. - - \image paintsystem-devices.png - - \table 100% - \row \o \bold {Custom Backends} - - Support for a new backend can be implemented by deriving from the - QPaintDevice class and reimplementing the virtual - QPaintDevice::paintEngine() function to tell QPainter which paint - engine should be used to draw on this particular device. To - actually be able to draw on the device, this paint engine must be - a custom paint engine created by deriving from the QPaintEngine - class. - - \endtable - - \section2 Widget - - The QWidget class is the base class of all user interface - objects. The widget is the atom of the user interface: it receives - mouse, keyboard and other events from the window system, and - paints a representation of itself on the screen. - - \section2 Image - - The QImage class provides a hardware-independent image - representation which is designed and optimized for I/O, and for - direct pixel access and manipulation. QImage supports several - image formats including monochrome, 8-bit, 32-bit and - alpha-blended images. - - One advantage of using QImage as a paint device is that it is - possible to guarantee the pixel exactness of any drawing operation - in a platform-independent way. Another benefit is that the - painting can be performed in another thread than the current GUI - thread. - - \section2 Pixmap - - The QPixmap class is an off-screen image representation which is - designed and optimized for showing images on screen. Unlike - QImage, the pixel data in a pixmap is internal and is managed by - the underlying window system, i.e. pixels can only be accessed - through QPainter functions or by converting the QPixmap to a - QImage. - - To optimize drawing with QPixmap, Qt provides the QPixmapCache - class which can be used to store temporary pixmaps that are - expensive to generate without using more storage space than the - cache limit. - - Qt also provides the QBitmap convenience class, inheriting - QPixmap. QBitmap guarantees monochrome (1-bit depth) pixmaps, and - is mainly used for creating custom QCursor and QBrush objects, - constructing QRegion objects, and for setting masks for pixmaps - and widgets. - - \section2 OpenGL Widget - - As mentioned above, Qt provides the QtOpenGL module offering - classes that makes it easy to use OpenGL in Qt applications. For - example, the QGLWidget enables the OpenGL API for - rendering. - - But QGLWidget is also a QWidget subclass, and can be used by - QPainter as any other paint device. One huge benefit from this is - that it enables Qt to utilize the high performance of OpenGL for - most drawing operations, such as transformations and pixmap - drawing. - - \section2 Pixel Buffer - - The QtOpenGL module also provides the QGLPixelBuffer class which - inherits QPaintDevice directly. - - QGLPixelBuffer encapsulates an OpenGL pbuffer. Rendering into a - pbuffer is normally done using full hardware acceleration which - can be significantly faster than rendering into a QPixmap. - - \section2 Framebuffer Object - - The QtOpenGL module also provides the QGLFramebufferObject class - which inherits QPaintDevice directly. - - QGLFramebufferObject encapsulates an OpenGL framebuffer object. - Framebuffer objects can also be used for off-screen rendering, and - offer several advantages over pixel buffers for this purpose. - These are described in the QGLFramebufferObject class documentation. - - \section2 Picture - - The QPicture class is a paint device that records and replays - QPainter commands. A picture serializes painter commands to an IO - device in a platform-independent format. QPicture is also - resolution independent, i.e. a QPicture can be displayed on - different devices (for example svg, pdf, ps, printer and screen) - looking the same. - - Qt provides the QPicture::load() and QPicture::save() functions - as well as streaming operators for loading and saving pictures. - - \section2 Printer - - The QPrinter class is a paint device that paints on a printer. On - Windows or Mac OS X, QPrinter uses the built-in printer - drivers. On X11, QPrinter generates postscript and sends that to - lpr, lp, or another print program. QPrinter can also print to any - other QPrintEngine object. - - The QPrintEngine class defines an interface for how QPrinter - interacts with a given printing subsystem. The common case when - creating your own print engine, is to derive from both - QPaintEngine and QPrintEngine. - - The output format is by default determined by the platform the - printer is running on, but by explicitly setting the output format - to QPrinter::PdfFormat, QPrinter will generate its output as a PDF - file. +/*! + \page paintsystem-images.html + \title Reading and Writing Image Files - \section1 Reading and Writing Image Files + \previouspage The Coordinate System + \contentspage The Paint System + \nextpage Styling The most common way to read images is through QImage and QPixmap's constructors, or by calling the QImage::load() and QPixmap::load() @@ -359,30 +456,57 @@ QImageReader and QImageWriter will automatically load the plugin and start using it. + \section1 Rendering SVG files + \table 100% \row \o \image paintsystem-svg.png \o \bold {SVG Rendering} - Scalable Vector Graphics (SVG) is an language for describing both - static and animated two-dimensional vector graphics. Qt includes - support for the static features of SVG 1.2 Tiny. + Scalable Vector Graphics (SVG) is a language for describing two-dimensional + graphics and graphical applications in XML. SVG 1.1 is a W3C Recommendation + and forms the core of the current SVG developments in Qt. SVG 1.2 is the + specification currently being developed by the \l{SVG Working Group}, and it + is \l{http://www.w3.org/TR/SVG12/}{available in draft form}. + The \l{Mobile SVG Profiles} (SVG Basic and SVG Tiny) are aimed at + resource-limited devices and are part of the 3GPP platform for third generation + mobile phones. You can read more about SVG at \l{About SVG}. + + Qt supports the \l{SVG 1.2 Tiny Static Features}{static features} of + \l{SVG 1.2 Tiny}. ECMA scripts and DOM manipulation are currently not + supported. - SVG drawings can be rendered onto any QPaintDevice subclass. This + SVG drawings can be rendered onto any QPaintDevice subclass. This approach gives developers the flexibility to experiment, in order to find the best solution for each application. - The easiest way to render SVG files is to construct a QSvgWidget - and load an SVG file using one of the QSvgWidget::load() - functions. The rendering is performed by the QSvgRenderer class - which also can be used directly to provide SVG support for custom - widgets. + The easiest way to render SVG files is to construct a QSvgWidget and + load an SVG file using one of the QSvgWidget::load() functions. - For more information, see the QtSvg module documentation. + QSvgRenderer is the class responsible for rendering SVG files for + QSvgWidget, and it can be used directly to provide SVG support for + custom widgets. + To load an SVG file, construct a QSvgRenderer with a file name or the + contents of a file, or call QSvgRenderer::load() on an existing + renderer. If the SVG file has been loaded successfully the + QSvgRenderer::isValid() will return true. + + Once you have loaded the SVG file successfully, you can render it + with the QSvgRenderer::render() function. Note that this scheme allows + you to render SVG files on all paint devices supported by Qt, including + QWidget, QGLWidget, and QImage. See the \l{SVG Viewer Example}{SVG Viewer} + example for more details. \endtable +*/ - \section1 Styling +/*! + \page paintsystem-styling.html + \title Styling + + \previouspage Reading and Writing Image Files + \contentspage The Paint System + \nextpage Printing with Qt Qt's built-in widgets use the QStyle class to perform nearly all of their drawing. QStyle is an abstract base class that @@ -440,44 +564,7 @@ state. \endtable - - \section1 Selecting the Painting Backend - - Since Qt 4.5, it is possible to replace the paint engines and paint - devices used for widgets, pixmaps and the offscreen double buffer. By - default the backends are: - - \table - \row - \o Windows - \o Software Rasterizer - \row - \o X11 - \o X11 - \row - \o Mac OS X - \o CoreGraphics - \row - \o Embedded - \o Software Rasterizer - \endtable - - Passing a command line parameter to the application, such as, - \c{-graphicssystem raster}, specifies that Qt should use the software - rasterizer for this application. The Software rasterizer is fully - supported on all platforms. - - \code - > analogclock -graphicssystem raster - \endcode - - There is also a \c{-graphicssystem opengl} mode that uses OpenGL for - all drawing. Currently, this engine is experimental as it does not draw - everything correctly. - - Qt also supports being configured using \c {-graphicssystem - raster|opengl} in which case all applications will use the - specified graphics system for its graphics. - - */ - + + For more information about widget styling and appearance, see the + documentation about \l{Implementing Styles and Style Aware Widgets}. +*/ diff --git a/doc/src/printing.qdoc b/doc/src/painting-and-printing/printing.qdoc index 0472827..291286e 100644 --- a/doc/src/printing.qdoc +++ b/doc/src/painting-and-printing/printing.qdoc @@ -40,10 +40,19 @@ ****************************************************************************/ /*! + \group printing + \title Printer and Printing APIs + \brief Classes for producing printed output + \ingroup groups +*/ + +/*! \page printing.html \title Printing with Qt - \ingroup multimedia - \ingroup text-processing + + \previouspage Styling + \contentspage The Paint System + \brief A guide to producing printed output with Qt's paint system and widgets. Qt provides extensive cross-platform support for printing. Using the printing @@ -53,6 +62,13 @@ generation facilities. \tableofcontents + + \section1 Classes Supporting Printing + + The following classes support the selecting and setting up of printers and + printing output. + + \annotatedlist printing \section1 Paint Devices and Printing diff --git a/doc/src/atomic-operations.qdoc b/doc/src/platforms/atomic-operations.qdoc index d0f5978..19fbea6 100644 --- a/doc/src/atomic-operations.qdoc +++ b/doc/src/platforms/atomic-operations.qdoc @@ -42,19 +42,20 @@ /*! \page atomic-operations.html \title Implementing Atomic Operations - \ingroup architecture - \ingroup qt-embedded-linux \brief A guide to implementing atomic operations on new architectures. + \ingroup best-practices + \ingroup qt-embedded-linux + Qt uses an optimization called \l {Implicitly Shared Classes}{implicit sharing} for many of its value classes. Starting with Qt 4, all of Qt's implicitly shared classes can safely be copied across threads like any other value classes, - i.e., they are fully \l {Thread Support in Qt#Reentrancy and - Thread-Safety}{reentrant}. This is accomplished by implementing - reference counting operations using atomic hardware instructions - on all the different platforms supported by Qt. + i.e., they are fully \l {Reentrancy and Thread-Safety}{reentrant}. + This is accomplished by implementing reference counting + operations using atomic hardware instructions on all the + different platforms supported by Qt. To support a new architecture, it is important to ensure that these platform-specific atomic operations are implemented in a diff --git a/doc/src/compiler-notes.qdoc b/doc/src/platforms/compiler-notes.qdoc index 4873cf5..f4e9805 100644 --- a/doc/src/compiler-notes.qdoc +++ b/doc/src/platforms/compiler-notes.qdoc @@ -41,7 +41,7 @@ /*! \page compiler-notes.html - \ingroup platform-notes + \ingroup platform-specific \title Compiler Notes \brief Information about the C++ compilers and tools used to build Qt. diff --git a/doc/src/emb-accel.qdoc b/doc/src/platforms/emb-accel.qdoc index 818538a..818538a 100644 --- a/doc/src/emb-accel.qdoc +++ b/doc/src/platforms/emb-accel.qdoc diff --git a/doc/src/qtopiacore-architecture.qdoc b/doc/src/platforms/emb-architecture.qdoc index 06ffac6..06ffac6 100644 --- a/doc/src/qtopiacore-architecture.qdoc +++ b/doc/src/platforms/emb-architecture.qdoc diff --git a/doc/src/emb-charinput.qdoc b/doc/src/platforms/emb-charinput.qdoc index 5ceb6a4..5ceb6a4 100644 --- a/doc/src/emb-charinput.qdoc +++ b/doc/src/platforms/emb-charinput.qdoc diff --git a/doc/src/emb-crosscompiling.qdoc b/doc/src/platforms/emb-crosscompiling.qdoc index 2e0ba4b..2e0ba4b 100644 --- a/doc/src/emb-crosscompiling.qdoc +++ b/doc/src/platforms/emb-crosscompiling.qdoc diff --git a/doc/src/emb-deployment.qdoc b/doc/src/platforms/emb-deployment.qdoc index 9a83dcf..9a83dcf 100644 --- a/doc/src/emb-deployment.qdoc +++ b/doc/src/platforms/emb-deployment.qdoc diff --git a/doc/src/emb-differences.qdoc b/doc/src/platforms/emb-differences.qdoc index cf3ab75..cf3ab75 100644 --- a/doc/src/emb-differences.qdoc +++ b/doc/src/platforms/emb-differences.qdoc diff --git a/doc/src/qtopiacore-displaymanagement.qdoc b/doc/src/platforms/emb-displaymanagement.qdoc index 8a743b1..8a743b1 100644 --- a/doc/src/qtopiacore-displaymanagement.qdoc +++ b/doc/src/platforms/emb-displaymanagement.qdoc diff --git a/doc/src/emb-envvars.qdoc b/doc/src/platforms/emb-envvars.qdoc index c423fef..c423fef 100644 --- a/doc/src/emb-envvars.qdoc +++ b/doc/src/platforms/emb-envvars.qdoc diff --git a/doc/src/emb-features.qdoc b/doc/src/platforms/emb-features.qdoc index fdd2e46..fdd2e46 100644 --- a/doc/src/emb-features.qdoc +++ b/doc/src/platforms/emb-features.qdoc diff --git a/doc/src/emb-fonts.qdoc b/doc/src/platforms/emb-fonts.qdoc index 70fddbf..70fddbf 100644 --- a/doc/src/emb-fonts.qdoc +++ b/doc/src/platforms/emb-fonts.qdoc diff --git a/doc/src/emb-framebuffer-howto.qdoc b/doc/src/platforms/emb-framebuffer-howto.qdoc index 14400c2..14400c2 100644 --- a/doc/src/emb-framebuffer-howto.qdoc +++ b/doc/src/platforms/emb-framebuffer-howto.qdoc diff --git a/doc/src/emb-install.qdoc b/doc/src/platforms/emb-install.qdoc index e23cc1b..e23cc1b 100644 --- a/doc/src/emb-install.qdoc +++ b/doc/src/platforms/emb-install.qdoc diff --git a/doc/src/emb-kmap2qmap.qdoc b/doc/src/platforms/emb-kmap2qmap.qdoc index 291a553..291a553 100644 --- a/doc/src/emb-kmap2qmap.qdoc +++ b/doc/src/platforms/emb-kmap2qmap.qdoc diff --git a/doc/src/emb-makeqpf.qdoc b/doc/src/platforms/emb-makeqpf.qdoc index dc1196a..dc1196a 100644 --- a/doc/src/emb-makeqpf.qdoc +++ b/doc/src/platforms/emb-makeqpf.qdoc diff --git a/doc/src/qtopiacore-opengl.qdoc b/doc/src/platforms/emb-opengl.qdoc index e61ccde..e61ccde 100644 --- a/doc/src/qtopiacore-opengl.qdoc +++ b/doc/src/platforms/emb-opengl.qdoc diff --git a/doc/src/emb-performance.qdoc b/doc/src/platforms/emb-performance.qdoc index 9bc373b..9bc373b 100644 --- a/doc/src/emb-performance.qdoc +++ b/doc/src/platforms/emb-performance.qdoc diff --git a/doc/src/emb-pointer.qdoc b/doc/src/platforms/emb-pointer.qdoc index 39a8482..39a8482 100644 --- a/doc/src/emb-pointer.qdoc +++ b/doc/src/platforms/emb-pointer.qdoc diff --git a/doc/src/emb-porting.qdoc b/doc/src/platforms/emb-porting.qdoc index 1afd1be..1afd1be 100644 --- a/doc/src/emb-porting.qdoc +++ b/doc/src/platforms/emb-porting.qdoc diff --git a/doc/src/emb-qvfb.qdoc b/doc/src/platforms/emb-qvfb.qdoc index 48e0d35..48e0d35 100644 --- a/doc/src/emb-qvfb.qdoc +++ b/doc/src/platforms/emb-qvfb.qdoc diff --git a/doc/src/emb-running.qdoc b/doc/src/platforms/emb-running.qdoc index cb7a7ae..cb7a7ae 100644 --- a/doc/src/emb-running.qdoc +++ b/doc/src/platforms/emb-running.qdoc diff --git a/doc/src/emb-vnc.qdoc b/doc/src/platforms/emb-vnc.qdoc index c8289f8..c8289f8 100644 --- a/doc/src/emb-vnc.qdoc +++ b/doc/src/platforms/emb-vnc.qdoc diff --git a/doc/src/mac-differences.qdoc b/doc/src/platforms/mac-differences.qdoc index ee77125..b911510 100644 --- a/doc/src/mac-differences.qdoc +++ b/doc/src/platforms/mac-differences.qdoc @@ -43,7 +43,7 @@ \page mac-differences.html \title Qt for Mac OS X - Specific Issues \brief A description of issues with Qt that are specific to Mac OS X. - \ingroup platform-notes + \ingroup platform-specific This file outlines known issues and possible workarounds when using Qt on Mac OS X. Contact Qt's technical support team if you find diff --git a/doc/src/platform-notes-rtos.qdoc b/doc/src/platforms/platform-notes-rtos.qdoc index 8a52d84..8a52d84 100644 --- a/doc/src/platform-notes-rtos.qdoc +++ b/doc/src/platforms/platform-notes-rtos.qdoc diff --git a/doc/src/platform-notes.qdoc b/doc/src/platforms/platform-notes.qdoc index fc829f7..20f0933 100644 --- a/doc/src/platform-notes.qdoc +++ b/doc/src/platforms/platform-notes.qdoc @@ -40,8 +40,19 @@ ****************************************************************************/ /*! - \page platform-notes-platforms.html - \ingroup platform-notes + \group platform-specific + \title Platform-Specific Documentation + \brief Documents describing platform-specific features of Qt. + + These documents describe platform-specific features provided by Qt, and + discuss issues related to particular platforms and environments. + + \generatelist{related} +*/ + +/*! + \page platform-notes.html + \ingroup platform-specific \title Platform Notes \brief Information about the platforms on which Qt can be used. diff --git a/doc/src/qtopiacore.qdoc b/doc/src/platforms/qt-embedded-linux.qdoc index c8fccf1..5329218 100644 --- a/doc/src/qtopiacore.qdoc +++ b/doc/src/platforms/qt-embedded-linux.qdoc @@ -40,8 +40,20 @@ ****************************************************************************/ /*! + \group qws + \title Qt for Embedded Linux Classes + \ingroup groups + \ingroup qt-embedded-linux + \ingroup platform-specific + + \brief Classes that are specific to Qt for Embedded Linux. + + These classes are relevant to \l{Qt for Embedded Linux} users. +*/ + + +/*! \group qt-embedded-linux - \ingroup topics \ingroup qt-embedded \title Qt for Embedded Linux \brief Documents specifically about Qt for Embedded Linux. @@ -71,7 +83,7 @@ \o \l {Qt for Embedded Linux Architecture}{Architecture Overview} \o \l {Installing Qt for Embedded Linux}{Installation} \o \l {Running Qt for Embedded Linux Applications}{Running Applications} - \o \l {Qt Examples#Qt for Embedded Linux}{Examples} + \o \l {Qt for Embedded Linux Examples}{Examples} \endlist \o \list diff --git a/doc/src/qt-embedded.qdoc b/doc/src/platforms/qt-embedded.qdoc index be9a458..22cba80 100644 --- a/doc/src/qt-embedded.qdoc +++ b/doc/src/platforms/qt-embedded.qdoc @@ -41,9 +41,9 @@ /*! \group qt-embedded - \ingroup topics \title Qt for Embedded Platforms \brief Documents related to Qt for Embedded Platforms. + \ingroup platform-specific Qt is available for embedded platforms and devices as well as for a number of desktop platforms. The features provided for each platform depend on the diff --git a/doc/src/qtmac-as-native.qdoc b/doc/src/platforms/qtmac-as-native.qdoc index 61c2143..265d222 100644 --- a/doc/src/qtmac-as-native.qdoc +++ b/doc/src/platforms/qtmac-as-native.qdoc @@ -86,7 +86,7 @@ \page qtmac-as-native.html \title Qt is Mac OS X Native \brief An explanation of Qt's native features on Mac OS X. - \ingroup platform-notes + \ingroup platform-specific This document explains what makes an application native on Mac OS X. It shows the areas where Qt is compliant, and the grey areas where diff --git a/doc/src/supported-platforms.qdoc b/doc/src/platforms/supported-platforms.qdoc index 6f63c87..8aec1e2 100644 --- a/doc/src/supported-platforms.qdoc +++ b/doc/src/platforms/supported-platforms.qdoc @@ -43,7 +43,7 @@ \page supported-platforms.html \title Supported Platforms \brief The platforms supported by Nokia for Qt. - \ingroup platform-notes + \ingroup platform-specific The Qt team strives to provide support for the platforms most frequently used by Qt users. We have designed our internal testing procedure to diff --git a/doc/src/wince-customization.qdoc b/doc/src/platforms/wince-customization.qdoc index 06de1c8..06de1c8 100644 --- a/doc/src/wince-customization.qdoc +++ b/doc/src/platforms/wince-customization.qdoc diff --git a/doc/src/wince-introduction.qdoc b/doc/src/platforms/wince-introduction.qdoc index 9a2c672..29f880e 100644 --- a/doc/src/wince-introduction.qdoc +++ b/doc/src/platforms/wince-introduction.qdoc @@ -40,11 +40,43 @@ ****************************************************************************/ /*! + \group qtce + \title Qt for Windows CE + \ingroup qt-embedded + \brief Documents related to Qt on Windows CE + + Qt for Windows CE is a C++ framework for GUI and application development + for embedded devices running Windows CE. It runs on a variety of processors, + including ARM, Intel x86, MIPS and SH-4. + + \table 100% + \header \o Getting Started \o Reference \o Performance and Optimization + \row + \o + \list + \o \l {Qt for Windows CE Requirements} + \o \l {Installing Qt on Windows CE} + \o \l {Windows CE - Introduction to using Qt}{Introduction to using Qt} + \endlist + \o + \list + \o \l {Windows CE - Using shadow builds}{Using shadow builds} + \o \l {Windows CE - Working with Custom SDKs}{Working with Custom SDKs} + \endlist + \o + \list + \o \l {Windows CE OpenGL ES}{OpenGL ES} + \o \l {Qt Performance Tuning} + \o \l {Fine-Tuning Features in Qt} + \endlist + \endtable +*/ + +/*! \page wince-with-qt-introduction.html \title Windows CE - Introduction to using Qt \brief An introduction to Qt for Windows CE developers. - \ingroup howto \ingroup qtce \tableofcontents diff --git a/doc/src/wince-opengl.qdoc b/doc/src/platforms/wince-opengl.qdoc index 3c7e22f..3c7e22f 100644 --- a/doc/src/wince-opengl.qdoc +++ b/doc/src/platforms/wince-opengl.qdoc diff --git a/doc/src/winsystem.qdoc b/doc/src/platforms/winsystem.qdoc index 8bb295d..5afa1f7 100644 --- a/doc/src/winsystem.qdoc +++ b/doc/src/platforms/winsystem.qdoc @@ -42,8 +42,7 @@ /*! \page winsystem.html \title Window System Specific Notes - \ingroup buildsystem - \ingroup deployment + \ingroup platform-specific Qt is a cross-platform GUI toolkit, so almost the entire API is the same on all platforms and window systems. If you wish to use diff --git a/doc/src/qtopengl.qdoc b/doc/src/platforms/x11overlays.qdoc index bb2f4e7..7d7a776 100644 --- a/doc/src/qtopengl.qdoc +++ b/doc/src/platforms/x11overlays.qdoc @@ -40,73 +40,8 @@ ****************************************************************************/ /*! - \module QtOpenGL - \title QtOpenGL Module - \contentspage Qt's Modules - \previouspage QtNetwork - \nextpage QtOpenVG - \ingroup modules - - \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. - - \bold{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 doc/src/snippets/code/doc_src_qtopengl.qdoc 0 - - To link against the module, add this line to your \l qmake \c - .pro file: - - \snippet doc/src/snippets/code/doc_src_qtopengl.qdoc 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. - - \warning The QtOpenGL module is part of the \l{Qt Full Framework Edition} - and the \l{Open Source Versions of Qt}. It is available on Windows, - X11, and Mac OS X. \l{Qt for Embedded Linux} supports OpenGL ES (OpenGL for - Embedded Systems). To be able to use the OpenGL API in \l{Qt for Embedded Linux}, - it must be integrated with the Q Window System (QWS). See the - \l{Qt for Embedded Linux and OpenGL} documentation for details. - - \section1 Installation - - When you install Qt for X11, the configure script will autodetect if - OpenGL headers and libraries are installed on your system, and if so, - it will include the QtOpenGL module in the Qt library. (If your - OpenGL headers or libraries are placed in a non-standard directory, - you may need to change the \c QMAKE_INCDIR_OPENGL and/or - \c QMAKE_LIBDIR_OPENGL in the config file for your system). - - When you install Qt for Windows and Mac OS X, the QtOpenGL - module is always included. X11 users might like to read the notes - on overlays below. - - The QGL documentation assumes that you are familiar with OpenGL - programming. If you're new to the subject a good starting point is - \l{http://www.opengl.org/}. - - \section1 How to Use X11 Overlays with Qt + \page x11overlays.html + \title How to Use X11 Overlays with Qt X11 overlays are a powerful mechanism for drawing annotations etc., on top of an image without destroying it, thus saving diff --git a/doc/src/porting-qsa.qdoc b/doc/src/porting/porting-qsa.qdoc index d22e2db..d22e2db 100644 --- a/doc/src/porting-qsa.qdoc +++ b/doc/src/porting/porting-qsa.qdoc diff --git a/doc/src/porting4-canvas.qdoc b/doc/src/porting/porting4-canvas.qdoc index ce68d56..5435723 100644 --- a/doc/src/porting4-canvas.qdoc +++ b/doc/src/porting/porting4-canvas.qdoc @@ -46,7 +46,6 @@ \previouspage Porting UI Files to Qt 4 \nextpage qt3to4 - The Qt 3 to 4 Porting Tool \ingroup porting - \ingroup multimedia \brief Hints and tips to assist with porting canvas applications to the Graphics View framework. diff --git a/doc/src/porting4-designer.qdoc b/doc/src/porting/porting4-designer.qdoc index d356392..d356392 100644 --- a/doc/src/porting4-designer.qdoc +++ b/doc/src/porting/porting4-designer.qdoc diff --git a/doc/src/porting/porting4-dnd.qdoc b/doc/src/porting/porting4-dnd.qdoc new file mode 100644 index 0000000..2eb2d01 --- /dev/null +++ b/doc/src/porting/porting4-dnd.qdoc @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page porting4-dnd.html + \title Porting to Qt 4 - Drag and Drop + \contentspage {Porting Guides}{Contents} + \previouspage Porting to Qt 4 - Virtual Functions + \nextpage Porting UI Files to Qt 4 + \ingroup porting + \brief An overview of the porting process for applications that use drag and drop. + + Qt 4 introduces a new set of classes to handle drag and drop operations + that aim to be easier to use than their counterparts in Qt 3. As a result, + the way that drag and drop is performed is quite different to the way + developers of Qt 3 applications have come to expect. In this guide, we + show the differences between the old and new APIs and indicate where + applications need to be changed when they are ported to Qt 4. + + \tableofcontents + + \section1 Dragging + + In Qt 3, drag operations are encapsulated by \c QDragObject (see Q3DragObject) + and its subclasses. These objects are typically constructed on the heap in + response to mouse click or mouse move events, and ownership of them is + transferred to Qt so that they can be deleted when the corresponding drag and + drop operations have been completed. The drag source has no control over how + the drag and drop operation is performed once the object's + \l{Q3DragObject::}{drag()} function is called, and it receives no information + about how the operation ended. + + \snippet doc/src/snippets/code/doc_src_dnd.qdoc 0 + + Similarly, in Qt 4, drag operations are also initiated when a QDrag object + is constructed and its \l{QDrag::}{exec()} function is called. In contrast, + these objects are typically constructed on the stack rather than the heap + since each drag and drop operation is performed synchronously as far as the + drag source is concerned. One key benefit of this is that the drag source + can receive information about how the operation ended from the value returned + by \l{QDrag::}{exec()}. + + \snippet doc/src/snippets/porting4-dropevents/window.cpp 2 + \snippet doc/src/snippets/porting4-dropevents/window.cpp 3 + \dots 8 + \snippet doc/src/snippets/porting4-dropevents/window.cpp 4 + \snippet doc/src/snippets/porting4-dropevents/window.cpp 5 + + A key difference in the above code is the use of the QMimeData class to hold + information about the data that is transferred. Qt 3 relies on subclasses + of \c QDragObject to provide support for specific MIME types; in Qt 4, the + use of QMimeData as a generic container for data makes the relationship + between MIME type and data more tranparent. QMimeData is described in more + detail later in this document. + + \section1 Dropping + + In both Qt 3 and Qt 4, it is possible to prepare a custom widget to accept + dropped data by enabling the \l{QWidget::}{acceptDrops} property of a widget, + usually in the widget's constructor. As a result, the widget will receive + drag enter events that can be handled by its \l{QWidget::}{dragEnterEvent()} + function. + As in Qt 3, custom widgets in Qt 4 handle these events by determining + whether the data supplied by the drag and drop operation can be dropped onto + the widget. Since the classes used to encapsulate MIME data are different in + Qt 3 and Qt 4, the exact implementations differ. + + In Qt 3, the drag enter event is handled by checking whether each of the + standard \c QDragObject subclasses can decode the data supplied, and + indicating success or failure of these checks via the event's + \l{QDragEnterEvent::}{accept()} function, as shown in this simple example: + + \snippet doc/src/snippets/code/doc_src_dnd.qdoc 1 + + In Qt 4, you can examine the MIME type describing the data to determine + whether the widget should accept the event or, for common data types, you + can use convenience functions: + + \snippet doc/src/snippets/porting4-dropevents/window.cpp 0 + + The widget has some control over the type of drag and drop operation to be + performed. In the above code, the action proposed by the drag source is + accepted, but + \l{Drag and Drop#Overriding Proposed Actions}{this can be overridden} if + required. + + In both Qt 3 and Qt 4, it is necessary to accept a given drag event in order + to receive the corresponding drop event. A custom widget in Qt 3 that can + accept dropped data in the form of text or images might provide an + implementation of \l{QWidget::}{dropEvent()} that looks like the following: + + \snippet doc/src/snippets/code/doc_src_dnd.qdoc 2 + + In Qt 4, the event is handled in a similar way: + + \snippet doc/src/snippets/porting4-dropevents/window.cpp 1 + + It is also possible to extract data stored for a particular MIME type if it + was specified by the drag source. + + \section1 MIME Types and Data + + In Qt 3, data to be transferred in drag and drop operations is encapsulated + in instances of \c QDragObject and its subclasses, representing specific + data formats related to common MIME type and subtypes. + + In Qt 4, only the QMimeData class is used to represent data, providing a + container for data stored in multiple formats, each associated with + a relevant MIME type. Since arbitrary MIME types can be specified, there is + no need for an extensive class hierarchy to represent different kinds of + information. Additionally, QMimeData it provides some convenience functions + to allow the most common data formats to be stored and retrieved with less + effort than for arbitrary MIME types. +*/ diff --git a/doc/src/porting4-modifiedvirtual.qdocinc b/doc/src/porting/porting4-modifiedvirtual.qdocinc index 1164238..1164238 100644 --- a/doc/src/porting4-modifiedvirtual.qdocinc +++ b/doc/src/porting/porting4-modifiedvirtual.qdocinc diff --git a/doc/src/porting4-obsoletedmechanism.qdocinc b/doc/src/porting/porting4-obsoletedmechanism.qdocinc index 584b910..584b910 100644 --- a/doc/src/porting4-obsoletedmechanism.qdocinc +++ b/doc/src/porting/porting4-obsoletedmechanism.qdocinc diff --git a/doc/src/porting4-overview.qdoc b/doc/src/porting/porting4-overview.qdoc index 5eff1ba..5eff1ba 100644 --- a/doc/src/porting4-overview.qdoc +++ b/doc/src/porting/porting4-overview.qdoc diff --git a/doc/src/porting4-removedenumvalues.qdocinc b/doc/src/porting/porting4-removedenumvalues.qdocinc index fe38d0e..fe38d0e 100644 --- a/doc/src/porting4-removedenumvalues.qdocinc +++ b/doc/src/porting/porting4-removedenumvalues.qdocinc diff --git a/doc/src/porting4-removedtypes.qdocinc b/doc/src/porting/porting4-removedtypes.qdocinc index 9d7c519..9d7c519 100644 --- a/doc/src/porting4-removedtypes.qdocinc +++ b/doc/src/porting/porting4-removedtypes.qdocinc diff --git a/doc/src/porting4-removedvariantfunctions.qdocinc b/doc/src/porting/porting4-removedvariantfunctions.qdocinc index dfaa8f3..dfaa8f3 100644 --- a/doc/src/porting4-removedvariantfunctions.qdocinc +++ b/doc/src/porting/porting4-removedvariantfunctions.qdocinc diff --git a/doc/src/porting4-removedvirtual.qdocinc b/doc/src/porting/porting4-removedvirtual.qdocinc index 1af4fa6..1af4fa6 100644 --- a/doc/src/porting4-removedvirtual.qdocinc +++ b/doc/src/porting/porting4-removedvirtual.qdocinc diff --git a/doc/src/porting4-renamedclasses.qdocinc b/doc/src/porting/porting4-renamedclasses.qdocinc index ef315a1..ef315a1 100644 --- a/doc/src/porting4-renamedclasses.qdocinc +++ b/doc/src/porting/porting4-renamedclasses.qdocinc diff --git a/doc/src/porting4-renamedenumvalues.qdocinc b/doc/src/porting/porting4-renamedenumvalues.qdocinc index 9519da1..9519da1 100644 --- a/doc/src/porting4-renamedenumvalues.qdocinc +++ b/doc/src/porting/porting4-renamedenumvalues.qdocinc diff --git a/doc/src/porting4-renamedfunctions.qdocinc b/doc/src/porting/porting4-renamedfunctions.qdocinc index 3e59a82..3e59a82 100644 --- a/doc/src/porting4-renamedfunctions.qdocinc +++ b/doc/src/porting/porting4-renamedfunctions.qdocinc diff --git a/doc/src/porting4-renamedstatic.qdocinc b/doc/src/porting/porting4-renamedstatic.qdocinc index 156ab73..156ab73 100644 --- a/doc/src/porting4-renamedstatic.qdocinc +++ b/doc/src/porting/porting4-renamedstatic.qdocinc diff --git a/doc/src/porting4-renamedtypes.qdocinc b/doc/src/porting/porting4-renamedtypes.qdocinc index fc8f604..fc8f604 100644 --- a/doc/src/porting4-renamedtypes.qdocinc +++ b/doc/src/porting/porting4-renamedtypes.qdocinc diff --git a/doc/src/porting4.qdoc b/doc/src/porting/porting4.qdoc index 4efb7be..f4bcfcc 100644 --- a/doc/src/porting4.qdoc +++ b/doc/src/porting/porting4.qdoc @@ -40,6 +40,19 @@ ****************************************************************************/ /*! + \group porting + \title Porting Guides + \brief Guides related to porting Qt applications and libraries. + \ingroup best-practices + + A number of guides and documents are available that cover porting issues, + from detailed coverage of API differences between Qt 3 and Qt 4 to + platform and tool-specific documentation. + + \generatelist{related} +*/ + +/*! \page porting4.html \title Porting to Qt 4 \contentspage {Porting Guides}{Contents} @@ -267,7 +280,7 @@ \table \header \o Qt 3 class name \o Qt 4 class name - \input porting4-renamedclasses.qdocinc + \input porting/porting4-renamedclasses.qdocinc \endtable The table below lists the enums and typedefs that have been @@ -281,7 +294,7 @@ \table \header \o Qt 3 type name \o Qt 4 type name - \input porting4-renamedtypes.qdocinc + \input porting/porting4-renamedtypes.qdocinc \endtable \omit @@ -301,7 +314,7 @@ \table \header \o Qt 3 enum value name \o Qt 4 enum value name - \input porting4-renamedenumvalues.qdocinc + \input porting/porting4-renamedenumvalues.qdocinc \endtable In addition, the following \l{Qt::WindowFlags}{window flags} have @@ -722,7 +735,7 @@ The \c QAsyncIO class was used internally in Qt 2.x in conjunction with QImageConsumer. It was obsoleted in Qt 3.0. - \input porting4-obsoletedmechanism.qdocinc + \input porting/porting4-obsoletedmechanism.qdocinc \section1 QBackInsertIterator @@ -1220,20 +1233,20 @@ The \c QDataPump class was used internally in Qt 2.x in conjunction with QImageConsumer. It was obsoleted in Qt 3.0. - \input porting4-obsoletedmechanism.qdocinc + \input porting/porting4-obsoletedmechanism.qdocinc \section1 QDataSink The \c QDataSink class was used internally in Qt 2.x in conjunction with QImageConsumer. It was obsoleted in Qt 3.0. - \input porting4-obsoletedmechanism.qdocinc + \input porting/porting4-obsoletedmechanism.qdocinc \section1 QDataSource The \c QDataSource class was used internally in Qt 2.x in conjunction with QImageConsumer. It was obsoleted in Qt 3.0. - \input porting4-obsoletedmechanism.qdocinc + \input porting/porting4-obsoletedmechanism.qdocinc \section1 QDataTable @@ -2116,7 +2129,7 @@ The QIODeviceSource class was used internally in Qt 2.x in conjunction with QImageConsumer. It was obsoleted in Qt 3.0. - \input porting4-obsoletedmechanism.qdocinc + \input porting/porting4-obsoletedmechanism.qdocinc \section1 QLabel @@ -2553,7 +2566,7 @@ If you need to manage a set of actions created for a particular menu, we suggest that you construct a QActionGroup and add them to that. - The \l{Qt Examples#Main Windows}{Main Window examples} provided + The \l{Main Window Examples} provided show how to use Qt's action system to construct menus, toolbars, and other common user interface elements. @@ -3974,7 +3987,7 @@ \table \header \o Qt 3 function \o Qt 4 function - \input porting4-removedvariantfunctions.qdocinc + \input porting/porting4-removedvariantfunctions.qdocinc \endtable See the QVariant::Type enum for a list of types supported by QVariant. @@ -4219,13 +4232,13 @@ \table \header \o Qt 3 function signature \o Qt 4 function signature - \input porting4-modifiedvirtual.qdocinc + \input porting/porting4-modifiedvirtual.qdocinc \endtable Virtual functions that are not virtual in Qt 4: \table \header \o Qt 3 function \o Comment - \input porting4-removedvirtual.qdocinc + \input porting/porting4-removedvirtual.qdocinc \endtable */ diff --git a/doc/src/qt3to4.qdoc b/doc/src/porting/qt3to4.qdoc index d788f67..d788f67 100644 --- a/doc/src/qt3to4.qdoc +++ b/doc/src/porting/qt3to4.qdoc diff --git a/doc/src/qt4-accessibility.qdoc b/doc/src/porting/qt4-accessibility.qdoc index 747ca8d..1b985c1 100644 --- a/doc/src/qt4-accessibility.qdoc +++ b/doc/src/porting/qt4-accessibility.qdoc @@ -42,7 +42,6 @@ /*! \page qt4-accessibility.html \title Cross-Platform Accessibility Support in Qt 4 - \ingroup accessibility \contentspage {What's New in Qt 4}{Home} \previouspage The New Qt Designer diff --git a/doc/src/qt4-arthur.qdoc b/doc/src/porting/qt4-arthur.qdoc index b253d06..b253d06 100644 --- a/doc/src/qt4-arthur.qdoc +++ b/doc/src/porting/qt4-arthur.qdoc diff --git a/doc/src/qt4-designer.qdoc b/doc/src/porting/qt4-designer.qdoc index 0bfe034..0bfe034 100644 --- a/doc/src/qt4-designer.qdoc +++ b/doc/src/porting/qt4-designer.qdoc diff --git a/doc/src/qt4-interview.qdoc b/doc/src/porting/qt4-interview.qdoc index 158de87..158de87 100644 --- a/doc/src/qt4-interview.qdoc +++ b/doc/src/porting/qt4-interview.qdoc diff --git a/doc/src/qt4-mainwindow.qdoc b/doc/src/porting/qt4-mainwindow.qdoc index 7c48b95..7c48b95 100644 --- a/doc/src/qt4-mainwindow.qdoc +++ b/doc/src/porting/qt4-mainwindow.qdoc diff --git a/doc/src/qt4-network.qdoc b/doc/src/porting/qt4-network.qdoc index 36fd46a..36fd46a 100644 --- a/doc/src/qt4-network.qdoc +++ b/doc/src/porting/qt4-network.qdoc diff --git a/doc/src/qt4-scribe.qdoc b/doc/src/porting/qt4-scribe.qdoc index 64037cf..64037cf 100644 --- a/doc/src/qt4-scribe.qdoc +++ b/doc/src/porting/qt4-scribe.qdoc diff --git a/doc/src/qt4-sql.qdoc b/doc/src/porting/qt4-sql.qdoc index 3425e96..3425e96 100644 --- a/doc/src/qt4-sql.qdoc +++ b/doc/src/porting/qt4-sql.qdoc diff --git a/doc/src/qt4-styles.qdoc b/doc/src/porting/qt4-styles.qdoc index 4134962..4134962 100644 --- a/doc/src/qt4-styles.qdoc +++ b/doc/src/porting/qt4-styles.qdoc diff --git a/doc/src/qt4-threads.qdoc b/doc/src/porting/qt4-threads.qdoc index 1800d6a..1800d6a 100644 --- a/doc/src/qt4-threads.qdoc +++ b/doc/src/porting/qt4-threads.qdoc diff --git a/doc/src/qt4-tulip.qdoc b/doc/src/porting/qt4-tulip.qdoc index 9354651..9354651 100644 --- a/doc/src/qt4-tulip.qdoc +++ b/doc/src/porting/qt4-tulip.qdoc diff --git a/doc/src/trolltech-webpages.qdoc b/doc/src/qt-webpages.qdoc index 20e6c66..20e6c66 100644 --- a/doc/src/trolltech-webpages.qdoc +++ b/doc/src/qt-webpages.qdoc diff --git a/doc/src/qt3support.qdoc b/doc/src/qt3support.qdoc deleted file mode 100644 index 59698e1..0000000 --- a/doc/src/qt3support.qdoc +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module Qt3Support - \title Qt3Support Module - \contentspage Qt's Modules - \previouspage Phonon Module - \nextpage QtDesigner - \ingroup modules - - \keyword Qt3Support - \brief The Qt3Support module provides classes that ease porting - from Qt 3 to Qt 4. - - \warning The classes in this module are intended to be used in - intermediate stages of a porting process and are not intended - to be used in production code. - - To include the definitions of the module's classes, use the - following directive: - - \snippet doc/src/snippets/code/doc_src_qt3support.qdoc 0 - - To link against the module, add this line to your \l qmake \c - .pro file: - - \snippet doc/src/snippets/code/doc_src_qt3support.qdoc 1 - - \note Since this module provides compatibility classes for - diverse parts of the Qt 3 API, it has dependencies on the QtCore, - QtGui, QtNetwork, QtSql, and QtXml modules. - - This module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. Most classes offered by this module are - also part of the \l{Qt GUI Framework Edition}. -\if defined(opensourceedition) || defined(desktoplightedition) - Classes that are not available for \l{Qt GUI Framework Edition} - users are marked as such in the class documentation. -\endif - - \sa {Porting to Qt 4} -*/ diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc index 45a95b2..5c2642e 100644 --- a/doc/src/qt4-intro.qdoc +++ b/doc/src/qt4-intro.qdoc @@ -87,8 +87,8 @@ \o \l{QtXmlPatterns Module}{XQuery and XPath} support, providing facilities for XML processing beyond that supported by the QtXml module. \o Support for embedded widgets in \l{Graphics View} scenes. - \o The \l{Threading and Concurrent Programming}{QtConcurrent framework} for - concurrent programming using Qt paradigms and threading features. + \o The \l{QtConcurrent} framework for concurrent programming using Qt paradigms and + threading features. \o An \l{QtHelp Module}{improved help system} that can be used in conjunction with Qt Assistant or as an independent help resource manager. \o Printing system improvements, including the QPrinterInfo, QPrintPreviewWidget @@ -563,7 +563,7 @@ \section1 Improved Network Proxy Support Qt's networking classes have been updated with - \l{QtNetwork Module#Support for Network Proxies}{improved proxy support}. + \l{Network Programming#Support for Network Proxies}{improved proxy support}. This includes improved integration with system proxy settings and the added ability to handle non-trivial proxy cases. diff --git a/doc/src/qtdbus.qdoc b/doc/src/qtdbus.qdoc deleted file mode 100644 index d4a6908..0000000 --- a/doc/src/qtdbus.qdoc +++ /dev/null @@ -1,124 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/** -*- mode: C++ -*- -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtDBus - \title QtDBus module - \contentspage Qt's Modules - \previouspage QAxServer - \ingroup modules - - \keyword QtDBus - \target The QDBus compiler - - \brief The QtDBus module is a Unix-only library that you can use - to make Inter-Process Communication using the \l {Introduction to - D-Bus} {D-Bus} protocol. - - Applications using the QtDBus module can provide services to - other, remote applications by exporting objects, as well as use - services exported by those applications by placing calls and - accessing properties. - - The QtDBus module provides an interface that extends the Qt \l - {signalsandslots.html}{Signals and Slots} mechanism, allowing one - to connect to a signal emitted remotely as well as to connect a - local signal to remote slot. - - To use this module, use the following code in your application: - - \snippet doc/src/snippets/code/doc_src_qtdbus.qdoc 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.qdoc 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 - tools are built. - - See the \l {Introduction to D-Bus} page for detailed information on - how to use this module. - - This module is part of all \l{Qt editions}. -*/ diff --git a/doc/src/qtgui.qdoc b/doc/src/qtgui.qdoc deleted file mode 100644 index 63e544c..0000000 --- a/doc/src/qtgui.qdoc +++ /dev/null @@ -1,59 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtGui - \title QtGui Module - \contentspage Qt's Modules - \previouspage QtCore - \nextpage QtNetwork - \ingroup modules - - \brief The QtGui module extends QtCore with GUI functionality. - - To include the definitions of both modules' classes, use the - following directive: - - \snippet doc/src/snippets/code/doc_src_qtgui.qdoc 0 - - The QtGui module is part of the \l{Qt GUI Framework Edition}, - the \l{Qt Full Framework Edition}, and the \l{Open Source Versions of Qt}. -*/ diff --git a/doc/src/qtmain.qdoc b/doc/src/qtmain.qdoc deleted file mode 100644 index 5f1f273..0000000 --- a/doc/src/qtmain.qdoc +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \page qtmain.html - \title The qtmain Library - \ingroup licensing - \ingroup platform-notes - \brief Describes the use and license of the qtmain helper library. - - qtmain is a helper library that enables the developer to write a - cross-platform main() function on Windows. - - If you do not use \l qmake or the \l{Visual Studio Integration} - available to \l{Qt Commercial Editions}{commercial licensees}, you also - need to link against the \c qtmain library. - - \section1 License Information - - The QAxContainer module is not covered by the \l{GNU General Public License (GPL)}, - the \l{GNU Lesser General Public License (LGPL)}, or the - \l{Qt Commercial Editions}{Qt Commercial License}. Instead, it is distributed under - the following license. - - \legalese - Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).\br - All rights reserved. - - Contact: Nokia Corporation (qt-info@nokia.com)\br - - You may use this file under the terms of the BSD license as follows:\br - - "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.\br - * 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.\br - * 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." - \endlegalese -*/ diff --git a/doc/src/qtscripttools.qdoc b/doc/src/qtscripttools.qdoc deleted file mode 100644 index 7a5ffe6..0000000 --- a/doc/src/qtscripttools.qdoc +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtScriptTools - \title QtScriptTools Module - \since 4.5 - \contentspage Qt's Modules - \previouspage QtScript - \nextpage QtSql - \ingroup modules - \ingroup scripting - - \brief The QtScriptTools module provides additional components for applications that use Qt Script. - - \tableofcontents - - \section1 Configuring the Build Process - - Applications that use the Qt Script Tools classes need to - be configured to be built against the QtScriptTools module. - To include the definitions of the module's classes, use the - following directive: - - \snippet doc/src/snippets/code/doc.src.qtscripttools.qdoc 0 - - To link against the module, add this line to your \l qmake \c .pro file: - - \snippet doc/src/snippets/code/doc.src.qtscripttools.qdoc 1 - - The QtScriptTools module is part of the \l{Qt Full Framework Edition} and - the \l{Open Source Versions of Qt}. - - */ diff --git a/doc/src/qtsvg.qdoc b/doc/src/qtsvg.qdoc deleted file mode 100644 index 18db387..0000000 --- a/doc/src/qtsvg.qdoc +++ /dev/null @@ -1,135 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtSvg - \title QtSvg Module - \since 4.1 - \contentspage Qt's Modules - \previouspage QtSql - \nextpage QtWebKit - \ingroup modules - - \brief The QtSvg module provides classes for displaying the contents of SVG - files. - - Scalable Vector Graphics (SVG) is a language for describing two-dimensional - graphics and graphical applications in XML. SVG 1.1 is a W3C Recommendation - and forms the core of the current SVG developments in Qt. SVG 1.2 is the - specification currently being developed by the \l{SVG Working Group}, and it - is \l{http://www.w3.org/TR/SVG12/}{available in draft form}. - The \l{Mobile SVG Profiles} (SVG Basic and SVG Tiny) are aimed at - resource-limited devices and are part of the 3GPP platform for third generation - mobile phones. You can read more about SVG at \l{About SVG}. - - \tableofcontents - - \section1 SVG Support - Qt supports the \l{SVG 1.2 Tiny Static Features}{static features} of - \l{SVG 1.2 Tiny}. ECMA scripts and DOM manipulation are currently not - supported. - - \section1 Configuring the Build Process - - Applications that use Qt's SVG classes need to - be configured to be built against the QtSvg module. - To include the definitions of the module's classes, use the - following directive: - - \snippet doc/src/snippets/code/doc_src_qtsvg.qdoc 0 - - To link against the module, add this line to your \l qmake \c - .pro file: - - \snippet doc/src/snippets/code/doc_src_qtsvg.qdoc 1 - - The QtSvg module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. - - \section1 Rendering SVG files - - The easiest way to render SVG files is to construct a QSvgWidget and - load an SVG file using one of the QSvgWidget::load() functions. - - QSvgRenderer is the class responsible for rendering SVG files for - QSvgWidget, and it can be used directly to provide SVG support for - custom widgets. - To load an SVG file, construct a QSvgRenderer with a file name or the - contents of a file, or call QSvgRenderer::load() on an existing - renderer. If the SVG file has been loaded successfully the - QSvgRenderer::isValid() will return true. - - Once you have loaded the SVG file successfully, you can render it - with the QSvgRenderer::render() function. Note that this scheme allows - you to render SVG files on all paint devices supported by Qt, including - QWidget, QGLWidget, and QImage. See the \l{SVG Viewer Example}{SVG Viewer} - example for more details. - - \section1 Additional Information - - Some code for arc handling in this module is derived from code with - the following license: - - \legalese - Copyright 2002 USC/Information Sciences Institute - - Permission to use, copy, modify, distribute, and sell this software - and its documentation for any purpose is hereby granted without - fee, provided that the above copyright notice appear in all copies - and that both that copyright notice and this permission notice - appear in supporting documentation, and that the name of - Information Sciences Institute not be used in advertising or - publicity pertaining to distribution of the software without - specific, written prior permission. Information Sciences Institute - makes no representations about the suitability of this software for - any purpose. It is provided "as is" without express or implied - warranty. - - INFORMATION SCIENCES INSTITUTE DISCLAIMS ALL WARRANTIES WITH REGARD - TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL INFORMATION SCIENCES - INSTITUTE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL - DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA - OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - PERFORMANCE OF THIS SOFTWARE. - \endlegalese -*/ diff --git a/doc/src/qttest.qdoc b/doc/src/qttest.qdoc deleted file mode 100644 index 5bb2626..0000000 --- a/doc/src/qttest.qdoc +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtTest - \title QtTest Module - \contentspage Qt's Modules - \previouspage QtAssistant - \nextpage QAxContainer - \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 doc/src/snippets/code/doc_src_qttest.qdoc 0 - - To link against the module, add this line to your \l qmake \c - .pro file: - - \snippet doc/src/snippets/code/doc_src_qttest.qdoc 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/doc/src/qtuiloader.qdoc b/doc/src/qtuiloader.qdoc deleted file mode 100644 index ba621a8..0000000 --- a/doc/src/qtuiloader.qdoc +++ /dev/null @@ -1,82 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! - \module QtUiTools - \title QtUiTools Module - \since 4.1 - \contentspage Qt's Modules - \previouspage QtDesigner - \nextpage QtHelp - \ingroup modules - - \brief The QtUiTools module provides classes to handle forms created - with Qt Designer. - - These forms are processed at run-time to produce dynamically-generated - user interfaces. In order to generate a form at run-time, a resource - file containing a UI file is needed. Applications that use the - form handling classes need to be configured to be built against the - QtUiTools module. This is done by including the following declaration - in a \c qmake project file to ensure that the application is compiled - and linked appropriately. - - \snippet doc/src/snippets/code/doc_src_qtuiloader.qdoc 0 - - A form loader object, provided by the QUiLoader class, is used to - construct the user interface. This user interface can - be retrieved from any QIODevice; for example, a QFile object can be - used to obtain a form stored in a project's resources. The - QUiLoader::load() function takes the user interface description - contained in the file and constructs the form widget. - - To include the definitions of the module's classes, use the following - directive: - - \snippet doc/src/snippets/code/doc_src_qtuiloader.qdoc 1 - - \note These classes are part of the \l{Open Source Versions of Qt} and - \l{Qt Commercial Editions}{Qt Full Framework Edition} for commercial - users. - - \sa{Calculator Builder Example}, {World Time Clock Builder Example} -*/ - diff --git a/doc/src/qundo.qdoc b/doc/src/qundo.qdoc deleted file mode 100644 index 9de2aa9..0000000 --- a/doc/src/qundo.qdoc +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! -\page qundo.html -\title Overview of Qt's Undo Framework -\keyword Undo framework -\ingroup architecture - -\section1 Introduction - -Qt's Undo Framework is an implementation of the Command pattern, for -implementing undo/redo functionality in applications. - -The Command pattern is based on the idea that all editing in -an application is done by creating instances of command objects. -Command objects apply changes to the document and are stored -on a command stack. Furthermore, each command knows how to undo its -changes to bring the document back to its previous state. As long -as the application only uses command objects to change the state of -the document, it is possible to undo a sequence of commands by -traversing the stack downwards and calling undo -on each command in turn. It is also possible to redo a sequence of -commands by traversing the stack upwards and calling -redo on each command. - -\section1 Classes - -The framework consists of four classes: - -\list -\i \l QUndoCommand is the base class of all commands stored on an - undo stack. It can apply (redo) or undo a single change in the document. -\i \l QUndoStack is a list of QUndoCommand objects. It contains all the - commands executed on the document and can roll the document's state - backwards or forwards by undoing or redoing them. -\i \l QUndoGroup is a group of undo stacks. It is useful when an application - contains more than one undo stack, typically one for each opened - document. QUndoGroup provides a single pair of undo/redo slots for all - the stacks in the group. It forwards undo and redo requests to - the active stack, which is the stack associated with the document that - is currently being edited by the user. -\i \l QUndoView is a widget which shows the contents of an undo stack. Clicking - on a command in the view rolls the document's state backwards or - forwards to that command. -\endlist - -\section1 Concepts - -The following concepts are supported by the framework: - -\list -\i \bold{Clean state:} Used to signal when the document enters and leaves a - state that has been saved to disk. This is typically used to disable or - enable the save actions, and to update the document's title bar. -\i \bold{Command compression:} Used to compress sequences of commands into a - single command. - For example: In a text editor, the commands that insert individual - characters into the document can be compressed into a single command that - inserts whole sections of text. These bigger changes are more convenient - for the user to undo and redo. -\i \bold{Command macros:} A sequence of commands, all of which are undone or - redone in one step. - These simplify the task of writing an application, since a set of simpler - commands can be composed into more complex commands. For example, a command - that moves a set of selected objects in a document can be created by - combining a set of commands, each of which moves a single object. -\endlist - -QUndoStack provides convenient undo and redo QAction objects that -can be inserted into a menu or a toolbar. The text properties of these -actions always reflect what command will be undone or redone when -they are triggered. Similarly, QUndoGroup provides undo and redo actions -that always behave like the undo and redo actions of the active stack. -*/ diff --git a/doc/src/richtext.qdoc b/doc/src/richtext.qdoc deleted file mode 100644 index 405afd1..0000000 --- a/doc/src/richtext.qdoc +++ /dev/null @@ -1,1076 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! -\page richtext.html -\nextpage Rich Text Document Structure - -\title Rich Text Processing -\ingroup architecture -\ingroup text-processing -\brief An overview of Qt's rich text processing, editing and display features. - -The Scribe framework provides a set of classes for reading and manipulating -structured rich text documents. Unlike previous rich text support in Qt, the -new classes are centered around the QTextDocument class rather than raw -textual information. This enables the developer to create and modify -structured rich text documents without having to prepare content in an -intermediate markup format. - -The information within a document can be accessed via two complementary -interfaces: A cursor-based interface is used for editing, and a read-only -hierarchical interface provides a high level overview of the document -structure. The main advantage of the cursor-based interface is that the -text can be edited using operations that mimic a user's interaction with -an editor, without losing the underlying structure of the document. The -read-only hierarchical interface is most useful when performing operations -such as searching and document export. - -This document is divided up into chapters for convenient reference: - -\list -\i \l{Rich Text Document Structure} outlines - the different kinds of elements in a QTextDocument, and describes how - they are arranged in a document structure. -\i \l{The QTextCursor Interface} explains how rich - text documents can be edited using the cursor-based interface. -\i \l{Common Rich Text Editing Tasks} examines some - common tasks that involve reading or manipulating rich text documents. -\i \l{Advanced Rich Text Processing} examines advanced rich text editing tasks. -\i \l{Supported HTML Subset} lists the HTML tags supported by QTextDocument. -\endlist - -See also the list of \l{Text Processing Classes}. - -*/ - -/*! -\page richtext-structure.html -\contentspage richtext.html Contents -\previouspage Rich Text Processing -\nextpage The QTextCursor Interface - -\title Rich Text Document Structure - -\tableofcontents - -The structured representation of a text document presents its contents as -a hierarchy of text blocks, frames, tables, and other objects. These provide -a logical structure to the document and describe how their contents will be -displayed. Generally, frames and tables are used to group other -structures while text blocks contain the actual textual information. - -New elements are created and inserted into the document programmatically -\l{richtext-cursor.html}{with a QTextCursor} or by using an editor -widget, such as QTextEdit. Elements can be given a particular format when -they are created; otherwise they take the cursor's current format for the -element. - -\table -\row -\i \inlineimage richtext-document.png -\i \bold{Basic structure} - -The "top level" of a document might be populated in the way shown. -Each document always contains a root frame, and this always contains -at least one text block. - -For documents with some textual content, the root -frame usually contains a sequence of blocks and other elements. - -Sequences of frames and tables are always separated by text blocks in a -document, even if the text blocks contain no information. This ensures that -new elements can always be inserted between existing structures. -\endtable - -In this chapter, we look at each of the structural elements -used in a rich text document, outline their features and uses, and show -how to examine their contents. Document editing is described in -\l{richtext-cursor.html}{The QTextCursor Interface}. - -\section1 Rich Text Documents - -QTextDocument objects contain all the information required to construct -rich text documents for use with a QTextEdit widget or in a custom editor. -Although QTextEdit makes it easy to display and edit rich text, documents -can also be used independently of any editor widget, for example: - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 0 - -Alternatively, they can be extracted from an existing editor: - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 1 - -This flexibility enables applications to handle multiple rich text -documents without the overhead of multiple editor widgets, or requiring -documents to be stored in some intermediate format. - -An empty document contains a root frame which itself contains a single -empty text block. The \l{richtext-cursor.html}{text cursor interface} -automatically inserts new document elements into the root frame, and -ensures that it is padded with empty blocks where necessary. - -We obtain the root frame in the following manner: - -\snippet doc/src/snippets/textdocument-frames/xmlwriter.h 0 -\snippet doc/src/snippets/textdocument-frames/xmlwriter.cpp 0 - -When navigating the document structure, it is useful to begin at the -root frame because it provides access to the entire document structure. - -\section1 Document Elements - -Rich text documents usually consist of common elements such as paragraphs, -frames, tables, and lists. These are represented in a QTextDocument -by the QTextBlock, QTextFrame, QTextTable, and QTextList classes. -Unlike the other elements in a document, images are represented by -specially formatted text fragments. This enables them to be placed -formatted inline with the surrounding text. - -The basic structural building blocks in documents are QTextBlock and -QTextFrame. Blocks themselves contain fragments of rich text -(QTextFragment), but these do not directly influence the high level -structure of a document. - -Elements which can group together other document elements are typically -subclasses of QTextObject, and fall into two categories: Elements that -group together text blocks are subclasses of QTextBlockGroup, and those -that group together frames and other elements are subclasses of QTextFrame. - -\section2 Text Blocks - -Text blocks are provided by the QTextBlock class. - -Text blocks group together fragments of text with different character formats, -and are used to represent paragraphs in the document. Each block -typically contains a number of text fragments with different styles. -Fragments are created when text is inserted into the document, and more -of them are added when the document is edited. The document splits, merges, -and removes fragments to efficiently represent the different styles -of text in the block. - -The fragments within a given block can be examined by using a -QTextBlock::iterator to traverse the block's internal structure: - -\snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 3 -\snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 5 -\snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 6 - -Blocks are also used to represent list items. As a result, blocks can -define their own character formats which contain information about -block-level decoration, such as the type of bullet points used for -list items. The formatting for the block itself is described by the -QTextBlockFormat class, and describes properties such as text alignment, -indentation, and background color. - -Although a given document may contain complex structures, once we have a -reference to a valid block in the document, we can navigate between each -of the text blocks in the order in which they were written: - -\snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 0 -\snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 1 -\snippet doc/src/snippets/textblock-fragments/xmlwriter.cpp 2 - -This method is useful for when you want to extract just the rich text from a -document because it ignores frames, tables, and other types of structure. - -QTextBlock provides comparison operators that make it easier to manipulate -blocks: \l{QTextBlock::operator==()}{operator==()} and -\l{QTextBlock::operator!=()}{operator!=()} are used to test whether two -blocks are the same, and \l{QTextBlock::operator<()}{operator<()} is used -to determine which one occurs first in a document. - -\section2 Frames - -Frames are provided by the QTextFrame class. - -Text frames group together blocks of text and child frames, creating -document structures that are larger than paragraphs. The format of a frame -specifies how it is rendered and positioned on the page. Frames are -either inserted into the text flow, or they float on the left or right -hand side of the page. -Each document contains a root frame that contains all the other document -elements. As a result, all frames except the root frame have a parent -frame. - -Since text blocks are used to separate other document elements, each -frame will always contain at least one text block, and zero or more -child frames. We can inspect the contents of a frame by using a -QTextFrame::iterator to traverse the frame's child elements: - -\snippet doc/src/snippets/textdocument-frames/xmlwriter.cpp 1 -\snippet doc/src/snippets/textdocument-frames/xmlwriter.cpp 2 - -Note that the iterator selects both frames and blocks, so it is necessary -to check which it is referring to. This allows us to navigate the document -structure on a frame-by-frame basis yet still access text blocks if -required. Both the QTextBlock::iterator and QTextFrame::iterator classes -can be used in complementary ways to extract the required structure from -a document. - -\section2 Tables - -Tables are provided by the QTextTable class. - -Tables are collections of cells that are arranged in rows and columns. -Each table cell is a document element with its own character format, but it -can also contain other elements, such as frames and text blocks. Table cells -are automatically created when the table is constructed, or when extra rows -or columns are added. They can also be moved between tables. - -QTextTable is a subclass of QTextFrame, so tables are treated like frames -in the document structure. For each frame that we encounter in the -document, we can test whether it represents a table, and deal with it in a -different way: - -\snippet doc/src/snippets/textdocument-tables/xmlwriter.cpp 0 -\snippet doc/src/snippets/textdocument-tables/xmlwriter.cpp 1 - -The cells within an existing table can be examined by iterating through -the rows and columns. - -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 9 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 10 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 11 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 12 - - -\section2 Lists - -Lists are provided by the QTextList class. - -Lists are sequences of text blocks that are formatted in the usual way, but -which also provide the standard list decorations such as bullet points and -enumerated items. Lists can be nested, and will be indented if the list's -format specifies a non-zero indentation. - -We can refer to each list item by its index in the list: - -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 0 -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 1 -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 2 - -Since QTextList is a subclass of QTextBlockGroup, it does not group the -list items as child elements, but instead provides various functions for -managing them. This means that any text block we find when traversing a -document may actually be a list item. We can ensure that list items are -correctly identified by using the following code: - -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 3 -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 4 -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 5 -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 6 -\snippet doc/src/snippets/textdocument-listitems/mainwindow.cpp 7 - - -\section2 Images - -Images in QTextDocument are represented by text fragments that reference -external images via the resource mechanism. Images are created using the -cursor interface, and can be modified later by changing the character -format of the image's text fragment: - -\snippet doc/src/snippets/textdocument-imageformat/main.cpp 0 -\snippet doc/src/snippets/textdocument-imageformat/main.cpp 1 -\snippet doc/src/snippets/textdocument-imageformat/main.cpp 2 - -The fragment that represents the image can be found by iterating over -the fragments in the text block that contains the image. -*/ - -/*! -\page richtext-cursor.html -\contentspage richtext.html Contents -\previouspage Rich Text Document Structure -\nextpage Common Rich Text Editing Tasks - -\title The QTextCursor Interface - -\tableofcontents - -The QTextCursor interface allows documents and their structure to be -edited in a way that should be familiar to most users of text editors and -document editing software. Rich text documents can have multiple cursors -associated with them, and each of these contains information about their -position in the document and any selections that they may hold. This -cursor-based paradigm makes common operations, such as cutting and pasting -text, simple to implement programmatically, yet it also allows more complex -editing operations to be performed on the document. - -This chapter describes most of the common editing operations that you -will need to perform using a cursor, from basic insertion of text and -document elements to more complex manipulation of document structures. - -\section1 Cursor-Based Editing - -At the simplest level, text documents are made up of a string of characters, -marked up in some way to represent the block structure of the text within the -document. QTextCursor provides a cursor-based interface that allows the -contents of a QTextDocument to be manipulated at the character level. Since -the elements (blocks, frames, tables, etc.) are also encoded in the character -stream, the document structure can itself be changed by the cursor. - -The cursor keeps track of its location within its parent document, and can -report information about the surrounding structure, such as the enclosing -text block, frame, table, or list. The formats of the enclosing structures -can also be directly obtained through the cursor. - -\section2 Using a Cursor - -The main use of a cursor is to insert or modify text within a block. -We can use a text editor's cursor to do this: - -\snippet doc/src/snippets/textblock-formats/main.cpp 0 - -Alternatively, we can obtain a cursor directly from a document: - -\snippet doc/src/snippets/textdocument-images/main.cpp 0 - -The cursor is positioned at the start of the document so that we can write -into the first (empty) block in the document. - -\section2 Grouping Cursor Operations - -A series of editing operations can be packaged together so that they can -be replayed, or undone together in a single action. This is achieved by -using the \c beginEditBlock() and \c endEditBlock() functions in the -following way, as in the following example where we select the word that -contains the cursor: - -\snippet doc/src/snippets/textdocument-selections/mainwindow.cpp 0 - -If editing operations are not grouped, the document automatically records -the individual operations so that they can be undone later. Grouping -operations into larger packages can make editing more efficient both for -the user and for the application, but care has to be taken not to group too -many operations together as the user may want find-grained control over the -undo process. - -\section2 Multiple Cursors - -Multiple cursors can be used to simultaneously edit the same document, -although only one will be visible to the user in a QTextEdit widget. -The QTextDocument ensures that each cursor writes text correctly and -does not interfere with any of the others. - -\omit -\snippet doc/src/snippets/textdocument-cursors/main.cpp 0 -\snippet doc/src/snippets/textdocument-cursors/main.cpp 1 -\endomit - -\section1 Inserting Document Elements - -QTextCursor provides several functions that can be used to change the -structure of a rich text document. Generally, these functions allow -document elements to be created with relevant formatting information, -and they are inserted into the document at the cursor's position. - -The first group of functions insert block-level elements, and update the -cursor position, but they do not return the element that was inserted: - -\list -\i \l{QTextCursor::insertBlock()}{insertBlock()} inserts a new text block - (paragraph) into a document at the cursor's position, and moves the - cursor to the start of the new block. -\i \l{QTextCursor::insertFragment()}{insertFragment()} inserts an existing - text fragment into a document at the cursor's position. -\i \l{QTextCursor::insertImage()}{insertImage()} inserts an image into a - document at the cursor's position. -\i \l{QTextCursor::insertText()}{insertText()} inserts text into the - document at the cursor's position. -\endlist - -You can examine the contents of the element that was inserted through the -cursor interface. - -The second group of functions insert elements that provide structure to -the document, and return the structure that was inserted: - -\list -\i \l{QTextCursor::insertFrame()}{insertFrame()} inserts a frame into the - document \e after the cursor's current block, and moves the cursor to - the start of the empty block in the new frame. -\i \l{QTextCursor::insertList()}{insertList()} inserts a list into the - document at the cursor's position, and moves the cursor to the start - of the first item in the list. -\i \l{QTextCursor::insertTable()}{insertTable()} inserts a table into - the document \e after the cursor's current block, and moves the cursor - to the start of the block following the table. -\endlist - -These elements either contain or group together other elements in the -document. - -\section2 Text and Text Fragments - -Text can be inserted into the current block in the current character -format, or in a custom format that is specified with the text: - -\snippet doc/src/snippets/textdocument-charformats/main.cpp 0 - -Once the character format has been used with a cursor, that format becomes -the default format for any text inserted with that cursor until another -character format is specified. - -If a cursor is used to insert text without specifying a character format, -the text will be given the character format used at that position in the -document. - -\section2 Blocks - -Text blocks are inserted into the document with the -\l{QTextCursor::insertBlock()}{insertBlock()} function. - -\snippet doc/src/snippets/textblock-formats/main.cpp 1 - -The cursor is positioned at the start of the new block. - -\section2 Frames - -Frames are inserted into a document using the cursor, and will be placed -within the cursor's current frame \e after the current block. -The following code shows how a frame can be inserted between two text -blocks in a document's root frame. We begin by finding the cursor's -current frame: - -\snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 0 - -We insert some text in this frame then set up a frame format for the -child frame: - -\snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 1 - -The frame format will give the frame an external margin of 32 pixels, -internal padding of 8 pixels, and a border that is 4 pixels wide. -See the QTextFrameFormat documentation for more information about -frame formats. - -The frame is inserted into the document after the preceding text: - -\snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 2 - -We add some text to the document immediately after we insert the frame. -Since the text cursor is positioned \e{inside the frame} when it is inserted -into the document, this text will also be inserted inside the frame. - -Finally, we position the cursor outside the frame by taking the last -available cursor position inside the frame we recorded earlier: - -\snippet doc/src/snippets/textdocument-frames/mainwindow.cpp 3 - -The text that we add last is inserted after the child frame in the -document. Since each frame is padded with text blocks, this ensures that -more elements can always be inserted with a cursor. - -\section2 Tables - -Tables are inserted into the document using the cursor, and will be -placed within the cursor's current frame \e after the current block: - -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 0 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 3 - -Tables can be created with a specific format that defines the overall -properties of the table, such as its alignment, background color, and -the cell spacing used. It can also determine the constraints on each -column, allowing each of them to have a fixed width, or resize according -to the available space. - -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 2 - -The columns in the table created above will each take up a certain -percentage of the available width. Note that the table format is -optional; if you insert a table without a format, some sensible -default values will be used for the table's properties. - -Since cells can contain other document elements, they too can be -formatted and styled as necessary. - -Text can be added to the table by navigating to each cell with the cursor -and inserting text. - -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 4 - -We can create a simple timetable by following this approach: - -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 5 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 6 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 7 -\snippet doc/src/snippets/textdocument-tables/mainwindow.cpp 8 - -\section2 Lists - -Lists of block elements can be automatically created and inserted into the -document at the current cursor position. Each list that is created in this -way requires a list format to be specified: - -\snippet doc/src/snippets/textdocument-lists/mainwindow.cpp 0 - -The above code first checks whether the cursor is within an existing list -and, if so, gives the list format for the new list a suitable level of -indentation. This allows nested lists to be created with increasing -levels of indentation. A more sophisticated implementation would also use -different kinds of symbol for the bullet points in each level of the list. - -\section2 Images - -Inline images are added to documents through the cursor in the usual manner. -Unlike many other elements, all of the image properties are specified by the -image's format. This means that a QTextImageFormat object has to be -created before an image can be inserted: - -\snippet doc/src/snippets/textdocument-images/main.cpp 1 - -The image name refers to an entry in the application's resource file. -The method used to derive this name is described in -\l{resources.html}{The Qt Resource System}. - -*/ - -/*! -\page richtext-common-tasks.html -\contentspage richtext.html Contents -\previouspage The QTextCursor Interface -\nextpage Advanced Rich Text Processing - -\title Common Rich Text Editing Tasks - -\tableofcontents - -There are a number of tasks that are often performed by developers -when editing and processing text documents using Qt. These include the use -of display widgets such as QTextBrowser and QTextEdit, creation of -documents with QTextDocument, editing using a QTextCursor, and -exporting the document structure. -This document outlines some of the more common ways of using the rich -text classes to perform these tasks, showing convenient patterns that can -be reused in your own applications. - -\section1 Using QTextEdit - -A text editor widget can be constructed and used to display HTML in the -following way: - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 2 - -By default, the text editor contains a document with a root frame, inside -which is an empty text block. This document can be obtained so that it can -be modified directly by the application: - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 3 - -The text editor's cursor may also be used to edit a document: - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 4 - -Although a document can be edited using many cursors at once, a QTextEdit -only displays a single cursor at a time. Therefore, if we want to update the -editor to display a particular cursor or its selection, we need to set the -editor's cursor after we have modified the document: - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 5 - -\section1 Selecting Text - -Text is selected by moving the cursor using operations that are similar to -those performed by a user in a text editor. To select text between two -points in the document, we need to position the cursor at the first point -then move it using a special mode (\l{QTextCursor::MoveMode}) with a -move operation (\l{QTextCursor::MoveOperation}). -When we select the text, we leave the selection anchor at the old cursor -position just as the user might do by holding down the Shift key when -selecting text: - -\snippet doc/src/snippets/textdocument-selections/mainwindow.cpp 1 - -In the above code, a whole word is selected using this method. QTextCursor -provides a number of common move operations for selecting individual -characters, words, lines, and whole blocks. - -\section1 Finding Text - -QTextDocument provides a cursor-based interface for searching, making -it easy to find and modify text in the style of a text editor. The following -code finds all the instances of a particular word in a document, and changes -the color of each: - -\snippet doc/src/snippets/textdocument-find/main.cpp 0 -\snippet doc/src/snippets/textdocument-find/main.cpp 1 - -Note that the cursor does not have to be moved after each search and replace -operation; it is always positioned at the end of the word that was just -replaced. - -\section1 Printing Documents - -QTextEdit is designed for the display of large rich text documents that are -read on screen, rendering them in the same way as a web browser. As a result, -it does not automatically break the contents of the document into page-sized -pieces that are suitable for printing. - -QTextDocument provides a \l{QTextDocument::print()}{print()} function to -allow documents to be printed using the QPrinter class. The following code -shows how to prepare a document in a QTextEdit for printing with a QPrinter: - -\snippet doc/src/snippets/textdocument-printing/mainwindow.cpp 0 - -The document is obtained from the text editor, and a QPrinter is constructed -then configured using a QPrintDialog. If the user accepts the printer's -configuration then the document is formatted and printed using the -\l{QTextDocument::print()}{print()} function. - -*/ - -/*! -\page richtext-advanced-processing.html -\contentspage richtext.html Contents -\previouspage Common Rich Text Editing Tasks -\nextpage Supported HTML Subset - -\title Advanced Rich Text Processing - -\section1 Handling Large Files - -Qt does not limit the size of files that are used for text -processing. In most cases, this will not present a problem. For -especially large files, however, you might experience that your -application will become unresponsive or that you will run out of -memory. The size of the files you can load depends on your -hardware and on Qt's and your own application's implementation. - -If you are faced with this problem, we recommend that you address the -following issues: - -\list - \o You should consider breaking up large paragraphs into smaller - ones as Qt handles small paragraphs better. You could also - insert line breaks at regular intervals, which will look the - same as one large paragraph in a QTextEdit. - \o You can reduce the amount of blocks in a QTextDocument with - \l{QTextDocument::}{maximumBlockCount()}. The document is only - as large as the number of blocks as far as QTextEdit is concerned. - \o When adding text to a text edit, it is an advantage to add it - in an edit block (see example below). The result is that the - text edit does not need to build the entire document structure at once. -\endlist - -We give an example of the latter technique from the list. We assume that -the text edit is visible. - -\snippet doc/src/snippets/code/doc_src_richtext.qdoc 6 - -\omit -Ideas for other sections: - - * Hiding QTextBlock elements. - * Changing the word wrapping mode in QTextEdit. Custom word wrapping? -\endomit -*/ - -/*! - \page richtext-html-subset.html - \title Supported HTML Subset - \brief Describes the support for HTML markup in text widgets. - - \contentspage richtext.html Contents - \previouspage Common Rich Text Editing Tasks - - Qt's text widgets are able to display rich text, specified using a subset of \l{HTML 4} - markup. Widgets that use QTextDocument, such as QLabel and QTextEdit, are able to display - rich text specified in this way. - - \tableofcontents - - \section1 Using HTML Markup in Text Widgets - - Widgets automatically detect HTML markup and display rich text accordingly. For example, - setting a label's \l{QLabel::}{text} property with the string \c{"<b>Hello</b> <i>Qt!</i>"} - will result in the label displaying text like this: \bold{Hello} \e{Qt!} - - When HTML markup is used for text, Qt follows the rules defined by the \l{HTML 4} - specification. This includes default properties for text layout, such as the - direction of the text flow (left-to-right) which can be changed by applying the - \l{#Block Attributes}{\c dir} attribute to blocks of text. - - \section1 Supported Tags - - The following table lists the HTML tags supported by Qt's - \l{Rich Text Processing}{rich text} engine: - - \table - \header \o Tag - \o Description - \o Comment - \row \o \c a - \o Anchor or link - \o Supports the \c href and \c name attributes. - \row \o \c address - \o Address - \o - \row \o \c b - \o Bold - \o - \row \o \c big - \o Larger font - \o - \row \o \c blockquote - \o Indented paragraph - \o - \row \o \c body - \o Document body - \o Supports the \c bgcolor attribute, which - can be a Qt \l{QColor::setNamedColor()}{color name} - or a \c #RRGGBB color specification. - \row \o \c br - \o Line break - \o - \row \o \c center - \o Centered paragraph - \o - \row \o \c cite - \o Inline citation - \o Same as \c i. - \row \o \c code - \o Code - \o Same as \c tt. - \row \o \c dd - \o Definition data - \o - \row \o \c dfn - \o Definition - \o Same as \c i. - \row \o \c div - \o Document division - \o Supports the standard \l{block attributes}. - \row \o \c dl - \o Definition list - \o Supports the standard \l{block attributes}. - \row \o \c dt - \o Definition term - \o Supports the standard \l{block attributes}. - \row \o \c em - \o Emphasized - \o Same as \c i. - \row \o \c font - \o Font size, family, and/or color - \o Supports the following attributes: - \c size, \c face, and \c color (Qt - \l{QColor::setNamedColor()}{color names} or - \c #RRGGBB). - \row \o \c h1 - \o Level 1 heading - \o Supports the standard \l{block attributes}. - \row \o \c h2 - \o Level 2 heading - \o Supports the standard \l{block attributes}. - \row \o \c h3 - \o Level 3 heading - \o Supports the standard \l{block attributes}. - \row \o \c h4 - \o Level 4 heading - \o Supports the standard \l{block attributes}. - \row \o \c h5 - \o Level 5 heading - \o Supports the standard \l{block attributes}. - \row \o \c h6 - \o Level 6 heading - \o Supports the standard \l{block attributes}. - \row \o \c head - \o Document header - \o - \row \o \c hr - \o Horizontal line - \o Supports the \c width attribute, which can - be specified as an absolute or relative (\c %) value. - \row \o \c html - \o HTML document - \o - \row \o \c i - \o Italic - \o - \row \o \c img - \o Image - \o Supports the \c src, \c source - (for Qt 3 compatibility), \c width, and \c height - attributes. - \row \o \c kbd - \o User-entered text - \o - \row \o \c meta - \o Meta-information - \o If a text encoding is specified using the \c{meta} tag, - it is picked up by Qt::codecForHtml(). - Likewise, if an encoding is specified to - QTextDocument::toHtml(), the encoding is stored using - a \c meta tag, for example: - - \snippet doc/src/snippets/code/doc_src_richtext.qdoc 7 - - \row \o \c li - \o List item - \o - \row \o \c nobr - \o Non-breakable text - \o - \row \o \c ol - \o Ordered list - \o Supports the standard \l{list attributes}. - \row \o \c p - \o Paragraph - \o Left-aligned by default. Supports the standard - \l{block attributes}. - \row \o \c pre - \o Preformated text - \o - \row \o \c qt - \o Qt rich-text document - \o Synonym for \c html. Provided for compatibility with - earlier versions of Qt. - \row \o \c s - \o Strikethrough - \o - \row \o \c samp - \o Sample code - \o Same as \c tt. - \row \o \c small - \o Small font - \o - \row \o \c span - \o Grouped elements - \o - \row \o \c strong - \o Strong - \o Same as \c b. - \row \o \c sub - \o Subscript - \o - \row \o \c sup - \o Superscript - \o - \row \o \c table - \o Table - \o Supports the following attributes: \c border, - \c bgcolor (Qt \l{QColor::setNamedColor()}{color names} - or \c #RRGGBB), \c cellspacing, \c cellpadding, - \c width (absolute or relative), and \c height. - \row \o \c tbody - \o Table body - \o Does nothing. - \row \o \c td - \o Table data cell - \o Supports the standard \l{table cell attributes}. - \row \o \c tfoot - \o Table footer - \o Does nothing. - \row \o \c th - \o Table header cell - \o Supports the standard \l{table cell attributes}. - \row \o \c thead - \o Table header - \o If the \c thead tag is specified, it is used when printing tables - that span multiple pages. - \row \o \c title - \o Document title - \o The value specified using the \c - title tag is available through - QTextDocument::metaInformation(). - \row \o \c tr - \o Table row - \o Supports the \c bgcolor attribute, which - can be a Qt \l{QColor::setNamedColor()}{color name} - or a \c #RRGGBB color specification. - \row \o \c tt - \o Typewrite font - \o - \row \o \c u - \o Underlined - \o - \row \o \c ul - \o Unordered list - \o Supports the standard \l{list attributes}. - \row \o \c var - \o Variable - \o Same as \c i. - \endtable - - \section1 Block Attributes - - The following attributes are supported by the \c div, \c dl, \c - dt, \c h1, \c h2, \c h3, \c h4, \c h5, \c h6, \c p tags: - - \list - \o \c align (\c left, \c right, \c center, \c justify) - \o \c dir (\c ltr, \c rtl) - \endlist - - \section1 List Attributes - - The following attribute is supported by the \c ol and \c ul tags: - - \list - \o \c type (\c 1, \c a, \c A, \c square, \c disc, \c circle) - \endlist - - \section1 Table Cell Attributes - - The following attributes are supported by the \c td and \c th - tags: - - \list - \o \c width (absolute, relative, or no-value) - \o \c bgcolor (Qt \l{QColor::setNamedColor()}{color names} or \c #RRGGBB) - \o \c colspan - \o \c rowspan - \o \c align (\c left, \c right, \c center, \c justify) - \o \c valign (\c top, \c middle, \c bottom) - \endlist - - \section1 CSS Properties - The following table lists the CSS properties supported by Qt's - \l{Rich Text Processing}{rich text} engine: - - \table - \header \o Property - \o Values - \o Description - \row - \o \c background-color - \o <color> - \o Background color for elements - \row - \o \c background-image - \o <uri> - \o Background image for elements - \row \o \c color - \o <color> - \o Text foreground color - \row \o \c font-family - \o <family name> - \o Font family name - \row \o \c font-size - \o [ small | medium | large | x-large | xx-large ] | <size>pt | <size>px - \o Font size relative to the document font, or specified in points or pixels - \row \o \c font-style - \o [ normal | italic | oblique ] - \o - \row \o \c font-weight - \o [ normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 ] - \o Specifies the font weight used for text, where \c normal and \c bold - are mapped to the corresponding QFont weights. Numeric values are - 8 times the equivalent QFont weight values. - \row \o \c text-decoration - \o none | [ underline || overline || line-through ] - \o Additional text effects - \row \o \c font - \o [ [ <'font-style'> || <'font-weight'> ]? <'font-size'> <'font-family'> ] - \o Font shorthand property - \row \o \c text-indent - \o <length>px - \o First line text indentation in pixels - \row \o \c white-space - \o normal | pre | nowrap | pre-wrap - \o Declares how whitespace in HTML is handled. - \row \o \c margin-top - \o <length>px - \o Top paragraph margin in pixels - \row \o \c margin-bottom - \o <length>px - \o Bottom paragraph margin in pixels - \row \o \c margin-left - \o <length>px - \o Left paragraph margin in pixels - \row \o \c margin-right - \o <length>px - \o Right paragraph margin in pixels - \row \o \c padding-top - \o <length>px - \o Top table cell padding in pixels - \row \o \c padding-bottom - \o <length>px - \o Bottom table cell padding in pixels - \row \o \c padding-left - \o <length>px - \o Left table cell padding in pixels - \row \o \c padding-right - \o <length>px - \o Right table cell padding in pixels - \row \o \c padding - \o <length>px - \o Shorthand for setting all the padding properties at once. - \row \o \c vertical-align - \o baseline | sub | super | middle | top | bottom - \o Vertical text alignment. For vertical alignment in text table cells only middle, top, and bottom apply. - \row \o \c border-color - \o <color> - \o Border color for text tables. - \row \o \c border-style - \o none | dotted | dashed | dot-dash | dot-dot-dash | solid | double | groove | ridge | inset | outset - \o Border style for text tables. - \row \o \c background - \o [ <'background-color'> || <'background-image'> ] - \o Background shorthand property - \row \o \c page-break-before - \o [ auto | always ] - \o Make it possible to enforce a page break before the paragraph/table - \row \o \c page-break-after - \o [ auto | always ] - \o Make it possible to enforce a page break after the paragraph/table - \row \o float - \o [ left | right | none ] - \o Specifies where an image or a text will be placed in another element. Note that the \c float property is - only supported for tables and images. - \row \o \c text-transform - \o [ uppercase | lowercase ] - \o Select the transformation that will be performed on the text prior to displaying it. - \row \o \c font-variant - \o small-caps - \o Perform the smallcaps transformation on the text prior to displaying it. - \row \o \c word-spacing - \o <width>px - \o Specifies an alternate spacing between each word. - \endtable - - \section1 Supported CSS Selectors - - All CSS 2.1 selector classes are supported except pseudo-class selectors such - as \c{:first-child}, \c{:visited} and \c{:hover}. - -*/ diff --git a/doc/src/ecmascript.qdoc b/doc/src/scripting/ecmascript.qdoc index a13f55d..e6c36d1 100644 --- a/doc/src/ecmascript.qdoc +++ b/doc/src/scripting/ecmascript.qdoc @@ -42,7 +42,6 @@ /*! \page ecmascript.html \title ECMAScript Reference - \ingroup scripting \brief A list of objects, functions and properties supported by QtScript. This reference contains a list of objects, functions and diff --git a/doc/src/qtscriptdebugger-manual.qdoc b/doc/src/scripting/qtscriptdebugger-manual.qdoc index 5c80a7e..1dada93 100644 --- a/doc/src/qtscriptdebugger-manual.qdoc +++ b/doc/src/scripting/qtscriptdebugger-manual.qdoc @@ -42,7 +42,6 @@ /*! \page qtscriptdebugger-manual.html \title Qt Script Debugger Manual - \ingroup scripting \brief A manual describing how to use the Qt Script debugger. The Qt Script debugger is a tool for debugging script execution in diff --git a/doc/src/qtscriptextensions.qdoc b/doc/src/scripting/qtscriptextensions.qdoc index ed09862..d0317ff 100644 --- a/doc/src/qtscriptextensions.qdoc +++ b/doc/src/scripting/qtscriptextensions.qdoc @@ -39,20 +39,9 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page qtscriptextensions.html \title Creating QtScript Extensions - \ingroup scripting \brief A guide to creating and using QtScript extensions. QtScript extensions can make additional functionality available to scripts diff --git a/doc/src/qtscript.qdoc b/doc/src/scripting/scripting.qdoc index da12753..2973f09 100644 --- a/doc/src/qtscript.qdoc +++ b/doc/src/scripting/scripting.qdoc @@ -40,38 +40,28 @@ ****************************************************************************/ /*! - \module QtScript - \title QtScript Module - \since 4.3 - \contentspage Qt's Modules - \previouspage QtOpenVG - \nextpage QtScriptTools - \ingroup modules - \ingroup scripting + \group script + \title Scripting Classes and Overviews - \brief The QtScript module provides classes for making Qt applications scriptable. + \brief Classes that add scripting capabilities to Qt applications. +*/ - \tableofcontents - - \section1 Configuring the Build Process - - Applications that use Qt's Script classes need to - be configured to be built against the QtScript module. - To include the definitions of the module's classes, use the - following directive: +/*! + \page scripting.html + \title Making Applications Scriptable + \ingroup frameworks-technologies - \snippet doc/src/snippets/code/doc_src_qtscript.qdoc 0 + Qt 4.3 and later provides support for application scripting with ECMAScript. + The following guides and references cover aspects of programming with + ECMAScript and Qt. - To link against the module, add this line to your \l qmake \c .pro file: + \tableofcontents - \snippet doc/src/snippets/code/doc_src_qtscript.qdoc 1 + \section1 Scripting Classes - The QtScript module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. + The following classes add scripting capabilities to Qt applications. - The QtScript module only provides core scripting facilities; the - QtScriptTools module provides additional Qt Script-related - components that application developers may find useful. + \annotatedlist script \section1 Language Overview @@ -287,11 +277,15 @@ When a signal or slot is overloaded, QtScript will attempt to pick the right overload based on the actual types of the QScriptValue arguments - involved in the function invocation. For example, if your class has slots \c{myOverloadedSlot(int)} and \c{myOverloadedSlot(QString)}, the following script code will behave reasonably: + involved in the function invocation. For example, if your class has slots + \c{myOverloadedSlot(int)} and \c{myOverloadedSlot(QString)}, the following + script code will behave reasonably: \snippet doc/src/snippets/code/doc_src_qtscript.qdoc 11 - You can specify a particular overload by using array-style property access with the \l{QMetaObject::normalizedSignature()}{normalized signature} of the C++ function as the property name: + You can specify a particular overload by using array-style property access + with the \l{QMetaObject::normalizedSignature()}{normalized signature} of + the C++ function as the property name: \snippet doc/src/snippets/code/doc_src_qtscript.qdoc 12 @@ -1333,8 +1327,7 @@ When experimenting with QtScript objects and inheritance, it can be helpful to use the interactive interpreter included with the - \l{Qt Examples#Qt Script}{Qt Script examples}, located in - \c{examples/script/qscript}. + \l{Qt Script Examples}, located in \c{examples/script/qscript}. \section2 Prototype Objects and Shared Properties @@ -1651,8 +1644,9 @@ doesn't provide any debugging-specific functionality (e.g. setting breakpoints), but it is the basis of tools that do. - The QScriptEngineDebugger class introduced in Qt 4.5 provides a Qt Script - debugger that can be embedded into your application. + The QScriptEngineDebugger class introduced in Qt 4.5 provides a + \l{Qt Script Debugger Manual}{Qt Script debugger} that can be embedded + into your application. \section2 Redefining print() @@ -1683,8 +1677,9 @@ scripts. There are currently no script plugins shipped with Qt. If you are implementing some Qt Script functionality that you want other - Qt application developers to be able to use, developing an extension (e.g. - by subclassing QScriptExtensionPlugin) is worth looking into. + Qt application developers to be able to use, \l{Creating QtScript Extensions} + {developing an extension} (e.g. by subclassing QScriptExtensionPlugin) is + worth looking into. \section1 Internationalization diff --git a/doc/src/snippets/code/doc_src_qalgorithms.qdoc b/doc/src/snippets/code/doc_src_qalgorithms.qdoc index 69d943c..e2126dd 100644 --- a/doc/src/snippets/code/doc_src_qalgorithms.qdoc +++ b/doc/src/snippets/code/doc_src_qalgorithms.qdoc @@ -302,7 +302,7 @@ list.clear(); QList<int> list; list << 33 << 12 << 68 << 6 << 12; qSort(list.begin(), list.end(), qLess<int>()); -// list: [ 68, 33, 12, 12, 6 ] +// list: [ 6, 12, 12, 33, 68 ] //! [24] diff --git a/doc/src/snippets/code/doc_src_qtmultimedia.qdoc b/doc/src/snippets/code/doc_src_qtmultimedia.qdoc new file mode 100644 index 0000000..87a03a4 --- /dev/null +++ b/doc/src/snippets/code/doc_src_qtmultimedia.qdoc @@ -0,0 +1,8 @@ +//! [0] +QT += multimedia +//! [0] + + +//! [1] +#include <QtMultimedia> +//! [1] diff --git a/doc/src/qsqldatatype-table.qdoc b/doc/src/sql-programming/qsqldatatype-table.qdoc index 1903861..e8c2351 100644 --- a/doc/src/qsqldatatype-table.qdoc +++ b/doc/src/sql-programming/qsqldatatype-table.qdoc @@ -41,7 +41,9 @@ /*! \page sql-types.html - \title QtSql Module - Recommended Use of Data Types + \title Recommended Use of Data Types in Databases + + \ingroup best-practices \section1 Recommended Use of Types in Qt Supported Databases diff --git a/doc/src/sql-driver.qdoc b/doc/src/sql-programming/sql-driver.qdoc index ef5812e..832fd0c 100644 --- a/doc/src/sql-driver.qdoc +++ b/doc/src/sql-programming/sql-driver.qdoc @@ -42,9 +42,10 @@ /*! \page sql-driver.html \title SQL Database Drivers - \ingroup architecture \brief How to configure and install QtSql drivers for supported databases. + \ingroup best-practices + The QtSql module uses driver \l{How to Create Qt Plugins}{plugins} to communicate with the different database APIs. Since Qt's SQL Module API is database-independent, all @@ -707,15 +708,14 @@ debug output when loading plugins. \endlist + Make sure you have followed the guide to \l{Deploying Plugins}. If you experience plugin load problems and see output like this: \snippet doc/src/snippets/code/doc_src_sql-driver.qdoc 31 - The problem is usually that the plugin had the wrong \l{How to - Create Qt Plugins#The Build Key}{build key}. This might require - removing an entry from the \l{How to Create Qt Plugins#The Plugin - Cache} {plugin cache}. Here is some more \l{How to Create Qt - Plugins#Debugging Plugins} {plugin debugging info}. + the problem is usually that the plugin had the wrong \l{Deploying + Plugins#The Build Key}{build key}. This might require removing an + entry from the \l{Deploying Plugins#The Plugin Cache} {plugin cache}. \target development \section1 How to Write Your Own Database Driver diff --git a/doc/src/qtsql.qdoc b/doc/src/sql-programming/sql-programming.qdoc index 0540ff5..7700a3d 100644 --- a/doc/src/qtsql.qdoc +++ b/doc/src/sql-programming/sql-programming.qdoc @@ -40,56 +40,17 @@ ****************************************************************************/ /*! - \module QtSql - \title QtSql Module - \contentspage Qt's Modules - \previouspage QtScript - \nextpage QtSvg - \ingroup modules + \group database + \title Database Classes - \brief The QtSql module helps you provide seamless database - integration to your Qt applications. - - The SQL classes are divided into three layers: - - \table - \header \o Layer \o Description - \row \o \bold{Driver Layer} - \o This comprises the classes QSqlDriver, - QSqlDriverCreator<T>, QSqlDriverCreatorBase, - QSqlDriverPlugin, and QSqlResult. This layer provides the - low-level bridge between the specific databases and the - SQL API layer. See \l{SQL Database Drivers} for more - information. - \row \o \bold{SQL API Layer} - \o These classes provide access to databases. Connections - are made using the QSqlDatabase class. Database - interaction is achieved by using the QSqlQuery class. - In addition to QSqlDatabase and QSqlQuery, the SQL API - layer is supported by QSqlError, QSqlField, QSqlIndex, - and QSqlRecord. - - \row \o \bold{User Interface Layer} - \o These classes link the data from a database to - data-aware widgets. They include QSqlQueryModel, - QSqlTableModel, and QSqlRelationalTableModel. These - classes are designed to work with Qt's model/view - framework. - \endtable - - Note that to use any of these classes, a QCoreApplication object - must have been instantiated first. To include the definitions of - the module's classes, use the following directive: - - \snippet doc/src/snippets/code/doc_src_qtsql.qdoc 0 - - To link against the module, add this line to your \l qmake \c - .pro file: + \brief Database related classes, e.g. for SQL databases. +*/ - \snippet doc/src/snippets/code/doc_src_qtsql.qdoc 1 +/*! + \page sql-programming.html + \title SQL Programming - The QtSql module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. + \brief Database integration for Qt applications. This overview assumes that you have at least a basic knowledge of SQL. You should be able to understand simple \c SELECT, \c @@ -100,11 +61,65 @@ covering SQL databases is \e {An Introduction to Database Systems} (7th Ed.) by C. J. Date, ISBN 0201385902. - Topics: + \section1 Topics: + + \list + \o \l{Database Classes} + \o \l{Connecting to Databases} + \list + \o \l{SQL Database Drivers} + \endlist + \o \l{Executing SQL Statements} + \list + \o \l{Recommended Use of Data Types in Databases} + \endlist + \o \l{Using the SQL Model Classes} + \o \l{Presenting Data in a Table View} + \o \l{Creating Data-Aware Forms} + \endlist + + \section1 Database Classes + + These classes provide access to SQL databases. + + \annotatedlist database + + The SQL classes are divided into three layers: + + \section2 Driver Layer + + This comprises the classes QSqlDriver, QSqlDriverCreator<T>, + QSqlDriverCreatorBase, QSqlDriverPlugin, and QSqlResult. - \tableofcontents + This layer provides the low-level bridge between the specific databases + and the SQL API layer. See \l{SQL Database Drivers} for more information. - \section1 Connecting to Databases + \section2 SQL API Layer + + These classes provide access to databases. Connections + are made using the QSqlDatabase class. Database + interaction is achieved by using the QSqlQuery class. + In addition to QSqlDatabase and QSqlQuery, the SQL API + layer is supported by QSqlError, QSqlField, QSqlIndex, + and QSqlRecord. + + \section2 User Interface Layer + + These classes link the data from a database to data-aware widgets. + They include QSqlQueryModel, QSqlTableModel, and QSqlRelationalTableModel. + These classes are designed to work with Qt's + \l{Model/View Programming}{model/view framework}. + + Note that to use any of these classes, a QCoreApplication object + must have been instantiated first. +*/ + +/*! + \page sql-connecting.html + \title Connecting to Databases + + \contentspage SQL Programming + \nextpage Executing SQL Statements To access a database with QSqlQuery or QSqlQueryModel, create and open one or more database connections. Database connections are @@ -165,8 +180,16 @@ To remove a database connection, first close the database using QSqlDatabase::close(), then remove it using the static method QSqlDatabase::removeDatabase(). +*/ - \section1 Executing SQL Statements +/*! + \page sql-sqlstatements.html + \title Executing SQL Statements + + \previouspage Connecting to Databases + \contentspage SQL Programming + \nextpage Using the SQL Model Classes + The QSqlQuery class provides an interface for executing SQL statements and navigating through the result set of a query. @@ -213,7 +236,7 @@ variants to QString and \c int. For an overview of the recommended types used with Qt supported - Databases, please refer to \l {QtSql Module - Recommended use of data types}{this table}. + Databases, please refer to \l{Recommended Use of Data Types in Databases}{this table}. You can iterate back and forth using QSqlQuery::next(), QSqlQuery::previous(), QSqlQuery::first(), QSqlQuery::last(), and @@ -307,8 +330,15 @@ It would be useful to mention transactions, and the fact that some databases don't support them. \endomit +*/ - \section1 Using the SQL Model Classes +/*! + \page sql-model.html + \title Using the SQL Model Classes + + \previouspage Executing SQL Statements + \contentspage SQL Programming + \nextpage Presenting Data in a Table View In addition to QSqlQuery, Qt offers three higher-level classes for accessing databases. These classes are QSqlQueryModel, @@ -446,8 +476,15 @@ \snippet examples/sql/relationaltablemodel/relationaltablemodel.cpp 2 See the QSqlRelationalTableModel documentation for details. +*/ - \section1 Presenting Data in a Table View +/*! + \page sql-presenting.html + \title Presenting Data in a Table View + + \previouspage Using the SQL Model Classes + \contentspage SQL Programming + \nextpage Creating Data-Aware Forms The QSqlQueryModel, QSqlTableModel, and QSqlRelationalTableModel classes can be used as a data source for Qt's view classes such @@ -543,8 +580,14 @@ illustrates how to use QSqlRelationalTableModel in conjunction with QSqlRelationalDelegate to provide tables with foreign key support. +*/ - \section1 Creating Data-Aware Forms +/*! + \page sql-forms.html + \title Creating Data-Aware Forms + + \previouspage Presenting Data in a Table View + \contentspage SQL Programming Using the SQL models described above, the contents of a database can be presented to other model/view components. For some applications, diff --git a/doc/src/topics.qdoc b/doc/src/topics.qdoc deleted file mode 100644 index df63d92..0000000 --- a/doc/src/topics.qdoc +++ /dev/null @@ -1,290 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the documentation of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -/*! -\group topics -\title Topics - -This page provides a collection of documents grouped by topic. - -The \l{Grouped Classes} page contains a similar list of groups for -Qt's class documentation. - -\generatelist{related} -*/ - -/*! -\group architecture -\title Architecture -\ingroup topics -\brief Documents about Qt's architecture and design. - -These documents describe aspects of Qt's architecture and design, -including overviews of core Qt features and technologies. - -\generatelist{related} -*/ - -/*! -\group buildsystem -\title Build System -\ingroup topics -\brief Tools to help automate building and installation of Qt applications. - -Qt is provided with a set of build tools to help developers automate -the process of building and installing Qt applications. - -\table 100% -\header \o Development \o Cross-Platform Issues \o Specific Tools -\row -\o - \list - \o \l {Debugging Techniques} - \o \l {Qt's Tools} - \o \l {The Qt Resource System} - \o \l {Using Precompiled Headers} -\endlist -\o -\list - \o \l {Cross Compiling Qt for Embedded Linux Applications} - \o \l {Deploying Qt Applications} - \o \l {Installation}{Installing Qt} - \o \l {Window System Specific Notes} -\endlist -\o -\list - \o \l lupdate and \l lrelease - \o \l {moc}{Meta-Object Compiler (moc)} - \o \l {User Interface Compiler (uic)} - \o \l {Resource Compiler (rcc)} -\endlist -\endtable - - -*/ - -/*! -\group classlists -\title Class and Function Indexes -\ingroup topics -\brief Collections of classes and functions grouped together into lists. - -The following documents contain collections of classes, grouped by -subject area or related to particular functionality, or comprehensive -lists of classes and functions. - -\generatelist{related} -*/ - -/*! -\group codecs -\title Codecs -\ingroup topics -\brief Codec support in Qt. - -These codecs provide facilities for conversion between Unicode and -specific text encodings. - -\generatelist{related} -*/ - -/*! -\group gui-programming -\title GUI Programming -\ingroup topics -\brief Resources for developers of GUI applications. - -The following list contains links to guides and other resources for -developers of graphical user interface (GUI) applications. - -\generatelist{related} -*/ - -/*! -\group howto -\title How To Guides and Learning Resources -\ingroup topics -\brief Guides providing help on aspects of using Qt. - -These guides provide specific help about specific Qt-related topics. - -\generatelist{related} -*/ - -/*! -\group platform-notes -\title Platform-Specific Notes -\ingroup topics -\brief Documents describing platform-specific features of Qt. - -These documents describe platform-specific features provided by Qt, and -discuss issues related to particular platforms and environments. - -\generatelist{related} -*/ - -/*! -\group porting -\title Porting Guides -\ingroup topics -\brief Guides related to porting Qt applications and libraries. - -A number of guides and documents are available that cover porting issues, -from detailed coverage of API differences between Qt 3 and Qt 4 to -platform and tool-specific documentation. - -\generatelist{related} -*/ - -/*! -\group text-processing -\title Text Processing -\ingroup topics -\brief Text processing guides and classes. - -Qt provides an extensive collection of classes for text handling. -The following guides and references describe basic text handling, support -for internationalization and character encodings, and Qt's rich text -system. - -\generatelist{related} -*/ - -/*! - \group tutorials - \title Tutorials - \ingroup topics - \brief Tutorials, guides and overviews to help you learn Qt. - - A collection of tutorials and "walkthrough" guides are provided with Qt to - help new users get started with Qt development. These documents cover a - range of topics, from basic use of widgets to step-by-step tutorials that - show how an application is put together. - - \section1 \l{Widgets Tutorial} - - \inlineimage widget-examples.png - - A beginner's guide to getting started with widgets and layouts to create - GUI applications. - - \section1 \l{Address Book Tutorial} - - \inlineimage addressbook-tutorial.png - - A seven part guide to creating a fully-functioning address book - application. This tutorial is also available with - \l{Tutoriel "Carnet d'adresses"}{French explanation}. - -*/ - -/*! -\group activeqt-tools -\title Tools for ActiveQt -\ingroup topics -\brief Tools to help integrate Qt applications with ActiveX components. - -These tools provide support for integrating Qt with ActiveX components. - -\generatelist{related} - -\sa {ActiveQt Framework} -*/ - -/*! -\group scripting -\title Scripting with ECMAScript -\ingroup topics -\brief Guides and references covering application scripting with ECMAScript. - -Qt 4.3 and later provides support for application scripting with ECMAScript. -The following guides and references cover aspects of programming with -ECMAScript and Qt. - -\generatelist{related} -*/ - -/*! -\group threading -\title Threading and Concurrent Programming -\ingroup topics -\brief Guides and references covering threading and concurrent programming. - -Qt provides a number of classes to handle the primitives used for multithreaded -programming. From Qt 4.4, the QtConcurrent namespace also provides a set of higher -level classes for concurrent programming. - -\generatelist{related} -*/ - -/*! -\group qtce -\title Qt for Windows CE -\ingroup topics -\ingroup qt-embedded -\brief Documents related to Qt on Windows CE - -Qt for Windows CE is a C++ framework for GUI and application development -for embedded devices running Windows CE. It runs on a variety of processors, -including ARM, Intel x86, MIPS and SH-4. - -\table 100% -\header \o Getting Started \o Reference \o Performance and Optimization -\row -\o - \list - \o \l {Qt for Windows CE Requirements} - \o \l {Installing Qt on Windows CE} - \o \l {Windows CE - Introduction to using Qt}{Introduction to using Qt} -\endlist -\o -\list - \o \l {Windows CE - Using shadow builds}{Using shadow builds} - \o \l {Windows CE - Working with Custom SDKs}{Working with Custom SDKs} -\endlist -\o -\list - \o \l {Windows CE OpenGL ES}{OpenGL ES} - \o \l {Qt Performance Tuning} - \o \l {Fine-Tuning Features in Qt} -\endlist -\endtable -*/ diff --git a/doc/src/tutorials/addressbook-fr.qdoc b/doc/src/tutorials/addressbook-fr.qdoc index 3ce2987..990e06e 100644 --- a/doc/src/tutorials/addressbook-fr.qdoc +++ b/doc/src/tutorials/addressbook-fr.qdoc @@ -43,11 +43,10 @@ \page tutorials-addressbook-fr.html \startpage {index.html}{Qt Reference Documentation} + \contentspage Tutorials \nextpage {tutorials/addressbook-fr/part1}{Chapitre 1} \title Tutoriel "Carnet d'adresses" - \ingroup howto - \ingroup tutorials \brief Une introduction à la programation d'interface graphique montrant comment construire une application simple avec Qt. Ce tutoriel est une introduction à la programmation de GUI (interface utilisateur) diff --git a/doc/src/tutorials/addressbook.qdoc b/doc/src/tutorials/addressbook.qdoc index d27b95c..4623aaa 100644 --- a/doc/src/tutorials/addressbook.qdoc +++ b/doc/src/tutorials/addressbook.qdoc @@ -43,11 +43,10 @@ \page tutorials-addressbook.html \startpage {index.html}{Qt Reference Documentation} + \contentspage Tutorials \nextpage {tutorials/addressbook/part1}{Chapter 1} \title Address Book Tutorial - \ingroup howto - \ingroup tutorials \brief An introduction to GUI programming, showing how to put together a simple yet fully-functioning application. diff --git a/doc/src/tutorials/widgets-tutorial.qdoc b/doc/src/tutorials/widgets-tutorial.qdoc index 39f6b00..3c0220e 100644 --- a/doc/src/tutorials/widgets-tutorial.qdoc +++ b/doc/src/tutorials/widgets-tutorial.qdoc @@ -41,15 +41,15 @@ /*! \page widgets-tutorial.html - \startpage {index.html}{Qt Reference Documentation} - \nextpage {tutorials/widgets/toplevel}{Creating a Window} - \title Widgets Tutorial - \ingroup tutorials - \brief This tutorial covers basic usage of widgets and layouts, showing how they are used to build GUI applications. + \startpage {index.html}{Qt Reference Documentation} + \contentspage Tutorials + \nextpage {tutorials/widgets/toplevel}{Creating a Window} + + \section1 Introduction Widgets are the basic building blocks of graphical user interface (GUI) @@ -94,7 +94,7 @@ example. For example, the GUI for a main window may be set up in the constructor of a QMainWindow subclass. - The \l{Qt Examples#Widgets}{Widgets examples} are a good place to look for + The \l{Widgets examples} are a good place to look for more complex and complete examples and applications. \section1 Building Examples and Tutorials @@ -279,6 +279,5 @@ \snippet tutorials/widgets/nestedlayouts/main.cpp set up the model The use of models and views is covered in the - \l{Qt Examples#Item Views}{item view examples} and in the - \l{Model/View Programming} overview. + \l{Item Views Examples} and in the \l{Model/View Programming} overview. */ diff --git a/doc/src/focus.qdoc b/doc/src/widgets-and-layouts/focus.qdoc index 459a9d8..1cbc71b 100644 --- a/doc/src/focus.qdoc +++ b/doc/src/widgets-and-layouts/focus.qdoc @@ -39,24 +39,11 @@ ** ****************************************************************************/ -/**************************************************************************** -** -** Documentation of focus handling in Qt. -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the Qt GUI Toolkit. -** EDITIONS: FREE, PROFESSIONAL, ENTERPRISE -** -****************************************************************************/ - /*! \page focus.html \title Keyboard Focus - \ingroup architecture - \ingroup gui-programming - \brief An overview of the keyboard focus management and handling. + \brief Keyboard focus management and handling. + \ingroup frameworks-technologies \keyword keyboard focus diff --git a/doc/src/gallery-cde.qdoc b/doc/src/widgets-and-layouts/gallery-cde.qdoc index 02dabb1..02dabb1 100644 --- a/doc/src/gallery-cde.qdoc +++ b/doc/src/widgets-and-layouts/gallery-cde.qdoc diff --git a/doc/src/gallery-cleanlooks.qdoc b/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc index 13c0f8f..13c0f8f 100644 --- a/doc/src/gallery-cleanlooks.qdoc +++ b/doc/src/widgets-and-layouts/gallery-cleanlooks.qdoc diff --git a/doc/src/gallery-gtk.qdoc b/doc/src/widgets-and-layouts/gallery-gtk.qdoc index 8251f04..8251f04 100644 --- a/doc/src/gallery-gtk.qdoc +++ b/doc/src/widgets-and-layouts/gallery-gtk.qdoc diff --git a/doc/src/gallery-macintosh.qdoc b/doc/src/widgets-and-layouts/gallery-macintosh.qdoc index c7efabe..c7efabe 100644 --- a/doc/src/gallery-macintosh.qdoc +++ b/doc/src/widgets-and-layouts/gallery-macintosh.qdoc diff --git a/doc/src/gallery-motif.qdoc b/doc/src/widgets-and-layouts/gallery-motif.qdoc index 1539753..1539753 100644 --- a/doc/src/gallery-motif.qdoc +++ b/doc/src/widgets-and-layouts/gallery-motif.qdoc diff --git a/doc/src/gallery-plastique.qdoc b/doc/src/widgets-and-layouts/gallery-plastique.qdoc index 49bd13e..49bd13e 100644 --- a/doc/src/gallery-plastique.qdoc +++ b/doc/src/widgets-and-layouts/gallery-plastique.qdoc diff --git a/doc/src/gallery-windows.qdoc b/doc/src/widgets-and-layouts/gallery-windows.qdoc index 2fa971c..2fa971c 100644 --- a/doc/src/gallery-windows.qdoc +++ b/doc/src/widgets-and-layouts/gallery-windows.qdoc diff --git a/doc/src/gallery-windowsvista.qdoc b/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc index 9ab3a2f..9ab3a2f 100644 --- a/doc/src/gallery-windowsvista.qdoc +++ b/doc/src/widgets-and-layouts/gallery-windowsvista.qdoc diff --git a/doc/src/gallery-windowsxp.qdoc b/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc index aefff65..aefff65 100644 --- a/doc/src/gallery-windowsxp.qdoc +++ b/doc/src/widgets-and-layouts/gallery-windowsxp.qdoc diff --git a/doc/src/gallery.qdoc b/doc/src/widgets-and-layouts/gallery.qdoc index e96a8ef..cb92cb4 100644 --- a/doc/src/gallery.qdoc +++ b/doc/src/widgets-and-layouts/gallery.qdoc @@ -42,7 +42,6 @@ /*! \group gallery \title Qt Widget Gallery - \ingroup topics \brief Qt widgets shown in different styles on various platforms. Qt's support for widget styles and themes enables your application to fit in diff --git a/doc/src/layout.qdoc b/doc/src/widgets-and-layouts/layout.qdoc index dc75bc6..4622301 100644 --- a/doc/src/layout.qdoc +++ b/doc/src/widgets-and-layouts/layout.qdoc @@ -40,12 +40,21 @@ ****************************************************************************/ /*! - \page layout.html + \group geomanagement + \title Layout Classes +*/ +/*! + \page layout.html \title Layout Management - \ingroup architecture \brief A tour of the standard layout managers and an introduction to custom layouts. + + \previouspage Widget Classes + \contentspage Widgets and Layouts + \nextpage {Implementing Styles and Style Aware Widgets}{Styles} + + \ingroup frameworks-technologies The Qt layout system provides a simple and powerful way of automatically arranging child widgets within a widget to ensure that they make good use @@ -78,6 +87,8 @@ \endlist \endlist + \section1 Qt's Layout Classes + Qt's layout classes were designed for hand-written C++ code, allowing measurements to be specified in pixels for simplicity, so they are easy to understand and use. The code generated for forms created using \QD also @@ -85,6 +96,7 @@ design of a form since it avoids the compile, link and run cycle usually involved in user interface development. + \annotatedlist geomanagement \section1 Horizontal, Vertical, Grid, and Form Layouts diff --git a/doc/src/styles.qdoc b/doc/src/widgets-and-layouts/styles.qdoc index e6c6e8c..aa51838 100644 --- a/doc/src/styles.qdoc +++ b/doc/src/widgets-and-layouts/styles.qdoc @@ -40,23 +40,34 @@ ****************************************************************************/ /*! - \page style-reference.html + \group appearance + \title Widget Appearance and Style + \brief Classes used for customizing UI appearance and style. +*/ +/*! + \page style-reference.html \title Implementing Styles and Style Aware Widgets - \ingroup architecture \brief An overview of styles and the styling of widgets. - \tableofcontents + \ingroup frameworks-technologies - \section1 Introduction + \previouspage Widget Classes + \contentspage Widgets and Layouts + \nextpage {Qt Style Sheets}{Style sheets} Styles (classes that inherit QStyle) draw on behalf of widgets - and encapsulate the look and feel of a GUI. Several styles are - built into Qt (e.g., windows style and motif style). Other styles are - only available on specific platforms (such as the windows XP style). - Custom styles are made available as plugins or by creating an - instance of the style class in an application and setting it with - QApplication::setStyle(). + and encapsulate the look and feel of a GUI. The QStyle class is + an abstract base class that encapsulates the look and feel of a + GUI. Qt's built-in widgets use it to perform nearly all of their + drawing, ensuring that they look exactly like the equivalent + native widgets. + + Several styles are built into Qt (e.g., windows style and motif style). + Other styles are only available on specific platforms (such as + the windows XP style). Custom styles are made available as plugins + or by creating an instance of the style class in an application and + setting it with QApplication::setStyle(). To implement a new style, you inherit one of Qt's existing styles - the one most resembling the style you want to create - and @@ -79,6 +90,15 @@ current style. This document shows how widgets draw themselves and which possibilities the style gives them. + \tableofcontents + + \section1 Classes for Widget Styling + + These classes are used to customize an application's appearance and + style. + + \annotatedlist appearance + \section1 The QStyle implementation The API of QStyle contains functions that draw the widgets, static @@ -91,9 +111,26 @@ QStyle draws graphical elements; an element is a widget or a widget part like a push button bevel, a window frame, or a scroll - bar. When a widget asks a style to draw an element, it provides the - style with a style option, which is a class that contains the - information necessary for drawing. + bar. Most draw functions now take four arguments: + + \list + \o an enum value specifying which graphical element to draw + \o a QStyleOption specifying how and where to render that element + \o a QPainter that should be used to draw the element + \o a QWidget on which the drawing is performed (optional) + \endlist + + When a widget asks a style to draw an element, it provides the style + with a QStyleOption, which is a class that contains the information + necessary for drawing. Thanks to QStyleOption, it is possible to make + QStyle draw widgets without linking in any code for the widget. This + makes it possible to use \l{QStyle}'s draw functions on any paint + device. Ie you can draw a combobox on any widget, not just on a + QComboBox. + + The widget is passed as the last argument in case the style needs + it to perform special effects (such as animated default buttons on + Mac OS X), but it isn't mandatory. We will in the course of this section look at the style elements, the style options, and the functions of QStyle. Finally, we describe @@ -236,11 +273,15 @@ \section2 Style Options - A style option (a class that inherit QStyleOption) stores - parameters used by QStyle functions. The sub-classes of - QStyleOption contain all information necessary to style the - individual widgets. The style options keep public variables for - performance reasons. Style options are filled out by the widgets. + The sub-classes of QStyleOption contain all information necessary + to style the individual elements. Style options are instantiated - + usually on the stack - and filled out by the caller of the QStyle + function. Depending on what is drawn the style will expect + different a different style option class. For example, the + QStyle::PE_FrameFocusRect element expects a QStyleOptionFocusRect + argument, and it's possible to create custom subclasses that a + custom style can use. The style options keep public variables + for performance reasons. The widgets can be in a number of different states, which are defined by the \l{QStyle::}{State} enum. Some of the state flags have @@ -256,6 +297,29 @@ the text, icon, and the size of their icon. The exact contents of all options are described when we go through individual widgets. + When reimplementing QStyle functions that take a + QStyleOption parameter, you often need to cast the + QStyleOption to a subclass (e.g., QStyleOptionFocusRect). For + safety, you can use qstyleoption_cast() to ensure that the + 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.qdoc 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.qdoc 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 + \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 + \section2 QStyle Functions The QStyle class defines three functions for drawing the primitive, diff --git a/doc/src/stylesheet.qdoc b/doc/src/widgets-and-layouts/stylesheet.qdoc index 2afe924..6a3fcb2 100644 --- a/doc/src/stylesheet.qdoc +++ b/doc/src/widgets-and-layouts/stylesheet.qdoc @@ -41,12 +41,15 @@ /*! \page stylesheet.html - \startpage index.html QtReference Documentation - \nextpage The Style Sheet Syntax \title Qt Style Sheets - \ingroup architecture \brief How to use style sheets to customize the appearance of widgets. + \ingroup frameworks-technologies + + \previouspage {Implementing Styles and Style Aware Widgets}{Styles} + \contentspage Widgets and Layouts + \nextpage The Style Sheet Syntax + \keyword style sheet \keyword stylesheet @@ -62,15 +65,10 @@ \list \i \l{Overview} \i \l{The Style Sheet Syntax} - \tableofcontents{1 The Style Sheet Syntax} \i \l{Qt Designer Integration} - \tableofcontents{1 Qt Designer Integration} \i \l{Customizing Qt Widgets Using Style Sheets} - \tableofcontents{1 Customizing Qt Widgets Using Style Sheets} \i \l{Qt Style Sheets Reference} - \tableofcontents{1 Qt Style Sheets Reference} \i \l{Qt Style Sheets Examples} - \tableofcontents{1 Qt Style Sheets Examples} \endlist \target overview @@ -150,7 +148,7 @@ subclasses. We plan to address this in some future release. */ - /*! +/*! \page stylesheet-syntax.html \contentspage {Qt Style Sheet}{Contents} \previouspage Qt Style Sheet @@ -160,6 +158,8 @@ Qt Style Sheet terminology and syntactic rules are almost identical to those of HTML CSS. If you already know CSS, you can probably skim quickly through this section. + + \tableofcontents \section1 Style Rules @@ -549,9 +549,9 @@ If the property references an enum declared with Q_ENUMS, you should reference its constants by name, i.e., not their numeric value. - */ +*/ - /*! +/*! \page stylesheet-designer.html \contentspage {Qt Style Sheet}{Contents} \previouspage The Style Sheet Syntax @@ -577,7 +577,7 @@ \image designer-stylesheet-usage.png */ - /*! +/*! \page stylesheet-customizing.html \contentspage {Qt Style Sheet}{Contents} \previouspage Qt Designer Integration @@ -589,6 +589,8 @@ padding rectangle, and the content rectangle. The box model describes this in further detail. + \tableofcontents + \target box model \section1 The Box Model @@ -677,9 +679,9 @@ property or sub-control is customized, \bold{all} the other properties or sub-controls must be customized as well. - */ +*/ - /*! +/*! \page stylesheet-reference.html \contentspage {Qt Style Sheet}{Contents} \previouspage Customizing Qt Widgets Using Style Sheets @@ -3356,17 +3358,17 @@ for an example of how to customize a subcontrol. */ - /*! +/*! \page stylesheet-examples.html \contentspage {Qt Style Sheet}{Contents} \previouspage Qt Style Sheets Reference \title Qt Style Sheets Examples + We will now see a few examples to get started with using Qt Style Sheets. + \tableofcontents \section1 Style Sheet Usage - We will now see a few examples to get started with using Qt Style Sheets. - \section2 Customizing the Foreground and Background Colors Let's start by setting yellow as the background color of all diff --git a/doc/src/widgets-and-layouts/widgets.qdoc b/doc/src/widgets-and-layouts/widgets.qdoc new file mode 100644 index 0000000..0697b94 --- /dev/null +++ b/doc/src/widgets-and-layouts/widgets.qdoc @@ -0,0 +1,187 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \page widgets-and-layouts.html + \title Widgets and Layouts + + \ingroup frameworks-technologies + + \nextpage Widget Classes + + The primary elements for designing user interfaces in Qt are widgets and layouts. + + \section1 Widgets + + \l{Widget Classes}{Widgets} can display data and status information, receive + user input, and provide a container for other widgets that should be grouped + together. A widget that is not embedded in a parent widget is called a + \l{Application Windows and Dialogs}{window}. + + \image parent-child-widgets.png A parent widget containing various child widgets. + + The QWidget class provides the basic capability to render to the screen, and to + handle user input events. All UI elements that Qt provides are either subclasses + of QWidget, or are used in connection with a QWidget subclass. Creating custom + widgets is done by subclassing QWidget or a suitable subclass and reimplementing + the virtual event handlers. + + \section1 Layouts + + \l{Layout Management}{Layouts} are an elegant and flexible way to automatically + arrange child widgets within their container. Each widget reports its size requirements + to the layout through the \l{QWidget::}{sizeHint} and \l{QWidget::}{sizePolicy} + properties, and the layout distributes the available space accordingly. + + \table + \row + \o \image qgridlayout-with-5-children.png + \o \image qformlayout-with-6-children.png + \endtable + + \l{Qt Designer Manual}{\QD} is a powerful tool for interactively creating and + arranging widgets in layouts. + + \section1 Widget Styles + + \l{Implementing Styles and Style Aware Widgets}{Styles} draw on behalf of widgets + and encapsulate the look and feel of a GUI. Qt's built-in widgets use the QStyle + class to perform nearly all of their drawing, ensuring that they look exactly like + the equivalent native widgets. + + \table + \row + \o \image windowsxp-tabwidget.png + \o \image plastique-tabwidget.png + \o \image macintosh-tabwidget.png + \endtable + + \l{Qt Style Sheets} are a powerful mechanism that allows you to customize the + appearance of widgets, in addition to what is already possible by subclassing QStyle. +*/ + +/*! + \page widget-classes.html + \title Widget Classes + + \contentspage Widgets and Layouts + \nextpage Layout Management + + Below you find a list of all widget classes in Qt. You can also browse the + widget classes Qt provides in the various supported styles in the + \l{Qt Widget Gallery}. + + \tableofcontents + + \section1 Basic Widgets + + These basic widgets (controls), such as buttons, comboboxes and scroll bars, are + designed for direct use. + + \table + \row + \o \image windows-label.png + \o \image windowsvista-pushbutton.png + \o \image gtk-progressbar.png + \row + \o \image plastique-combobox.png + \o \image macintosh-radiobutton.png + \o \image cde-lineedit.png + \endtable + + \annotatedlist basicwidgets + + \section1 Advanced Widgets + + Advanced GUI widgets such as tab widgets and progress bars provide more + complex user interface controls. + + \table + \row + \o \image windowsxp-treeview.png + \o \image gtk-calendarwidget.png + \o \image qundoview.png + \endtable + + \annotatedlist advanced + + \table + \row + \o \image windowsvista-tabwidget.png + \o \image macintosh-groupbox.png + \endtable + + \section1 Organizer Widgets + + Classes like splitters, tab bars, button groups, etc are used to + organize and group GUI primitives into more complex applications or + dialogs. + + \annotatedlist organizers + + \section1 Abstract Widget Classes + + Abstract widget classes usable through subclassing. They are generally + not usable in themselves, but provide functionality that can be used + by inheriting these classes. + + \annotatedlist abstractwidgets +*/ + +/*! + \group advanced + \title Advanced Widgets +*/ + +/*! + \group abstractwidgets + \title Abstract Widget Classes +*/ + +/*! + \group basicwidgets + \title Basic Widgets +*/ + +/*! + \group organizers + \title Organizers +*/ diff --git a/doc/src/qtcore.qdoc b/doc/src/windows-and-dialogs/dialogs.qdoc index 7e23c5e..1c039d5 100644 --- a/doc/src/qtcore.qdoc +++ b/doc/src/windows-and-dialogs/dialogs.qdoc @@ -40,21 +40,37 @@ ****************************************************************************/ /*! - \module QtCore - \title QtCore Module - \contentspage Qt's Modules - \previouspage Qt's Modules - \nextpage QtGui - \ingroup modules + \group standard-dialogs + \title Standard Dialog Classes +*/ + +/*! + \group dialog-classes + \title Classes for Building Dialogs +*/ + +/*! + \page dialogs.html + \title Dialog Windows + \brief An overview over dialog windows. + + \previouspage The Application Main Window + \contentspage Application Windows and Dialogs + \nextpage Desktop Integration - \keyword QtCore + Dialogs can be \e{modal}, in which case the user is required to provide + necessary information before work in the main window + can continue, or \e{modeless}. Modeless dialogs do not prevent the user from + interacting with any of the other windows in the application. - \brief The QtCore module contains core non-GUI functionality. + Qt provides a set of ready-made dialogs for file, font, color-selection + and more. - All other Qt modules rely on this module. To include the - definitions of the module's classes, use the following directive: + \annotatedlist standard-dialogs - \snippet doc/src/snippets/code/doc_src_qtcore.qdoc 0 + Custom dialogs can be easily created by composing regular widgets into + a QDialog. These classes are specifically designed for building custom + dialogs: - The QtCore module is part of all \l{Qt editions}. + \annotatedlist dialog-classes */ diff --git a/doc/src/windows-and-dialogs/mainwindow.qdoc b/doc/src/windows-and-dialogs/mainwindow.qdoc new file mode 100644 index 0000000..e0134a4 --- /dev/null +++ b/doc/src/windows-and-dialogs/mainwindow.qdoc @@ -0,0 +1,279 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \group mainwindow-classes + \title Main Window and Related Classes +*/ + +/*! + \page application-windows.html + \title Application Windows and Dialogs + \ingroup frameworks-technologies + + \nextpage The Application Main Window + + A \l{Widgets}{widget} that is not embedded in a parent widget is called a window. + Usually, windows have a frame and a title bar, although it is also possible to create + windows without such decoration using suitable window flags). In Qt, QMainWindow + and the various subclasses of QDialog are the most common window types. + + In applications, windows provide the screen space upon which the user + interface is built. Windows separate applications visually from each other + and usually provide a window decoration that allows the user to resize and + position the applications according to his preferences. Windows are typically + integrated into the desktop environment and to some degree managed by the + window management system that the desktop environment provides. For instance, + selected windows of an application are represented in the task bar. + + \section1 Primary and Secondary Windows + + Any QWidget that has no parent will become a window, and will on most platforms + be listed in the desktop's task bar. This is usually only wanted for one + window in the application, the \e{primary window}. + + In addition, a QWidget that has a parent can become a window by setting the + \l{Qt::WindowType}{Qt::WA_Window} flag. Depending on the window management system + such \e{secondary windows} are usually stacked on top of their respective parent + window, and not have a task bar entry of their own. + + The QMainWindow and the QDialog classes set the Qt::WA_Window flag in their + constructor, as they are designed to be used as windows and provide facilities + that are not wanted for child widgets. + + \section1 Main Windows and Dialogs + + \l{The Application Main Window} provides the framework for building the + application's main user interface, and are created by subclassing QMainWindow. + QMainWindow has its own layout to which you can add a \l{QMenuBar}{menu bar}, + \l{QToolBar}{tool bars}, \l{QDockWidget}{dockable widgets} and a + \l{QStatusBar}{status bar}. The center area can be occupied by any kind of + QWidget. + + \l{Dialog Windows} are used as secondary windows that present the user with + options and choices. Dialogs are created by subclassing QDialog and using + \l{Widgets and Layouts}{widgets and layouts} to implement the user interface. + In addition, Qt provides a number of ready-made standard dialogs that can be + used for standard tasks like file or font selection. + + Both main windows and dialogs can be created with \QD, Qt's visual design tool. + Using \QD is a lot faster than hand-coding, and makes it easy to test different + design ideas. Creating designs visually and reading the code generated by + \l{uic} is a great way to learn Qt! + + \keyword window geometry + \section1 Window Geometry + + QWidget provides several functions that deal with a widget's + geometry. Some of these functions operate on the pure client area + (i.e. the window excluding the window frame), others include the + window frame. The differentiation is done in a way that covers the + most common usage transparently. + + \list + \o \bold{Including the window frame:} + \l{QWidget::x()}{x()}, + \l{QWidget::y()}{y()}, + \l{QWidget::frameGeometry()}{frameGeometry()}, + \l{QWidget::pos()}{pos()}, and + \l{QWidget::move()}{move()}. + \o \bold{Excluding the window frame:} + \l{QWidget::geometry()}{geometry()}, + \l{QWidget::width()}{width()}, + \l{QWidget::height()}{height()}, + \l{QWidget::rect()}{rect()}, and + \l{QWidget::size()}{size()}. + \endlist + + Note that the distinction only matters for decorated top-level + widgets. For all child widgets, the frame geometry is equal to the + widget's client geometry. + + This diagram shows most of the functions in use: + \img geometry.png Geometry diagram + + \section2 X11 Peculiarities + + On X11, a window does not have a frame until the window manager + decorates it. This happens asynchronously at some point in time + after calling QWidget::show() and the first paint event the + window receives, or it does not happen at all. Bear in mind that + X11 is policy-free (others call it flexible). Thus you cannot + make any safe assumption about the decoration frame your window + will get. Basic rule: There's always one user who uses a window + manager that breaks your assumption, and who will complain to + you. + + Furthermore, a toolkit cannot simply place windows on the screen. All + Qt can do is to send certain hints to the window manager. The window + manager, a separate process, may either obey, ignore or misunderstand + them. Due to the partially unclear Inter-Client Communication + Conventions Manual (ICCCM), window placement is handled quite + differently in existing window managers. + + X11 provides no standard or easy way to get the frame geometry + once the window is decorated. Qt solves this problem with nifty + heuristics and clever code that works on a wide range of window + managers that exist today. Don't be surprised if you find one + where QWidget::frameGeometry() returns wrong results though. + + Nor does X11 provide a way to maximize a window. + QWidget::showMaximized() has to emulate the feature. Its result + depends on the result of QWidget::frameGeometry() and the + capability of the window manager to do proper window placement, + neither of which can be guaranteed. +*/ + +/*! + \page mainwindow.html + \title The Application Main Window + \brief Everything you need for a typical modern main application window, + including menus, toolbars, workspace, etc. + + \contentspage Application Windows and Dialogs + \nextpage Dialog Windows + + \tableofcontents + + \section1 Overview of the Main Window Classes + + These classes provide everything you need for a typical modern main + application window, like the main window itself, menu and tool bars, + a status bar, etc. + + \annotatedlist mainwindow-classes + + \section1 The Main Window Classes + + Qt 4 provides the following classes for managing main windows and + associated user interface components: + + \list + \o QMainWindow remains the central class around which applications + can be built. The interface to this class has been simplified, and + much of the functionality previously included in this class is now + present in the companion QDockWidget and QToolBar classes. + + \o QDockWidget provides a widget that can be used to create + detachable tool palettes or helper windows. Dock widgets keep track + of their own properties, and they can be moved, closed, and floated + as external windows. + + \o QToolBar provides a generic toolbar widget that can hold a + number of different action-related widgets, such as buttons, + drop-down menus, comboboxes, and spin boxes. The emphasis on a + unified action model in Qt 4 means that toolbars cooperate well + with menus and keyboard shortcuts. + \endlist + + \section1 Example Code + + Using QMainWindow is straightforward. Generally, we subclass + QMainWindow and set up menus, toolbars, and dock widgets inside + the QMainWindow constructor. + + To add a menu bar to the main window, we simply create the menus, and + add them to the main window's menu bar. Note that the + QMainWindow::menuBar() function will automatically create the menu bar + 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.qdoc 0 + \dots + \snippet examples/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 + \dots + \snippet examples/mainwindows/menus/mainwindow.cpp 11 + \dots + + The QToolBar and QMenu classes use Qt's action system to provide a + consistent API. In the above code, some existing actions were added to + the file menu with the QMenu::addAction() function. QToolBar also + provides this function, making it easy to reuse actions in different + parts of the main window. This avoids unnecessary duplication of work. + + 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 + \dots + \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 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 + top tool bar area. We can see that the actions specified by \c + newAct and \c openAct will be displayed both on the toolbar and in + the file menu. + + QDockWidget is used in a similar way to QToolBar. We create a + 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 + + 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. + + The QMainWindow API allows the programmer to customize which dock + widget areas occupy the four corners of the dock widget area. If + required, the default can be changed with the + QMainWindow::setCorner() function: + + \snippet doc/src/snippets/code/doc_src_qt4-mainwindow.qdoc 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 + corners of the main window in this layout. + + \image mainwindow-docks-example.png + + 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.qdoc 3 + + The central widget can be any subclass of QWidget. +*/ diff --git a/doc/src/qtxmlpatterns.qdoc b/doc/src/xml-processing/xml-patterns.qdoc index 38a230e..f951712 100644 --- a/doc/src/qtxmlpatterns.qdoc +++ b/doc/src/xml-processing/xml-patterns.qdoc @@ -40,18 +40,15 @@ ****************************************************************************/ /*! - \module QtXmlPatterns - \title QtXmlPatterns Module - \since 4.4 - \contentspage Qt's Modules - \previouspage QtXml - \nextpage Phonon Module - \ingroup modules - \ingroup scripting + \page xmlprocessing.html + \title Using XML Technologies + + \previouspage Working with the DOM Tree + \contentspage XML Processing \keyword Patternist - \brief An overview of Qt's support for using XQuery and XPath in + \brief An overview of Qt's support for using XML technologies in Qt programs. \tableofcontents @@ -134,18 +131,6 @@ \section2 Running the query engine from your Qt application - To access the QtXmlPatterns C++ API from your Qt application, - include the QtXmlPatterns classes at compile time: - - \snippet doc/src/snippets/code/doc_src_qtxmlpatterns.qdoc 0 - - Link the compiled application with the QtXmlPatterns module by - adding the following line to the - \l{qmake-project-files.html#declaring-qt-libraries} {QT line} in - your qmake \c{.pro} file: - - \snippet doc/src/snippets/code/doc_src_qtxmlpatterns.qdoc 1 - If we save the example XQuery shown above in a text file (e.g. \c{myquery.xq}), we can run it from a Qt application using a standard QtXmlPatterns code sequence: @@ -910,55 +895,6 @@ URIs are first passed to QAbstractUriResolver. Check QXmlQuery::setUriResolver() for possible rewrites. - - \section1 License Information - - The XML Schema implementation provided by this module contains the \c xml.xsd file - (located in \c{src/xmlpatterns/schema/schemas}) which is licensed under the terms - given below. This module is always built with XML Schema support enabled. - - \legalese - W3C\copyright SOFTWARE NOTICE AND LICENSE - - This license came from: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 - - This work (and included software, documentation such as READMEs, or other - related items) is being provided by the copyright holders under the following - license. By obtaining, using and/or copying this work, you (the licensee) - agree that you have read, understood, and will comply with the following - terms and conditions. - - Permission to copy, modify, and distribute this software and its - documentation, with or without modification, for any purpose and without - fee or royalty is hereby granted, provided that you include the following on - ALL copies of the software and documentation or portions thereof, including - modifications: - - 1. The full text of this NOTICE in a location viewable to users of the - redistributed or derivative work.\br - 2. Any pre-existing intellectual property disclaimers, notices, or terms - and conditions. If none exist, the W3C Software Short Notice should be - included (hypertext is preferred, text is permitted) - within the body of any redistributed or derivative code.\br - 3. Notice of any changes or modifications to the files, including the date - changes were made. (We recommend you provide URIs to the location from - which the code is derived.) - - THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS - MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT - LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR - PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE - ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. - - COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR - CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR - DOCUMENTATION. - - The name and trademarks of copyright holders may NOT be used in - advertising or publicity pertaining to the software without specific, written - prior permission. Title to copyright in this software and any associated - documentation will at all times remain with copyright holders. - \endlegalese */ /*! diff --git a/doc/src/qtxml.qdoc b/doc/src/xml-processing/xml-processing.qdoc index 4df2589..6e48515 100644 --- a/doc/src/qtxml.qdoc +++ b/doc/src/xml-processing/xml-processing.qdoc @@ -40,75 +40,199 @@ ****************************************************************************/ /*! - \module QtXml - \title QtXml Module - \contentspage Qt's Modules - \previouspage QtSvg - \nextpage QtXmlPatterns - \ingroup modules + \group xml-tools + \title XML Classes - \brief The QtXml module provides a stream reader and writer for - XML documents, and C++ implementations of SAX and DOM. + \brief Classes that support XML, via, for example DOM and SAX. - SAX is an event-based standard interface for XML parsers. - The Qt interface follows the design of the SAX2 Java implementation. - Its naming scheme was adapted to fit the Qt naming conventions. - Details on SAX2 can be found at \l{http://www.saxproject.org}. - - Support for SAX2 filters and the reader factory are under - development. The Qt implementation does not include the SAX1 - compatibility classes present in the Java interface. - For an introduction to Qt's SAX2 classes, see \l{The Qt SAX2 Classes}. - - DOM Level 2 is a W3C Recommendation for XML interfaces that maps the - constituents of an XML document to a tree structure. The specification - of DOM Level 2 can be found at \l{http://www.w3.org/DOM/}. - For more information about the DOM classes in Qt is provided, see - \l{The Qt DOM Classes}. + These classes are relevant to XML users. + + \generatelist{related} +*/ - Since version 4.3, Qt provides two new classes for reading and - writing XML: QXmlStreamReader and QXmlStreamWriter. +/*! + \page xml-processing.html + \title XML Processing + \brief An Overview of the XML processing facilities in Qt. In addition to core XML support, classes for higher level querying - and manipulation of XML data, are provided by the QtXmlPatterns + and manipulation of XML data are provided by the QtXmlPatterns module. In the QtSvg module, the QSvgRenderer and QSvgGenerator classes can read and write a subset of SVG, an XML-based file format. Qt also provides helper functions that may be useful to those working with XML and XHTML: see Qt::escape() and Qt::convertFromPlainText(). - Further XML support is provided by the \l{Qt Solutions} group who - provide, for example, classes that support SOAP and MML with the - Qt XML classes. + \section1 Topics: - This module is part of the \l{Qt Full Framework Edition} and the - \l{Open Source Versions of Qt}. + \list + \o \l {Classes for XML Processing} + \o \l {An Introduction to Namespaces} + \o \l {XML Streaming} + \o \l {The SAX Interface} + \o \l {Working with the DOM Tree} + \o \l {Using XML Technologies}{XQuery/XPath and XML Schema} + \list + \o \l{A Short Path to XQuery} + \endlist + \endlist + + \section1 Classes for XML Processing - Topics: + These classes are relevant to XML users. - \tableofcontents + \annotatedlist xml-tools +*/ - \section1 Configuring the Build Process +/*! + \page xml-namespaces.html + \title An Introduction to Namespaces + \target namespaces - Applications that use Qt's XML classes need to be configured to - be built against the QtXml module. The following declaration in a - \c qmake project file ensures that an application is compiled and - linked appropriately: + \contentspage XML Processing + \nextpage XML Streaming - To include the definitions of the module's classes, use the - following directive: + Parts of the Qt XML module documentation assume that you are familiar + with XML namespaces. Here we present a brief introduction; skip to + \link #namespacesConventions Qt XML documentation conventions \endlink + if you already know this material. - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 0 + Namespaces are a concept introduced into XML to allow a more modular + design. With their help data processing software can easily resolve + naming conflicts in XML documents. - To link against the module, add this line to your \l qmake \c - .pro file: + Consider the following example: - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 1 + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 6 - This line is necessary because only the QtCore and QtGui modules - are used in the default build process. + Here we find three different uses of the name \e title. If you wish to + process this document you will encounter problems because each of the + \e titles should be displayed in a different manner -- even though + they have the same name. - \section1 The QtXml Stream Classes + The solution would be to have some means of identifying the first + occurrence of \e title as the title of a book, i.e. to use the \e + title element of a book namespace to distinguish it from, for example, + the chapter title, e.g.: + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 7 + + \e book in this case is a \e prefix denoting the namespace. + + Before we can apply a namespace to element or attribute names we must + declare it. + + Namespaces are URIs like \e http://www.example.com/fnord/book/. This + does not mean that data must be available at this address; the URI is + simply used to provide a unique name. + + We declare namespaces in the same way as attributes; strictly speaking + they \e are attributes. To make for example \e + http://www.example.com/fnord/ the document's default XML namespace \e + xmlns we write + + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 8 + + To distinguish the \e http://www.example.com/fnord/book/ namespace from + the default, we must supply it with a prefix: + + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 9 + + A namespace that is declared like this can be applied to element and + attribute names by prepending the appropriate prefix and a ":" + delimiter. We have already seen this with the \e book:title element. + + Element names without a prefix belong to the default namespace. This + rule does not apply to attributes: an attribute without a prefix does + not belong to any of the declared XML namespaces at all. Attributes + always belong to the "traditional" namespace of the element in which + they appear. A "traditional" namespace is not an XML namespace, it + simply means that all attribute names belonging to one element must be + different. Later we will see how to assign an XML namespace to an + attribute. + + Due to the fact that attributes without prefixes are not in any XML + namespace there is no collision between the attribute \e title (that + belongs to the \e author element) and for example the \e title element + within a \e chapter. + + Let's clarify this with an example: + \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 10 + + Within the \e document element we have two namespaces declared. The + default namespace \e http://www.example.com/fnord/ applies to the \e + book element, the \e chapter element, the appropriate \e title element + and of course to \e document itself. + + The \e book:author and \e book:title elements belong to the namespace + with the URI \e http://www.example.com/fnord/book/. + + The two \e book:author attributes \e title and \e name have no XML + namespace assigned. They are only members of the "traditional" + namespace of the element \e book:author, meaning that for example two + \e title attributes in \e book:author are forbidden. + + In the above example we circumvent the last rule by adding a \e title + attribute from the \e http://www.example.com/fnord/ namespace to \e + book:author: the \e fnord:title comes from the namespace with the + prefix \e fnord that is declared in the \e book:author element. + + Clearly the \e fnord namespace has the same namespace URI as the + default namespace. So why didn't we simply use the default namespace + we'd already declared? The answer is quite complex: + \list + \o attributes without a prefix don't belong to any XML namespace at + all, not even to the default namespace; + \o additionally omitting the prefix would lead to a \e title-title clash; + \o writing it as \e xmlns:title would declare a new namespace with the + prefix \e title instead of applying the default \e xmlns namespace. + \endlist + + With the Qt XML classes elements and attributes can be accessed in two + ways: either by refering to their qualified names consisting of the + namespace prefix and the "real" name (or \e local name) or by the + combination of local name and namespace URI. + + More information on XML namespaces can be found at + \l http://www.w3.org/TR/REC-xml-names/. + + \target namespacesConventions + \section1 Conventions Used in the Qt XML Documentation + + The following terms are used to distinguish the parts of names within + the context of namespaces: + \list + \o The \e {qualified name} + is the name as it appears in the document. (In the above example \e + book:title is a qualified name.) + \o A \e {namespace prefix} in a qualified name + is the part to the left of the ":". (\e book is the namespace prefix in + \e book:title.) + \o The \e {local part} of a name (also refered to as the \e {local + name}) appears to the right of the ":". (Thus \e title is the + local part of \e book:title.) + \o The \e {namespace URI} ("Uniform Resource Identifier") is a unique + identifier for a namespace. It looks like a URL + (e.g. \e http://www.example.com/fnord/ ) but does not require + data to be accessible by the given protocol at the named address. + \endlist + + Elements without a ":" (like \e chapter in the example) do not have a + namespace prefix. In this case the local part and the qualified name + are identical (i.e. \e chapter). + + \sa {DOM Bookmarks Example}, {SAX Bookmarks Example} +*/ + +/*! + \page xml-streaming.html + \title XML Streaming + + \previouspage An Introduction to Namespaces + \contentspage XML Processing + \nextpage The SAX Interface + + Since version 4.3, Qt provides two new classes for reading and + writing XML: QXmlStreamReader and QXmlStreamWriter. The QXmlStreamReader and QXmlStreamWriter are two new classes provided in Qt 4.3 and later. A stream reader reports an XML document as a stream @@ -176,10 +300,26 @@ functions of QXmlStreamWriter mentioned above: \snippet examples/xml/streambookmarks/xbelwriter.cpp 1 +*/ - \section1 The Qt SAX2 Classes +/*! + \page xml-sax.html + \title The SAX interface + + \previouspage XML Streaming + \contentspage XML Processing + \nextpage Working with the DOM Tree + + SAX is an event-based standard interface for XML parsers. + The Qt interface follows the design of the SAX2 Java implementation. + Its naming scheme was adapted to fit the Qt naming conventions. + Details on SAX2 can be found at \l{http://www.saxproject.org}. + + Support for SAX2 filters and the reader factory are under + development. The Qt implementation does not include the SAX1 + compatibility classes present in the Java interface. - \section2 Introduction to SAX2 + \section1 Introduction to SAX2 The SAX2 interface is an event-driven mechanism to provide the user with document information. An "event" in this context means something @@ -202,10 +342,10 @@ Whilst this is a fast and simple approach to read XML documents, manipulation is difficult because data is not stored, simply handled - and discarded serially. The \link #dom DOM interface - \endlink reads in and stores the whole document in a tree structure; + and discarded serially. The \l{Working with the DOM Tree}{DOM interface} + reads in and stores the whole document in a tree structure; this takes more memory, but makes it easier to manipulate the - document's structure.. + document's structure. The Qt XML module provides an abstract class, \l QXmlReader, that defines the interface for potential SAX2 readers. Qt includes a reader @@ -257,7 +397,7 @@ QXmlDefaultHandler to read an XML bookmark file (XBEL) and how to generate XML by hand. - \section2 SAX2 Features + \section1 SAX2 Features The behavior of an XML reader depends on its support for certain optional features. For example, a reader may have the feature "report @@ -297,7 +437,7 @@ \l QXmlSimpleReader is not validating, so it does not support \e http://xml.org/sax/features/validation. - \section2 Namespace Support via Features + \section1 Namespace Support via Features As we have seen in the previous section, we can configure the behavior of the reader when it comes to namespace @@ -352,7 +492,7 @@ note that the combination of both features set to false is illegal. - \section3 Summary + \section2 Summary \l QXmlSimpleReader implements the following behavior: @@ -370,7 +510,7 @@ The behavior of the entries marked with an asterisk (*) is not specified by SAX. - \section2 Properties + \section1 Properties Properties are a more general concept. They have a unique name, represented as an URI, but their value is \c void*. Thus nearly @@ -390,13 +530,23 @@ To set or query properties the following functions are provided: \l QXmlReader::setProperty(), \l QXmlReader::property() and \l QXmlReader::hasProperty(). +*/ - +/*! + \page xml-dom.tml + \title Working with the DOM Tree \target dom - \section1 The Qt DOM Classes + + \previouspage The SAX Interface + \contentspage XML Processing + \nextpage {Using XML Technologies}{XQuery/XPath and XML Schema} + + DOM Level 2 is a W3C Recommendation for XML interfaces that maps the + constituents of an XML document to a tree structure. The specification + of DOM Level 2 can be found at \l{http://www.w3.org/DOM/}. \target domIntro - \section2 Introduction to DOM + \section1 Introduction to DOM DOM provides an interface to access and change the content and structure of an XML file. It makes a hierarchical view of the document @@ -478,138 +628,4 @@ You might also want to take a look at the \l{DOM Bookmarks example}, which illustrates how to read and write an XML bookmark file (XBEL) using DOM. - - \target namespaces - \section1 An Introduction to Namespaces - - Parts of the Qt XML module documentation assume that you are familiar - with XML namespaces. Here we present a brief introduction; skip to - \link #namespacesConventions Qt XML documentation conventions \endlink - if you already know this material. - - Namespaces are a concept introduced into XML to allow a more modular - design. With their help data processing software can easily resolve - naming conflicts in XML documents. - - Consider the following example: - - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 6 - - Here we find three different uses of the name \e title. If you wish to - process this document you will encounter problems because each of the - \e titles should be displayed in a different manner -- even though - they have the same name. - - The solution would be to have some means of identifying the first - occurrence of \e title as the title of a book, i.e. to use the \e - title element of a book namespace to distinguish it from, for example, - the chapter title, e.g.: - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 7 - - \e book in this case is a \e prefix denoting the namespace. - - Before we can apply a namespace to element or attribute names we must - declare it. - - Namespaces are URIs like \e http://example.com/fnord/book/. This - does not mean that data must be available at this address; the URI is - simply used to provide a unique name. - - We declare namespaces in the same way as attributes; strictly speaking - they \e are attributes. To make for example \e - http://example.com/fnord/ the document's default XML namespace \e - xmlns we write - - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 8 - - To distinguish the \e http://example.com/fnord/book/ namespace from - the default, we must supply it with a prefix: - - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 9 - - A namespace that is declared like this can be applied to element and - attribute names by prepending the appropriate prefix and a ":" - delimiter. We have already seen this with the \e book:title element. - - Element names without a prefix belong to the default namespace. This - rule does not apply to attributes: an attribute without a prefix does - not belong to any of the declared XML namespaces at all. Attributes - always belong to the "traditional" namespace of the element in which - they appear. A "traditional" namespace is not an XML namespace, it - simply means that all attribute names belonging to one element must be - different. Later we will see how to assign an XML namespace to an - attribute. - - Due to the fact that attributes without prefixes are not in any XML - namespace there is no collision between the attribute \e title (that - belongs to the \e author element) and for example the \e title element - within a \e chapter. - - Let's clarify this with an example: - \snippet doc/src/snippets/code/doc_src_qtxml.qdoc 10 - - Within the \e document element we have two namespaces declared. The - default namespace \e http://example.com/fnord/ applies to the \e - book element, the \e chapter element, the appropriate \e title element - and of course to \e document itself. - - The \e book:author and \e book:title elements belong to the namespace - with the URI \e http://example.com/fnord/book/. - - The two \e book:author attributes \e title and \e name have no XML - namespace assigned. They are only members of the "traditional" - namespace of the element \e book:author, meaning that for example two - \e title attributes in \e book:author are forbidden. - - In the above example we circumvent the last rule by adding a \e title - attribute from the \e http://example.com/fnord/ namespace to \e - book:author: the \e fnord:title comes from the namespace with the - prefix \e fnord that is declared in the \e book:author element. - - Clearly the \e fnord namespace has the same namespace URI as the - default namespace. So why didn't we simply use the default namespace - we'd already declared? The answer is quite complex: - \list - \o attributes without a prefix don't belong to any XML namespace at - all, not even to the default namespace; - \o additionally omitting the prefix would lead to a \e title-title clash; - \o writing it as \e xmlns:title would declare a new namespace with the - prefix \e title instead of applying the default \e xmlns namespace. - \endlist - - With the Qt XML classes elements and attributes can be accessed in two - ways: either by refering to their qualified names consisting of the - namespace prefix and the "real" name (or \e local name) or by the - combination of local name and namespace URI. - - More information on XML namespaces can be found at - \l http://www.w3.org/TR/REC-xml-names/. - - - \target namespacesConventions - \section2 Conventions Used in the Qt XML Documentation - - The following terms are used to distinguish the parts of names within - the context of namespaces: - \list - \o The \e {qualified name} - is the name as it appears in the document. (In the above example \e - book:title is a qualified name.) - \o A \e {namespace prefix} in a qualified name - is the part to the left of the ":". (\e book is the namespace prefix in - \e book:title.) - \o The \e {local part} of a name (also refered to as the \e {local - name}) appears to the right of the ":". (Thus \e title is the - local part of \e book:title.) - \o The \e {namespace URI} ("Uniform Resource Identifier") is a unique - identifier for a namespace. It looks like a URL - (e.g. \e http://example.com/fnord/ ) but does not require - data to be accessible by the given protocol at the named address. - \endlist - - Elements without a ":" (like \e chapter in the example) do not have a - namespace prefix. In this case the local part and the qualified name - are identical (i.e. \e chapter). - - \sa {DOM Bookmarks Example}, {SAX Bookmarks Example} */ diff --git a/doc/src/xquery-introduction.qdoc b/doc/src/xml-processing/xquery-introduction.qdoc index 02e4f47..d944b09 100644 --- a/doc/src/xquery-introduction.qdoc +++ b/doc/src/xml-processing/xquery-introduction.qdoc @@ -42,9 +42,8 @@ /*! \page xquery-introduction.html \title A Short Path to XQuery - \ingroup scripting - \startpage index.html QtReference Documentation + \startpage Using XML Technologies \target XQuery-introduction XQuery is a language for querying XML data or non-XML data that can be diff --git a/qmake/Makefile.unix b/qmake/Makefile.unix index 43561f1..9f32731 100644 --- a/qmake/Makefile.unix +++ b/qmake/Makefile.unix @@ -13,7 +13,7 @@ OBJS=project.o property.o main.o makefile.o unixmake2.o unixmake.o \ #qt code QOBJS=qtextcodec.o qutfcodec.o qstring.o qtextstream.o qiodevice.o qmalloc.o qglobal.o \ - qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlistdata.o qfile.o \ + qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlist.o qfile.o \ qfsfileengine_unix.o qfsfileengine_iterator_unix.o qfsfileengine.o \ qfsfileengine_iterator.o qregexp.o qvector.o qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o \ qfileinfo.o qdatetime.o qstringlist.o qabstractfileengine.o qtemporaryfile.o \ @@ -39,7 +39,7 @@ DEPEND_SRC=project.cpp property.cpp meta.cpp main.cpp generators/makefile.cpp ge $(SOURCE_PATH)/src/corelib/io/qdatastream.cpp $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp \ $(SOURCE_PATH)/src/corelib/io/qfsfileengine_unix.cpp $(SOURCE_PATH)/src/corelib/io/qabstractfileengine.cpp \ $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator_unix.cpp $(SOURCE_PATH)/src/corelib/io/qfsfileengine_iterator.cpp \ - $(SOURCE_PATH)/src/corelib/io/qfsfileengine.cpp $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp \ + $(SOURCE_PATH)/src/corelib/io/qfsfileengine.cpp $(SOURCE_PATH)/src/corelib/tools/qlist.cpp \ $(SOURCE_PATH)/src/corelib/tools/qvector.cpp $(SOURCE_PATH)/src/corelib/tools/qbitarray.cpp \ $(SOURCE_PATH)/src/corelib/io/qdiriterator.cpp \ $(SOURCE_PATH)/src/corelib/io/qdir.cpp $(SOURCE_PATH)/src/corelib/plugin/quuid.cpp \ @@ -144,8 +144,8 @@ qdatastream.o: $(SOURCE_PATH)/src/corelib/io/qdatastream.cpp qbuffer.o: $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp -qlistdata.o: $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp - $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp +qlist.o: $(SOURCE_PATH)/src/corelib/tools/qlist.cpp + $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlist.cpp qfile.o: $(SOURCE_PATH)/src/corelib/io/qfile.cpp $(CXX) -c -o $@ $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qfile.cpp diff --git a/qmake/Makefile.win32 b/qmake/Makefile.win32 index 884e4c9..2795d5d 100644 --- a/qmake/Makefile.win32 +++ b/qmake/Makefile.win32 @@ -102,7 +102,7 @@ QTOBJS= \ qglobal.obj \ qhash.obj \ qiodevice.obj \ - qlistdata.obj \ + qlist.obj \ qlinkedlist.obj \ qlocale.obj \ qmalloc.obj \ @@ -153,7 +153,7 @@ clean:: -del qglobal.obj -del qhash.obj -del qiodevice.obj - -del qlistdata.obj + -del qlist.obj -del qlocale.obj -del qmalloc.obj -del qmap.obj @@ -283,8 +283,8 @@ quuid.obj: $(SOURCE_PATH)\src\corelib\plugin\quuid.cpp qbuffer.obj: $(SOURCE_PATH)\src\corelib\io\qbuffer.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\io\qbuffer.cpp -qlistdata.obj: $(SOURCE_PATH)\src\corelib\tools\qlistdata.cpp - $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\tools\qlistdata.cpp +qlist.obj: $(SOURCE_PATH)\src\corelib\tools\qlist.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\tools\qlist.cpp qlinkedlist.obj: $(SOURCE_PATH)\src\corelib\tools\qlinkedlist.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)\src\corelib\tools\qlinkedlist.cpp diff --git a/qmake/Makefile.win32-g++ b/qmake/Makefile.win32-g++ index fe73dc8..644cd64 100644 --- a/qmake/Makefile.win32-g++ +++ b/qmake/Makefile.win32-g++ @@ -65,7 +65,7 @@ QTOBJS= \ qhash.o \ qiodevice.o \ qlibraryinfo.o \ - qlistdata.o \ + qlist.o \ qlinkedlist.o \ qlocale.o \ qmalloc.o \ @@ -171,8 +171,8 @@ quuid.o: $(SOURCE_PATH)/src/corelib/plugin/quuid.cpp qbuffer.o: $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp -qlistdata.o: $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp - $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp +qlist.o: $(SOURCE_PATH)/src/corelib/tools/qlist.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlist.cpp qlinkedlist.o: $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp diff --git a/qmake/Makefile.win32-g++-sh b/qmake/Makefile.win32-g++-sh index 8e54935..ef691a9 100644 --- a/qmake/Makefile.win32-g++-sh +++ b/qmake/Makefile.win32-g++-sh @@ -65,7 +65,7 @@ QTOBJS= \ qhash.o \ qiodevice.o \ qlibraryinfo.o \ - qlistdata.o \ + qlist.o \ qlinkedlist.o \ qlocale.o \ qmalloc.o \ @@ -170,8 +170,8 @@ quuid.o: $(SOURCE_PATH)/src/corelib/plugin/quuid.cpp qbuffer.o: $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/io/qbuffer.cpp -qlistdata.o: $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp - $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlistdata.cpp +qlist.o: $(SOURCE_PATH)/src/corelib/tools/qlist.cpp + $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlist.cpp qlinkedlist.o: $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp $(CXX) $(CXXFLAGS) $(SOURCE_PATH)/src/corelib/tools/qlinkedlist.cpp diff --git a/qmake/qmake.pri b/qmake/qmake.pri index f5f675c..01843bf 100644 --- a/qmake/qmake.pri +++ b/qmake/qmake.pri @@ -46,7 +46,7 @@ bootstrap { #Qt code qnumeric.cpp \ qhash.cpp \ qiodevice.cpp \ - qlistdata.cpp \ + qlist.cpp \ qlinkedlist.cpp \ qlocale.cpp \ qmalloc.cpp \ diff --git a/src/3rdparty/easing/legal.qdoc b/src/3rdparty/easing/legal.qdoc index 25f67e1..466ff15 100644 --- a/src/3rdparty/easing/legal.qdoc +++ b/src/3rdparty/easing/legal.qdoc @@ -1,7 +1,7 @@ /*! \page legal-easing.html \title Easing Equations by Robert Penner -\ingroup animation +\ingroup licensing \legalese \code diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp index d51e4e6..4e8fd30 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebdatabase.cpp @@ -33,6 +33,8 @@ using namespace WebCore; \since 4.5 \brief The QWebDatabase class provides access to HTML 5 databases created with JavaScript. + \inmodule QtWebKit + The upcoming HTML 5 standard includes support for SQL databases that web sites can create and access on a local computer through JavaScript. QWebDatabase is the C++ interface to these databases. diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp index 3ef969e..57c8b0d 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebelement.cpp @@ -55,7 +55,7 @@ public: \since 4.6 \brief The QWebElement class provides convenient access to DOM elements in a QWebFrame. - + \inmodule QtWebKit A QWebElement object allows easy access to the document model, represented by a tree-like structure of DOM elements. The root of the tree is called diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp index 23cb473..f2fe108 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebframe.cpp @@ -268,6 +268,8 @@ void QWebFramePrivate::renderPrivate(QPainter *painter, const QRegion &clip) \since 4.4 \brief The QWebFrame class represents a frame in a web page. + \inmodule QtWebKit + QWebFrame represents a frame inside a web page. Each QWebPage object contains at least one frame, the main frame, obtained using QWebPage::mainFrame(). Additional frames will be created for HTML @@ -1360,6 +1362,8 @@ QWebFrame* QWebFramePrivate::kit(WebCore::Frame* coreFrame) \brief The QWebHitTestResult class provides information about the web page content after a hit test. + \inmodule QtWebKit + QWebHitTestResult is returned by QWebFrame::hitTestContent() to provide information about the content of the web page at the specified position. */ diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp index 1c1c72a..b11ae56 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistory.cpp @@ -35,6 +35,8 @@ \since 4.4 \brief The QWebHistoryItem class represents one item in the history of a QWebPage + \inmodule QtWebKit + Each QWebHistoryItem instance represents an entry in the history stack of a Web page, containing information about the page, its location, and when it was last visited. @@ -201,6 +203,8 @@ bool QWebHistoryItem::isValid() const \since 4.4 \brief The QWebHistory class represents the history of a QWebPage + \inmodule QtWebKit + Each QWebPage instance contains a history of visited pages that can be accessed by QWebPage::history(). QWebHistory represents this history and makes it possible to navigate it. diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistoryinterface.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistoryinterface.cpp index 87d52ce..80567d1 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebhistoryinterface.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebhistoryinterface.cpp @@ -81,6 +81,8 @@ QWebHistoryInterface* QWebHistoryInterface::defaultInterface() \since 4.4 \brief The QWebHistoryInterface class provides an interface to implement link history. + \inmodule QtWebKit + The QWebHistoryInterface is an interface that can be used to implement link history. It contains two pure virtual methods that are called by the WebKit engine. addHistoryEntry() is used to add diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp index 613a72f..7860cec 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpage.cpp @@ -1224,6 +1224,8 @@ QVariant QWebPage::inputMethodQuery(Qt::InputMethodQuery property) const \since 4.4 \brief The QWebPage class provides an object to view and edit web documents. + \inmodule QtWebKit + QWebPage holds a main frame responsible for web content, settings, the history of navigated links and actions. This class can be used, together with QWebFrame, to provide functionality like QWebView in a widget-less environment. @@ -2307,6 +2309,8 @@ void QWebPage::updatePositionDependentActions(const QPoint &pos) \since 4.4 \brief The ExtensionOption class provides an extended input argument to QWebPage's extension support. + \inmodule QtWebKit + \sa QWebPage::extension() */ @@ -2316,6 +2320,8 @@ void QWebPage::updatePositionDependentActions(const QPoint &pos) \brief The ChooseMultipleFilesExtensionOption class describes the option for the multiple files selection extension. + \inmodule QtWebKit + The ChooseMultipleFilesExtensionOption class holds the frame originating the request and the suggested filenames which might be provided. @@ -2328,6 +2334,8 @@ void QWebPage::updatePositionDependentActions(const QPoint &pos) \brief The ChooseMultipleFilesExtensionReturn describes the return value for the multiple files selection extension. + \inmodule QtWebKit + The ChooseMultipleFilesExtensionReturn class holds the filenames selected by the user when the extension is invoked. diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebpluginfactory.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebpluginfactory.cpp index d2bb124..e3b7efe 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebpluginfactory.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebpluginfactory.cpp @@ -26,6 +26,8 @@ \brief The QWebPluginFactory class creates plugins to be embedded into web pages. + \inmodule QtWebKit + QWebPluginFactory is a factory for creating plugins for QWebPage. A plugin factory can be installed on a QWebPage using QWebPage::setPluginFactory(). @@ -47,6 +49,8 @@ \class QWebPluginFactory::Plugin \since 4.4 \brief the QWebPluginFactory::Plugin structure describes the properties of a plugin a QWebPluginFactory can create. + + \inmodule QtWebKit */ /*! @@ -68,6 +72,8 @@ \class QWebPluginFactory::MimeType \since 4.4 \brief The QWebPluginFactory::MimeType structure describes a mime type supported by a plugin. + + \inmodule QtWebKit */ /*! @@ -173,6 +179,8 @@ void QWebPluginFactory::refreshPlugins() \since 4.4 \brief The ExtensionOption class provides an extended input argument to QWebPluginFactory's extension support. + \inmodule QtWebKit + \sa QWebPluginFactory::extension() */ @@ -181,6 +189,8 @@ void QWebPluginFactory::refreshPlugins() \since 4.4 \brief The ExtensionOption class provides an extended output argument to QWebPluginFactory's extension support. + \inmodule QtWebKit + \sa QWebPluginFactory::extension() */ diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp index d2eaf10..ed2e959 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsecurityorigin.cpp @@ -35,6 +35,8 @@ using namespace WebCore; \since 4.5 \brief The QWebSecurityOrigin class defines a security boundary for web sites. + \inmodule QtWebKit + QWebSecurityOrigin provides access to the security domains defined by web sites. An origin consists of a host name, a scheme, and a port number. Web sites with the same security origin can access each other's resources for client-side diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp index fb94d55..89595c3 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebsettings.cpp @@ -219,6 +219,8 @@ QWebSettings* QWebSettings::globalSettings() \brief The QWebSettings class provides an object to store the settings used by QWebPage and QWebFrame. + \inmodule QtWebKit + Each QWebPage object has its own QWebSettings object, which configures the settings for that page. If a setting is not configured, then it is looked up in the global settings object, which can be accessed using diff --git a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp index e1a0c98..422b5e6 100644 --- a/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp +++ b/src/3rdparty/webkit/WebKit/qt/Api/qwebview.cpp @@ -77,6 +77,8 @@ public: web documents. \ingroup advanced + \inmodule QtWebKit + QWebView is the main widget component of the QtWebKit web browsing module. It can be used in various applications to display web content live from the Internet. diff --git a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc index f3681ee..144feb5 100644 --- a/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc +++ b/src/3rdparty/webkit/WebKit/qt/docs/qtwebkit.qdoc @@ -4,15 +4,67 @@ \contentspage Qt's Modules \previouspage QtSvg \nextpage QtXml - \ingroup architecture \ingroup modules - \brief An introduction to the QtWebKit module. + \brief The QtWebKit module provides a web browser engine as well as + classes to render and interact with web content. - \keyword Browser - \keyword Web Browser + To include the definitions of the module's classes, use the + following directive: + + \snippet webkitsnippets/qtwebkit_build_snippet.qdoc 1 + + To link against the module, add this line to your \l qmake \c + .pro file: + + \snippet webkitsnippets/qtwebkit_build_snippet.qdoc 0 + + \section1 License Information + + This is a snapshot of the Qt port of WebKit. The exact version information + can be found in the \c{src/3rdparty/webkit/VERSION} file supplied with Qt. + + Qt Commercial Edition licensees that wish to distribute applications that + use the QtWebKit module need to be aware of their obligations under the + GNU Lesser General Public License (LGPL). + + Developers using the Open Source Edition can choose to redistribute + the module under the appropriate version of the GNU LGPL; version 2.1 + for applications and libraries licensed under the GNU GPL version 2, + or version 3 for applications and libraries licensed under the GNU + GPL version 2. + + \legalese + WebKit is licensed under the GNU Library General Public License. + Individual contributor names and copyright dates can be found + inline in the code. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + \endlegalese +*/ + +/*! + \page webintegration.html + \title Integrating Web Content with QtWebKit \since 4.4 + \ingroup frameworks-technologies + + \keyword Browser + \keyword Web Browser + QtWebKit provides a Web browser engine that makes it easy to embed content from the World Wide Web into your Qt application. At the same time Web content can be enhanced with native controls. @@ -55,20 +107,6 @@ \tableofcontents - \section1 Configuring the Build Process - - Applications using QtWebKit's classes need to be configured to be built - against the QtWebKit module. The following declaration in a \c qmake - project file ensures that an application is compiled and linked - appropriately: - - \snippet webkitsnippets/qtwebkit_build_snippet.qdoc 0 - - To include the definitions of the module's classes, use the following - directive: - - \snippet webkitsnippets/qtwebkit_build_snippet.qdoc 1 - \section1 Architecture The easiest way to render content is through the QWebView class. As a @@ -158,40 +196,4 @@ \o The system \c{/Library/Internet Plug-Ins} directory \endlist \endtable - - \section1 License Information - - This is a snapshot of the Qt port of WebKit. The exact version information - can be found in the \c{src/3rdparty/webkit/VERSION} file supplied with Qt. - - Qt Commercial Edition licensees that wish to distribute applications that - use the QtWebKit module need to be aware of their obligations under the - GNU Lesser General Public License (LGPL). - - Developers using the Open Source Edition can choose to redistribute - the module under the appropriate version of the GNU LGPL; version 2.1 - for applications and libraries licensed under the GNU GPL version 2, - or version 3 for applications and libraries licensed under the GNU - GPL version 2. - - \legalese - WebKit is licensed under the GNU Library General Public License. - Individual contributor names and copyright dates can be found - inline in the code. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - \endlegalese */ diff --git a/src/corelib/animation/qparallelanimationgroup_p.h b/src/corelib/animation/qparallelanimationgroup_p.h index 65bf693..db804d5 100644 --- a/src/corelib/animation/qparallelanimationgroup_p.h +++ b/src/corelib/animation/qparallelanimationgroup_p.h @@ -55,7 +55,7 @@ #include "qparallelanimationgroup.h" #include "private/qanimationgroup_p.h" -#include <QtCore/QHash> +#include <QtCore/qhash.h> #ifndef QT_NO_ANIMATION diff --git a/src/corelib/animation/qpropertyanimation.cpp b/src/corelib/animation/qpropertyanimation.cpp index 0c1feee..35d65d0 100644 --- a/src/corelib/animation/qpropertyanimation.cpp +++ b/src/corelib/animation/qpropertyanimation.cpp @@ -43,7 +43,7 @@ \class QPropertyAnimation \brief The QPropertyAnimation class animates Qt properties \since 4.6 - \mainclass + \ingroup animation QPropertyAnimation interpolates over \l{Qt's Property System}{Qt diff --git a/doc/src/codecs.qdoc b/src/corelib/codecs/codecs.qdoc index 7359b79..9cffa85 100644 --- a/doc/src/codecs.qdoc +++ b/src/corelib/codecs/codecs.qdoc @@ -40,6 +40,18 @@ ****************************************************************************/ /*! + \group codecs + \title Codecs + \ingroup groups + \brief Codec support in Qt. + + These codecs provide facilities for conversion between Unicode and + specific text encodings. + + \generatelist{related} +*/ + +/*! \page codec-big5.html \title Big5 Text Codec \ingroup codecs diff --git a/src/corelib/concurrent/qfuture.cpp b/src/corelib/concurrent/qfuture.cpp index a366a4b..f0c1e34 100644 --- a/src/corelib/concurrent/qfuture.cpp +++ b/src/corelib/concurrent/qfuture.cpp @@ -44,8 +44,10 @@ \brief The QFuture class represents the result of an asynchronous computation. \since 4.4 + \ingroup thread + To start a computation, use one of the APIs in the - \l {threads.html#qtconcurrent-intro}{Qt Concurrent} framework. + \l {Concurrent Programming}{Qt Concurrent} framework. QFuture allows threads to be synchronized against one or more results which will be ready at a later point in time. The result can be of any type @@ -90,7 +92,7 @@ To interact with running tasks using signals and slots, use QFutureWatcher. - \sa QFutureWatcher, {threads.html#qtconcurrent-intro}{Qt Concurrent} + \sa QFutureWatcher, {Concurrent Programming}{Qt Concurrent} */ /*! \fn QFuture::QFuture() diff --git a/src/corelib/concurrent/qfuturesynchronizer.cpp b/src/corelib/concurrent/qfuturesynchronizer.cpp index 1fd7198..dfb693e 100644 --- a/src/corelib/concurrent/qfuturesynchronizer.cpp +++ b/src/corelib/concurrent/qfuturesynchronizer.cpp @@ -44,7 +44,9 @@ \brief The QFutureSynchronizer class is a convenience class that simplifies QFuture synchronization. - + + \ingroup thread + QFutureSynchronizer is a template class that simplifies synchronization of one or more QFuture objects. Futures are added using the addFuture() or setFuture() functions. The futures() function returns a list of futures. @@ -63,7 +65,7 @@ You can query the status of the cancel-on-wait feature using the cancelOnWait() function. - \sa QFuture, QFutureWatcher, {threads.html#qtconcurrent-intro}{Qt Concurrent} + \sa QFuture, QFutureWatcher, {Concurrent Programming}{Qt Concurrent} */ /*! diff --git a/src/corelib/concurrent/qfuturewatcher.cpp b/src/corelib/concurrent/qfuturewatcher.cpp index f0f06f9..84715b4 100644 --- a/src/corelib/concurrent/qfuturewatcher.cpp +++ b/src/corelib/concurrent/qfuturewatcher.cpp @@ -43,9 +43,9 @@ #ifndef QT_NO_QFUTURE -#include <QEvent> -#include <QCoreApplication> -#include <QThread> +#include <QtCore/qcoreevent.h> +#include <QtCore/qcoreapplication.h> +#include <QtCore/qthread.h> #include "qfuturewatcher_p.h" @@ -55,6 +55,8 @@ QT_BEGIN_NAMESPACE \reentrant \since 4.4 + \ingroup thread + \brief The QFutureWatcher class allows monitoring a QFuture using signals and slots. @@ -94,7 +96,7 @@ QT_BEGIN_NAMESPACE QFutureWatcher<void> as well. This is useful if only status or progress information is needed; not the actual result data. - \sa QFuture, {threads.html#qtconcurrent-intro}{Qt Concurrent} + \sa QFuture, {Concurrent Programming}{Qt Concurrent} */ /*! \fn QFutureWatcher::QFutureWatcher(QObject *parent) diff --git a/src/corelib/concurrent/qfuturewatcher_p.h b/src/corelib/concurrent/qfuturewatcher_p.h index 69a28eb..8fb0e4f 100644 --- a/src/corelib/concurrent/qfuturewatcher_p.h +++ b/src/corelib/concurrent/qfuturewatcher_p.h @@ -54,7 +54,7 @@ // #include "qfutureinterface_p.h" -#include <QList> +#include <qlist.h> #ifndef QT_NO_QFUTURE diff --git a/src/corelib/concurrent/qrunnable.cpp b/src/corelib/concurrent/qrunnable.cpp index 86a099b..db33803 100644 --- a/src/corelib/concurrent/qrunnable.cpp +++ b/src/corelib/concurrent/qrunnable.cpp @@ -44,6 +44,8 @@ \since 4.4 \brief The QRunnable class is the base class for all runnable objects. + \ingroup thread + The QRunnable class is an interface for representing a task or piece of code that needs to be executed, represented by your reimplementation of the run() function. diff --git a/src/corelib/concurrent/qtconcurrentfilter.cpp b/src/corelib/concurrent/qtconcurrentfilter.cpp index f4572b8..4ab0723 100644 --- a/src/corelib/concurrent/qtconcurrentfilter.cpp +++ b/src/corelib/concurrent/qtconcurrentfilter.cpp @@ -42,12 +42,12 @@ /*! \headerfile <QtConcurrentFilter> \title Concurrent Filter and Filter-Reduce - \ingroup threading + \ingroup thread \brief The <QtConcurrentFilter> header provides concurrent Filter and Filter-Reduce. - These functions are a part of the \l {threads.html#qtconcurrent-intro}{Qt Concurrent} framework. + These functions are a part of the \l {Concurrent Programming}{Qt Concurrent} framework. The QtConcurrent::filter(), QtConcurrent::filtered() and QtConcurrent::filteredReduced() functions filter items in a sequence such diff --git a/src/corelib/concurrent/qtconcurrentmap.cpp b/src/corelib/concurrent/qtconcurrentmap.cpp index 80baa8f..3fd044d 100644 --- a/src/corelib/concurrent/qtconcurrentmap.cpp +++ b/src/corelib/concurrent/qtconcurrentmap.cpp @@ -47,7 +47,9 @@ possible to write multi-threaded programs without using low-level threading primitives. - See the \l {threads.html#qtconcurrent-intro}{Qt Concurrent} section in the \l{threads.html}{threading} documentation. + See the \l {Concurrent Programming}{Qt Concurrent} chapter in + the \l{threads.html}{threading} documentation. + \inheaderfile QtCore \ingroup thread */ @@ -58,8 +60,6 @@ \brief The QtConcurrent::internal namespace contains QtConcurrent implementation details. - - \ingroup thread */ /*! @@ -78,11 +78,11 @@ /*! \headerfile <QtConcurrentMap> \title Concurrent Map and Map-Reduce - \ingroup threading + \ingroup thread \brief The <QtConcurrentMap> header provides concurrent Map and MapReduce. - These functions are a part of the \l {threads.html#qtconcurrent-intro}{Qt Concurrent} framework. + These functions are a part of the \l {Concurrent Programming}{Qt Concurrent} framework. The QtConcurrent::map(), QtConcurrent::mapped() and QtConcurrent::mappedReduced() functions run computations in parallel on diff --git a/src/corelib/concurrent/qtconcurrentrun.cpp b/src/corelib/concurrent/qtconcurrentrun.cpp index 5803abb..989f54d 100644 --- a/src/corelib/concurrent/qtconcurrentrun.cpp +++ b/src/corelib/concurrent/qtconcurrentrun.cpp @@ -42,11 +42,13 @@ /*! \headerfile <QtConcurrentRun> \title Asynchronous Run - + \brief The <QtConcurrentRun> header provides a way to run a function in a separate thread. + + \ingroup thread - This function is a part of the \l {threads.html#qtconcurrent-intro}{Qt Concurrent} framework. + This function is a part of the \l {Concurrent Programming}{Qt Concurrent} framework. The QtConcurrent::run() function runs a function in a separate thread. The return value of the function is made available through the QFuture API. diff --git a/src/corelib/concurrent/qthreadpool.cpp b/src/corelib/concurrent/qthreadpool.cpp index 2dfac31..9b2ac46 100644 --- a/src/corelib/concurrent/qthreadpool.cpp +++ b/src/corelib/concurrent/qthreadpool.cpp @@ -364,6 +364,8 @@ void QThreadPoolPrivate::stealRunnable(QRunnable *runnable) \since 4.4 \threadsafe + \ingroup thread + QThreadPool manages and recyles individual QThread objects to help reduce thread creation costs in programs that use threads. Each Qt application has one global QThreadPool object, which can be accessed by calling @@ -404,7 +406,7 @@ void QThreadPoolPrivate::stealRunnable(QRunnable *runnable) Note that QThreadPool is a low-level class for managing threads, see QtConcurrent::run() or the other - \l {threads.html#qtconcurrent-intro}{Qt Concurrent} APIs for higher + \l {Concurrent Programming}{Qt Concurrent} APIs for higher level alternatives. \sa QRunnable diff --git a/doc/src/classes/qtendian.qdoc b/src/corelib/global/qendian.qdoc index e96ba0f..e0ef662 100644 --- a/doc/src/classes/qtendian.qdoc +++ b/src/corelib/global/qendian.qdoc @@ -42,7 +42,7 @@ /*! \headerfile <QtEndian> \title Endian Conversion Functions - \ingroup architecture + \ingroup classlists \brief The <QtEndian> header provides functions to convert between little and big endian representations of numbers. */ diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index b2046c9..81a5ae5 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -101,7 +101,7 @@ QT_BEGIN_NAMESPACE \brief The QFlags class provides a type-safe way of storing OR-combinations of enum values. - \mainclass + \ingroup tools The QFlags<Enum> class is a template class, where Enum is an enum @@ -401,7 +401,7 @@ QT_BEGIN_NAMESPACE /*! \headerfile <QtGlobal> \title Global Qt Declarations - \ingroup architecture + \ingroup classlists \brief The <QtGlobal> header provides basic declarations and is included by all other Qt headers. diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 92fe649..40b65fd 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -297,7 +297,7 @@ namespace QT_NAMESPACE {} # ifdef MAC_OS_X_VERSION_MIN_REQUIRED # undef MAC_OS_X_VERSION_MIN_REQUIRED # endif -# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_3 +# define MAC_OS_X_VERSION_MIN_REQUIRED MAC_OS_X_VERSION_10_4 # include <AvailabilityMacros.h> # if !defined(MAC_OS_X_VERSION_10_3) # define MAC_OS_X_VERSION_10_3 MAC_OS_X_VERSION_10_2 + 1 diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index 51c7988..f42a2ff 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -147,9 +147,6 @@ QSettings *QLibraryInfoPrivate::findConfiguration() \class QLibraryInfo \brief The QLibraryInfo class provides information about the Qt library. - \ingroup misc - \mainclass - Many pieces of information are established when Qt is configured. Installation paths, license information, and even a unique build key. This class provides an abstraction for accessing this diff --git a/doc/src/classes/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index 79a4560..d1c16e5 100644 --- a/doc/src/classes/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -45,8 +45,6 @@ \brief The Qt namespace contains miscellaneous identifiers used throughout the Qt library. - - \ingroup misc */ /*! diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 572b8a1..52902d0 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE to a QIODevice. \ingroup io - \mainclass + A data stream is a binary stream of encoded information which is 100% independent of the host computer's operating system, CPU or diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp index 6dd2640..1545082 100644 --- a/src/corelib/io/qdebug.cpp +++ b/src/corelib/io/qdebug.cpp @@ -52,8 +52,7 @@ /*! \class QDebug - \ingroup io - \mainclass + \brief The QDebug class provides an output stream for debugging information. QDebug is used whenever the developer needs to write out debugging or tracing diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index 92aef3c..ca178ce 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -58,7 +58,7 @@ #include "qvarlengtharray.h" -#include "../kernel/qcoreglobaldata_p.h" +#include "private/qcoreglobaldata_p.h" #include <stdlib.h> QT_BEGIN_NAMESPACE @@ -345,7 +345,7 @@ void QDirPrivate::detach(bool createFileEngine) \ingroup io \ingroup shared \reentrant - \mainclass + A QDir is used to manipulate path names, access information regarding paths and files, and manipulate the underlying file diff --git a/src/corelib/io/qfile.cpp b/src/corelib/io/qfile.cpp index 1718f3b..aa704d3 100644 --- a/src/corelib/io/qfile.cpp +++ b/src/corelib/io/qfile.cpp @@ -172,7 +172,7 @@ QFilePrivate::setError(QFile::FileError err, int errNum) \brief The QFile class provides an interface for reading from and writing to files. \ingroup io - \mainclass + \reentrant QFile is an I/O device for reading and writing text and binary diff --git a/src/corelib/io/qfilesystemwatcher_fsevents_p.h b/src/corelib/io/qfilesystemwatcher_fsevents_p.h index b93d711..317c149 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents_p.h +++ b/src/corelib/io/qfilesystemwatcher_fsevents_p.h @@ -59,8 +59,8 @@ #include <QtCore/qmutex.h> #include <QtCore/qwaitcondition.h> #include <QtCore/qthread.h> -#include <QtCore/QHash> -#include <QtCore/QLinkedList> +#include <QtCore/qhash.h> +#include <QtCore/qlinkedlist.h> #include <private/qcore_mac_p.h> #include <sys/stat.h> diff --git a/src/corelib/io/qnoncontiguousbytedevice.cpp b/src/corelib/io/qnoncontiguousbytedevice.cpp index 89ed041..185d961 100644 --- a/src/corelib/io/qnoncontiguousbytedevice.cpp +++ b/src/corelib/io/qnoncontiguousbytedevice.cpp @@ -40,10 +40,9 @@ ****************************************************************************/ #include "qnoncontiguousbytedevice_p.h" -#include <QObject> -#include <QBuffer> -#include <QDebug> -#include <QFile> +#include <qbuffer.h> +#include <qdebug.h> +#include <qfile.h> QT_BEGIN_NAMESPACE diff --git a/src/corelib/io/qnoncontiguousbytedevice_p.h b/src/corelib/io/qnoncontiguousbytedevice_p.h index dd34c67..ecf9b9c 100644 --- a/src/corelib/io/qnoncontiguousbytedevice_p.h +++ b/src/corelib/io/qnoncontiguousbytedevice_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <QObject> +#include <QtCore/qobject.h> #include <QtCore/qbytearray.h> #include <QtCore/qbuffer.h> #include <QtCore/qiodevice.h> diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index 133d51e..ccc16b2 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -151,12 +151,19 @@ void QProcessPrivate::Channel::clear() to communicate with them. \ingroup io - \ingroup misc - \mainclass + \reentrant + \section1 Running a Process + To start a process, pass the name and command line arguments of - the program you want to run as arguments to start(). For example: + the program you want to run as arguments to start(). Arguments + are supplied as individual strings in a QStringList. + + For example, the following code snippet runs the analog clock + example in the Motif style on X11 platforms by passing strings + containing "-style" and "motif" as two items in the list of + arguments: \snippet doc/src/snippets/qprocess/qprocess-simpleexecution.cpp 0 \dots @@ -1565,16 +1572,16 @@ QByteArray QProcess::readAllStandardError() process, a warning may be printed at the console, and the existing process will continue running. - Note that arguments that contain spaces are not passed to the + \note Arguments that contain spaces are not passed to the process as separate arguments. - \bold{Windows:} Arguments that contain spaces are wrapped in quotes. - \note Processes are started asynchronously, which means the started() and error() signals may be delayed. Call waitForStarted() to make sure the process has started (or has failed to start) and those signals have been emitted. + \bold{Windows:} Arguments that contain spaces are wrapped in quotes. + \sa pid(), started(), waitForStarted() */ void QProcess::start(const QString &program, const QStringList &arguments, OpenMode mode) @@ -1834,7 +1841,7 @@ bool QProcess::startDetached(const QString &program, otherwise returns false. If the calling process exits, the detached process will continue to live. - Note that arguments that contain spaces are not passed to the + \note Arguments that contain spaces are not passed to the process as separate arguments. \bold{Unix:} The started process will run in its own session and act diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 958c7fc..212f153 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -169,7 +169,7 @@ Q_GLOBAL_STATIC(QStringList, resourceSearchPaths) \brief The QResource class provides an interface for reading directly from resources. \ingroup io - \mainclass + \reentrant \since 4.2 diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 81bd25a..af38b5a 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -2004,8 +2004,7 @@ void QConfFileSettingsPrivate::ensureSectionParsed(QConfFile *confFile, \brief The QSettings class provides persistent platform-independent application settings. \ingroup io - \ingroup misc - \mainclass + \reentrant Users normally expect an application to remember its settings diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp index 2fbf93f..adfcf5e 100644 --- a/src/corelib/io/qtemporaryfile.cpp +++ b/src/corelib/io/qtemporaryfile.cpp @@ -447,7 +447,7 @@ QTemporaryFilePrivate::~QTemporaryFilePrivate() \brief The QTemporaryFile class is an I/O device that operates on temporary files. \ingroup io - \mainclass + QTemporaryFile is used to create unique temporary files safely. The file itself is created by calling open(). The name of the diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp index 151a4a2..9c82976 100644 --- a/src/corelib/io/qtextstream.cpp +++ b/src/corelib/io/qtextstream.cpp @@ -49,7 +49,7 @@ static const int QTEXTSTREAM_BUFFERSIZE = 16384; reading and writing text. \ingroup io - \ingroup text + \ingroup string-processing \reentrant QTextStream can operate on a QIODevice, a QByteArray or a @@ -3088,8 +3088,6 @@ QLocale QTextStream::locale() const \compat \reentrant - \ingroup io - \ingroup text Use QTextStream instead. */ @@ -3116,8 +3114,6 @@ QLocale QTextStream::locale() const \compat \reentrant - \ingroup io - \ingroup text Use QTextStream instead. */ diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp index 423f5e2..acbac36 100644 --- a/src/corelib/io/qurl.cpp +++ b/src/corelib/io/qurl.cpp @@ -47,9 +47,9 @@ \reentrant \ingroup io - \ingroup misc + \ingroup network \ingroup shared - \mainclass + It can parse and construct URLs in both encoded and unencoded form. QUrl also has support for internationalized domain names diff --git a/src/corelib/kernel/qabstracteventdispatcher.cpp b/src/corelib/kernel/qabstracteventdispatcher.cpp index a414862..4fa0cd2 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.cpp +++ b/src/corelib/kernel/qabstracteventdispatcher.cpp @@ -168,7 +168,6 @@ void QAbstractEventDispatcherPrivate::releaseTimerId(int timerId) \class QAbstractEventDispatcher \brief The QAbstractEventDispatcher class provides an interface to manage Qt's event queue. - \ingroup application \ingroup events An event dispatcher receives events from the window system and other diff --git a/src/corelib/kernel/qabstractitemmodel.cpp b/src/corelib/kernel/qabstractitemmodel.cpp index 61b19a2..d6d1bcf 100644 --- a/src/corelib/kernel/qabstractitemmodel.cpp +++ b/src/corelib/kernel/qabstractitemmodel.cpp @@ -753,7 +753,7 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent, \brief The QModelIndex class is used to locate data in a data model. \ingroup model-view - \mainclass + This class is used as an index into item models derived from QAbstractItemModel. The index is used by item views, delegates, and @@ -941,7 +941,7 @@ void QAbstractItemModelPrivate::columnsRemoved(const QModelIndex &parent, item model classes. \ingroup model-view - \mainclass + The QAbstractItemModel class defines the standard interface that item models must use to be able to interoperate with other components in the diff --git a/src/corelib/kernel/qbasictimer.cpp b/src/corelib/kernel/qbasictimer.cpp index df5941f..7fd975d 100644 --- a/src/corelib/kernel/qbasictimer.cpp +++ b/src/corelib/kernel/qbasictimer.cpp @@ -49,7 +49,6 @@ QT_BEGIN_NAMESPACE \class QBasicTimer \brief The QBasicTimer class provides timer events for objects. - \ingroup time \ingroup events This is a fast, lightweight, and low-level class used by Qt diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index 86221a1..a2c9de9 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -339,9 +339,6 @@ QString qAppName() \brief The QCoreApplication class provides an event loop for console Qt applications. - \ingroup application - \mainclass - This class is used by non-GUI applications to provide their event loop. For non-GUI application that uses Qt, there should be exactly one QCoreApplication object. For GUI applications, see diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp index f661d47..9771284 100644 --- a/src/corelib/kernel/qcoreevent.cpp +++ b/src/corelib/kernel/qcoreevent.cpp @@ -54,7 +54,6 @@ QT_BEGIN_NAMESPACE event classes. Event objects contain event parameters. \ingroup events - \ingroup environment Qt's main event loop (QCoreApplication::exec()) fetches native window system events from the event queue, translates them into diff --git a/src/corelib/kernel/qcoreglobaldata.cpp b/src/corelib/kernel/qcoreglobaldata.cpp index c2a226d..6b90ed7 100644 --- a/src/corelib/kernel/qcoreglobaldata.cpp +++ b/src/corelib/kernel/qcoreglobaldata.cpp @@ -41,8 +41,6 @@ #include "qcoreglobaldata_p.h" -#include <QtDebug> - QT_BEGIN_NAMESPACE Q_GLOBAL_STATIC(QCoreGlobalData, globalInstance) diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index 2afab1a..0e75867 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -524,7 +524,7 @@ int QMetaCallEvent::placeMetaCall(QObject *object) \brief The QObject class is the base class of all Qt objects. \ingroup objectmodel - \mainclass + \reentrant QObject is the heart of the \l{Qt object model}. The central diff --git a/src/corelib/kernel/qpointer.cpp b/src/corelib/kernel/qpointer.cpp index fb7a81e..624336f 100644 --- a/src/corelib/kernel/qpointer.cpp +++ b/src/corelib/kernel/qpointer.cpp @@ -44,7 +44,7 @@ \brief The QPointer class is a template class that provides guarded pointers to QObjects. \ingroup objectmodel - \mainclass + A guarded pointer, QPointer<T>, behaves like a normal C++ pointer \c{T *}, except that it is automatically set to 0 when the diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp index 168bf29..5dbd7c8 100644 --- a/src/corelib/kernel/qsharedmemory.cpp +++ b/src/corelib/kernel/qsharedmemory.cpp @@ -86,7 +86,6 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key, /*! \class QSharedMemory - \ingroup ipc \since 4.4 \brief The QSharedMemory class provides access to a shared memory segment. diff --git a/src/corelib/kernel/qsignalmapper.cpp b/src/corelib/kernel/qsignalmapper.cpp index 5e89da2..7b2097d 100644 --- a/src/corelib/kernel/qsignalmapper.cpp +++ b/src/corelib/kernel/qsignalmapper.cpp @@ -66,8 +66,8 @@ public: \class QSignalMapper \brief The QSignalMapper class bundles signals from identifiable senders. - \ingroup io - \mainclass + \ingroup objectmodel + This class collects a set of parameterless signals, and re-emits them with integer, string or widget parameters corresponding to diff --git a/src/corelib/kernel/qsocketnotifier.cpp b/src/corelib/kernel/qsocketnotifier.cpp index 4ac1cbb..85a3ea3 100644 --- a/src/corelib/kernel/qsocketnotifier.cpp +++ b/src/corelib/kernel/qsocketnotifier.cpp @@ -56,6 +56,7 @@ QT_BEGIN_NAMESPACE \brief The QSocketNotifier class provides support for monitoring activity on a file descriptor. + \ingroup network \ingroup io The QSocketNotifier makes it possible to integrate Qt's event diff --git a/src/corelib/kernel/qsystemsemaphore.cpp b/src/corelib/kernel/qsystemsemaphore.cpp index 95dc8a0..94548f7 100644 --- a/src/corelib/kernel/qsystemsemaphore.cpp +++ b/src/corelib/kernel/qsystemsemaphore.cpp @@ -49,7 +49,6 @@ QT_BEGIN_NAMESPACE /*! \class QSystemSemaphore - \ingroup ipc \since 4.4 \brief The QSystemSemaphore class provides a general counting system semaphore. diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp index f40f491..6c4eb1b 100644 --- a/src/corelib/kernel/qtimer.cpp +++ b/src/corelib/kernel/qtimer.cpp @@ -50,9 +50,8 @@ QT_BEGIN_NAMESPACE \class QTimer \brief The QTimer class provides repetitive and single-shot timers. - \ingroup time \ingroup events - \mainclass + The QTimer class provides a high-level programming interface for timers. To use it, create a QTimer, connect its timeout() signal @@ -101,10 +100,22 @@ QT_BEGIN_NAMESPACE more and more platforms, and we expect that zero-millisecond QTimers will gradually be replaced by \l{QThread}s. - Note that QTimer's accuracy depends on the underlying operating - system and hardware. Most platforms support an accuracy of - 1 millisecond. If Qt is unable to deliver the requested number of - timer clicks, it will silently discard some. + \section1 Accuracy and Timer Resolution + + Timers will never time out earlier than the specified timeout value + and they are not guaranteed to time out at the exact value specified. + In many situations, they may time out late by a period of time that + depends on the accuracy of the system timers. + + The accuracy of timers depends on the underlying operating system + and hardware. Most platforms support a resolution of 1 millisecond, + though the accuracy of the timer will not equal this resolution + in many real-world situations. + + If Qt is unable to deliver the requested number of timer clicks, + it will silently discard some. + + \section1 Alternatives to QTimer An alternative to using QTimer is to call QObject::startTimer() for your object and reimplement the QObject::timerEvent() event diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index de1157c..b9e6e14 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -249,8 +249,6 @@ public: output. \ingroup i18n - \ingroup environment - \mainclass An object of this class contains a set of translations from a source language to a target language. QTranslator provides diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 66c4176..54d6073 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1164,9 +1164,8 @@ const QVariant::Handler *QVariant::handler = &qt_kernel_variant_handler; \brief The QVariant class acts like a union for the most common Qt data types. \ingroup objectmodel - \ingroup misc \ingroup shared - \mainclass + Because C++ forbids unions from including types that have non-default constructors or destructors, most interesting Qt diff --git a/src/corelib/kernel/qwineventnotifier_p.cpp b/src/corelib/kernel/qwineventnotifier_p.cpp index f54d564..e5ce02c 100644 --- a/src/corelib/kernel/qwineventnotifier_p.cpp +++ b/src/corelib/kernel/qwineventnotifier_p.cpp @@ -52,8 +52,6 @@ QT_BEGIN_NAMESPACE \class QWinEventNotifier \brief The QWinEventNotifier class provides support for the Windows Wait functions. - \ingroup io - The QWinEventNotifier class makes it possible to use the wait functions on windows in a asynchronous manner. With this class you can register a HANDLE to an event and get notification when diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 116d617..ea8882f 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -85,7 +85,7 @@ Q_GLOBAL_STATIC(QMutex, qt_library_mutex) \reentrant \brief The QLibrary class loads shared libraries at runtime. - \mainclass + \ingroup plugins An instance of a QLibrary object operates on a single shared diff --git a/doc/src/classes/qplugin.qdoc b/src/corelib/plugin/qplugin.qdoc index 3b8f1b0..3b8f1b0 100644 --- a/doc/src/classes/qplugin.qdoc +++ b/src/corelib/plugin/qplugin.qdoc diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index 2d9e20e..521063c 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE \reentrant \brief The QPluginLoader class loads a plugin at run-time. - \mainclass + \ingroup plugins QPluginLoader provides access to a \l{How to Create Qt diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index fd5bc63..400f42d 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -50,7 +50,6 @@ QT_BEGIN_NAMESPACE \brief The QUuid class stores a Universally Unique Identifier (UUID). \reentrant - \ingroup misc Using \e{U}niversally \e{U}nique \e{ID}entifiers (UUID) is a standard way to uniquely identify entities in a distributed diff --git a/src/corelib/thread/qmutex.cpp b/src/corelib/thread/qmutex.cpp index eaa7308..db9a415 100644 --- a/src/corelib/thread/qmutex.cpp +++ b/src/corelib/thread/qmutex.cpp @@ -56,8 +56,6 @@ QT_BEGIN_NAMESPACE \threadsafe \ingroup thread - \ingroup environment - \mainclass The purpose of a QMutex is to protect an object, data structure or section of code so that only one thread can access it at a time @@ -416,7 +414,6 @@ void QMutex::unlock() \threadsafe \ingroup thread - \ingroup environment Locking and unlocking a QMutex in complex functions and statements or in exception handling code is error-prone and diff --git a/src/corelib/thread/qreadwritelock.cpp b/src/corelib/thread/qreadwritelock.cpp index 6db10a0..8ce58e9 100644 --- a/src/corelib/thread/qreadwritelock.cpp +++ b/src/corelib/thread/qreadwritelock.cpp @@ -57,7 +57,6 @@ QT_BEGIN_NAMESPACE \threadsafe \ingroup thread - \ingroup environment A read-write lock is a synchronization tool for protecting resources that can be accessed for reading and writing. This type @@ -441,7 +440,6 @@ void QReadWriteLock::unlock() \threadsafe \ingroup thread - \ingroup environment The purpose of QReadLocker (and QWriteLocker) is to simplify QReadWriteLock locking and unlocking. Locking and unlocking @@ -514,7 +512,6 @@ void QReadWriteLock::unlock() \threadsafe \ingroup thread - \ingroup environment The purpose of QWriteLocker (and QReadLocker is to simplify QReadWriteLock locking and unlocking. Locking and unlocking diff --git a/src/corelib/thread/qsemaphore.cpp b/src/corelib/thread/qsemaphore.cpp index 38e800d..df8036f 100644 --- a/src/corelib/thread/qsemaphore.cpp +++ b/src/corelib/thread/qsemaphore.cpp @@ -54,7 +54,6 @@ QT_BEGIN_NAMESPACE \threadsafe \ingroup thread - \ingroup environment A semaphore is a generalization of a mutex. While a mutex can only be locked once, it's possible to acquire a semaphore diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 53ac3c7..b3575d4 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -199,8 +199,6 @@ void QAdoptedThread::run() \brief The QThread class provides platform-independent threads. \ingroup thread - \ingroup environment - \mainclass A QThread represents a separate thread of control within the program; it shares data with all the other threads within the diff --git a/src/corelib/thread/qthreadstorage.cpp b/src/corelib/thread/qthreadstorage.cpp index 25194f4..ebdcab7 100644 --- a/src/corelib/thread/qthreadstorage.cpp +++ b/src/corelib/thread/qthreadstorage.cpp @@ -189,8 +189,6 @@ void QThreadStorageData::finish(void **p) \threadsafe \ingroup thread - \ingroup environment - \mainclass QThreadStorage is a template class that provides per-thread data storage. diff --git a/doc/src/classes/qwaitcondition.qdoc b/src/corelib/thread/qwaitcondition.qdoc index f19f51e..ae2de6c 100644 --- a/doc/src/classes/qwaitcondition.qdoc +++ b/src/corelib/thread/qwaitcondition.qdoc @@ -47,7 +47,6 @@ \threadsafe \ingroup thread - \ingroup environment QWaitCondition allows a thread to tell other threads that some sort of condition has been met. One or many threads can block diff --git a/doc/src/classes/qalgorithms.qdoc b/src/corelib/tools/qalgorithms.qdoc index 0b30879..f7b7798 100644 --- a/doc/src/classes/qalgorithms.qdoc +++ b/src/corelib/tools/qalgorithms.qdoc @@ -42,7 +42,7 @@ /*! \headerfile <QtAlgorithms> \title Generic Algorithms - \ingroup architecture + \ingroup classlists \brief The <QtAlgorithms> header provides generic template-based algorithms. diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp index 5197d9a..3cfc88e 100644 --- a/src/corelib/tools/qbytearray.cpp +++ b/src/corelib/tools/qbytearray.cpp @@ -590,8 +590,8 @@ QByteArray::Data QByteArray::shared_empty = { Q_BASIC_ATOMIC_INITIALIZER(1), \ingroup tools \ingroup shared - \ingroup text - \mainclass + \ingroup string-processing + \reentrant QByteArray can be used to store both raw bytes (including '\\0's) diff --git a/src/corelib/tools/qbytearraymatcher.cpp b/src/corelib/tools/qbytearraymatcher.cpp index 1c10a4f..37cb9bb 100644 --- a/src/corelib/tools/qbytearraymatcher.cpp +++ b/src/corelib/tools/qbytearraymatcher.cpp @@ -94,7 +94,7 @@ static inline int bm_find(const uchar *cc, int l, int index, const uchar *puc, u can be quickly matched in a byte array. \ingroup tools - \ingroup text + \ingroup string-processing This class is useful when you have a sequence of bytes that you want to repeatedly match against some byte arrays (perhaps in a diff --git a/doc/src/classes/qcache.qdoc b/src/corelib/tools/qcache.qdoc index b79eba8..4c008fa 100644 --- a/doc/src/classes/qcache.qdoc +++ b/src/corelib/tools/qcache.qdoc @@ -45,7 +45,7 @@ \ingroup tools \ingroup shared - \mainclass + \reentrant QCache\<Key, T\> defines a cache that stores objects of type T diff --git a/src/corelib/tools/qchar.cpp b/src/corelib/tools/qchar.cpp index ab84603..e9f9552 100644 --- a/src/corelib/tools/qchar.cpp +++ b/src/corelib/tools/qchar.cpp @@ -70,7 +70,7 @@ QT_BEGIN_NAMESPACE /*! \class QLatin1Char \brief The QLatin1Char class provides an 8-bit ASCII/Latin-1 character. - \ingroup text + \ingroup string-processing This class is only useful to avoid the codec for C strings business in the QChar(ch) constructor. You can avoid it by writing @@ -104,7 +104,7 @@ QT_BEGIN_NAMESPACE \class QChar \brief The QChar class provides a 16-bit Unicode character. - \ingroup text + \ingroup string-processing \reentrant In Qt, Unicode characters are 16-bit entities without any markup diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp index 08a8385..54384e4 100644 --- a/src/corelib/tools/qdatetime.cpp +++ b/src/corelib/tools/qdatetime.cpp @@ -193,8 +193,6 @@ static QString fmtDateTime(const QString& f, const QTime* dt = 0, const QDate* d \reentrant \brief The QDate class provides date functions. - \ingroup time - \mainclass A QDate object contains a calendar date, i.e. year, month, and day numbers, in the Gregorian calendar. (see \l{QDate G and J} {Use of @@ -1411,8 +1409,6 @@ void QDate::julianToGregorian(uint jd, int &y, int &m, int &d) \brief The QTime class provides clock time functions. - \ingroup time - \mainclass A QTime object contains a clock time, i.e. the number of hours, minutes, seconds, and milliseconds since midnight. It can read the @@ -2074,8 +2070,6 @@ int QTime::elapsed() const \reentrant \brief The QDateTime class provides date and time functions. - \ingroup time - \mainclass A QDateTime object contains a calendar date and a clock time (a "datetime"). It is a combination of the QDate and QTime classes. diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 5cc8080..e84e3f0 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -301,7 +301,7 @@ #ifndef QT_NO_DEBUG_STREAM #include <QtCore/qdebug.h> -#include <QtCore/QString> +#include <QtCore/qstring.h> #endif QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp index 5e13794..21b73e4 100644 --- a/src/corelib/tools/qhash.cpp +++ b/src/corelib/tools/qhash.cpp @@ -485,7 +485,7 @@ void QHashData::checkSanity() \ingroup tools \ingroup shared - \mainclass + \reentrant QHash\<Key, T\> is one of Qt's generic \l{container classes}. It @@ -1618,7 +1618,7 @@ void QHashData::checkSanity() \ingroup tools \ingroup shared - \mainclass + \reentrant QMultiHash\<Key, T\> is one of Qt's generic \l{container classes}. diff --git a/doc/src/classes/qiterator.qdoc b/src/corelib/tools/qiterator.qdoc index c767be3..c767be3 100644 --- a/doc/src/classes/qiterator.qdoc +++ b/src/corelib/tools/qiterator.qdoc diff --git a/src/corelib/tools/qline.cpp b/src/corelib/tools/qline.cpp index e6ad9d1..02c1128 100644 --- a/src/corelib/tools/qline.cpp +++ b/src/corelib/tools/qline.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE /*! \class QLine - \ingroup multimedia + \ingroup painting \brief The QLine class provides a two-dimensional vector using integer precision. @@ -309,7 +309,7 @@ QDataStream &operator>>(QDataStream &stream, QLine &line) /*! \class QLineF - \ingroup multimedia + \ingroup painting \brief The QLineF class provides a two-dimensional vector using floating point precision. diff --git a/src/corelib/tools/qlinkedlist.cpp b/src/corelib/tools/qlinkedlist.cpp index e5c0145..39758ed 100644 --- a/src/corelib/tools/qlinkedlist.cpp +++ b/src/corelib/tools/qlinkedlist.cpp @@ -53,7 +53,7 @@ QLinkedListData QLinkedListData::shared_null = { \ingroup tools \ingroup shared - \mainclass + \reentrant QLinkedList\<T\> is one of Qt's generic \l{container classes}. It diff --git a/src/corelib/tools/qlistdata.cpp b/src/corelib/tools/qlist.cpp index 4885b43..0993681 100644 --- a/src/corelib/tools/qlistdata.cpp +++ b/src/corelib/tools/qlist.cpp @@ -289,7 +289,7 @@ void **QListData::erase(void **xi) \ingroup tools \ingroup shared - \mainclass + \reentrant QList\<T\> is one of Qt's generic \l{container classes}. It diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 6913141..c767c7e 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -1472,9 +1472,9 @@ QDataStream &operator>>(QDataStream &ds, QLocale &l) \reentrant \ingroup i18n - \ingroup text + \ingroup string-processing \ingroup shared - \mainclass + QLocale is initialized with a language/country pair in its constructor and offers number-to-string and string-to-number diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp index f212f62..6b27e97 100644 --- a/src/corelib/tools/qmap.cpp +++ b/src/corelib/tools/qmap.cpp @@ -194,7 +194,7 @@ void QMapData::dump() \ingroup tools \ingroup shared - \mainclass + \reentrant QMap\<Key, T\> is one of Qt's generic \l{container classes}. It @@ -1317,7 +1317,7 @@ void QMapData::dump() \ingroup tools \ingroup shared - \mainclass + \reentrant QMultiMap\<Key, T\> is one of Qt's generic \l{container classes}. diff --git a/doc/src/classes/qpair.qdoc b/src/corelib/tools/qpair.qdoc index 9c8ac89..9c8ac89 100644 --- a/doc/src/classes/qpair.qdoc +++ b/src/corelib/tools/qpair.qdoc diff --git a/src/corelib/tools/qpoint.cpp b/src/corelib/tools/qpoint.cpp index cba7fef..7c05eaa 100644 --- a/src/corelib/tools/qpoint.cpp +++ b/src/corelib/tools/qpoint.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE /*! \class QPoint - \ingroup multimedia + \ingroup painting \brief The QPoint class defines a point in the plane using integer precision. @@ -380,7 +380,7 @@ QDebug operator<<(QDebug d, const QPointF &p) /*! \class QPointF - \ingroup multimedia + \ingroup painting \brief The QPointF class defines a point in the plane using floating point precision. diff --git a/src/corelib/tools/qqueue.cpp b/src/corelib/tools/qqueue.cpp index 108f103..1c1e6d2 100644 --- a/src/corelib/tools/qqueue.cpp +++ b/src/corelib/tools/qqueue.cpp @@ -45,7 +45,7 @@ \ingroup tools \ingroup shared - \mainclass + \reentrant QQueue\<T\> is one of Qt's generic \l{container classes}. It diff --git a/src/corelib/tools/qrect.cpp b/src/corelib/tools/qrect.cpp index eb493f0..bdd09a2 100644 --- a/src/corelib/tools/qrect.cpp +++ b/src/corelib/tools/qrect.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE /*! \class QRect - \ingroup multimedia + \ingroup painting \brief The QRect class defines a rectangle in the plane using integer precision. @@ -1324,7 +1324,7 @@ QDebug operator<<(QDebug dbg, const QRect &r) { /*! \class QRectF - \ingroup multimedia + \ingroup painting \brief The QRectF class defines a rectangle in the plane using floating point precision. diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp index 98056ea..0e2f8f2 100644 --- a/src/corelib/tools/qregexp.cpp +++ b/src/corelib/tools/qregexp.cpp @@ -83,9 +83,8 @@ int qFindString(const QChar *haystack, int haystackLen, int from, \brief The QRegExp class provides pattern matching using regular expressions. \ingroup tools - \ingroup misc \ingroup shared - \mainclass + \keyword regular expression A regular expression, or "regexp", is a pattern for matching diff --git a/doc/src/classes/qset.qdoc b/src/corelib/tools/qset.qdoc index 8409e13..55baa18 100644 --- a/doc/src/classes/qset.qdoc +++ b/src/corelib/tools/qset.qdoc @@ -46,7 +46,7 @@ \ingroup tools \ingroup shared \reentrant - \mainclass + QSet<T> is one of Qt's generic \l{container classes}. It stores values in an unspecified order and provides very fast lookup of diff --git a/src/corelib/tools/qshareddata.cpp b/src/corelib/tools/qshareddata.cpp index 9f49898..70290d8 100644 --- a/src/corelib/tools/qshareddata.cpp +++ b/src/corelib/tools/qshareddata.cpp @@ -44,245 +44,242 @@ QT_BEGIN_NAMESPACE /*! - \class QSharedData - \brief The QSharedData class is a base class for shared data objects. - \reentrant - \ingroup misc + \class QSharedData + \brief The QSharedData class is a base class for shared data objects. + \reentrant - QSharedData is designed to be used with QSharedDataPointer or - QExplicitlySharedDataPointer to implement custom \l{implicitly - shared} or explicitly shared classes. QSharedData provides - \l{thread-safe} reference counting. + QSharedData is designed to be used with QSharedDataPointer or + QExplicitlySharedDataPointer to implement custom \l{implicitly + shared} or explicitly shared classes. QSharedData provides + \l{thread-safe} reference counting. - See QSharedDataPointer and QExplicitlySharedDataPointer for details. + See QSharedDataPointer and QExplicitlySharedDataPointer for details. */ /*! \fn QSharedData::QSharedData() - Constructs a QSharedData object with a reference count of 0. + Constructs a QSharedData object with a reference count of 0. */ /*! \fn QSharedData::QSharedData(const QSharedData& other) - Constructs a QSharedData object with reference count 0. - \a other is ignored. + Constructs a QSharedData object with reference count 0. + \a other is ignored. */ /*! - \class QSharedDataPointer - \brief The QSharedDataPointer class represents a pointer to an implicitly shared object. - \since 4.0 - \reentrant - \ingroup misc - \mainclass + \class QSharedDataPointer + \brief The QSharedDataPointer class represents a pointer to an implicitly shared object. + \since 4.0 + \reentrant - QSharedDataPointer\<T\> makes writing your own \l {implicitly - shared} classes easy. QSharedDataPointer implements \l {thread-safe} - reference counting, ensuring that adding QSharedDataPointers to your - \l {reentrant} classes won't make them non-reentrant. + QSharedDataPointer\<T\> makes writing your own \l {implicitly + shared} classes easy. QSharedDataPointer implements \l {thread-safe} + reference counting, ensuring that adding QSharedDataPointers to your + \l {reentrant} classes won't make them non-reentrant. - \l {Implicit sharing} is used by many Qt classes to combine the - speed and memory efficiency of pointers with the ease of use of - classes. See the \l{Shared Classes} page for more information. + \l {Implicit sharing} is used by many Qt classes to combine the + speed and memory efficiency of pointers with the ease of use of + classes. See the \l{Shared Classes} page for more information. - \target Employee example - Suppose you want to make an \c Employee class implicitly shared. The - procedure is: + \target Employee example + Suppose you want to make an \c Employee class implicitly shared. The + procedure is: - \list + \list - \o Define the class \c Employee to have a single data member of + \o Define the class \c Employee to have a single data member of type \c {QSharedDataPointer<EmployeeData>}. - \o Define the \c EmployeeData class derived from \l QSharedData to + \o Define the \c EmployeeData class derived from \l QSharedData to contain all the data members you would normally have put in the \c Employee class. - \endlist - - To show this in practice, we review the source code for the - implicitly shared \c Employee class. In the header file we define the - two classes \c Employee and \c EmployeeData. - - \snippet doc/src/snippets/sharedemployee/employee.h 0 - - In class \c Employee, note the single data member, a \e {d pointer} - of type \c {QSharedDataPointer<EmployeeData>}. All accesses of - employee data must go through the \e {d pointer's} \c - {operator->()}. For write accesses, \c {operator->()} will - automatically call detach(), which creates a copy of the shared data - object if the shared data object's reference count is greater than - 1. This ensures that writes to one \c Employee object don't affect - any other \c Employee objects that share the same \c EmployeeData - object. - - Class \c EmployeeData inherits QSharedData, which provides the - \e{behind the scenes} reference counter. \c EmployeeData has a default - constructor, a copy constructor, and a destructor. Normally, trivial - implementations of these are all that is needed in the \e {data} - class for an implicitly shared class. - - Implementing the two constructors for class \c Employee is also - straightforward. Both create a new instance of \c EmployeeData - and assign it to the \e{d pointer} . - - \snippet doc/src/snippets/sharedemployee/employee.h 1 - \codeline - \snippet doc/src/snippets/sharedemployee/employee.h 2 - - Note that class \c Employee also has a trivial copy constructor - defined, which is not strictly required in this case. - - \snippet doc/src/snippets/sharedemployee/employee.h 7 - - The copy constructor is not strictly required here, because class \c - EmployeeData is included in the same file as class \c Employee - (\c{employee.h}). However, including the private subclass of - QSharedData in the same file as the public class containing the - QSharedDataPointer is not typical. Normally, the idea is to hide the - private subclass of QSharedData from the user by putting it in a - separate file which would not be included in the public file. In - this case, we would normally put class \c EmployeeData in a separate - file, which would \e{not} be included in \c{employee.h}. Instead, we - would just predeclare the private subclass \c EmployeeData in \c - {employee.h} this way: - - \code - class EmployeeData; - \endcode - - If we had done it that way here, the copy constructor shown would be - required. Since the copy constructor is trivial, you might as well - just always include it. - - Behind the scenes, QSharedDataPointer automatically increments the - reference count whenever an \c Employee object is copied, assigned, - or passed as a parameter. It decrements the reference count whenever - an \c Employee object is deleted or goes out of scope. The shared - \c EmployeeData object is deleted automatically if and when the - reference count reaches 0. - - In a non-const member function of \c Employee, whenever the \e {d - pointer} is dereferenced, QSharedDataPointer automatically calls - detach() to ensure that the function operates on its own copy of the - data. - - \snippet doc/src/snippets/sharedemployee/employee.h 3 - \codeline - \snippet doc/src/snippets/sharedemployee/employee.h 4 - - Note that if detach() is called more than once in a member function - due to multiple dereferences of the \e {d pointer}, detach() will - only create a copy of the shared data the first time it is called, - if at all, because on the second and subsequent calls of detach(), - the reference count will be 1 again. - - But note that in the second \c Employee constructor, which takes an - employee ID and a name, both setId() and setName() are called, but - they don't cause \e{copy on write}, because the reference count for - the newly constructed \c EmployeeData object has just been set to 1. - - In \c Employee's \e const member functions, dereferencing the \e {d - pointer} does \e not cause detach() to be called. - - \snippet doc/src/snippets/sharedemployee/employee.h 5 - \codeline - \snippet doc/src/snippets/sharedemployee/employee.h 6 - - Notice that there is no need to implement a copy constructor or an - assignment operator for the \c Employee class, because the copy - constructor and assignment operator provided by the C++ compiler - will do the \e{member by member} shallow copy required. The only - member to copy is the \e {d pointer}, which is a QSharedDataPointer, - whose \c {operator=()} just increments the reference count of the - shared \c EmployeeData object. - - \target Implicit vs Explicit Sharing - \section1 Implicit vs Explicit Sharing - - Implicit sharing might not be right for the \c Employee class. - Consider a simple example that creates two instances of the - implicitly shared \c Employee class. - - \snippet doc/src/snippets/sharedemployee/main.cpp 0 - - After the second employee e2 is created and e1 is assigned to it, - both \c e1 and \c e2 refer to Albrecht Durer, employee 1001. Both \c - Employee objects point to the same instance of \c EmployeeData, - which has reference count 2. Then \c {e1.setName("Hans Holbein")} is - called to change the employee name, but because the reference count - is greater than 1, a \e{copy on write} is performed before the name - is changed. Now \c e1 and \c e2 point to different \c EmployeeData - objects. They have different names, but both have ID 1001, which is - probably not what you want. You can, of course, just continue with - \c {e1.setId(1002)}, if you really mean to create a second, unique - employee, but if you only want to change the employee's name - everywhere, consider using \l {QExplicitlySharedDataPointer} - {explicit sharing} in the \c Employee class instead of implicit - sharing. - - If you declare the \e {d pointer} in the \c Employee class to be - \c {QExplicitlySharedDataPointer<EmployeeData>}, then explicit - sharing is used and \e{copy on write} operations are not performed - automatically (i.e. detach() is not called in non-const - functions). In that case, after \c {e1.setName("Hans Holbein")}, the - employee's name has been changed, but both e1 and e2 still refer to - the same instance of \c EmployeeData, so there is only one employee - with ID 1001. - - In the member function documentation, \e{d pointer} always refers - to the internal pointer to the shared data object. - - \sa QSharedData, QExplicitlySharedDataPointer + \endlist + + To show this in practice, we review the source code for the + implicitly shared \c Employee class. In the header file we define the + two classes \c Employee and \c EmployeeData. + + \snippet doc/src/snippets/sharedemployee/employee.h 0 + + In class \c Employee, note the single data member, a \e {d pointer} + of type \c {QSharedDataPointer<EmployeeData>}. All accesses of + employee data must go through the \e {d pointer's} \c + {operator->()}. For write accesses, \c {operator->()} will + automatically call detach(), which creates a copy of the shared data + object if the shared data object's reference count is greater than + 1. This ensures that writes to one \c Employee object don't affect + any other \c Employee objects that share the same \c EmployeeData + object. + + Class \c EmployeeData inherits QSharedData, which provides the + \e{behind the scenes} reference counter. \c EmployeeData has a default + constructor, a copy constructor, and a destructor. Normally, trivial + implementations of these are all that is needed in the \e {data} + class for an implicitly shared class. + + Implementing the two constructors for class \c Employee is also + straightforward. Both create a new instance of \c EmployeeData + and assign it to the \e{d pointer} . + + \snippet doc/src/snippets/sharedemployee/employee.h 1 + \codeline + \snippet doc/src/snippets/sharedemployee/employee.h 2 + + Note that class \c Employee also has a trivial copy constructor + defined, which is not strictly required in this case. + + \snippet doc/src/snippets/sharedemployee/employee.h 7 + + The copy constructor is not strictly required here, because class \c + EmployeeData is included in the same file as class \c Employee + (\c{employee.h}). However, including the private subclass of + QSharedData in the same file as the public class containing the + QSharedDataPointer is not typical. Normally, the idea is to hide the + private subclass of QSharedData from the user by putting it in a + separate file which would not be included in the public file. In + this case, we would normally put class \c EmployeeData in a separate + file, which would \e{not} be included in \c{employee.h}. Instead, we + would just predeclare the private subclass \c EmployeeData in \c + {employee.h} this way: + + \code + class EmployeeData; + \endcode + + If we had done it that way here, the copy constructor shown would be + required. Since the copy constructor is trivial, you might as well + just always include it. + + Behind the scenes, QSharedDataPointer automatically increments the + reference count whenever an \c Employee object is copied, assigned, + or passed as a parameter. It decrements the reference count whenever + an \c Employee object is deleted or goes out of scope. The shared + \c EmployeeData object is deleted automatically if and when the + reference count reaches 0. + + In a non-const member function of \c Employee, whenever the \e {d + pointer} is dereferenced, QSharedDataPointer automatically calls + detach() to ensure that the function operates on its own copy of the + data. + + \snippet doc/src/snippets/sharedemployee/employee.h 3 + \codeline + \snippet doc/src/snippets/sharedemployee/employee.h 4 + + Note that if detach() is called more than once in a member function + due to multiple dereferences of the \e {d pointer}, detach() will + only create a copy of the shared data the first time it is called, + if at all, because on the second and subsequent calls of detach(), + the reference count will be 1 again. + + But note that in the second \c Employee constructor, which takes an + employee ID and a name, both setId() and setName() are called, but + they don't cause \e{copy on write}, because the reference count for + the newly constructed \c EmployeeData object has just been set to 1. + + In \c Employee's \e const member functions, dereferencing the \e {d + pointer} does \e not cause detach() to be called. + + \snippet doc/src/snippets/sharedemployee/employee.h 5 + \codeline + \snippet doc/src/snippets/sharedemployee/employee.h 6 + + Notice that there is no need to implement a copy constructor or an + assignment operator for the \c Employee class, because the copy + constructor and assignment operator provided by the C++ compiler + will do the \e{member by member} shallow copy required. The only + member to copy is the \e {d pointer}, which is a QSharedDataPointer, + whose \c {operator=()} just increments the reference count of the + shared \c EmployeeData object. + + \target Implicit vs Explicit Sharing + \section1 Implicit vs Explicit Sharing + + Implicit sharing might not be right for the \c Employee class. + Consider a simple example that creates two instances of the + implicitly shared \c Employee class. + + \snippet doc/src/snippets/sharedemployee/main.cpp 0 + + After the second employee e2 is created and e1 is assigned to it, + both \c e1 and \c e2 refer to Albrecht Durer, employee 1001. Both \c + Employee objects point to the same instance of \c EmployeeData, + which has reference count 2. Then \c {e1.setName("Hans Holbein")} is + called to change the employee name, but because the reference count + is greater than 1, a \e{copy on write} is performed before the name + is changed. Now \c e1 and \c e2 point to different \c EmployeeData + objects. They have different names, but both have ID 1001, which is + probably not what you want. You can, of course, just continue with + \c {e1.setId(1002)}, if you really mean to create a second, unique + employee, but if you only want to change the employee's name + everywhere, consider using \l {QExplicitlySharedDataPointer} + {explicit sharing} in the \c Employee class instead of implicit + sharing. + + If you declare the \e {d pointer} in the \c Employee class to be + \c {QExplicitlySharedDataPointer<EmployeeData>}, then explicit + sharing is used and \e{copy on write} operations are not performed + automatically (i.e. detach() is not called in non-const + functions). In that case, after \c {e1.setName("Hans Holbein")}, the + employee's name has been changed, but both e1 and e2 still refer to + the same instance of \c EmployeeData, so there is only one employee + with ID 1001. + + In the member function documentation, \e{d pointer} always refers + to the internal pointer to the shared data object. + + \sa QSharedData, QExplicitlySharedDataPointer */ /*! \fn T& QSharedDataPointer::operator*() - Provides access to the shared data object's members. - This function calls detach(). + Provides access to the shared data object's members. + This function calls detach(). */ /*! \fn const T& QSharedDataPointer::operator*() const - Provides const access to the shared data object's members. - This function does \e not call detach(). + Provides const access to the shared data object's members. + This function does \e not call detach(). */ /*! \fn T* QSharedDataPointer::operator->() - Provides access to the shared data object's members. - This function calls detach(). + Provides access to the shared data object's members. + This function calls detach(). */ /*! \fn const T* QSharedDataPointer::operator->() const - Provides const access to the shared data object's members. - This function does \e not call detach(). + Provides const access to the shared data object's members. + This function does \e not call detach(). */ /*! \fn QSharedDataPointer::operator T*() - Returns a pointer to the shared data object. - This function calls detach(). + Returns a pointer to the shared data object. + This function calls detach(). - \sa data(), constData() + \sa data(), constData() */ /*! \fn QSharedDataPointer::operator const T*() const - Returns a pointer to the shared data object. - This function does \e not call detach(). + Returns a pointer to the shared data object. + This function does \e not call detach(). */ /*! \fn T* QSharedDataPointer::data() - Returns a pointer to the shared data object. - This function calls detach(). + Returns a pointer to the shared data object. + This function calls detach(). - \sa constData() + \sa constData() */ /*! \fn const T* QSharedDataPointer::data() const - Returns a pointer to the shared data object. - This function does \e not call detach(). + Returns a pointer to the shared data object. + This function does \e not call detach(). */ /*! \fn const T* QSharedDataPointer::constData() const - Returns a const pointer to the shared data object. - This function does \e not call detach(). + Returns a const pointer to the shared data object. + This function does \e not call detach(). - \sa data() + \sa data() */ /*! \fn void QSharedDataPointer::swap(QSharedDataPointer &other) @@ -291,154 +288,152 @@ QT_BEGIN_NAMESPACE */ /*! \fn bool QSharedDataPointer::operator==(const QSharedDataPointer<T>& other) const - Returns true if \a other and \e this have the same \e{d pointer}. - This function does \e not call detach(). + Returns true if \a other and \e this have the same \e{d pointer}. + This function does \e not call detach(). */ /*! \fn bool QSharedDataPointer::operator!=(const QSharedDataPointer<T>& other) const - Returns true if \a other and \e this do \e not have the same - \e{d pointer}. This function does \e not call detach(). + Returns true if \a other and \e this do \e not have the same + \e{d pointer}. This function does \e not call detach(). */ /*! \fn QSharedDataPointer::QSharedDataPointer() - Constructs a QSharedDataPointer initialized with a null \e{d pointer}. + Constructs a QSharedDataPointer initialized with a null \e{d pointer}. */ /*! \fn QSharedDataPointer::~QSharedDataPointer() - Decrements the reference count of the shared data object. - If the reference count becomes 0, the shared data object - is deleted. \e This is then destroyed. + Decrements the reference count of the shared data object. + If the reference count becomes 0, the shared data object + is deleted. \e This is then destroyed. */ /*! \fn QSharedDataPointer::QSharedDataPointer(T* sharedData) - Constructs a QSharedDataPointer with \e{d pointer} set to - \a sharedData and increments \a{sharedData}'s reference count. + Constructs a QSharedDataPointer with \e{d pointer} set to + \a sharedData and increments \a{sharedData}'s reference count. */ /*! \fn QSharedDataPointer::QSharedDataPointer(const QSharedDataPointer<T>& other) - Sets the \e{d pointer} of \e this to the \e{d pointer} in - \a other and increments the reference count of the shared - data object. + Sets the \e{d pointer} of \e this to the \e{d pointer} in + \a other and increments the reference count of the shared + data object. */ /*! \fn QSharedDataPointer<T>& QSharedDataPointer::operator=(const QSharedDataPointer<T>& other) - Sets the \e{d pointer} of \e this to the \e{d pointer} of - \a other and increments the reference count of the shared - data object. The reference count of the old shared data - object of \e this is decremented. If the reference count - of the old shared data object becomes 0, the old shared - data object is deleted. + Sets the \e{d pointer} of \e this to the \e{d pointer} of + \a other and increments the reference count of the shared + data object. The reference count of the old shared data + object of \e this is decremented. If the reference count + of the old shared data object becomes 0, the old shared + data object is deleted. */ /*! \fn QSharedDataPointer& QSharedDataPointer::operator=(T* sharedData) - Sets the \e{d pointer} og \e this to \a sharedData and increments - \a{sharedData}'s reference count. The reference count of the old - shared data object of \e this is decremented. If the reference - count of the old shared data object becomes 0, the old shared data - object is deleted. + Sets the \e{d pointer} og \e this to \a sharedData and increments + \a{sharedData}'s reference count. The reference count of the old + shared data object of \e this is decremented. If the reference + count of the old shared data object becomes 0, the old shared data + object is deleted. */ /*! \fn bool QSharedDataPointer::operator!() const - Returns true if the \e{d pointer} of \e this is null. + Returns true if the \e{d pointer} of \e this is null. */ /*! \fn void QSharedDataPointer::detach() - If the shared data object's reference count is greater than 1, this - function creates a deep copy of the shared data object and sets the - \e{d pointer} of \e this to the copy. - - This function is called automatically by non-const member - functions of QSharedDataPointer if \e{copy on write} is - required. You don't need to call it yourself. + If the shared data object's reference count is greater than 1, this + function creates a deep copy of the shared data object and sets the + \e{d pointer} of \e this to the copy. + + This function is called automatically by non-const member + functions of QSharedDataPointer if \e{copy on write} is + required. You don't need to call it yourself. */ /*! \fn T *QSharedDataPointer::clone() \since 4.5 - Creates and returns a deep copy of the current data. This function - is called by detach() when the reference count is greater than 1 in - order to create the new copy. This function uses the \e {operator - new} and calls the copy constructor of the type T. + Creates and returns a deep copy of the current data. This function + is called by detach() when the reference count is greater than 1 in + order to create the new copy. This function uses the \e {operator + new} and calls the copy constructor of the type T. - This function is provided so that you may support "virtual copy - constructors" for your own types. In order to so, you should declare - a template-specialization of this function for your own type, like - the example below: + This function is provided so that you may support "virtual copy + constructors" for your own types. In order to so, you should declare + a template-specialization of this function for your own type, like + the example below: - \code + \code template<> EmployeeData *QSharedDataPointer<EmployeeData>::clone() { return d->clone(); } - \endcode + \endcode - In the example above, the template specialization for the clone() - function calls the \e {EmployeeData::clone()} virtual function. A - class derived from EmployeeData could override that function and - return the proper polymorphic type. + In the example above, the template specialization for the clone() + function calls the \e {EmployeeData::clone()} virtual function. A + class derived from EmployeeData could override that function and + return the proper polymorphic type. */ /*! - \class QExplicitlySharedDataPointer - \brief The QExplicitlySharedDataPointer class represents a pointer to an explicitly shared object. - \since 4.4 - \reentrant - \ingroup misc - \mainclass - - QExplicitlySharedDataPointer\<T\> makes writing your own explicitly - shared classes easy. QExplicitlySharedDataPointer implements - \l {thread-safe} reference counting, ensuring that adding - QExplicitlySharedDataPointers to your \l {reentrant} classes won't - make them non-reentrant. - - Except for one big difference, QExplicitlySharedDataPointer is just - like QSharedDataPointer. The big difference is that member functions - of QExplicitlySharedDataPointer \e{do not} do the automatic - \e{copy on write} operation (detach()) that non-const members of - QSharedDataPointer do before allowing the shared data object to be - modified. There is a detach() function available, but if you really - want to detach(), you have to call it yourself. This means that - QExplicitlySharedDataPointers behave like regular C++ pointers, - except that by doing reference counting and not deleting the shared - data object until the reference count is 0, they avoid the dangling - pointer problem. - - It is instructive to compare QExplicitlySharedDataPointer with - QSharedDataPointer by way of an example. Consider the \l {Employee - example} in QSharedDataPointer, modified to use explicit sharing as - explained in the discussion \l {Implicit vs Explicit Sharing}. - - Note that if you use this class but find you are calling detach() a - lot, you probably should be using QSharedDataPointer instead. - - In the member function documentation, \e{d pointer} always refers - to the internal pointer to the shared data object. - - \sa QSharedData, QSharedDataPointer + \class QExplicitlySharedDataPointer + \brief The QExplicitlySharedDataPointer class represents a pointer to an explicitly shared object. + \since 4.4 + \reentrant + + QExplicitlySharedDataPointer\<T\> makes writing your own explicitly + shared classes easy. QExplicitlySharedDataPointer implements + \l {thread-safe} reference counting, ensuring that adding + QExplicitlySharedDataPointers to your \l {reentrant} classes won't + make them non-reentrant. + + Except for one big difference, QExplicitlySharedDataPointer is just + like QSharedDataPointer. The big difference is that member functions + of QExplicitlySharedDataPointer \e{do not} do the automatic + \e{copy on write} operation (detach()) that non-const members of + QSharedDataPointer do before allowing the shared data object to be + modified. There is a detach() function available, but if you really + want to detach(), you have to call it yourself. This means that + QExplicitlySharedDataPointers behave like regular C++ pointers, + except that by doing reference counting and not deleting the shared + data object until the reference count is 0, they avoid the dangling + pointer problem. + + It is instructive to compare QExplicitlySharedDataPointer with + QSharedDataPointer by way of an example. Consider the \l {Employee + example} in QSharedDataPointer, modified to use explicit sharing as + explained in the discussion \l {Implicit vs Explicit Sharing}. + + Note that if you use this class but find you are calling detach() a + lot, you probably should be using QSharedDataPointer instead. + + In the member function documentation, \e{d pointer} always refers + to the internal pointer to the shared data object. + + \sa QSharedData, QSharedDataPointer */ /*! \fn T& QExplicitlySharedDataPointer::operator*() const - Provides access to the shared data object's members. + Provides access to the shared data object's members. */ /*! \fn T* QExplicitlySharedDataPointer::operator->() - Provides access to the shared data object's members. + Provides access to the shared data object's members. */ /*! \fn const T* QExplicitlySharedDataPointer::operator->() const - Provides const access to the shared data object's members. + Provides const access to the shared data object's members. */ /*! \fn T* QExplicitlySharedDataPointer::data() const - Returns a pointer to the shared data object. + Returns a pointer to the shared data object. */ /*! \fn const T* QExplicitlySharedDataPointer::constData() const - Returns a const pointer to the shared data object. + Returns a const pointer to the shared data object. - \sa data() + \sa data() */ /*! \fn void QExplicitlySharedDataPointer::swap(QExplicitlySharedDataPointer &other) @@ -447,114 +442,114 @@ QT_BEGIN_NAMESPACE */ /*! \fn bool QExplicitlySharedDataPointer::operator==(const QExplicitlySharedDataPointer<T>& other) const - Returns true if \a other and \e this have the same \e{d pointer}. + Returns true if \a other and \e this have the same \e{d pointer}. */ /*! \fn bool QExplicitlySharedDataPointer::operator==(const T* ptr) const - Returns true if the \e{d pointer} of \e this is \a ptr. + Returns true if the \e{d pointer} of \e this is \a ptr. */ /*! \fn bool QExplicitlySharedDataPointer::operator!=(const QExplicitlySharedDataPointer<T>& other) const - Returns true if \a other and \e this do \e not have the same - \e{d pointer}. + Returns true if \a other and \e this do \e not have the same + \e{d pointer}. */ /*! \fn bool QExplicitlySharedDataPointer::operator!=(const T* ptr) const - Returns true if the \e{d pointer} of \e this is \e not \a ptr. + Returns true if the \e{d pointer} of \e this is \e not \a ptr. */ /*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer() - Constructs a QExplicitlySharedDataPointer initialized with a null - \e{d pointer}. + Constructs a QExplicitlySharedDataPointer initialized with a null + \e{d pointer}. */ /*! \fn QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer() - Decrements the reference count of the shared data object. - If the reference count becomes 0, the shared data object - is deleted. \e This is then destroyed. + Decrements the reference count of the shared data object. + If the reference count becomes 0, the shared data object + is deleted. \e This is then destroyed. */ /*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(T* sharedData) - Constructs a QExplicitlySharedDataPointer with \e{d pointer} - set to \a sharedData and increments \a{sharedData}'s reference - count. + Constructs a QExplicitlySharedDataPointer with \e{d pointer} + set to \a sharedData and increments \a{sharedData}'s reference + count. */ /*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T>& other) - This standard copy constructor sets the \e {d pointer} of \e this to - the \e {d pointer} in \a other and increments the reference count of - the shared data object. + This standard copy constructor sets the \e {d pointer} of \e this to + the \e {d pointer} in \a other and increments the reference count of + the shared data object. */ /*! \fn QExplicitlySharedDataPointer::QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X>& other) - This copy constructor is different in that it allows \a other to be - a different type of explicitly shared data pointer but one that has - a compatible shared data object. It performs a static cast of the - \e{d pointer} in \a other and sets the \e {d pointer} of \e this to - the converted \e{d pointer}. It increments the reference count of - the shared data object. - */ + This copy constructor is different in that it allows \a other to be + a different type of explicitly shared data pointer but one that has + a compatible shared data object. It performs a static cast of the + \e{d pointer} in \a other and sets the \e {d pointer} of \e this to + the converted \e{d pointer}. It increments the reference count of + the shared data object. +*/ /*! \fn QExplicitlySharedDataPointer<T>& QExplicitlySharedDataPointer::operator=(const QExplicitlySharedDataPointer<T>& other) - Sets the \e{d pointer} of \e this to the \e{d pointer} of - \a other and increments the reference count of the shared - data object. The reference count of the old shared data - object of \e this is decremented. If the reference count - of the old shared data object becomes 0, the old shared - data object is deleted. + Sets the \e{d pointer} of \e this to the \e{d pointer} of + \a other and increments the reference count of the shared + data object. The reference count of the old shared data + object of \e this is decremented. If the reference count + of the old shared data object becomes 0, the old shared + data object is deleted. */ /*! \fn QExplicitlySharedDataPointer& QExplicitlySharedDataPointer::operator=(T* sharedData) - Sets the \e{d pointer} of \e this to \a sharedData and - increments \a{sharedData}'s reference count. The reference - count of the old shared data object of \e this is decremented. - If the reference count of the old shared data object becomes - 0, the old shared data object is deleted. + Sets the \e{d pointer} of \e this to \a sharedData and + increments \a{sharedData}'s reference count. The reference + count of the old shared data object of \e this is decremented. + If the reference count of the old shared data object becomes + 0, the old shared data object is deleted. */ /*! \fn void QExplicitlySharedDataPointer::reset() - Resets \e this to be null. i.e., this function sets the - \e{d pointer} of \e this to 0, but first it decrements - the reference count of the shared data object and deletes - the shared data object if the reference count became 0. + Resets \e this to be null. i.e., this function sets the + \e{d pointer} of \e this to 0, but first it decrements + the reference count of the shared data object and deletes + the shared data object if the reference count became 0. */ /*! \fn QExplicitlySharedDataPointer::operator bool () const - Returns true if the \e{d pointer} of \e this is \e not null. + Returns true if the \e{d pointer} of \e this is \e not null. */ /*! \fn bool QExplicitlySharedDataPointer::operator!() const - Returns true if the \e{d pointer} of \e this is null. + Returns true if the \e{d pointer} of \e this is null. */ /*! \fn void QExplicitlySharedDataPointer::detach() - If the shared data object's reference count is greater than 1, this - function creates a deep copy of the shared data object and sets the - \e{d pointer} of \e this to the copy. + If the shared data object's reference count is greater than 1, this + function creates a deep copy of the shared data object and sets the + \e{d pointer} of \e this to the copy. - Because QExplicitlySharedDataPointer does not do the automatic - \e{copy on write} operations that members of QSharedDataPointer do, - detach() is \e not called automatically anywhere in the member - functions of this class. If you find that you are calling detach() - everywhere in your code, consider using QSharedDataPointer instead. + Because QExplicitlySharedDataPointer does not do the automatic + \e{copy on write} operations that members of QSharedDataPointer do, + detach() is \e not called automatically anywhere in the member + functions of this class. If you find that you are calling detach() + everywhere in your code, consider using QSharedDataPointer instead. */ /*! \fn T *QExplicitlySharedDataPointer::clone() \since 4.5 - Creates and returns a deep copy of the current data. This function - is called by detach() when the reference count is greater than 1 in - order to create the new copy. This function uses the \e {operator - new} and calls the copy constructor of the type T. + Creates and returns a deep copy of the current data. This function + is called by detach() when the reference count is greater than 1 in + order to create the new copy. This function uses the \e {operator + new} and calls the copy constructor of the type T. - See QSharedDataPointer::clone() for an explanation of how to use it. + See QSharedDataPointer::clone() for an explanation of how to use it. */ /*! - \typedef QExplicitlySharedDataPointer::Type + \typedef QExplicitlySharedDataPointer::Type - This is the type of the shared data object. The \e{d pointer} - points to an object of this type. - */ + This is the type of the shared data object. The \e{d pointer} + points to an object of this type. +*/ QT_END_NAMESPACE diff --git a/src/corelib/tools/qsharedpointer.cpp b/src/corelib/tools/qsharedpointer.cpp index 60c7db4..4e2c206 100644 --- a/src/corelib/tools/qsharedpointer.cpp +++ b/src/corelib/tools/qsharedpointer.cpp @@ -50,7 +50,6 @@ \since 4.5 \reentrant - \ingroup misc The QSharedPointer is an automatic, shared pointer in C++. It behaves exactly like a normal pointer for normal purposes, @@ -358,7 +357,6 @@ \brief The QWeakPointer class holds a weak reference to a shared pointer \since 4.5 \reentrant - \ingroup misc The QWeakPointer is an automatic weak reference to a pointer in C++. It cannot be used to dereference the pointer @@ -1212,7 +1210,7 @@ #include <qmutex.h> #if !defined(QT_NO_QOBJECT) -#include "../kernel/qobject_p.h" +#include "private/qobject_p.h" QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qsize.cpp b/src/corelib/tools/qsize.cpp index 6168fe9..a165917 100644 --- a/src/corelib/tools/qsize.cpp +++ b/src/corelib/tools/qsize.cpp @@ -47,7 +47,7 @@ QT_BEGIN_NAMESPACE /*! \class QSize - \ingroup multimedia + \ingroup painting \brief The QSize class defines the size of a two-dimensional object using integer point precision. @@ -432,7 +432,7 @@ QDebug operator<<(QDebug dbg, const QSize &s) { \brief The QSizeF class defines the size of a two-dimensional object using floating point precision. - \ingroup multimedia + \ingroup painting A size is specified by a width() and a height(). It can be set in the constructor and changed using the setWidth(), setHeight(), or diff --git a/src/corelib/tools/qstack.cpp b/src/corelib/tools/qstack.cpp index f89149a..f97e546 100644 --- a/src/corelib/tools/qstack.cpp +++ b/src/corelib/tools/qstack.cpp @@ -45,7 +45,7 @@ \ingroup tools \ingroup shared - \mainclass + \reentrant QStack\<T\> is one of Qt's generic \l{container classes}. It implements diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index dc23142..1c513c3 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -359,7 +359,7 @@ const QString::Null QString::null = { }; \internal - \ingroup text + \ingroup string-processing When you get an object of type QCharRef, if you can assign to it, the assignment will apply to the character in the string from @@ -381,8 +381,8 @@ const QString::Null QString::null = { }; \ingroup tools \ingroup shared - \ingroup text - \mainclass + \ingroup string-processing + QString stores a string of 16-bit \l{QChar}s, where each QChar corresponds one Unicode 4.0 character. (Unicode characters @@ -6939,7 +6939,7 @@ QString QString::fromRawData(const QChar *unicode, int size) /*! \class QLatin1String \brief The QLatin1String class provides a thin wrapper around an ASCII/Latin-1 encoded string literal. - \ingroup text + \ingroup string-processing \reentrant Many of QString's member functions are overloaded to accept @@ -7561,7 +7561,7 @@ QDataStream &operator>>(QDataStream &in, QString &str) \brief The QStringRef class provides a thin wrapper around QString substrings. \reentrant \ingroup tools - \ingroup text + \ingroup string-processing QStringRef provides a read-only subset of the QString API. diff --git a/src/corelib/tools/qstringbuilder.cpp b/src/corelib/tools/qstringbuilder.cpp index 344e95b..04fbb93 100644 --- a/src/corelib/tools/qstringbuilder.cpp +++ b/src/corelib/tools/qstringbuilder.cpp @@ -52,8 +52,8 @@ \ingroup tools \ingroup shared - \ingroup text - \mainclass + \ingroup string-processing + Unlike \c QLatin1String, a \c QLatin1Literal can retrieve its size without iterating over the literal. @@ -92,8 +92,8 @@ \ingroup tools \ingroup shared - \ingroup text - \mainclass + \ingroup string-processing + To build a QString by multiple concatenations, QString::operator+() is typically used. This causes \e{n - 1} reallocations when building diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp index 952609e..231f74e 100644 --- a/src/corelib/tools/qstringlist.cpp +++ b/src/corelib/tools/qstringlist.cpp @@ -77,8 +77,8 @@ QT_BEGIN_NAMESPACE \ingroup tools \ingroup shared - \ingroup text - \mainclass + \ingroup string-processing + \reentrant QStringList inherits from QList<QString>. Like QList, QStringList is diff --git a/src/corelib/tools/qstringmatcher.cpp b/src/corelib/tools/qstringmatcher.cpp index 75e1d45..8eb8238 100644 --- a/src/corelib/tools/qstringmatcher.cpp +++ b/src/corelib/tools/qstringmatcher.cpp @@ -129,7 +129,7 @@ static inline int bm_find(const ushort *uc, uint l, int index, const ushort *puc can be quickly matched in a Unicode string. \ingroup tools - \ingroup text + \ingroup string-processing This class is useful when you have a sequence of \l{QChar}s that you want to repeatedly match against some strings (perhaps in a diff --git a/src/corelib/tools/qtextboundaryfinder.cpp b/src/corelib/tools/qtextboundaryfinder.cpp index 956a963..0cc3218 100644 --- a/src/corelib/tools/qtextboundaryfinder.cpp +++ b/src/corelib/tools/qtextboundaryfinder.cpp @@ -107,7 +107,7 @@ static void init(QTextBoundaryFinder::BoundaryType type, const QChar *chars, int \since 4.4 \ingroup tools \ingroup shared - \ingroup text + \ingroup string-processing \reentrant QTextBoundaryFinder allows to find Unicode text boundaries in a diff --git a/src/corelib/tools/qtimeline.cpp b/src/corelib/tools/qtimeline.cpp index 11d4c43..c0ca931 100644 --- a/src/corelib/tools/qtimeline.cpp +++ b/src/corelib/tools/qtimeline.cpp @@ -165,7 +165,7 @@ void QTimeLinePrivate::setCurrentTime(int msecs) \class QTimeLine \brief The QTimeLine class provides a timeline for controlling animations. \since 4.2 - \ingroup multimedia + \ingroup animation It's most commonly used to animate a GUI control by calling a slot periodically. You can construct a timeline by passing its duration in diff --git a/doc/src/classes/qvarlengtharray.qdoc b/src/corelib/tools/qvarlengtharray.qdoc index 9cc7bef..9cc7bef 100644 --- a/doc/src/classes/qvarlengtharray.qdoc +++ b/src/corelib/tools/qvarlengtharray.qdoc diff --git a/src/corelib/tools/qvector.cpp b/src/corelib/tools/qvector.cpp index 8e454ed..64ef368 100644 --- a/src/corelib/tools/qvector.cpp +++ b/src/corelib/tools/qvector.cpp @@ -67,7 +67,7 @@ int QVectorData::grow(int sizeofTypedData, int size, int sizeofT, bool excessive \ingroup tools \ingroup shared - \mainclass + \reentrant QVector\<T\> is one of Qt's generic \l{container classes}. It diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 1a6c1c0..05d866c 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -55,7 +55,7 @@ SOURCES += \ tools/qhash.cpp \ tools/qline.cpp \ tools/qlinkedlist.cpp \ - tools/qlistdata.cpp \ + tools/qlist.cpp \ tools/qlocale.cpp \ tools/qpoint.cpp \ tools/qmap.cpp \ diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index fa396f1..a08b167 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -52,13 +52,13 @@ #include "qxmlutils_p.h" #include <qdebug.h> -#include <QFile> +#include <qfile.h> #include <stdio.h> #include <qtextcodec.h> #include <qstack.h> #include <qbuffer.h> #ifndef QT_BOOTSTRAPPED -#include <QCoreApplication> +#include <qcoreapplication.h> #else // This specialization of Q_DECLARE_TR_FUNCTIONS is not in qcoreapplication.h, // because that header depends on QObject being available, which is not the @@ -244,7 +244,7 @@ QXmlStreamEntityResolver *QXmlStreamReader::entityResolver() const \brief The QXmlStreamReader class provides a fast parser for reading well-formed XML via a simple streaming API. - \mainclass + \ingroup xml-tools QXmlStreamReader is a faster and more convenient replacement for @@ -2792,7 +2792,7 @@ QStringRef QXmlStreamReader::documentEncoding() const \brief The QXmlStreamWriter class provides an XML writer with a simple streaming API. - \mainclass + \inmodule QtXml \ingroup xml-tools diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h index 3353cd4..420a66a 100644 --- a/src/corelib/xml/qxmlstream.h +++ b/src/corelib/xml/qxmlstream.h @@ -42,12 +42,12 @@ #ifndef QXMLSTREAM_H #define QXMLSTREAM_H -#include <QtCore/QIODevice> +#include <QtCore/qiodevice.h> #ifndef QT_NO_XMLSTREAM -#include <QtCore/QString> -#include <QtCore/QVector> +#include <QtCore/qstring.h> +#include <QtCore/qvector.h> QT_BEGIN_HEADER diff --git a/src/corelib/xml/qxmlutils.cpp b/src/corelib/xml/qxmlutils.cpp index 036869b..d9219be 100644 --- a/src/corelib/xml/qxmlutils.cpp +++ b/src/corelib/xml/qxmlutils.cpp @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#include <QRegExp> -#include <QString> +#include <qregexp.h> +#include <qstring.h> #include "qxmlutils_p.h" diff --git a/src/corelib/xml/qxmlutils_p.h b/src/corelib/xml/qxmlutils_p.h index 431c0ad..6e7ba7b 100644 --- a/src/corelib/xml/qxmlutils_p.h +++ b/src/corelib/xml/qxmlutils_p.h @@ -53,7 +53,7 @@ // We mean it. // -#include <QtCore/QString> +#include <QtCore/qstring.h> QT_BEGIN_NAMESPACE diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp index abeca0d..9084817 100644 --- a/src/gui/accessible/qaccessible.cpp +++ b/src/gui/accessible/qaccessible.cpp @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE relating to accessibility. \ingroup accessibility - \mainclass + Accessible applications can be used by people who are not able to use applications by conventional means. diff --git a/src/gui/dialogs/qabstractprintdialog.cpp b/src/gui/dialogs/qabstractprintdialog.cpp index ac4c9e8..9e91382 100644 --- a/src/gui/dialogs/qabstractprintdialog.cpp +++ b/src/gui/dialogs/qabstractprintdialog.cpp @@ -59,6 +59,8 @@ class QPrintDialogPrivate : public QAbstractPrintDialogPrivate \brief The QAbstractPrintDialog class provides a base implementation for print dialogs used to configure printers. + \ingroup printing + This class implements getter and setter functions that are used to customize settings shown in print dialogs, but it is not used directly. Use QPrintDialog to display a print dialog in your application. @@ -357,7 +359,8 @@ void QAbstractPrintDialogPrivate::setPrinter(QPrinter *newPrinter) \brief The QPrintDialog class provides a dialog for specifying the printer's configuration. - \ingroup dialogs + \ingroup standard-dialogs + \ingroup printing The dialog allows users to change document-related settings, such as the paper size and orientation, type of print (color or diff --git a/src/gui/dialogs/qcolordialog.cpp b/src/gui/dialogs/qcolordialog.cpp index 4a40b48..766dcb4 100644 --- a/src/gui/dialogs/qcolordialog.cpp +++ b/src/gui/dialogs/qcolordialog.cpp @@ -1510,9 +1510,7 @@ static const Qt::WindowFlags DefaultWindowFlags = \class QColorDialog \brief The QColorDialog class provides a dialog widget for specifying colors. - \mainclass - \ingroup dialogs - \ingroup multimedia + \ingroup standard-dialogs The color dialog's function is to allow users to choose colors. For example, you might use this in a drawing program to allow the diff --git a/src/gui/dialogs/qdialog.cpp b/src/gui/dialogs/qdialog.cpp index cd808b3..5b53637 100644 --- a/src/gui/dialogs/qdialog.cpp +++ b/src/gui/dialogs/qdialog.cpp @@ -76,9 +76,9 @@ QT_BEGIN_NAMESPACE \class QDialog \brief The QDialog class is the base class of dialog windows. - \ingroup dialogs + \ingroup dialog-classes \ingroup abstractwidgets - \mainclass + A dialog window is a top-level window mostly used for short-term tasks and brief communications with the user. QDialogs may be diff --git a/src/gui/dialogs/qerrormessage.cpp b/src/gui/dialogs/qerrormessage.cpp index bc9972c..c83f33c 100644 --- a/src/gui/dialogs/qerrormessage.cpp +++ b/src/gui/dialogs/qerrormessage.cpp @@ -133,8 +133,7 @@ QSize QErrorMessageTextView::sizeHint() const \brief The QErrorMessage class provides an error message display dialog. - \ingroup dialogs - \ingroup misc + \ingroup standard-dialog An error message widget consists of a text label and a checkbox. The checkbox lets the user control whether the same error message will be diff --git a/src/gui/dialogs/qfiledialog.cpp b/src/gui/dialogs/qfiledialog.cpp index f548912..015ee59 100644 --- a/src/gui/dialogs/qfiledialog.cpp +++ b/src/gui/dialogs/qfiledialog.cpp @@ -89,8 +89,8 @@ Q_GUI_EXPORT _qt_filedialog_save_filename_hook qt_filedialog_save_filename_hook /*! \class QFileDialog \brief The QFileDialog class provides a dialog that allow users to select files or directories. - \ingroup dialogs - \mainclass + \ingroup standard-dialogs + The QFileDialog class enables a user to traverse the file system in order to select one or many files or a directory. diff --git a/src/gui/dialogs/qfontdialog.cpp b/src/gui/dialogs/qfontdialog.cpp index 3e57585..512dc65 100644 --- a/src/gui/dialogs/qfontdialog.cpp +++ b/src/gui/dialogs/qfontdialog.cpp @@ -112,9 +112,8 @@ static const Qt::WindowFlags DefaultWindowFlags = /*! \class QFontDialog - \ingroup dialogs - \ingroup text - \mainclass + \ingroup standard-dialogs + \brief The QFontDialog class provides a dialog widget for selecting a font. A font dialog is created through one of the static getFont() diff --git a/src/gui/dialogs/qinputdialog.cpp b/src/gui/dialogs/qinputdialog.cpp index a2b8304..39a6b07 100644 --- a/src/gui/dialogs/qinputdialog.cpp +++ b/src/gui/dialogs/qinputdialog.cpp @@ -425,8 +425,8 @@ void QInputDialogPrivate::_q_currentRowChanged(const QModelIndex &newIndex, \class QInputDialog \brief The QInputDialog class provides a simple convenience dialog to get a single value from the user. - \ingroup dialogs - \mainclass + \ingroup standard-dialogs + The input value can be a string, a number or an item from a list. A label must be set to tell the user what they should enter. diff --git a/src/gui/dialogs/qmessagebox.cpp b/src/gui/dialogs/qmessagebox.cpp index 7a81ea5..e8a4f0d 100644 --- a/src/gui/dialogs/qmessagebox.cpp +++ b/src/gui/dialogs/qmessagebox.cpp @@ -434,8 +434,8 @@ void QMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button) \brief The QMessageBox class provides a modal dialog for informing the user or for asking the user a question and receiving an answer. - \ingroup dialogs - \mainclass + \ingroup standard-dialogs + A message box displays a primary \l{QMessageBox::text}{text} to alert the user to a situation, an \l{QMessageBox::informativeText} diff --git a/src/gui/dialogs/qpagesetupdialog.cpp b/src/gui/dialogs/qpagesetupdialog.cpp index 5ca4935..a91eaea 100644 --- a/src/gui/dialogs/qpagesetupdialog.cpp +++ b/src/gui/dialogs/qpagesetupdialog.cpp @@ -45,6 +45,52 @@ QT_BEGIN_NAMESPACE +/*! + \class QPageSetupDialog + + \brief The QPageSetupDialog class provides a configuration dialog + for the page-related options on a printer. + + \ingroup standard-dialogs + \ingroup printing + + On Windows and Mac OS X the page setup dialog is implemented using + the native page setup dialogs. + + Note that on Windows and Mac OS X custom paper sizes won't be + reflected in the native page setup dialogs. Additionally, custom + page margins set on a QPrinter won't show in the native Mac OS X + page setup dialog. + + \sa QPrinter, QPrintDialog +*/ + + +/*! + \fn QPageSetupDialog::QPageSetupDialog(QPrinter *printer, QWidget *parent) + + Constructs a page setup dialog that configures \a printer with \a + parent as the parent widget. +*/ + +/*! + \since 4.5 + + \fn QPageSetupDialog::QPageSetupDialog(QWidget *parent) + + Constructs a page setup dialog that configures a default-constructed + QPrinter with \a parent as the parent widget. + + \sa printer() +*/ + +/*! + \fn QPrinter *QPageSetupDialog::printer() + + Returns the printer that was passed to the QPageSetupDialog + constructor. +*/ + // hack class QPageSetupDialogPrivate : public QAbstractPageSetupDialogPrivate { diff --git a/doc/src/classes/qprintdialog.qdoc b/src/gui/dialogs/qprintdialog.qdoc index b52edff..b52edff 100644 --- a/doc/src/classes/qprintdialog.qdoc +++ b/src/gui/dialogs/qprintdialog.qdoc diff --git a/src/gui/dialogs/qprintpreviewdialog.cpp b/src/gui/dialogs/qprintpreviewdialog.cpp index ee16fe5..c053b81 100644 --- a/src/gui/dialogs/qprintpreviewdialog.cpp +++ b/src/gui/dialogs/qprintpreviewdialog.cpp @@ -625,6 +625,9 @@ void QPrintPreviewDialogPrivate::_q_zoomFactorChanged() \brief The QPrintPreviewDialog class provides a dialog for previewing and configuring page layouts for printer output. + \ingroup standard-dialogs + \ingroup printing + Using QPrintPreviewDialog in your existing application is straightforward: diff --git a/src/gui/dialogs/qprogressdialog.cpp b/src/gui/dialogs/qprogressdialog.cpp index 1ca1515..d55eadb 100644 --- a/src/gui/dialogs/qprogressdialog.cpp +++ b/src/gui/dialogs/qprogressdialog.cpp @@ -196,8 +196,8 @@ void QProgressDialogPrivate::_q_disconnectOnClose() /*! \class QProgressDialog \brief The QProgressDialog class provides feedback on the progress of a slow operation. - \ingroup dialogs - \mainclass + \ingroup standard-dialogs + A progress dialog is used to give the user an indication of how long an operation is going to take, and to demonstrate that the diff --git a/src/gui/embedded/qdirectpainter_qws.cpp b/src/gui/embedded/qdirectpainter_qws.cpp index bae6ed9..bba862b 100644 --- a/src/gui/embedded/qdirectpainter_qws.cpp +++ b/src/gui/embedded/qdirectpainter_qws.cpp @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE /*! \class QDirectPainter - \ingroup multimedia + \ingroup painting \ingroup qws \brief The QDirectPainter class provides direct access to the diff --git a/src/gui/embedded/qlock.cpp b/src/gui/embedded/qlock.cpp index 0f88832..c32e9b5 100644 --- a/src/gui/embedded/qlock.cpp +++ b/src/gui/embedded/qlock.cpp @@ -128,7 +128,6 @@ public: \brief The QLock class is a wrapper for a System V shared semaphore. \ingroup qws - \ingroup io \internal diff --git a/src/gui/graphicsview/qgraphicsgridlayout.cpp b/src/gui/graphicsview/qgraphicsgridlayout.cpp index ee7048f..0fb284f 100644 --- a/src/gui/graphicsview/qgraphicsgridlayout.cpp +++ b/src/gui/graphicsview/qgraphicsgridlayout.cpp @@ -44,7 +44,7 @@ \brief The QGraphicsGridLayout class provides a grid layout for managing widgets in Graphics View. \since 4.4 - \ingroup multimedia + \ingroup graphicsview-api The most common way to use QGraphicsGridLayout is to construct an object diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp index 37d969b..675fc0d 100644 --- a/src/gui/graphicsview/qgraphicsitem.cpp +++ b/src/gui/graphicsview/qgraphicsitem.cpp @@ -44,7 +44,7 @@ \brief The QGraphicsItem class is the base class for all graphical items in a QGraphicsScene. \since 4.2 - \ingroup multimedia + \ingroup graphicsview-api It provides a light-weight foundation for writing your own custom items. @@ -6900,7 +6900,7 @@ QGraphicsObject::QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent \brief The QAbstractGraphicsShapeItem class provides a common base for all path items. \since 4.2 - \ingroup multimedia + \ingroup graphicsview-api This class does not fully implement an item by itself; in particular, it does not implement boundingRect() and paint(), which are inherited by @@ -7035,7 +7035,6 @@ QPainterPath QAbstractGraphicsShapeItem::opaqueArea() const \brief The QGraphicsPathItem class provides a path item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api To set the item's path, pass a QPainterPath to QGraphicsPathItem's @@ -7238,7 +7237,6 @@ QVariant QGraphicsPathItem::extension(const QVariant &variant) const \brief The QGraphicsRectItem class provides a rectangle item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api To set the item's rectangle, pass a QRectF to QGraphicsRectItem's @@ -7483,7 +7481,6 @@ QVariant QGraphicsRectItem::extension(const QVariant &variant) const \brief The QGraphicsEllipseItem class provides an ellipse item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api QGraphicsEllipseItem respresents an ellipse with a fill and an outline, @@ -7800,7 +7797,6 @@ QVariant QGraphicsEllipseItem::extension(const QVariant &variant) const \brief The QGraphicsPolygonItem class provides a polygon item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api To set the item's polygon, pass a QPolygonF to @@ -8034,7 +8030,6 @@ QVariant QGraphicsPolygonItem::extension(const QVariant &variant) const \brief The QGraphicsLineItem class provides a line item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api To set the item's line, pass a QLineF to QGraphicsLineItem's @@ -8296,7 +8291,6 @@ QVariant QGraphicsLineItem::extension(const QVariant &variant) const \brief The QGraphicsPixmapItem class provides a pixmap item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api To set the item's pixmap, pass a QPixmap to QGraphicsPixmapItem's @@ -8660,7 +8654,6 @@ QVariant QGraphicsPixmapItem::extension(const QVariant &variant) const \brief The QGraphicsTextItem class provides a text item that you can add to a QGraphicsScene to display formatted text. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api If you only need to show plain text in an item, consider using QGraphicsSimpleTextItem @@ -9525,7 +9518,6 @@ void QGraphicsSimpleTextItemPrivate::updateBoundingRect() \brief The QGraphicsSimpleTextItem class provides a simple text path item that you can add to a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api To set the item's text, you can either pass a QString to @@ -9761,7 +9753,6 @@ QVariant QGraphicsSimpleTextItem::extension(const QVariant &variant) const \brief The QGraphicsItemGroup class provides treating a group of items as one. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api A QGraphicsItemGroup is a special type of compound item that diff --git a/src/gui/graphicsview/qgraphicsitemanimation.cpp b/src/gui/graphicsview/qgraphicsitemanimation.cpp index 0d7a3c6..c9b95ad 100644 --- a/src/gui/graphicsview/qgraphicsitemanimation.cpp +++ b/src/gui/graphicsview/qgraphicsitemanimation.cpp @@ -44,7 +44,6 @@ \brief The QGraphicsItemAnimation class provides simple animation support for QGraphicsItem. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api The QGraphicsItemAnimation class animates a QGraphicsItem. You can diff --git a/src/gui/graphicsview/qgraphicslayout.cpp b/src/gui/graphicsview/qgraphicslayout.cpp index 3f039c6..58c174c 100644 --- a/src/gui/graphicsview/qgraphicslayout.cpp +++ b/src/gui/graphicsview/qgraphicslayout.cpp @@ -57,7 +57,6 @@ QT_BEGIN_NAMESPACE \brief The QGraphicsLayout class provides the base class for all layouts in Graphics View. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api QGraphicsLayout is an abstract class that defines a virtual API for diff --git a/src/gui/graphicsview/qgraphicslayoutitem.cpp b/src/gui/graphicsview/qgraphicslayoutitem.cpp index 83e4888..6a25ade 100644 --- a/src/gui/graphicsview/qgraphicslayoutitem.cpp +++ b/src/gui/graphicsview/qgraphicslayoutitem.cpp @@ -264,7 +264,6 @@ void QGraphicsLayoutItemPrivate::setSizeComponent( \brief The QGraphicsLayoutItem class can be inherited to allow your custom items to be managed by layouts. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api QGraphicsLayoutItem is an abstract class that defines a set of virtual diff --git a/src/gui/graphicsview/qgraphicslinearlayout.cpp b/src/gui/graphicsview/qgraphicslinearlayout.cpp index c0ff00e..185780a 100644 --- a/src/gui/graphicsview/qgraphicslinearlayout.cpp +++ b/src/gui/graphicsview/qgraphicslinearlayout.cpp @@ -44,7 +44,6 @@ \brief The QGraphicsLinearLayout class provides a horizontal or vertical layout for managing widgets in Graphics View. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api The default orientation for a linear layout is Qt::Horizontal. You can diff --git a/src/gui/graphicsview/qgraphicsproxywidget.cpp b/src/gui/graphicsview/qgraphicsproxywidget.cpp index 784ee0e..4f626a2 100644 --- a/src/gui/graphicsview/qgraphicsproxywidget.cpp +++ b/src/gui/graphicsview/qgraphicsproxywidget.cpp @@ -67,7 +67,6 @@ QT_BEGIN_NAMESPACE \brief The QGraphicsProxyWidget class provides a proxy layer for embedding a QWidget in a QGraphicsScene. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api QGraphicsProxyWidget embeds QWidget-based widgets, for example, a diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp index 21ea72f..3f13a86 100644 --- a/src/gui/graphicsview/qgraphicsscene.cpp +++ b/src/gui/graphicsview/qgraphicsscene.cpp @@ -44,9 +44,8 @@ \brief The QGraphicsScene class provides a surface for managing a large number of 2D graphical items. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api - \mainclass + The class serves as a container for QGraphicsItems. It is used together with QGraphicsView for visualizing graphical items, such as lines, diff --git a/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp b/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp index 2ebf944..d68183c 100644 --- a/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp +++ b/src/gui/graphicsview/qgraphicsscenebsptreeindex.cpp @@ -44,9 +44,8 @@ \brief The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for discovering items in QGraphicsScene. \since 4.6 - \ingroup multimedia \ingroup graphicsview-api - \mainclass + \internal QGraphicsSceneBspTreeIndex index use a BSP(Binary Space Partitioning) diff --git a/src/gui/graphicsview/qgraphicssceneevent.cpp b/src/gui/graphicsview/qgraphicssceneevent.cpp index b89d6ba..90f1531 100644 --- a/src/gui/graphicsview/qgraphicssceneevent.cpp +++ b/src/gui/graphicsview/qgraphicssceneevent.cpp @@ -44,7 +44,6 @@ \brief The QGraphicsSceneEvent class provides a base class for all graphics view related events. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api When a QGraphicsView receives Qt mouse, keyboard, and drag and @@ -86,7 +85,6 @@ \brief The QGraphicsSceneMouseEvent class provides mouse events in the graphics view framework. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api When a QGraphicsView receives a QMouseEvent, it translates it to @@ -111,7 +109,6 @@ \brief The QGraphicsSceneWheelEvent class provides wheel events in the graphics view framework. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api \l{QWheelEvent}{QWheelEvent}s received by a QGraphicsView are translated @@ -128,7 +125,6 @@ \brief The QGraphicsSceneContextMenuEvent class provides context menu events in the graphics view framework. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api A QContextMenuEvent received by a QGraphicsView is translated @@ -160,7 +156,6 @@ \brief The QGraphicsSceneHoverEvent class provides hover events in the graphics view framework. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api When a QGraphicsView receives a QHoverEvent event, it translates @@ -176,7 +171,6 @@ \brief The QGraphicsSceneHelpEvent class provides events when a tooltip is requested. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api When a QGraphicsView receives a QEvent of type @@ -201,7 +195,6 @@ \brief The QGraphicsSceneDragDropEvent class provides events for drag and drop in the graphics view framework. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api QGraphicsView inherits the drag and drop functionality provided @@ -226,7 +219,6 @@ \brief The QGraphicsSceneResizeEvent class provides events for widget resizing in the graphics view framework. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api A QGraphicsWidget sends itself a QGraphicsSceneResizeEvent immediately @@ -243,7 +235,6 @@ \brief The QGraphicsSceneMoveEvent class provides events for widget moving in the graphics view framework. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api A QGraphicsWidget sends itself a QGraphicsSceneMoveEvent immediately when diff --git a/src/gui/graphicsview/qgraphicssceneindex.cpp b/src/gui/graphicsview/qgraphicssceneindex.cpp index 37a2fc3..feb44bb 100644 --- a/src/gui/graphicsview/qgraphicssceneindex.cpp +++ b/src/gui/graphicsview/qgraphicssceneindex.cpp @@ -43,9 +43,8 @@ \brief The QGraphicsSceneIndex class provides a base class to implement a custom indexing algorithm for discovering items in QGraphicsScene. \since 4.6 - \ingroup multimedia \ingroup graphicsview-api - \mainclass + \internal The QGraphicsSceneIndex class provides a base class to implement diff --git a/src/gui/graphicsview/qgraphicstransform.cpp b/src/gui/graphicsview/qgraphicstransform.cpp index 95f137d..86f5b08 100644 --- a/src/gui/graphicsview/qgraphicstransform.cpp +++ b/src/gui/graphicsview/qgraphicstransform.cpp @@ -44,6 +44,7 @@ \brief The QGraphicsTransform class is an abstract base class for building advanced transformations on QGraphicsItems. \since 4.6 + \ingroup graphicsview-api As an alternative to QGraphicsItem::transform, QGraphicsTransform lets you create and control advanced transformations that can be configured diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp index 91e654c..e9029c3 100644 --- a/src/gui/graphicsview/qgraphicsview.cpp +++ b/src/gui/graphicsview/qgraphicsview.cpp @@ -48,9 +48,8 @@ static const int QGRAPHICSVIEW_PREALLOC_STYLE_OPTIONS = 503; // largest prime < \brief The QGraphicsView class provides a widget for displaying the contents of a QGraphicsScene. \since 4.2 - \ingroup multimedia \ingroup graphicsview-api - \mainclass + QGraphicsView visualizes the contents of a QGraphicsScene in a scrollable viewport. To create a scene with geometrical items, see QGraphicsScene's diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp index 4b41f1f..a833d4b 100644 --- a/src/gui/graphicsview/qgraphicswidget.cpp +++ b/src/gui/graphicsview/qgraphicswidget.cpp @@ -74,7 +74,6 @@ QT_BEGIN_NAMESPACE \brief The QGraphicsWidget class is the base class for all widget items in a QGraphicsScene. \since 4.4 - \ingroup multimedia \ingroup graphicsview-api QGraphicsWidget is an extended base item that provides extra functionality diff --git a/src/gui/image/qbitmap.cpp b/src/gui/image/qbitmap.cpp index a1497bc..bef1738 100644 --- a/src/gui/image/qbitmap.cpp +++ b/src/gui/image/qbitmap.cpp @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE \class QBitmap \brief The QBitmap class provides monochrome (1-bit depth) pixmaps. - \ingroup multimedia + \ingroup painting \ingroup shared The QBitmap class is a monochrome off-screen paint device used diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp index 677cc44..5a88e29 100644 --- a/src/gui/image/qicon.cpp +++ b/src/gui/image/qicon.cpp @@ -445,9 +445,9 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loaderV2, \brief The QIcon class provides scalable icons in different modes and states. - \ingroup multimedia + \ingroup painting \ingroup shared - \mainclass + A QIcon can generate smaller, larger, active, and disabled pixmaps from the set of pixmaps it is given. Such pixmaps are used by Qt diff --git a/src/gui/image/qiconengine.cpp b/src/gui/image/qiconengine.cpp index 8e39607..930834d 100644 --- a/src/gui/image/qiconengine.cpp +++ b/src/gui/image/qiconengine.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE \brief The QIconEngine class provides an abstract base class for QIcon renderers. - \ingroup multimedia + \ingroup painting \bold {Use QIconEngineV2 instead.} @@ -144,7 +144,7 @@ void QIconEngine::addFile(const QString &/*fileName*/, const QSize &/*size*/, QI \brief The QIconEngineV2 class provides an abstract base class for QIcon renderers. - \ingroup multimedia + \ingroup painting \since 4.3 An icon engine renders \l{QIcon}s. With icon engines, you can diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp index 09bc8c8..3faca46 100644 --- a/src/gui/image/qimage.cpp +++ b/src/gui/image/qimage.cpp @@ -333,9 +333,9 @@ bool QImageData::checkForAlphaPixels() const /*! \class QImage - \ingroup multimedia + \ingroup painting \ingroup shared - \mainclass + \reentrant \brief The QImage class provides a hardware-independent image diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp index 06c8f21..b127de7 100644 --- a/src/gui/image/qimagereader.cpp +++ b/src/gui/image/qimagereader.cpp @@ -47,7 +47,7 @@ for reading images from files or other devices. \reentrant - \ingroup multimedia + \ingroup painting \ingroup io The most common way to read images is through QImage and QPixmap's diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp index c734169..1f06493 100644 --- a/src/gui/image/qimagewriter.cpp +++ b/src/gui/image/qimagewriter.cpp @@ -45,7 +45,7 @@ for writing images to files or other devices. \reentrant - \ingroup multimedia + \ingroup painting \ingroup io QImageWriter supports setting format specific options, such as the diff --git a/src/gui/image/qmovie.cpp b/src/gui/image/qmovie.cpp index c341e5e..179e6bb 100644 --- a/src/gui/image/qmovie.cpp +++ b/src/gui/image/qmovie.cpp @@ -45,7 +45,7 @@ \brief The QMovie class is a convenience class for playing movies with QImageReader. - \ingroup multimedia + \ingroup painting First, create a QMovie object by passing either the name of a file or a pointer to a QIODevice containing an animated image format to QMovie's diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp index fbc2a5d..7b02dca 100644 --- a/src/gui/image/qpicture.cpp +++ b/src/gui/image/qpicture.cpp @@ -69,9 +69,9 @@ void qt_format_text(const QFont &fnt, const QRectF &_r, \brief The QPicture class is a paint device that records and replays QPainter commands. - \ingroup multimedia + \ingroup painting \ingroup shared - \mainclass + A picture serializes painter commands to an IO device in a platform-independent format. They are sometimes referred to as meta-files. @@ -1298,7 +1298,7 @@ QList<QByteArray> QPicture::outputFormats() \brief The QPictureIO class contains parameters for loading and saving pictures. - \ingroup multimedia + \ingroup painting \ingroup io QPictureIO contains a QIODevice object that is used for picture data diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 81440b3..0fad1c7 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -1550,9 +1550,9 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) \brief The QPixmap class is an off-screen image representation that can be used as a paint device. - \ingroup multimedia + \ingroup painting \ingroup shared - \mainclass + Qt provides four classes for handling image data: QImage, QPixmap, QBitmap and QPicture. QImage is designed and optimized for I/O, diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp index 762c98f..cef5c49 100644 --- a/src/gui/image/qpixmapcache.cpp +++ b/src/gui/image/qpixmapcache.cpp @@ -51,8 +51,7 @@ QT_BEGIN_NAMESPACE \brief The QPixmapCache class provides an application-wide cache for pixmaps. - \ingroup environment - \ingroup multimedia + \ingroup painting This class is a tool for optimized drawing with QPixmap. You can use it to store temporary pixmaps that are expensive to generate diff --git a/src/gui/image/qpixmapfilter.cpp b/src/gui/image/qpixmapfilter.cpp index cd80b10..968ecd7 100644 --- a/src/gui/image/qpixmapfilter.cpp +++ b/src/gui/image/qpixmapfilter.cpp @@ -65,7 +65,7 @@ public: /*! \class QPixmapFilter \since 4.5 - \ingroup multimedia + \ingroup painting \brief The QPixmapFilter class provides the basic functionality for pixmap filter classes. Pixmap filter can be for example colorize or blur. @@ -172,7 +172,7 @@ QRectF QPixmapFilter::boundingRectFor(const QRectF &rect) const /*! \class QPixmapConvolutionFilter \since 4.5 - \ingroup multimedia + \ingroup painting \brief The QPixmapConvolutionFilter class provides convolution filtering for pixmaps. @@ -517,7 +517,7 @@ static void grayscale(const QImage &image, QImage &dest, const QRect& rect = QRe /*! \class QPixmapColorizeFilter \since 4.5 - \ingroup multimedia + \ingroup painting \brief The QPixmapColorizeFilter class provides colorizing filtering for pixmaps. @@ -641,7 +641,7 @@ public: /*! \class QPixmapDropShadowFilter \since 4.5 - \ingroup multimedia + \ingroup painting \brief The QPixmapDropShadowFilter class is a convenience class for drawing pixmaps with drop shadows. diff --git a/src/gui/inputmethod/qinputcontextfactory.cpp b/src/gui/inputmethod/qinputcontextfactory.cpp index 39b9b03..9010edf 100644 --- a/src/gui/inputmethod/qinputcontextfactory.cpp +++ b/src/gui/inputmethod/qinputcontextfactory.cpp @@ -86,7 +86,6 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, \class QInputContextFactory \brief The QInputContextFactory class creates QInputContext objects. - \ingroup appearance The input context factory creates a QInputContext object for a given key with QInputContextFactory::create(). diff --git a/src/gui/itemviews/qabstractitemdelegate.cpp b/src/gui/itemviews/qabstractitemdelegate.cpp index 22b96fc..447538a 100644 --- a/src/gui/itemviews/qabstractitemdelegate.cpp +++ b/src/gui/itemviews/qabstractitemdelegate.cpp @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE data items from a model. \ingroup model-view - \mainclass + A QAbstractItemDelegate provides the interface and common functionality for delegates in the model/view architecture. Delegates display diff --git a/src/gui/itemviews/qabstractitemview.cpp b/src/gui/itemviews/qabstractitemview.cpp index 7b51483..9eb71b7 100644 --- a/src/gui/itemviews/qabstractitemview.cpp +++ b/src/gui/itemviews/qabstractitemview.cpp @@ -166,7 +166,7 @@ void QAbstractItemViewPrivate::checkMouseMove(const QPersistentModelIndex &index item view classes. \ingroup model-view - \mainclass + QAbstractItemView class is the base class for every standard view that uses a QAbstractItemModel. QAbstractItemView is an abstract diff --git a/src/gui/itemviews/qcolumnview.cpp b/src/gui/itemviews/qcolumnview.cpp index fd8106f..9597656 100644 --- a/src/gui/itemviews/qcolumnview.cpp +++ b/src/gui/itemviews/qcolumnview.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE \brief The QColumnView class provides a model/view implementation of a column view. \ingroup model-view \ingroup advanced - \mainclass + QColumnView displays a model in a number of QListViews, one for each hierarchy in the tree. This is sometimes referred to as a cascading list. diff --git a/src/gui/itemviews/qheaderview.cpp b/src/gui/itemviews/qheaderview.cpp index 96df758..4ab81f5 100644 --- a/src/gui/itemviews/qheaderview.cpp +++ b/src/gui/itemviews/qheaderview.cpp @@ -88,7 +88,7 @@ QDataStream &operator>>(QDataStream &in, QHeaderViewPrivate::SectionSpan &span) item views. \ingroup model-view - \mainclass + A QHeaderView displays the headers used in item views such as the QTableView and QTreeView classes. It takes the place of Qt3's \c QHeader @@ -1195,7 +1195,8 @@ QHeaderView::ResizeMode QHeaderView::resizeMode(int logicalIndex) const { Q_D(const QHeaderView); int visual = visualIndex(logicalIndex); - Q_ASSERT(visual != -1); + if (visual == -1) + return Fixed; //the default value return d->headerSectionResizeMode(visual); } diff --git a/src/gui/itemviews/qitemdelegate.cpp b/src/gui/itemviews/qitemdelegate.cpp index 1e36f72..56af0f4 100644 --- a/src/gui/itemviews/qitemdelegate.cpp +++ b/src/gui/itemviews/qitemdelegate.cpp @@ -185,7 +185,7 @@ QSizeF QItemDelegatePrivate::doTextLayout(int lineWidth) const data items from a model. \ingroup model-view - \mainclass + QItemDelegate can be used to provide custom display features and editor widgets for item views based on QAbstractItemView subclasses. Using a diff --git a/src/gui/itemviews/qitemselectionmodel.cpp b/src/gui/itemviews/qitemselectionmodel.cpp index 98810a0..8414460 100644 --- a/src/gui/itemviews/qitemselectionmodel.cpp +++ b/src/gui/itemviews/qitemselectionmodel.cpp @@ -573,6 +573,7 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare int start, int end) { Q_Q(QItemSelectionModel); + finalize(); // update current index if (currentIndex.isValid() && parent == currentIndex.parent() @@ -591,8 +592,8 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare } QItemSelection deselected; - QItemSelection::iterator it = currentSelection.begin(); - while (it != currentSelection.end()) { + QItemSelection::iterator it = ranges.begin(); + while (it != ranges.end()) { if (it->topLeft().parent() != parent) { // Check parents until reaching root or contained in range QModelIndex itParent = it->topLeft().parent(); while (itParent.isValid() && itParent.parent() != parent) @@ -600,24 +601,22 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare if (parent.isValid() && start <= itParent.row() && itParent.row() <= end) { deselected.append(*it); - it = currentSelection.erase(it); + it = ranges.erase(it); } else { ++it; } } else if (start <= it->bottom() && it->bottom() <= end // Full inclusion && start <= it->top() && it->top() <= end) { deselected.append(*it); - it = currentSelection.erase(it); + it = ranges.erase(it); } else if (start <= it->top() && it->top() <= end) { // Top intersection deselected.append(QItemSelectionRange(it->topLeft(), model->index(end, it->left(), it->parent()))); - it = currentSelection.insert(it, QItemSelectionRange(model->index(end + 1, it->left(), it->parent()), - it->bottomRight())); - it = currentSelection.erase(++it); + *it = QItemSelectionRange(model->index(end + 1, it->left(), it->parent()), it->bottomRight()); + ++it; } else if (start <= it->bottom() && it->bottom() <= end) { // Bottom intersection deselected.append(QItemSelectionRange(model->index(start, it->right(), it->parent()), it->bottomRight())); - it = currentSelection.insert(it, QItemSelectionRange(it->topLeft(), - model->index(start - 1, it->right(), it->parent()))); - it = currentSelection.erase(++it); + *it = QItemSelectionRange(it->topLeft(), model->index(start - 1, it->right(), it->parent())); + ++it; } else { if (it->top() < start && end < it->bottom()) // Middle intersection (do nothing) deselected.append(QItemSelectionRange(model->index(start, it->right(), it->parent()), @@ -626,7 +625,8 @@ void QItemSelectionModelPrivate::_q_rowsAboutToBeRemoved(const QModelIndex &pare } } - emit q->selectionChanged(QItemSelection(), deselected); + if (!deselected.isEmpty()) + emit q->selectionChanged(QItemSelection(), deselected); } /*! diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp index b055d32..ea38f5f 100644 --- a/src/gui/itemviews/qlistview.cpp +++ b/src/gui/itemviews/qlistview.cpp @@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE \ingroup model-view \ingroup advanced - \mainclass + A QListView presents items stored in a model, either as a simple non-hierarchical list, or as a collection of icons. This class is used diff --git a/src/gui/itemviews/qlistwidget.cpp b/src/gui/itemviews/qlistwidget.cpp index a1f8288..232b4d2 100644 --- a/src/gui/itemviews/qlistwidget.cpp +++ b/src/gui/itemviews/qlistwidget.cpp @@ -1125,7 +1125,7 @@ void QListWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, \brief The QListWidget class provides an item-based list widget. \ingroup model-view - \mainclass + QListWidget is a convenience class that provides a list view similar to the one supplied by QListView, but with a classic item-based interface for diff --git a/src/gui/itemviews/qstringlistmodel.cpp b/src/gui/itemviews/qstringlistmodel.cpp index d57de1a..9462dfe 100644 --- a/src/gui/itemviews/qstringlistmodel.cpp +++ b/src/gui/itemviews/qstringlistmodel.cpp @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE \brief The QStringListModel class provides a model that supplies strings to views. \ingroup model-view - \mainclass + QStringListModel is an editable model that can be used for simple cases where you need to display a number of strings in a view diff --git a/src/gui/itemviews/qstyleditemdelegate.cpp b/src/gui/itemviews/qstyleditemdelegate.cpp index a8ea218..ae7c86d 100644 --- a/src/gui/itemviews/qstyleditemdelegate.cpp +++ b/src/gui/itemviews/qstyleditemdelegate.cpp @@ -112,7 +112,7 @@ public: data items from a model. \ingroup model-view - \mainclass + \since 4.4 When displaying data from models in Qt item views, e.g., a diff --git a/src/gui/itemviews/qtableview.cpp b/src/gui/itemviews/qtableview.cpp index 61c2b60..a9db9f5 100644 --- a/src/gui/itemviews/qtableview.cpp +++ b/src/gui/itemviews/qtableview.cpp @@ -508,7 +508,7 @@ void QTableViewPrivate::drawCell(QPainter *painter, const QStyleOptionViewItemV4 \ingroup model-view \ingroup advanced - \mainclass + A QTableView implements a table view that displays items from a model. This class is used to provide standard tables that were diff --git a/src/gui/itemviews/qtablewidget.cpp b/src/gui/itemviews/qtablewidget.cpp index de8ebde..b04aea2 100644 --- a/src/gui/itemviews/qtablewidget.cpp +++ b/src/gui/itemviews/qtablewidget.cpp @@ -1486,7 +1486,7 @@ QTableWidgetItem &QTableWidgetItem::operator=(const QTableWidgetItem &other) \brief The QTableWidget class provides an item-based table view with a default model. \ingroup model-view - \mainclass + Table widgets provide standard table display facilities for applications. The items in a QTableWidget are provided by QTableWidgetItem. diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp index 539a642..7dad192 100644 --- a/src/gui/itemviews/qtreeview.cpp +++ b/src/gui/itemviews/qtreeview.cpp @@ -66,7 +66,7 @@ QT_BEGIN_NAMESPACE \ingroup model-view \ingroup advanced - \mainclass + A QTreeView implements a tree representation of items from a model. This class is used to provide standard hierarchical lists that diff --git a/src/gui/itemviews/qtreewidget.cpp b/src/gui/itemviews/qtreewidget.cpp index f48e393..0bc2bee 100644 --- a/src/gui/itemviews/qtreewidget.cpp +++ b/src/gui/itemviews/qtreewidget.cpp @@ -75,7 +75,7 @@ public: \brief The QTreeModel class manages the items stored in a tree view. \ingroup model-view - \mainclass + */ /*! @@ -2329,7 +2329,7 @@ void QTreeWidgetPrivate::_q_dataChanged(const QModelIndex &topLeft, tree model. \ingroup model-view - \mainclass + The QTreeWidget class is a convenience class that provides a standard tree widget with a classic item-based interface similar to that used by diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp index 7c343fc..4b44452 100644 --- a/src/gui/kernel/qaction.cpp +++ b/src/gui/kernel/qaction.cpp @@ -182,8 +182,8 @@ void QActionPrivate::setShortcutEnabled(bool enable, QShortcutMap &map) \brief The QAction class provides an abstract user interface action that can be inserted into widgets. - \ingroup application - \mainclass + \ingroup mainwindow-classes + \omit * parent and widget are different diff --git a/src/gui/kernel/qactiongroup.cpp b/src/gui/kernel/qactiongroup.cpp index 5d429e4..9a12dea 100644 --- a/src/gui/kernel/qactiongroup.cpp +++ b/src/gui/kernel/qactiongroup.cpp @@ -100,7 +100,7 @@ void QActionGroupPrivate::_q_actionHovered() \class QActionGroup \brief The QActionGroup class groups actions together. - \ingroup application + \ingroup mainwindow-classes In some situations it is useful to group actions together. For example, if you have a \gui{Left Align} action, a \gui{Right diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index df85809..574d845 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -174,9 +174,6 @@ QApplicationPrivate::~QApplicationPrivate() \brief The QApplication class manages the GUI application's control flow and main settings. - \ingroup application - \mainclass - QApplication contains the main event loop, where all events from the window system and other sources are processed and dispatched. It also handles the application's initialization, finalization, and provides session @@ -4107,9 +4104,6 @@ bool QApplicationPrivate::notify_helper(QObject *receiver, QEvent * e) \class QSessionManager \brief The QSessionManager class provides access to the session manager. - \ingroup application - \ingroup environment - A session manager in a desktop environment (in which Qt GUI applications live) keeps track of a session, which is a group of running applications, each of which has a particular state. The state of an application contains diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp index db349f0..d942519 100644 --- a/src/gui/kernel/qapplication_x11.cpp +++ b/src/gui/kernel/qapplication_x11.cpp @@ -1851,10 +1851,20 @@ void qt_init(QApplicationPrivate *priv, int, QX11InfoData *screen = X11->screens + s; screen->ref = 1; // ensures it doesn't get deleted screen->screen = s; - screen->dpiX = (DisplayWidth(X11->display, s) * 254 + DisplayWidthMM(X11->display, s)*5) - / (DisplayWidthMM(X11->display, s)*10); - screen->dpiY = (DisplayHeight(X11->display, s) * 254 + DisplayHeightMM(X11->display, s)*5) - / (DisplayHeightMM(X11->display, s)*10); + + int widthMM = DisplayWidthMM(X11->display, s); + if (widthMM != 0) { + screen->dpiX = (DisplayWidth(X11->display, s) * 254 + widthMM * 5) / (widthMM * 10); + } else { + screen->dpiX = 72; + } + + int heightMM = DisplayHeightMM(X11->display, s); + if (heightMM != 0) { + screen->dpiY = (DisplayHeight(X11->display, s) * 254 + heightMM * 5) / (heightMM * 10); + } else { + screen->dpiY = 72; + } X11->argbVisuals[s] = 0; X11->argbColormaps[s] = 0; diff --git a/src/gui/kernel/qboxlayout.cpp b/src/gui/kernel/qboxlayout.cpp index 5dd77e8..ce86c36 100644 --- a/src/gui/kernel/qboxlayout.cpp +++ b/src/gui/kernel/qboxlayout.cpp @@ -452,7 +452,6 @@ void QBoxLayoutPrivate::calcHfw(int w) vertically. \ingroup geomanagement - \ingroup appearance QBoxLayout takes the space it gets (from its parent layout or from the parentWidget()), divides it up into a row of boxes, and makes @@ -1271,8 +1270,6 @@ QBoxLayout::Direction QBoxLayout::direction() const \brief The QHBoxLayout class lines up widgets horizontally. \ingroup geomanagement - \ingroup appearance - \mainclass This class is used to construct horizontal box layout objects. See QBoxLayout for details. @@ -1389,8 +1386,6 @@ QHBoxLayout::~QHBoxLayout() \brief The QVBoxLayout class lines up widgets vertically. \ingroup geomanagement - \ingroup appearance - \mainclass This class is used to construct vertical box layout objects. See QBoxLayout for details. diff --git a/src/gui/kernel/qclipboard.cpp b/src/gui/kernel/qclipboard.cpp index 2779717..fce4f65 100644 --- a/src/gui/kernel/qclipboard.cpp +++ b/src/gui/kernel/qclipboard.cpp @@ -58,10 +58,6 @@ QT_BEGIN_NAMESPACE \class QClipboard \brief The QClipboard class provides access to the window system clipboard. - \ingroup io - \ingroup environment - \mainclass - The clipboard offers a simple mechanism to copy and paste data between applications. diff --git a/src/gui/kernel/qcocoaview_mac.mm b/src/gui/kernel/qcocoaview_mac.mm index 45b0ada..7ac0d89 100644 --- a/src/gui/kernel/qcocoaview_mac.mm +++ b/src/gui/kernel/qcocoaview_mac.mm @@ -872,7 +872,7 @@ extern "C" { NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qNGEvent.percentage = [event magnification]; - qApp->sendEvent(qwidget, &qNGEvent); + qt_sendSpontaneousEvent(qwidget, &qNGEvent); } - (void)rotateWithEvent:(NSEvent *)event; @@ -885,7 +885,7 @@ extern "C" { NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qNGEvent.percentage = [event rotation]; - qApp->sendEvent(qwidget, &qNGEvent); + qt_sendSpontaneousEvent(qwidget, &qNGEvent); } - (void)swipeWithEvent:(NSEvent *)event; @@ -898,7 +898,7 @@ extern "C" { NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); qNGEvent.direction = QSize(-[event deltaX], -[event deltaY]); - qApp->sendEvent(qwidget, &qNGEvent); + qt_sendSpontaneousEvent(qwidget, &qNGEvent); } - (void)beginGestureWithEvent:(NSEvent *)event; @@ -910,7 +910,7 @@ extern "C" { qNGEvent.gestureType = QNativeGestureEvent::GestureBegin; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); - qApp->sendEvent(qwidget, &qNGEvent); + qt_sendSpontaneousEvent(qwidget, &qNGEvent); } - (void)endGestureWithEvent:(NSEvent *)event; @@ -922,7 +922,7 @@ extern "C" { qNGEvent.gestureType = QNativeGestureEvent::GestureEnd; NSPoint p = [[event window] convertBaseToScreen:[event locationInWindow]]; qNGEvent.position = flipPoint(p).toPoint(); - qApp->sendEvent(qwidget, &qNGEvent); + qt_sendSpontaneousEvent(qwidget, &qNGEvent); } #endif // MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 diff --git a/src/gui/kernel/qcursor.cpp b/src/gui/kernel/qcursor.cpp index b83843b..16749b7 100644 --- a/src/gui/kernel/qcursor.cpp +++ b/src/gui/kernel/qcursor.cpp @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE \ingroup appearance \ingroup shared - \mainclass + This class is mainly used to create mouse cursors that are associated with particular widgets and to get and set the position diff --git a/doc/src/classes/qdesktopwidget.qdoc b/src/gui/kernel/qdesktopwidget.qdoc index 4717e3a..8e6673a 100644 --- a/doc/src/classes/qdesktopwidget.qdoc +++ b/src/gui/kernel/qdesktopwidget.qdoc @@ -45,8 +45,6 @@ \ingroup advanced \ingroup desktop - \ingroup environment - \mainclass QApplication::desktop() function should be used to get an instance of the QDesktopWidget. diff --git a/src/gui/kernel/qeventdispatcher_mac.mm b/src/gui/kernel/qeventdispatcher_mac.mm index efe6375..113362a 100644 --- a/src/gui/kernel/qeventdispatcher_mac.mm +++ b/src/gui/kernel/qeventdispatcher_mac.mm @@ -500,7 +500,7 @@ static bool IsMouseOrKeyEvent( NSEvent* event ) static inline void qt_mac_waitForMoreEvents() { #ifndef QT_MAC_USE_COCOA - while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0e20, true) == kCFRunLoopRunTimedOut); + while (CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0e20, true) == kCFRunLoopRunTimedOut) ; #else // If no event exist in the cocoa event que, wait // (and free up cpu time) until at least one event occur. diff --git a/src/gui/kernel/qformlayout.cpp b/src/gui/kernel/qformlayout.cpp index 4e632de..b3ecc35 100644 --- a/src/gui/kernel/qformlayout.cpp +++ b/src/gui/kernel/qformlayout.cpp @@ -1006,10 +1006,8 @@ QStyle* QFormLayoutPrivate::getStyle() const \since 4.4 \brief The QFormLayout class manages forms of input widgets and their associated labels. - \ingroup appearance \ingroup geomanagement - \mainclass QFormLayout is a convenience layout class that lays out its children in a two-column form. The left column consists of labels diff --git a/src/gui/kernel/qgridlayout.cpp b/src/gui/kernel/qgridlayout.cpp index 6624b77..1f25c63 100644 --- a/src/gui/kernel/qgridlayout.cpp +++ b/src/gui/kernel/qgridlayout.cpp @@ -980,8 +980,7 @@ QRect QGridLayoutPrivate::cellRect(int row, int col) const \brief The QGridLayout class lays out widgets in a grid. \ingroup geomanagement - \ingroup appearance - \mainclass + QGridLayout takes the space made available to it (by its parent layout or by the parentWidget()), divides it up into rows and diff --git a/src/gui/kernel/qkeymapper.cpp b/src/gui/kernel/qkeymapper.cpp index 0730ef6..7143358 100644 --- a/src/gui/kernel/qkeymapper.cpp +++ b/src/gui/kernel/qkeymapper.cpp @@ -51,7 +51,6 @@ QT_BEGIN_NAMESPACE /*! \class QKeyMapper \since 4.2 - \ingroup application \internal \sa QObject diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp index 99e2632..50fe849 100644 --- a/src/gui/kernel/qkeysequence.cpp +++ b/src/gui/kernel/qkeysequence.cpp @@ -152,9 +152,8 @@ void Q_AUTOTEST_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mn \brief The QKeySequence class encapsulates a key sequence as used by shortcuts. - \ingroup misc \ingroup shared - \mainclass + In its most common form, a key sequence describes a combination of keys that must be used together to perform some action. Key sequences diff --git a/src/gui/kernel/qlayout.cpp b/src/gui/kernel/qlayout.cpp index e3cde49..07c017d 100644 --- a/src/gui/kernel/qlayout.cpp +++ b/src/gui/kernel/qlayout.cpp @@ -75,7 +75,6 @@ static int menuBarHeightForWidth(QWidget *menubar, int w) \class QLayout \brief The QLayout class is the base class of geometry managers. - \ingroup appearance \ingroup geomanagement This is an abstract base class inherited by the concrete classes diff --git a/src/gui/kernel/qlayoutitem.cpp b/src/gui/kernel/qlayoutitem.cpp index 47fe5e6..54f37bf 100644 --- a/src/gui/kernel/qlayoutitem.cpp +++ b/src/gui/kernel/qlayoutitem.cpp @@ -87,7 +87,6 @@ QSizePolicy::operator QVariant() const \brief The QLayoutItem class provides an abstract item that a QLayout manipulates. - \ingroup appearance \ingroup geomanagement This is used by custom layouts. @@ -116,7 +115,6 @@ QSizePolicy::operator QVariant() const /*! \class QSpacerItem - \ingroup appearance \ingroup geomanagement \brief The QSpacerItem class provides blank space in a layout. @@ -144,7 +142,6 @@ QSizePolicy::operator QVariant() const /*! \class QWidgetItem - \ingroup appearance \ingroup geomanagement \brief The QWidgetItem class is a layout item that represents a widget. diff --git a/src/gui/kernel/qmime_mac.cpp b/src/gui/kernel/qmime_mac.cpp index f4d4707..9e8de67 100644 --- a/src/gui/kernel/qmime_mac.cpp +++ b/src/gui/kernel/qmime_mac.cpp @@ -126,9 +126,8 @@ CFStringRef qt_mac_mime_typeUTI = CFSTR("com.pasteboard.trolltech.marker"); \l{http://developer.apple.com/macosx/uniformtypeidentifiers.html}{Uniform Type Identifier (UTI)} format. \since 4.2 - \ingroup io + \ingroup draganddrop - \ingroup misc Qt's drag and drop and clipboard facilities use the MIME standard. On X11, this maps trivially to the Xdnd protocol. On diff --git a/src/gui/kernel/qmime_win.cpp b/src/gui/kernel/qmime_win.cpp index 63f37af..7f82f53 100644 --- a/src/gui/kernel/qmime_win.cpp +++ b/src/gui/kernel/qmime_win.cpp @@ -219,9 +219,7 @@ Q_GLOBAL_STATIC(QWindowsMimeList, theMimeList); /*! \class QWindowsMime \brief The QWindowsMime class maps open-standard MIME to Window Clipboard formats. - \ingroup io \ingroup draganddrop - \ingroup misc Qt's drag-and-drop and clipboard facilities use the MIME standard. On X11, this maps trivially to the Xdnd protocol, but on Windows diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index 24e735c..c5ae66b 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -399,8 +399,8 @@ void QPalette::setColorGroup(ColorGroup cg, const QColorGroup &g) \ingroup appearance \ingroup shared - \ingroup multimedia - \mainclass + \ingroup painting + A palette consists of three color groups: \e Active, \e Disabled, and \e Inactive. All widgets in Qt contain a palette and diff --git a/src/gui/kernel/qshortcut.cpp b/src/gui/kernel/qshortcut.cpp index 194f648..1c5917c 100644 --- a/src/gui/kernel/qshortcut.cpp +++ b/src/gui/kernel/qshortcut.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE \brief The QShortcut class is used to create keyboard shortcuts. \ingroup events - \mainclass + The QShortcut class provides a way of connecting keyboard shortcuts to Qt's \l{signals and slots} mechanism, so that diff --git a/doc/src/classes/qsizepolicy.qdoc b/src/gui/kernel/qsizepolicy.qdoc index f7366c5..200deb5 100644 --- a/doc/src/classes/qsizepolicy.qdoc +++ b/src/gui/kernel/qsizepolicy.qdoc @@ -44,7 +44,6 @@ \brief The QSizePolicy class is a layout attribute describing horizontal and vertical resizing policy. - \ingroup appearance \ingroup geomanagement The size policy of a widget is an expression of its willingness to diff --git a/src/gui/kernel/qsound.cpp b/src/gui/kernel/qsound.cpp index 3fb750e..e5c263b 100644 --- a/src/gui/kernel/qsound.cpp +++ b/src/gui/kernel/qsound.cpp @@ -106,7 +106,7 @@ public: \brief The QSound class provides access to the platform audio facilities. \ingroup multimedia - \mainclass + Qt provides the most commonly required audio operation in GUI applications: asynchronously playing a sound file. This is most diff --git a/src/gui/kernel/qstackedlayout.cpp b/src/gui/kernel/qstackedlayout.cpp index 4025b73..c7e25b0 100644 --- a/src/gui/kernel/qstackedlayout.cpp +++ b/src/gui/kernel/qstackedlayout.cpp @@ -65,8 +65,6 @@ public: only one widget is visible at a time. \ingroup geomanagement - \ingroup appearance - \mainclass QStackedLayout can be used to create a user interface similar to the one provided by QTabWidget. There is also a convenience diff --git a/src/gui/kernel/qtooltip.cpp b/src/gui/kernel/qtooltip.cpp index 3ea9cb4..8193c55 100644 --- a/src/gui/kernel/qtooltip.cpp +++ b/src/gui/kernel/qtooltip.cpp @@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE widget. \ingroup helpsystem - \mainclass + The tip is a short piece of text reminding the user of the widget's function. It is drawn immediately below the given diff --git a/src/gui/kernel/qwhatsthis.cpp b/src/gui/kernel/qwhatsthis.cpp index 5a37801..6d0bc33 100644 --- a/src/gui/kernel/qwhatsthis.cpp +++ b/src/gui/kernel/qwhatsthis.cpp @@ -78,7 +78,7 @@ QT_BEGIN_NAMESPACE widget, i.e. answering the question "What's This?". \ingroup helpsystem - \mainclass + "What's This?" help is part of an application's online help system, and provides users with information about the diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index c00f953..515eed9 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -454,7 +454,7 @@ void QWidget::setAutoFillBackground(bool enabled) \brief The QWidget class is the base class of all user interface objects. \ingroup basicwidgets - \mainclass + The widget is the atom of the user interface: it receives mouse, keyboard and other events from the window system, and paints a representation of @@ -2692,7 +2692,7 @@ void QWidget::showFullScreen() Calling this function only affects \l{isWindow()}{windows}. On X11, this function may not work properly with certain window - managers. See \l{geometry.html}{Window Geometry} for an explanation. + managers. See the \l{Window Geometry} documentation for an explanation. \sa setWindowState(), showNormal(), showMinimized(), show(), hide(), isVisible() */ @@ -3041,8 +3041,8 @@ void QWidget::setDisabled(bool disable) \brief geometry of the widget relative to its parent including any window frame - See the \link geometry.html Window Geometry documentation\endlink - for an overview of geometry issues with windows. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. By default, this property contains a value that depends on the user's platform and screen geometry. @@ -3068,8 +3068,8 @@ QRect QWidget::frameGeometry() const \brief the x coordinate of the widget relative to its parent including any window frame - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. By default, this property has a value of 0. @@ -3088,8 +3088,8 @@ int QWidget::x() const \brief the y coordinate of the widget relative to its parent and including any window frame - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. By default, this property has a value of 0. @@ -3121,8 +3121,8 @@ int QWidget::y() const \warning Calling move() or setGeometry() inside moveEvent() can lead to infinite recursion. - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. \sa frameGeometry, size x(), y() */ @@ -3152,8 +3152,8 @@ QPoint QWidget::pos() const \warning Calling setGeometry() inside resizeEvent() or moveEvent() can lead to infinite recursion. - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. By default, this property contains a value that depends on the user's platform and screen geometry. @@ -3202,8 +3202,8 @@ QPoint QWidget::pos() const \property QWidget::width \brief the width of the widget excluding any window frame - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. \note Do not use this function to find the width of a screen on a \l{QDesktopWidget}{multiple screen desktop}. Read @@ -3219,8 +3219,8 @@ QPoint QWidget::pos() const \property QWidget::height \brief the height of the widget excluding any window frame - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. \note Do not use this function to find the height of a screen on a \l {QDesktopWidget} {multiple screen desktop}. Read @@ -3239,8 +3239,8 @@ QPoint QWidget::pos() const The rect property equals QRect(0, 0, width(), height()). - See the \link geometry.html Window Geometry documentation\endlink - for an overview of window geometry. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. By default, this property contains a value that depends on the user's platform and screen geometry. @@ -6228,8 +6228,8 @@ void QWidget::setGeometry(const QRect &r) \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 11 - See the \link geometry.html Window Geometry documentation\endlink - for an overview of geometry issues with windows. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. Use QMainWindow::saveState() to save the geometry and the state of toolbars and dock widgets. @@ -6270,8 +6270,8 @@ QByteArray QWidget::saveGeometry() const \snippet doc/src/snippets/code/src_gui_kernel_qwidget.cpp 12 - See the \link geometry.html Window Geometry documentation\endlink - for an overview of geometry issues with windows. + See the \l{Window Geometry} documentation for an overview of geometry + issues with windows. Use QMainWindow::restoreState() to restore the geometry and the state of toolbars and dock widgets. diff --git a/src/gui/kernel/qwidget_mac.mm b/src/gui/kernel/qwidget_mac.mm index 5bf140c..999faeb 100644 --- a/src/gui/kernel/qwidget_mac.mm +++ b/src/gui/kernel/qwidget_mac.mm @@ -107,6 +107,7 @@ #include <private/qcocoapanel_mac_p.h> #include "qwidget_p.h" +#include "qevent_p.h" #include "qdnd_p.h" #include <QtGui/qgraphicsproxywidget.h> @@ -729,6 +730,13 @@ static EventTypeSpec window_events[] = { { kEventClassWindow, kEventWindowGetRegion }, { kEventClassWindow, kEventWindowGetClickModality }, { kEventClassWindow, kEventWindowTransitionCompleted }, +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + { kEventClassGesture, kEventGestureStarted }, + { kEventClassGesture, kEventGestureEnded }, + { kEventClassGesture, kEventGestureMagnify }, + { kEventClassGesture, kEventGestureSwipe }, + { kEventClassGesture, kEventGestureRotate }, +#endif { kEventClassMouse, kEventMouseDown } }; static EventHandlerUPP mac_win_eventUPP = 0; @@ -1013,6 +1021,69 @@ OSStatus QWidgetPrivate::qt_window_event(EventHandlerCallRef er, EventRef event, return SendEventToApplication(event); handled_event = false; break; } + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + case kEventClassGesture: { + // First, find the widget that was under + // the mouse when the gesture happened: + HIPoint screenLocation; + if (GetEventParameter(event, kEventParamMouseLocation, typeHIPoint, 0, + sizeof(screenLocation), 0, &screenLocation) != noErr) { + handled_event = false; + break; + } + QWidget *widget = QApplication::widgetAt(screenLocation.x, screenLocation.y); + if (!widget) { + handled_event = false; + break; + } + + QNativeGestureEvent qNGEvent; + qNGEvent.position = QPoint(screenLocation.x, screenLocation.y); + + switch (ekind) { + case kEventGestureStarted: + qNGEvent.gestureType = QNativeGestureEvent::GestureBegin; + break; + case kEventGestureEnded: + qNGEvent.gestureType = QNativeGestureEvent::GestureEnd; + break; + case kEventGestureRotate: { + CGFloat amount; + if (GetEventParameter(event, kEventParamRotationAmount, typeCGFloat, 0, + sizeof(amount), 0, &amount) != noErr) { + handled_event = false; + break; + } + qNGEvent.gestureType = QNativeGestureEvent::Zoom; + qNGEvent.percentage = float(amount); + break; } + case kEventGestureSwipe: { + HIPoint swipeDirection; + if (GetEventParameter(event, kEventParamSwipeDirection, typeHIPoint, 0, + sizeof(swipeDirection), 0, &swipeDirection) != noErr) { + handled_event = false; + break; + } + qNGEvent.gestureType = QNativeGestureEvent::Swipe; + qNGEvent.direction = QSize(-swipeDirection.x, -swipeDirection.y); + break; } + case kEventGestureMagnify: { + CGFloat amount; + if (GetEventParameter(event, kEventParamMagnificationAmount, typeCGFloat, 0, + sizeof(amount), 0, &amount) != noErr) { + handled_event = false; + break; + } + qNGEvent.gestureType = QNativeGestureEvent::Zoom; + qNGEvent.percentage = float(amount); + break; } + } + + QApplication::sendSpontaneousEvent(widget, &qNGEvent); + break; } +#endif // gestures + default: handled_event = false; } diff --git a/src/gui/kernel/qwidgetaction.cpp b/src/gui/kernel/qwidgetaction.cpp index 911d332..a397e39 100644 --- a/src/gui/kernel/qwidgetaction.cpp +++ b/src/gui/kernel/qwidgetaction.cpp @@ -54,6 +54,8 @@ QT_BEGIN_NAMESPACE for inserting custom widgets into action based containers, such as toolbars. + \ingroup mainwindow-classes + Most actions in an application are represented as items in menus or buttons in toolbars. However sometimes more complex widgets are necessary. For example a zoom action in a word processor may be @@ -100,9 +102,6 @@ QT_BEGIN_NAMESPACE DirectConnection. \endlist - \ingroup application - \mainclass - \sa QAction, QActionGroup, QWidget */ diff --git a/src/gui/math3d/qgenericmatrix.cpp b/src/gui/math3d/qgenericmatrix.cpp index 271571c..1c924c7 100644 --- a/src/gui/math3d/qgenericmatrix.cpp +++ b/src/gui/math3d/qgenericmatrix.cpp @@ -47,6 +47,8 @@ QT_BEGIN_NAMESPACE \class QGenericMatrix \brief The QGenericMatrix class is a template class that represents a NxM transformation matrix with N columns and M rows. \since 4.6 + \ingroup painting + \ingroup painting-3D The QGenericMatrix template has four parameters: diff --git a/src/gui/math3d/qmatrix4x4.cpp b/src/gui/math3d/qmatrix4x4.cpp index a67a832..8fc439b 100644 --- a/src/gui/math3d/qmatrix4x4.cpp +++ b/src/gui/math3d/qmatrix4x4.cpp @@ -52,6 +52,7 @@ QT_BEGIN_NAMESPACE \class QMatrix4x4 \brief The QMatrix4x4 class represents a 4x4 transformation matrix in 3D space. \since 4.6 + \ingroup painting-3D \sa QVector3D, QGenericMatrix */ @@ -1009,11 +1010,24 @@ QMatrix4x4& QMatrix4x4::rotate(qreal angle, const QVector3D& vector) */ QMatrix4x4& QMatrix4x4::rotate(qreal angle, qreal x, qreal y, qreal z) { + if (angle == 0.0f) + return *this; QMatrix4x4 m(1); // The "1" says to not load the identity. - qreal a = angle * M_PI / 180.0f; - qreal c = qCos(a); - qreal s = qSin(a); - qreal ic; + qreal c, s, ic; + if (angle == 90.0f || angle == -270.0f) { + s = 1.0f; + c = 0.0f; + } else if (angle == -90.0f || angle == 270.0f) { + s = -1.0f; + c = 0.0f; + } else if (angle == 180.0f || angle == -180.0f) { + s = 0.0f; + c = -1.0f; + } else { + qreal a = angle * M_PI / 180.0f; + c = qCos(a); + s = qSin(a); + } bool quick = false; if (x == 0.0f) { if (y == 0.0f) { diff --git a/src/gui/math3d/qquaternion.cpp b/src/gui/math3d/qquaternion.cpp index 9e56966..b2c598f 100644 --- a/src/gui/math3d/qquaternion.cpp +++ b/src/gui/math3d/qquaternion.cpp @@ -51,6 +51,7 @@ QT_BEGIN_NAMESPACE \class QQuaternion \brief The QQuaternion class represents a quaternion consisting of a vector and scalar. \since 4.6 + \ingroup painting-3D Quaternions are used to represent rotations in 3D space, and consist of a 3D rotation axis specified by the x, y, and z diff --git a/src/gui/math3d/qvector2d.cpp b/src/gui/math3d/qvector2d.cpp index f7fef6c..1662020 100644 --- a/src/gui/math3d/qvector2d.cpp +++ b/src/gui/math3d/qvector2d.cpp @@ -53,6 +53,8 @@ QT_BEGIN_NAMESPACE \class QVector2D \brief The QVector2D class represents a vector or vertex in 2D space. \since 4.6 + \ingroup painting + \ingroup painting-3D The QVector2D class can also be used to represent vertices in 2D space. We therefore do not need to provide a separate vertex class. diff --git a/src/gui/math3d/qvector3d.cpp b/src/gui/math3d/qvector3d.cpp index 2915d3a..0e3f4e1 100644 --- a/src/gui/math3d/qvector3d.cpp +++ b/src/gui/math3d/qvector3d.cpp @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE \class QVector3D \brief The QVector3D class represents a vector or vertex in 3D space. \since 4.6 + \ingroup painting-3D Vectors are one of the main building blocks of 3D representation and drawing. They consist of three coordinates, traditionally called diff --git a/src/gui/math3d/qvector4d.cpp b/src/gui/math3d/qvector4d.cpp index dd64103..a2efff7 100644 --- a/src/gui/math3d/qvector4d.cpp +++ b/src/gui/math3d/qvector4d.cpp @@ -53,6 +53,7 @@ QT_BEGIN_NAMESPACE \class QVector4D \brief The QVector4D class represents a vector or vertex in 4D space. \since 4.6 + \ingroup painting-3D The QVector4D class can also be used to represent vertices in 4D space. We therefore do not need to provide a separate vertex class. diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp index 1121c0e..e447301 100644 --- a/src/gui/painting/qblendfunctions.cpp +++ b/src/gui/painting/qblendfunctions.cpp @@ -793,8 +793,351 @@ void qt_scale_image_argb32_on_argb32(uchar *destPixels, int dbpl, } } +struct QTransformImageVertex +{ + qreal x, y, u, v; // destination coordinates (x, y) and source coordinates (u, v) +}; + +template <class SrcT, class DestT, class Blender> +void qt_transform_image_rasterize(DestT *destPixels, int dbpl, + const SrcT *srcPixels, int sbpl, + const QTransformImageVertex &topLeft, const QTransformImageVertex &bottomLeft, + const QTransformImageVertex &topRight, const QTransformImageVertex &bottomRight, + const QRect &sourceRect, + const QRect &clip, + qreal topY, qreal bottomY, + int dudx, int dvdx, int dudy, int dvdy, int u0, int v0, + Blender blender) +{ + int fromY = qMax(qRound(topY), clip.top()); + int toY = qMin(qRound(bottomY), clip.top() + clip.height()); + if (fromY >= toY) + return; + + qreal leftSlope = (bottomLeft.x - topLeft.x) / (bottomLeft.y - topLeft.y); + qreal rightSlope = (bottomRight.x - topRight.x) / (bottomRight.y - topRight.y); + int dx_l = int(leftSlope * 0x10000); + int dx_r = int(rightSlope * 0x10000); + int x_l = int((topLeft.x + (0.5 + fromY - topLeft.y) * leftSlope + 0.5) * 0x10000); + int x_r = int((topRight.x + (0.5 + fromY - topRight.y) * rightSlope + 0.5) * 0x10000); + + int fromX, toX, x1, x2, u, v, i, ii; + DestT *line; + for (int y = fromY; y < toY; ++y) { + line = reinterpret_cast<DestT *>(reinterpret_cast<uchar *>(destPixels) + y * dbpl); + + fromX = qMax(x_l >> 16, clip.left()); + toX = qMin(x_r >> 16, clip.left() + clip.width()); + if (fromX < toX) { + // Because of rounding, we can get source coordinates outside the source image. + // Clamp these coordinates to the source rect to avoid segmentation fault and + // garbage on the screen. + + // Find the first pixel on the current scan line where the source coordinates are within the source rect. + x1 = fromX; + u = x1 * dudx + y * dudy + u0; + v = x1 * dvdx + y * dvdy + v0; + for (; x1 < toX; ++x1) { + int uu = u >> 16; + int vv = v >> 16; + if (uu >= sourceRect.left() && uu < sourceRect.left() + sourceRect.width() + && vv >= sourceRect.top() && vv < sourceRect.top() + sourceRect.height()) { + break; + } + u += dudx; + v += dvdx; + } + + // Find the last pixel on the current scan line where the source coordinates are within the source rect. + x2 = toX; + u = (x2 - 1) * dudx + y * dudy + u0; + v = (x2 - 1) * dvdx + y * dvdy + v0; + for (; x2 > x1; --x2) { + int uu = u >> 16; + int vv = v >> 16; + if (uu >= sourceRect.left() && uu < sourceRect.left() + sourceRect.width() + && vv >= sourceRect.top() && vv < sourceRect.top() + sourceRect.height()) { + break; + } + u -= dudx; + v -= dvdx; + } + + // Set up values at the beginning of the scan line. + u = fromX * dudx + y * dudy + u0; + v = fromX * dvdx + y * dvdy + v0; + line += fromX; + + // Beginning of the scan line, with per-pixel checks. + i = x1 - fromX; + while (i) { + int uu = qBound(sourceRect.left(), u >> 16, sourceRect.left() + sourceRect.width() - 1); + int vv = qBound(sourceRect.top(), v >> 16, sourceRect.top() + sourceRect.height() - 1); + blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + vv * sbpl)[uu]); + u += dudx; + v += dvdx; + ++line; + --i; + } + + // Middle of the scan line, without checks. + // Manual loop unrolling. + i = x2 - x1; + ii = i >> 3; + while (ii) { + blender.write(&line[0], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[1], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[2], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[3], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[4], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[5], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[6], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + blender.write(&line[7], reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; + line += 8; + --ii; + } + switch (i & 7) { + case 7: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + case 6: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + case 5: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + case 4: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + case 3: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + case 2: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + case 1: blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + (v >> 16) * sbpl)[u >> 16]); u += dudx; v += dvdx; ++line; + } + + // End of the scan line, with per-pixel checks. + i = toX - x2; + while (i) { + int uu = qBound(sourceRect.left(), u >> 16, sourceRect.left() + sourceRect.width() - 1); + int vv = qBound(sourceRect.top(), v >> 16, sourceRect.top() + sourceRect.height() - 1); + blender.write(line, reinterpret_cast<const SrcT *>(reinterpret_cast<const uchar *>(srcPixels) + vv * sbpl)[uu]); + u += dudx; + v += dvdx; + ++line; + --i; + } + } + x_l += dx_l; + x_r += dx_r; + } +} + +template <class SrcT, class DestT, class Blender> +void qt_transform_image(DestT *destPixels, int dbpl, + const SrcT *srcPixels, int sbpl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clip, + const QTransform &targetRectTransform, + Blender blender) +{ + enum Corner + { + TopLeft, + TopRight, + BottomRight, + BottomLeft + }; + + // map source rectangle to destination. + QTransformImageVertex v[4]; + v[TopLeft].u = v[BottomLeft].u = sourceRect.left(); + v[TopLeft].v = v[TopRight].v = sourceRect.top(); + v[TopRight].u = v[BottomRight].u = sourceRect.right(); + v[BottomLeft].v = v[BottomRight].v = sourceRect.bottom(); + targetRectTransform.map(targetRect.left(), targetRect.top(), &v[TopLeft].x, &v[TopLeft].y); + targetRectTransform.map(targetRect.right(), targetRect.top(), &v[TopRight].x, &v[TopRight].y); + targetRectTransform.map(targetRect.left(), targetRect.bottom(), &v[BottomLeft].x, &v[BottomLeft].y); + targetRectTransform.map(targetRect.right(), targetRect.bottom(), &v[BottomRight].x, &v[BottomRight].y); + + // find topmost vertex. + int topmost = 0; + for (int i = 1; i < 4; ++i) { + if (v[i].y < v[topmost].y) + topmost = i; + } + // rearrange array such that topmost vertex is at index 0. + switch (topmost) { + case 1: + { + QTransformImageVertex t = v[0]; + for (int i = 0; i < 3; ++i) + v[i] = v[i+1]; + v[3] = t; + } + break; + case 2: + qSwap(v[0], v[2]); + qSwap(v[1], v[3]); + break; + case 3: + { + QTransformImageVertex t = v[3]; + for (int i = 3; i > 0; --i) + v[i] = v[i-1]; + v[0] = t; + } + break; + } + + // if necessary, swap vertex 1 and 3 such that 1 is to the left of 3. + qreal dx1 = v[1].x - v[0].x; + qreal dy1 = v[1].y - v[0].y; + qreal dx2 = v[3].x - v[0].x; + qreal dy2 = v[3].y - v[0].y; + if (dx1 * dy2 - dx2 * dy1 > 0) + qSwap(v[1], v[3]); + + QTransformImageVertex u = {v[1].x - v[0].x, v[1].y - v[0].y, v[1].u - v[0].u, v[1].v - v[0].v}; + QTransformImageVertex w = {v[2].x - v[0].x, v[2].y - v[0].y, v[2].u - v[0].u, v[2].v - v[0].v}; + + qreal det = u.x * w.y - u.y * w.x; + if (det == 0) + return; + + qreal invDet = 1.0 / det; + qreal m11, m12, m21, m22, mdx, mdy; + + m11 = (u.u * w.y - u.y * w.u) * invDet; + m12 = (u.x * w.u - u.u * w.x) * invDet; + m21 = (u.v * w.y - u.y * w.v) * invDet; + m22 = (u.x * w.v - u.v * w.x) * invDet; + mdx = v[0].u - m11 * v[0].x - m12 * v[0].y; + mdy = v[0].v - m21 * v[0].x - m22 * v[0].y; + + int dudx = int(m11 * 0x10000); + int dvdx = int(m21 * 0x10000); + int dudy = int(m12 * 0x10000); + int dvdy = int(m22 * 0x10000); + int u0 = qCeil((0.5 * m11 + 0.5 * m12 + mdx) * 0x10000) - 1; + int v0 = qCeil((0.5 * m21 + 0.5 * m22 + mdy) * 0x10000) - 1; + + int x1 = qFloor(sourceRect.left()); + int y1 = qFloor(sourceRect.top()); + int x2 = qCeil(sourceRect.right()); + int y2 = qCeil(sourceRect.bottom()); + QRect sourceRectI(x1, y1, x2 - x1, y2 - y1); + + // rasterize trapezoids. + if (v[1].y < v[3].y) { + qt_transform_image_rasterize(destPixels, dbpl, srcPixels, sbpl, v[0], v[1], v[0], v[3], sourceRectI, clip, v[0].y, v[1].y, dudx, dvdx, dudy, dvdy, u0, v0, blender); + qt_transform_image_rasterize(destPixels, dbpl, srcPixels, sbpl, v[1], v[2], v[0], v[3], sourceRectI, clip, v[1].y, v[3].y, dudx, dvdx, dudy, dvdy, u0, v0, blender); + qt_transform_image_rasterize(destPixels, dbpl, srcPixels, sbpl, v[1], v[2], v[3], v[2], sourceRectI, clip, v[3].y, v[2].y, dudx, dvdx, dudy, dvdy, u0, v0, blender); + } else { + qt_transform_image_rasterize(destPixels, dbpl, srcPixels, sbpl, v[0], v[1], v[0], v[3], sourceRectI, clip, v[0].y, v[3].y, dudx, dvdx, dudy, dvdy, u0, v0, blender); + qt_transform_image_rasterize(destPixels, dbpl, srcPixels, sbpl, v[0], v[1], v[3], v[2], sourceRectI, clip, v[3].y, v[1].y, dudx, dvdx, dudy, dvdy, u0, v0, blender); + qt_transform_image_rasterize(destPixels, dbpl, srcPixels, sbpl, v[1], v[2], v[3], v[2], sourceRectI, clip, v[1].y, v[2].y, dudx, dvdx, dudy, dvdy, u0, v0, blender); + } +} + +void qt_transform_image_rgb16_on_rgb16(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clip, + const QTransform &targetRectTransform, + int const_alpha) +{ + if (const_alpha == 256) { + Blend_RGB16_on_RGB16_NoAlpha noAlpha; + qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl, + reinterpret_cast<const quint16 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, noAlpha); + } else { + Blend_RGB16_on_RGB16_ConstAlpha constAlpha(const_alpha); + qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl, + reinterpret_cast<const quint16 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, constAlpha); + } +} + +void qt_transform_image_argb24_on_rgb16(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clip, + const QTransform &targetRectTransform, + int const_alpha) +{ + if (const_alpha == 256) { + Blend_ARGB24_on_RGB16_SourceAlpha noAlpha; + qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl, + reinterpret_cast<const qargb8565 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, noAlpha); + } else { + Blend_ARGB24_on_RGB16_SourceAndConstAlpha constAlpha(const_alpha); + qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl, + reinterpret_cast<const qargb8565 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, constAlpha); + } +} +void qt_transform_image_argb32_on_rgb16(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clip, + const QTransform &targetRectTransform, + int const_alpha) +{ + if (const_alpha == 256) { + Blend_ARGB32_on_RGB16_SourceAlpha noAlpha; + qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl, + reinterpret_cast<const quint32 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, noAlpha); + } else { + Blend_ARGB32_on_RGB16_SourceAndConstAlpha constAlpha(const_alpha); + qt_transform_image(reinterpret_cast<quint16 *>(destPixels), dbpl, + reinterpret_cast<const quint32 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, constAlpha); + } +} + + +void qt_transform_image_rgb32_on_rgb32(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clip, + const QTransform &targetRectTransform, + int const_alpha) +{ + if (const_alpha == 256) { + Blend_RGB32_on_RGB32_NoAlpha noAlpha; + qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl, + reinterpret_cast<const quint32 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, noAlpha); + } else { + Blend_RGB32_on_RGB32_ConstAlpha constAlpha(const_alpha); + qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl, + reinterpret_cast<const quint32 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, constAlpha); + } +} + +void qt_transform_image_argb32_on_argb32(uchar *destPixels, int dbpl, + const uchar *srcPixels, int sbpl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clip, + const QTransform &targetRectTransform, + int const_alpha) +{ + if (const_alpha == 256) { + Blend_ARGB32_on_ARGB32_SourceAlpha sourceAlpha; + qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl, + reinterpret_cast<const quint32 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, sourceAlpha); + } else { + Blend_ARGB32_on_ARGB32_SourceAndConstAlpha constAlpha(const_alpha); + qt_transform_image(reinterpret_cast<quint32 *>(destPixels), dbpl, + reinterpret_cast<const quint32 *>(srcPixels), sbpl, + targetRect, sourceRect, clip, targetRectTransform, constAlpha); + } +} + SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] = { { // Format_Invalid 0, // Format_Invalid, @@ -1378,5 +1721,295 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] = } }; +SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFormats] = { + { // Format_Invalid + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_Mono + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_MonoLSB + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_Indexed8 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_RGB32 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + qt_transform_image_rgb32_on_rgb32, // Format_RGB32, + 0, // Format_ARGB32, + qt_transform_image_argb32_on_argb32, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_ARGB32 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_ARGB32_Premultiplied + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + qt_transform_image_rgb32_on_rgb32, // Format_RGB32, + 0, // Format_ARGB32, + qt_transform_image_argb32_on_argb32, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_RGB16 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + qt_transform_image_argb32_on_rgb16, // Format_ARGB32_Premultiplied, + qt_transform_image_rgb16_on_rgb16, // Format_RGB16, + qt_transform_image_argb24_on_rgb16, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_ARGB8565_Premultiplied + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_RGB666 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_ARGB6666_Premultiplied + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_RGB555 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_ARGB8555_Premultiplied + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_RGB888 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_RGB444 + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + }, + { // Format_ARGB4444_Premultiplied + 0, // Format_Invalid, + 0, // Format_Mono, + 0, // Format_MonoLSB, + 0, // Format_Indexed8, + 0, // Format_RGB32, + 0, // Format_ARGB32, + 0, // Format_ARGB32_Premultiplied, + 0, // Format_RGB16, + 0, // Format_ARGB8565_Premultiplied, + 0, // Format_RGB666, + 0, // Format_ARGB6666_Premultiplied, + 0, // Format_RGB555, + 0, // Format_ARGB8555_Premultiplied, + 0, // Format_RGB888, + 0, // Format_RGB444, + 0 // Format_ARGB4444_Premultiplied, + } +}; QT_END_NAMESPACE diff --git a/src/gui/painting/qbrush.cpp b/src/gui/painting/qbrush.cpp index be5db6b..931d7ff 100644 --- a/src/gui/painting/qbrush.cpp +++ b/src/gui/painting/qbrush.cpp @@ -233,7 +233,7 @@ struct QGradientBrushData : public QBrushData /*! \class QBrush - \ingroup multimedia + \ingroup painting \ingroup shared \brief The QBrush class defines the fill pattern of shapes drawn @@ -1153,7 +1153,7 @@ QDataStream &operator>>(QDataStream &s, QBrush &b) /*! \class QGradient - \ingroup multimedia + \ingroup painting \ingroup shared \brief The QGradient class is used in combination with QBrush to @@ -1517,7 +1517,7 @@ bool QGradient::operator==(const QGradient &gradient) /*! \class QLinearGradient - \ingroup multimedia + \ingroup painting \brief The QLinearGradient class is used in combination with QBrush to specify a linear gradient brush. @@ -1696,7 +1696,7 @@ void QLinearGradient::setFinalStop(const QPointF &stop) /*! \class QRadialGradient - \ingroup multimedia + \ingroup painting \brief The QRadialGradient class is used in combination with QBrush to specify a radial gradient brush. @@ -1953,7 +1953,7 @@ void QRadialGradient::setFocalPoint(const QPointF &focalPoint) /*! \class QConicalGradient - \ingroup multimedia + \ingroup painting \brief The QConicalGradient class is used in combination with QBrush to specify a conical gradient brush. diff --git a/src/gui/painting/qcolor.cpp b/src/gui/painting/qcolor.cpp index 11a9ae7..4e93f04 100644 --- a/src/gui/painting/qcolor.cpp +++ b/src/gui/painting/qcolor.cpp @@ -66,9 +66,9 @@ QT_BEGIN_NAMESPACE \class QColor \brief The QColor class provides colors based on RGB, HSV or CMYK values. - \ingroup multimedia + \ingroup painting \ingroup appearance - \mainclass + A color is normally specified in terms of RGB (red, green, and blue) components, but it is also possible to specify it in terms diff --git a/doc/src/classes/qcolormap.qdoc b/src/gui/painting/qcolormap.qdoc index 5536137..e4a88f0 100644 --- a/doc/src/classes/qcolormap.qdoc +++ b/src/gui/painting/qcolormap.qdoc @@ -41,7 +41,7 @@ /*! \class QColormap - \ingroup multimedia + \ingroup painting \brief The QColormap class maps device independent QColors to device dependent pixel values. diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index 18c3358..83d2671 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -146,6 +146,14 @@ typedef void (*SrcOverScaleFunc)(uchar *destPixels, int dbpl, const QRect &clipRect, int const_alpha); +typedef void (*SrcOverTransformFunc)(uchar *destPixels, int dbpl, + const uchar *src, int spbl, + const QRectF &targetRect, + const QRectF &sourceRect, + const QRect &clipRect, + const QTransform &targetRectTransform, + int const_alpha); + struct DrawHelper { ProcessSpans blendColor; @@ -158,6 +166,7 @@ struct DrawHelper { extern SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats]; extern SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats]; +extern SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFormats]; extern DrawHelper qDrawHelper[QImage::NImageFormats]; diff --git a/src/gui/painting/qmatrix.cpp b/src/gui/painting/qmatrix.cpp index ce71a84..abff9bf 100644 --- a/src/gui/painting/qmatrix.cpp +++ b/src/gui/painting/qmatrix.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE coordinate system. \obsolete - \ingroup multimedia + \ingroup painting A matrix specifies how to translate, scale, shear or rotate the coordinate system, and is typically used when rendering graphics. diff --git a/doc/src/classes/qpaintdevice.qdoc b/src/gui/painting/qpaintdevice.qdoc index 6e7c561..5933484 100644 --- a/doc/src/classes/qpaintdevice.qdoc +++ b/src/gui/painting/qpaintdevice.qdoc @@ -44,7 +44,7 @@ \brief The QPaintDevice class is the base class of objects that can be painted. - \ingroup multimedia + \ingroup painting A paint device is an abstraction of a two-dimensional space that can be drawn using a QPainter. Its default coordinate system has diff --git a/src/gui/painting/qpaintdevice_qws.cpp b/src/gui/painting/qpaintdevice_qws.cpp index 9a6a3d3..b161cb8 100644 --- a/src/gui/painting/qpaintdevice_qws.cpp +++ b/src/gui/painting/qpaintdevice_qws.cpp @@ -48,39 +48,6 @@ QT_BEGIN_NAMESPACE -QPaintDevice::QPaintDevice() -{ - painters = 0; -} - -extern void qt_painter_removePaintDevice(QPaintDevice *); //qpainter.cpp - - -QPaintDevice::~QPaintDevice() -{ - if (paintingActive()) - qWarning("QPaintDevice: Cannot destroy paint device that is being " - "painted"); - qt_painter_removePaintDevice(this); -} - - -int QPaintDevice::metric(PaintDeviceMetric m) const -{ - qWarning("QPaintDevice::metrics: Device has no metric information"); - if (m == PdmDpiX) { - return 72; - } else if (m == PdmDpiY) { - return 72; - } else if (m == PdmNumColors) { - // FIXME: does this need to be a real value? - return 256; - } else { - qDebug("Unrecognised metric %d!",m); - return 0; - } -} - QWSDisplay *QPaintDevice::qwsDisplay() { return qt_fbdpy; diff --git a/src/gui/painting/qpaintengine.cpp b/src/gui/painting/qpaintengine.cpp index a8518ea..07fec96 100644 --- a/src/gui/painting/qpaintengine.cpp +++ b/src/gui/painting/qpaintengine.cpp @@ -145,7 +145,7 @@ QFont QTextItem::font() const /*! \class QPaintEngine - \ingroup multimedia + \ingroup painting \brief The QPaintEngine class provides an abstract definition of how QPainter draws to a given device on a given platform. diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index d00329b..547818c 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2495,10 +2495,7 @@ void QRasterPaintEngine::drawImage(const QPointF &p, const QImage &img) const QClipData *clip = d->clip(); QPointF pt(p.x() + s->matrix.dx(), p.y() + s->matrix.dy()); - // ### TODO: remove this eventually... - static bool NO_BLEND_FUNC = !qgetenv("QT_NO_BLEND_FUNCTIONS").isNull(); - - if (s->flags.fast_images && !NO_BLEND_FUNC) { + if (s->flags.fast_images) { SrcOverBlendFunc func = qBlendFunctions[d->rasterBuffer->format][img.format()]; if (func) { if (!clip) { @@ -2511,6 +2508,8 @@ void QRasterPaintEngine::drawImage(const QPointF &p, const QImage &img) } } + + d->image_filler.clip = clip; d->image_filler.initTexture(&img, s->intOpacity, QTextureData::Plain, img.rect()); if (!d->image_filler.blend) @@ -2562,14 +2561,24 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe if (s->matrix.type() > QTransform::TxTranslate || stretch_sr) { if (s->flags.fast_images) { - SrcOverScaleFunc func = qScaleFunctions[d->rasterBuffer->format][img.format()]; - if (func && (!clip || clip->hasRectClip)) { - func(d->rasterBuffer->buffer(), d->rasterBuffer->bytesPerLine(), - img.bits(), img.bytesPerLine(), - qt_mapRect_non_normalizing(r, s->matrix), sr, - !clip ? d->deviceRect : clip->clipRect, - s->intOpacity); - return; + if (s->matrix.type() > QTransform::TxScale) { + SrcOverTransformFunc func = qTransformFunctions[d->rasterBuffer->format][img.format()]; + if (func && (!clip || clip->hasRectClip)) { + func(d->rasterBuffer->buffer(), d->rasterBuffer->bytesPerLine(), img.bits(), + img.bytesPerLine(), r, sr, !clip ? d->deviceRect : clip->clipRect, + s->matrix, s->intOpacity); + return; + } + } else { + SrcOverScaleFunc func = qScaleFunctions[d->rasterBuffer->format][img.format()]; + if (func && (!clip || clip->hasRectClip)) { + func(d->rasterBuffer->buffer(), d->rasterBuffer->bytesPerLine(), + img.bits(), img.bytesPerLine(), + qt_mapRect_non_normalizing(r, s->matrix), sr, + !clip ? d->deviceRect : clip->clipRect, + s->intOpacity); + return; + } } } @@ -4056,7 +4065,7 @@ void QRasterPaintEnginePrivate::recalculateFastImages() s->flags.fast_images = !(s->renderHints & QPainter::SmoothPixmapTransform) && rasterBuffer->compositionMode == QPainter::CompositionMode_SourceOver - && s->matrix.type() <= QTransform::TxScale; + && s->matrix.type() <= QTransform::TxShear; } @@ -5189,6 +5198,13 @@ static void drawLine_midpoint_i(int x1, int y1, int x2, int y2, ProcessSpans spa dy = -dy; } + int x_lower_limit = - 128; + if (x1 < x_lower_limit) { + int cy = dy * (x_lower_limit - x1) / dx + y1; + drawLine_midpoint_i(x_lower_limit, cy, x2, y2, span_func, data, style, devRect); + return; + } + if (style == LineDrawNormal) --x2; @@ -5326,6 +5342,13 @@ static void drawLine_midpoint_i(int x1, int y1, int x2, int y2, ProcessSpans spa dx = -dx; } + int y_lower_limit = - 128; + if (y1 < y_lower_limit) { + int cx = dx * (y_lower_limit - y1) / dy + x1; + drawLine_midpoint_i(cx, y_lower_limit, x2, y2, span_func, data, style, devRect); + return; + } + if (style == LineDrawNormal) --y2; diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 0762138..ab35ead 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -924,8 +924,8 @@ void QPainterPrivate::updateState(QPainterState *newState) \brief The QPainter class performs low-level painting on widgets and other paint devices. - \ingroup multimedia - \mainclass + \ingroup painting + \reentrant QPainter provides highly optimized functions to do most of the diff --git a/src/gui/painting/qpainterpath.cpp b/src/gui/painting/qpainterpath.cpp index ed57e63..5bc4bdb 100644 --- a/src/gui/painting/qpainterpath.cpp +++ b/src/gui/painting/qpainterpath.cpp @@ -153,7 +153,7 @@ static void qt_debug_path(const QPainterPath &path) /*! \class QPainterPath - \ingroup multimedia + \ingroup painting \ingroup shared \brief The QPainterPath class provides a container for painting operations, @@ -2396,7 +2396,7 @@ void qt_path_stroke_cubic_to(qfixed c1x, qfixed c1y, /*! \since 4.1 \class QPainterPathStroker - \ingroup multimedia + \ingroup painting \brief The QPainterPathStroker class is used to generate fillable outlines for a given painter path. diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp index 047fd9b..51929a2 100644 --- a/src/gui/painting/qpen.cpp +++ b/src/gui/painting/qpen.cpp @@ -52,9 +52,9 @@ typedef QPenPrivate QPenData; /*! \class QPen - \ingroup multimedia + \ingroup painting \ingroup shared - \mainclass + \brief The QPen class defines how a QPainter should draw lines and outlines of shapes. diff --git a/src/gui/painting/qpolygon.cpp b/src/gui/painting/qpolygon.cpp index 87a9848..044b2c5 100644 --- a/src/gui/painting/qpolygon.cpp +++ b/src/gui/painting/qpolygon.cpp @@ -91,7 +91,7 @@ static void qt_polygon_isect_line(const QPointF &p1, const QPointF &p2, const QP \reentrant - \ingroup multimedia + \ingroup painting \ingroup shared A QPolygon object is a QVector<QPoint>. The easiest way to add @@ -489,7 +489,7 @@ QDebug operator<<(QDebug dbg, const QPolygon &a) floating point precision. \reentrant - \ingroup multimedia + \ingroup painting \ingroup shared A QPolygonF is a QVector<QPointF>. The easiest way to add points diff --git a/src/gui/painting/qprinter.cpp b/src/gui/painting/qprinter.cpp index f8399af..666719f 100644 --- a/src/gui/painting/qprinter.cpp +++ b/src/gui/painting/qprinter.cpp @@ -268,8 +268,8 @@ void QPrinterPrivate::addToManualSetList(QPrintEngine::PrintEnginePropertyKey ke \brief The QPrinter class is a paint device that paints on a printer. - \ingroup multimedia - \mainclass + \ingroup printing + This device represents a series of pages of printed output, and is used in almost exactly the same way as other paint devices such as @@ -2204,7 +2204,7 @@ bool QPrinter::isOptionEnabled( PrinterOption option ) const \class QPrintEngine \reentrant - \ingroup multimedia + \ingroup printing \brief The QPrintEngine class defines an interface for how QPrinter interacts with a given printing subsystem. diff --git a/doc/src/classes/qprinterinfo.qdoc b/src/gui/painting/qprinterinfo.qdoc index 7507e8a..e3cbe96 100644 --- a/doc/src/classes/qprinterinfo.qdoc +++ b/src/gui/painting/qprinterinfo.qdoc @@ -44,6 +44,8 @@ \brief The QPrinterInfo class gives access to information about existing printers. + + \ingroup printing Use the static functions to generate a list of QPrinterInfo objects. Each QPrinterInfo object in the list represents a single diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index 4e75911..4ddc8f3 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE \class QRegion \brief The QRegion class specifies a clip region for a painter. - \ingroup multimedia + \ingroup painting \ingroup shared QRegion is used with QPainter::setClipRegion() to limit the paint diff --git a/src/gui/painting/qstylepainter.cpp b/src/gui/painting/qstylepainter.cpp index 959caa9..93512d0 100644 --- a/src/gui/painting/qstylepainter.cpp +++ b/src/gui/painting/qstylepainter.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE elements inside a widget. \ingroup appearance - \ingroup multimedia + \ingroup painting QStylePainter extends QPainter with a set of high-level \c draw...() functions implemented on top of QStyle's API. The diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 8832a3d..859767b 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -93,7 +93,7 @@ QT_BEGIN_NAMESPACE \class QTransform \brief The QTransform class specifies 2D transformations of a coordinate system. \since 4.3 - \ingroup multimedia + \ingroup painting A transformation specifies how to translate, scale, shear, rotate or project the coordinate system, and is typically used when diff --git a/doc/src/classes/qmacstyle.qdoc b/src/gui/styles/qmacstyle.qdoc index 171ddb0..171ddb0 100644 --- a/doc/src/classes/qmacstyle.qdoc +++ b/src/gui/styles/qmacstyle.qdoc diff --git a/src/gui/styles/qstyleoption.cpp b/src/gui/styles/qstyleoption.cpp index eabbb8d..04ecbc4 100644 --- a/src/gui/styles/qstyleoption.cpp +++ b/src/gui/styles/qstyleoption.cpp @@ -4937,7 +4937,7 @@ QStyleOptionSizeGrip::QStyleOptionSizeGrip(int version) \brief The QStyleOptionGraphicsItem class is used to describe the parameters needed to draw a QGraphicsItem. \since 4.2 - \ingroup multimedia + \ingroup graphicsview-api For performance reasons, the access to the member variables is direct (i.e., using the \c . or \c -> operator). This low-level feel diff --git a/src/gui/text/qabstracttextdocumentlayout.cpp b/src/gui/text/qabstracttextdocumentlayout.cpp index 8b21c8f..f2ddeb6 100644 --- a/src/gui/text/qabstracttextdocumentlayout.cpp +++ b/src/gui/text/qabstracttextdocumentlayout.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE \brief The QAbstractTextDocumentLayout class is an abstract base class used to implement custom layouts for QTextDocuments. - \ingroup text + \ingroup richtext-processing The standard layout provided by Qt can handle simple word processing including inline images, lists and tables. diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index d838f45..21277c5 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -408,11 +408,11 @@ QFontEngineData::~QFontEngineData() \brief The QFont class specifies a font used for drawing text. - \ingroup multimedia + \ingroup painting \ingroup appearance \ingroup shared - \ingroup text - \mainclass + \ingroup richtext-processing + When you create a QFont object you specify various attributes that you want the font to have. Qt will use the font with the specified @@ -2270,9 +2270,8 @@ QDataStream &operator>>(QDataStream &s, QFont &font) \brief The QFontInfo class provides general information about fonts. - \ingroup multimedia + \ingroup appearance \ingroup shared - \ingroup text The QFontInfo class provides the same access functions as QFont, e.g. family(), pointSize(), italic(), weight(), fixedPitch(), diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 03ecc84..7f0a7aa 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -1295,9 +1295,7 @@ QString QFontDatabase::styleString(const QFontInfo &fontInfo) \brief The QFontDatabase class provides information about the fonts available in the underlying window system. - \ingroup environment - \ingroup multimedia - \ingroup text + \ingroup appearance The most common uses of this class are to query the database for the list of font families() and for the pointSizes() and styles() @@ -2427,7 +2425,7 @@ QStringList QFontDatabase::applicationFontFamilies(int id) means that all QPainter::drawText() calls outside the GUI thread will not produce readable output. - \sa threads.html#painting-in-threads + \sa {Thread-Support in Qt Modules#Painting In Threads}{Painting In Threads} */ diff --git a/src/gui/text/qfontmetrics.cpp b/src/gui/text/qfontmetrics.cpp index b3d1a5f..c017f8b 100644 --- a/src/gui/text/qfontmetrics.cpp +++ b/src/gui/text/qfontmetrics.cpp @@ -75,9 +75,8 @@ extern int qt_defaultDpi(); \brief The QFontMetrics class provides font metrics information. - \ingroup multimedia + \ingroup painting \ingroup shared - \ingroup text QFontMetrics functions calculate the size of characters and strings for a given font. There are three ways you can create a @@ -941,9 +940,8 @@ int QFontMetrics::lineWidth() const \brief The QFontMetricsF class provides font metrics information. - \ingroup multimedia + \ingroup painting \ingroup shared - \ingroup text QFontMetricsF functions calculate the size of characters and strings for a given font. You can construct a QFontMetricsF object diff --git a/src/gui/text/qsyntaxhighlighter.cpp b/src/gui/text/qsyntaxhighlighter.cpp index 5c54500..cdb30ef 100644 --- a/src/gui/text/qsyntaxhighlighter.cpp +++ b/src/gui/text/qsyntaxhighlighter.cpp @@ -219,7 +219,7 @@ void QSyntaxHighlighterPrivate::reformatBlock(QTextBlock block) \since 4.1 - \ingroup text + \ingroup richtext-processing The QSyntaxHighlighter class is a base class for implementing QTextEdit syntax highlighters. A syntax highligher automatically diff --git a/src/gui/text/qtextcursor.cpp b/src/gui/text/qtextcursor.cpp index f97146d..5a938e3 100644 --- a/src/gui/text/qtextcursor.cpp +++ b/src/gui/text/qtextcursor.cpp @@ -84,7 +84,8 @@ QTextCursorPrivate::QTextCursorPrivate(const QTextCursorPrivate &rhs) QTextCursorPrivate::~QTextCursorPrivate() { - priv->removeCursor(this); + if (priv) + priv->removeCursor(this); } QTextCursorPrivate::AdjustResult QTextCursorPrivate::adjustPosition(int positionOfChange, int charsAddedOrRemoved, QTextUndoCommand::Operation op) @@ -854,9 +855,9 @@ QTextLayout *QTextCursorPrivate::blockLayout(QTextBlock &block) const{ \brief The QTextCursor class offers an API to access and modify QTextDocuments. - \ingroup text + \ingroup richtext-processing \ingroup shared - \mainclass + Text cursors are objects that are used to access and modify the contents and underlying structure of text documents via a programming interface diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp index 6fa3e90..bfed368 100644 --- a/src/gui/text/qtextdocument.cpp +++ b/src/gui/text/qtextdocument.cpp @@ -247,8 +247,8 @@ QTextCodec *Qt::codecForHtml(const QByteArray &ba) \brief The QTextDocument class holds formatted text that can be viewed and edited using a QTextEdit. - \ingroup text - \mainclass + \ingroup richtext-processing + QTextDocument is a container for structured rich text documents, providing support for styled text and various types of document elements, such as diff --git a/src/gui/text/qtextdocumentfragment.cpp b/src/gui/text/qtextdocumentfragment.cpp index da7025c..953e965 100644 --- a/src/gui/text/qtextdocumentfragment.cpp +++ b/src/gui/text/qtextdocumentfragment.cpp @@ -259,7 +259,7 @@ void QTextDocumentFragmentPrivate::insert(QTextCursor &_cursor) const \brief The QTextDocumentFragment class represents a piece of formatted text from a QTextDocument. - \ingroup text + \ingroup richtext-processing \ingroup shared A QTextDocumentFragment is a fragment of rich text, that can be inserted into diff --git a/src/gui/text/qtextdocumentwriter.cpp b/src/gui/text/qtextdocumentwriter.cpp index 33a5018..bdb5247 100644 --- a/src/gui/text/qtextdocumentwriter.cpp +++ b/src/gui/text/qtextdocumentwriter.cpp @@ -76,7 +76,7 @@ public: \brief The QTextDocumentWriter class provides a format-independent interface for writing a QTextDocument to files or other devices. - \ingroup text + \ingroup richtext-processing \ingroup io To write a document, construct a QTextDocumentWriter object with either a diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp index 075f2ff..950e45c 100644 --- a/src/gui/text/qtextformat.cpp +++ b/src/gui/text/qtextformat.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE \brief The QTextLength class encapsulates the different types of length used in a QTextDocument. - \ingroup text + \ingroup richtext-processing When we specify a value for the length of an element in a text document, we often need to provide some other information so that the length is @@ -415,7 +415,7 @@ Q_GUI_EXPORT QDataStream &operator>>(QDataStream &stream, QTextFormat &fmt) \brief The QTextFormat class provides formatting information for a QTextDocument. - \ingroup text + \ingroup richtext-processing \ingroup shared A QTextFormat is a generic class used for describing the format of @@ -448,7 +448,7 @@ Q_GUI_EXPORT QDataStream &operator>>(QDataStream &stream, QTextFormat &fmt) associate the format with a QTextObject. It is used to represent lists, frames, and tables inside the document. - \sa {Text Processing Classes} + \sa {Rich Text Processing} */ /*! @@ -1184,7 +1184,7 @@ bool QTextFormat::operator==(const QTextFormat &rhs) const \brief The QTextCharFormat class provides formatting information for characters in a QTextDocument. - \ingroup text + \ingroup richtext-processing The character format of text in a document specifies the visual properties of the text, as well as information about its role in a hypertext document. @@ -1797,7 +1797,7 @@ QFont QTextCharFormat::font() const \brief The QTextBlockFormat class provides formatting information for blocks of text in a QTextDocument. - \ingroup text + \ingroup richtext-processing A document is composed of a list of blocks, represented by QTextBlock objects. Each block can contain an item of some kind, such as a @@ -2088,7 +2088,7 @@ QList<QTextOption::Tab> QTextBlockFormat::tabPositions() const \brief The QTextListFormat class provides formatting information for lists in a QTextDocument. - \ingroup text + \ingroup richtext-processing A list is composed of one or more items, represented as text blocks. The list's format specifies the appearance of items in the list. @@ -2198,7 +2198,7 @@ QTextListFormat::QTextListFormat(const QTextFormat &fmt) \brief The QTextFrameFormat class provides formatting information for frames in a QTextDocument. - \ingroup text + \ingroup richtext-processing A text frame groups together one or more blocks of text, providing a layer of structure larger than the paragraph. The format of a frame specifies @@ -2524,7 +2524,7 @@ qreal QTextFrameFormat::rightMargin() const \brief The QTextTableFormat class provides formatting information for tables in a QTextDocument. - \ingroup text + \ingroup richtext-processing A table is a group of cells ordered into rows and columns. Each table contains at least one row and one column. Each cell contains a block. @@ -2730,7 +2730,7 @@ QTextTableFormat::QTextTableFormat(const QTextFormat &fmt) \brief The QTextImageFormat class provides formatting information for images in a QTextDocument. - \ingroup text + \ingroup richtext-processing Inline images are represented by an object replacement character (0xFFFC in Unicode) which has an associated QTextImageFormat. The @@ -2999,7 +2999,7 @@ QTextTableCellFormat::QTextTableCellFormat(const QTextFormat &fmt) \brief The QTextTableCellFormat class provides formatting information for table cells in a QTextDocument. - \ingroup text + \ingroup richtext-processing The table cell format of a table cell in a document specifies the visual properties of the table cell. diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 242dbbf..cde5b5f 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -128,7 +128,7 @@ static QFixed alignLine(QTextEngine *eng, const QScriptLine &line) \brief The QTextInlineObject class represents an inline object in a QTextLayout. - \ingroup text + \ingroup richtext-processing This class is only used if the text layout is used to lay out parts of a QTextDocument. @@ -285,7 +285,7 @@ Qt::LayoutDirection QTextInlineObject::textDirection() const \brief The QTextLayout class is used to lay out and paint a single paragraph of text. - \ingroup text + \ingroup richtext-processing It offers most features expected from a modern text layout engine, including Unicode compliant rendering, line breaking and @@ -1368,7 +1368,7 @@ void QTextLayout::drawCursor(QPainter *p, const QPointF &pos, int cursorPosition \brief The QTextLine class represents a line of text inside a QTextLayout. - \ingroup text + \ingroup richtext-processing A text line is usually created by QTextLayout::createLine(). diff --git a/src/gui/text/qtextlist.cpp b/src/gui/text/qtextlist.cpp index 8348c92..3e5d7b0 100644 --- a/src/gui/text/qtextlist.cpp +++ b/src/gui/text/qtextlist.cpp @@ -63,7 +63,7 @@ public: \brief The QTextList class provides a decorated list of items in a QTextDocument. - \ingroup text + \ingroup richtext-processing A list contains a sequence of text blocks, each of which is marked with a bullet point or other symbol. Multiple levels of lists can be used, and diff --git a/src/gui/text/qtextobject.cpp b/src/gui/text/qtextobject.cpp index 5dc0c48..4ac0276 100644 --- a/src/gui/text/qtextobject.cpp +++ b/src/gui/text/qtextobject.cpp @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE \brief The QTextObject class is a base class for different kinds of objects that can group parts of a QTextDocument together. - \ingroup text + \ingroup richtext-processing The common grouping text objects are lists (QTextList), frames (QTextFrame), and tables (QTextTable). A text object has an @@ -183,7 +183,7 @@ QTextDocumentPrivate *QTextObject::docHandle() const \brief The QTextBlockGroup class provides a container for text blocks within a QTextDocument. - \ingroup text + \ingroup richtext-processing Block groups can be used to organize blocks of text within a document. They maintain an up-to-date list of the text blocks that belong to @@ -305,7 +305,7 @@ QTextFrameLayoutData::~QTextFrameLayoutData() \brief The QTextFrame class represents a frame in a QTextDocument. - \ingroup text + \ingroup richtext-processing Text frames provide structure for the text in a document. They are used as generic containers for other document elements. @@ -599,7 +599,7 @@ void QTextFramePrivate::remove_me() \brief The iterator class provides an iterator for reading the contents of a QTextFrame. - \ingroup text + \ingroup richtext-processing A frame consists of an arbitrary sequence of \l{QTextBlock}s and child \l{QTextFrame}s. This class provides a way to iterate over the @@ -799,7 +799,7 @@ QTextFrame::iterator &QTextFrame::iterator::operator--() \brief The QTextBlockUserData class is used to associate custom data with blocks of text. \since 4.1 - \ingroup text + \ingroup richtext-processing QTextBlockUserData provides an abstract interface for container classes that are used to associate application-specific user data with text blocks in a QTextDocument. @@ -829,7 +829,7 @@ QTextBlockUserData::~QTextBlockUserData() \brief The QTextBlock class provides a container for text fragments in a QTextDocument. - \ingroup text + \ingroup richtext-processing A text block encapsulates a block or paragraph of text in a QTextDocument. QTextBlock provides read-only access to the block/paragraph structure of @@ -924,7 +924,7 @@ QTextBlockUserData::~QTextBlockUserData() \brief The QTextBlock::iterator class provides an iterator for reading the contents of a QTextBlock. - \ingroup text + \ingroup richtext-processing A block consists of a sequence of text fragments. This class provides a way to iterate over these, and read their contents. It does not provide @@ -1525,7 +1525,7 @@ QTextBlock::iterator &QTextBlock::iterator::operator--() \brief The QTextFragment class holds a piece of text in a QTextDocument with a single QTextCharFormat. - \ingroup text + \ingroup richtext-processing A text fragment describes a piece of text that is stored with a single character format. Text in which the character format changes can be diff --git a/src/gui/text/qtextoption.cpp b/src/gui/text/qtextoption.cpp index ca30ed4..20ba9bf 100644 --- a/src/gui/text/qtextoption.cpp +++ b/src/gui/text/qtextoption.cpp @@ -197,7 +197,7 @@ QList<QTextOption::Tab> QTextOption::tabs() const \brief The QTextOption class provides a description of general rich text properties. - \ingroup text + \ingroup richtext-processing QTextOption is used to encapsulate common rich text properties in a single object. It contains information about text alignment, layout direction, diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp index 9097b4e..576758e 100644 --- a/src/gui/text/qtexttable.cpp +++ b/src/gui/text/qtexttable.cpp @@ -58,7 +58,7 @@ QT_BEGIN_NAMESPACE \brief The QTextTableCell class represents the properties of a cell in a QTextTable. - \ingroup text + \ingroup richtext-processing Table cells are pieces of document structure that belong to a table. The table orders cells into particular rows and columns; cells can @@ -492,7 +492,7 @@ void QTextTablePrivate::update() const \brief The QTextTable class represents a table in a QTextDocument. - \ingroup text + \ingroup richtext-processing A table is a group of cells ordered into rows and columns. Each table contains at least one row and one column. Each cell contains a block, and diff --git a/src/gui/util/qsystemtrayicon.cpp b/src/gui/util/qsystemtrayicon.cpp index f4d2f7f..64591c7 100644 --- a/src/gui/util/qsystemtrayicon.cpp +++ b/src/gui/util/qsystemtrayicon.cpp @@ -65,7 +65,6 @@ QT_BEGIN_NAMESPACE \class QSystemTrayIcon \brief The QSystemTrayIcon class provides an icon for an application in the system tray. \since 4.2 - \ingroup application \ingroup desktop Modern operating systems usually provide a special area on the desktop, diff --git a/src/gui/util/qundogroup.cpp b/src/gui/util/qundogroup.cpp index 9fcfe95..07a3a3d 100644 --- a/src/gui/util/qundogroup.cpp +++ b/src/gui/util/qundogroup.cpp @@ -61,7 +61,6 @@ public: \class QUndoGroup \brief The QUndoGroup class is a group of QUndoStack objects. \since 4.2 - \ingroup misc For an overview of the Qt's undo framework, see the \link qundo.html overview\endlink. diff --git a/src/gui/util/qundostack.cpp b/src/gui/util/qundostack.cpp index a5e8004..065cc24 100644 --- a/src/gui/util/qundostack.cpp +++ b/src/gui/util/qundostack.cpp @@ -52,7 +52,6 @@ QT_BEGIN_NAMESPACE \class QUndoCommand \brief The QUndoCommand class is the base class of all commands stored on a QUndoStack. \since 4.2 - \ingroup misc For an overview of Qt's Undo Framework, see the \l{Overview of Qt's Undo Framework}{overview document}. @@ -292,7 +291,6 @@ const QUndoCommand *QUndoCommand::child(int index) const \class QUndoStack \brief The QUndoStack class is a stack of QUndoCommand objects. \since 4.2 - \ingroup misc For an overview of Qt's Undo Framework, see the \l{Overview of Qt's Undo Framework}{overview document}. diff --git a/src/gui/util/qundoview.cpp b/src/gui/util/qundoview.cpp index 0241500..079a62f 100644 --- a/src/gui/util/qundoview.cpp +++ b/src/gui/util/qundoview.cpp @@ -253,7 +253,7 @@ QIcon QUndoModel::cleanIcon() const \class QUndoView \brief The QUndoView class displays the contents of a QUndoStack. \since 4.2 - \ingroup misc + \ingroup advanced QUndoView is a QListView which displays the list of commands pushed on an undo stack. diff --git a/src/gui/widgets/qbuttongroup.cpp b/src/gui/widgets/qbuttongroup.cpp index 8b89a86..26a9d51 100644 --- a/src/gui/widgets/qbuttongroup.cpp +++ b/src/gui/widgets/qbuttongroup.cpp @@ -48,8 +48,6 @@ \ingroup organizers \ingroup geomanagement - \ingroup appearance - \mainclass QButtonGroup provides an abstract container into which button widgets can be placed. It does not provide a visual representation of this container diff --git a/src/gui/widgets/qcalendarwidget.cpp b/src/gui/widgets/qcalendarwidget.cpp index 8d5d0c7..377b4bb 100644 --- a/src/gui/widgets/qcalendarwidget.cpp +++ b/src/gui/widgets/qcalendarwidget.cpp @@ -1960,7 +1960,7 @@ void QCalendarWidgetPrivate::_q_editingFinished() \brief The QCalendarWidget class provides a monthly based calendar widget allowing the user to select a date. \since 4.2 - \mainclass + \ingroup advanced \image cleanlooks-calendarwidget.png diff --git a/src/gui/widgets/qcheckbox.cpp b/src/gui/widgets/qcheckbox.cpp index 8cdf3b9..faec9d0 100644 --- a/src/gui/widgets/qcheckbox.cpp +++ b/src/gui/widgets/qcheckbox.cpp @@ -73,7 +73,7 @@ public: \brief The QCheckBox widget provides a checkbox with a text label. \ingroup basicwidgets - \mainclass + A QCheckBox is an option button that can be switched on (checked) or off (unchecked). Checkboxes are typically used to represent features in an diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp index f3027be..0f54bac 100644 --- a/src/gui/widgets/qcombobox.cpp +++ b/src/gui/widgets/qcombobox.cpp @@ -863,7 +863,7 @@ QComboBox::QComboBox(bool rw, QWidget *parent, const char *name) \brief The QComboBox widget is a combined button and popup list. \ingroup basicwidgets - \mainclass + A QComboBox provides a means of presenting a list of options to the user in a way that takes up the minimum amount of screen space. diff --git a/src/gui/widgets/qcommandlinkbutton.cpp b/src/gui/widgets/qcommandlinkbutton.cpp index 3d12ce9..206221f 100644 --- a/src/gui/widgets/qcommandlinkbutton.cpp +++ b/src/gui/widgets/qcommandlinkbutton.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE \brief The QCommandLinkButton widget provides a Vista style command link button. \ingroup basicwidgets - \mainclass + The command link is a new control that was introduced by Windows Vista. It's intended use is similar to that of a radio button in that it is used to choose diff --git a/src/gui/widgets/qdatetimeedit.cpp b/src/gui/widgets/qdatetimeedit.cpp index 2900d39..0fca0b7 100644 --- a/src/gui/widgets/qdatetimeedit.cpp +++ b/src/gui/widgets/qdatetimeedit.cpp @@ -75,7 +75,7 @@ QT_BEGIN_NAMESPACE \brief The QDateTimeEdit class provides a widget for editing dates and times. \ingroup basicwidgets - \mainclass + QDateTimeEdit allows the user to edit dates by using the keyboard or the arrow keys to increase and decrease date and time values. The @@ -1505,7 +1505,7 @@ void QDateTimeEdit::mousePressEvent(QMouseEvent *event) the QDateTimeEdit widget. \ingroup basicwidgets - \mainclass + Many of the properties and functions provided by QTimeEdit are implemented in QDateTimeEdit. The following properties are most relevant to users of this @@ -1567,7 +1567,7 @@ QTimeEdit::QTimeEdit(const QTime &time, QWidget *parent) the QDateTimeEdit widget. \ingroup basicwidgets - \mainclass + Many of the properties and functions provided by QDateEdit are implemented in QDateTimeEdit. The following properties are most relevant to users of this diff --git a/src/gui/widgets/qdial.cpp b/src/gui/widgets/qdial.cpp index 3fe7c68..90f1c85 100644 --- a/src/gui/widgets/qdial.cpp +++ b/src/gui/widgets/qdial.cpp @@ -168,7 +168,7 @@ int QDialPrivate::valueFromPoint(const QPoint &p) const \brief The QDial class provides a rounded range control (like a speedometer or potentiometer). \ingroup basicwidgets - \mainclass + QDial is used when the user needs to control a value within a program-definable range, and the range either wraps around diff --git a/src/gui/widgets/qdialogbuttonbox.cpp b/src/gui/widgets/qdialogbuttonbox.cpp index 5560367..515efc4 100644 --- a/src/gui/widgets/qdialogbuttonbox.cpp +++ b/src/gui/widgets/qdialogbuttonbox.cpp @@ -57,8 +57,8 @@ QT_BEGIN_NAMESPACE \brief The QDialogButtonBox class is a widget that presents buttons in a layout that is appropriate to the current widget style. - \ingroup application - \mainclass + \ingroup dialog-classes + Dialogs and message boxes typically present buttons in a layout that conforms to the interface guidelines for that platform. Invariably, diff --git a/src/gui/widgets/qdockwidget.cpp b/src/gui/widgets/qdockwidget.cpp index a521921..1193b3e 100644 --- a/src/gui/widgets/qdockwidget.cpp +++ b/src/gui/widgets/qdockwidget.cpp @@ -1069,7 +1069,7 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect inside a QMainWindow or floated as a top-level window on the desktop. - \ingroup application + \ingroup mainwindow-classes QDockWidget provides the concept of dock widgets, also know as tool palettes or utility windows. Dock windows are secondary diff --git a/src/gui/widgets/qfocusframe.cpp b/src/gui/widgets/qfocusframe.cpp index 2c88a2e..65dc7d0 100644 --- a/src/gui/widgets/qfocusframe.cpp +++ b/src/gui/widgets/qfocusframe.cpp @@ -118,7 +118,7 @@ void QFocusFrame::initStyleOption(QStyleOption *option) const outside of a widget's normal paintable area. \ingroup basicwidgets - \mainclass + Normally an application will not need to create its own QFocusFrame as QStyle will handle this detail for diff --git a/src/gui/widgets/qfontcombobox.cpp b/src/gui/widgets/qfontcombobox.cpp index 24af989..d3f5bf9 100644 --- a/src/gui/widgets/qfontcombobox.cpp +++ b/src/gui/widgets/qfontcombobox.cpp @@ -276,7 +276,6 @@ void QFontComboBoxPrivate::_q_currentChanged(const QString &text) \since 4.2 \ingroup basicwidgets - \ingroup text The combobox is populated with an alphabetized list of font family names, such as Arial, Helvetica, and Times New Roman. diff --git a/src/gui/widgets/qframe.cpp b/src/gui/widgets/qframe.cpp index a7861ad..62f2ddf 100644 --- a/src/gui/widgets/qframe.cpp +++ b/src/gui/widgets/qframe.cpp @@ -73,7 +73,7 @@ inline void QFramePrivate::init() \brief The QFrame class is the base class of widgets that can have a frame. \ingroup abstractwidgets - \mainclass + QMenu uses this to "raise" the menu above the surrounding screen. QProgressBar has a "sunken" look. QLabel has a flat look. diff --git a/src/gui/widgets/qgroupbox.cpp b/src/gui/widgets/qgroupbox.cpp index 03a08e8..daf92c0 100644 --- a/src/gui/widgets/qgroupbox.cpp +++ b/src/gui/widgets/qgroupbox.cpp @@ -147,8 +147,6 @@ void QGroupBoxPrivate::click() \ingroup organizers \ingroup geomanagement - \ingroup appearance - \mainclass A group box provides a frame, a title and a keyboard shortcut, and displays various other widgets inside itself. The title is on top, diff --git a/src/gui/widgets/qlabel.cpp b/src/gui/widgets/qlabel.cpp index fd97c8f..a9c7e12 100644 --- a/src/gui/widgets/qlabel.cpp +++ b/src/gui/widgets/qlabel.cpp @@ -61,8 +61,6 @@ QT_BEGIN_NAMESPACE \brief The QLabel widget provides a text or image display. \ingroup basicwidgets - \ingroup text - \mainclass QLabel is used for displaying text or an image. No user interaction functionality is provided. The visual appearance of diff --git a/src/gui/widgets/qlcdnumber.cpp b/src/gui/widgets/qlcdnumber.cpp index c4c97ab..d6f5e61 100644 --- a/src/gui/widgets/qlcdnumber.cpp +++ b/src/gui/widgets/qlcdnumber.cpp @@ -74,7 +74,7 @@ public: \brief The QLCDNumber widget displays a number with LCD-like digits. \ingroup basicwidgets - \mainclass + It can display a number in just about any size. It can display decimal, hexadecimal, octal or binary numbers. It is easy to diff --git a/src/gui/widgets/qlineedit.cpp b/src/gui/widgets/qlineedit.cpp index 3f44bc8..b88cd9ae 100644 --- a/src/gui/widgets/qlineedit.cpp +++ b/src/gui/widgets/qlineedit.cpp @@ -128,7 +128,7 @@ void QLineEdit::initStyleOption(QStyleOptionFrame *option) const \brief The QLineEdit widget is a one-line text editor. \ingroup basicwidgets - \mainclass + A line edit allows the user to enter and edit a single line of plain text with a useful collection of editing functions, diff --git a/src/gui/widgets/qmainwindow.cpp b/src/gui/widgets/qmainwindow.cpp index 88059a0..e19961f 100644 --- a/src/gui/widgets/qmainwindow.cpp +++ b/src/gui/widgets/qmainwindow.cpp @@ -146,8 +146,8 @@ void QMainWindowPrivate::init() \class QMainWindow \brief The QMainWindow class provides a main application window. - \ingroup application - \mainclass + \ingroup mainwindow-classes + \tableofcontents diff --git a/src/gui/widgets/qmdiarea.cpp b/src/gui/widgets/qmdiarea.cpp index 2390c25..e206bcf 100644 --- a/src/gui/widgets/qmdiarea.cpp +++ b/src/gui/widgets/qmdiarea.cpp @@ -43,8 +43,8 @@ \class QMdiArea \brief The QMdiArea widget provides an area in which MDI windows are displayed. \since 4.3 - \ingroup application - \mainclass + \ingroup mainwindow-classes + QMdiArea functions, essentially, like a window manager for MDI windows. For instance, it draws the windows it manages on itself diff --git a/src/gui/widgets/qmdisubwindow.cpp b/src/gui/widgets/qmdisubwindow.cpp index c645429..d51bd99 100644 --- a/src/gui/widgets/qmdisubwindow.cpp +++ b/src/gui/widgets/qmdisubwindow.cpp @@ -44,8 +44,8 @@ \brief The QMdiSubWindow class provides a subwindow class for QMdiArea. \since 4.3 - \ingroup application - \mainclass + \ingroup mainwindow-classes + QMdiSubWindow represents a top-level window in a QMdiArea, and consists of a title bar with window decorations, an internal widget, and diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp index eb3b6b1..da63b0d 100644 --- a/src/gui/widgets/qmenu.cpp +++ b/src/gui/widgets/qmenu.cpp @@ -1200,9 +1200,9 @@ void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) \brief The QMenu class provides a menu widget for use in menu bars, context menus, and other popup menus. - \ingroup application + \ingroup mainwindow-classes \ingroup basicwidgets - \mainclass + A menu widget is a selection menu. It can be either a pull-down menu in a menu bar or a standalone context menu. Pull-down menus diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp index 640ac5b..2989f94 100644 --- a/src/gui/widgets/qmenubar.cpp +++ b/src/gui/widgets/qmenubar.cpp @@ -590,8 +590,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti \class QMenuBar \brief The QMenuBar class provides a horizontal menu bar. - \ingroup application - \mainclass + \ingroup mainwindow-classes A menu bar consists of a list of pull-down menu items. You add menu items with addMenu(). For example, asuming that \c menubar @@ -715,7 +714,7 @@ void QMenuBar::initStyleOption(QStyleOptionMenuItem *option, const QAction *acti \section1 Examples The \l{mainwindows/menus}{Menus} example shows how to use QMenuBar - and QMenu. The other \l{Qt Examples#Main Windows}{main window + and QMenu. The other \l{Main Window Examples}{main window application examples} also provide menus using these classes. \sa QMenu, QShortcut, QAction, diff --git a/src/gui/widgets/qplaintextedit.cpp b/src/gui/widgets/qplaintextedit.cpp index e489f3b..16b7c1e 100644 --- a/src/gui/widgets/qplaintextedit.cpp +++ b/src/gui/widgets/qplaintextedit.cpp @@ -111,8 +111,7 @@ public: \since 4.4 \brief The QPlainTextDocumentLayout class implements a plain text layout for QTextDocument - \ingroup text - + \ingroup richtext-processing A QPlainTextDocumentLayout is required for text documents that can be display or edited in a QPlainTextEdit. See @@ -1007,8 +1006,8 @@ void QPlainTextEditPrivate::ensureViewportLayouted() \brief The QPlainTextEdit class provides a widget that is used to edit and display plain text. - \ingroup text - \mainclass + \ingroup richtext-processing + \tableofcontents diff --git a/src/gui/widgets/qprintpreviewwidget.cpp b/src/gui/widgets/qprintpreviewwidget.cpp index ade6223..40ea5a1 100644 --- a/src/gui/widgets/qprintpreviewwidget.cpp +++ b/src/gui/widgets/qprintpreviewwidget.cpp @@ -452,7 +452,7 @@ void QPrintPreviewWidgetPrivate::setZoomFactor(qreal _zoomFactor) \brief The QPrintPreviewWidget class provides a widget for previewing page layouts for printer output. - \ingroup multimedia + \ingroup printing QPrintPreviewDialog uses a QPrintPreviewWidget internally, and the purpose of QPrintPreviewWidget is to make it possible to embed the diff --git a/src/gui/widgets/qprogressbar.cpp b/src/gui/widgets/qprogressbar.cpp index b35b9d3..9f91cf7 100644 --- a/src/gui/widgets/qprogressbar.cpp +++ b/src/gui/widgets/qprogressbar.cpp @@ -172,7 +172,7 @@ bool QProgressBarPrivate::repaintRequired() const \brief The QProgressBar widget provides a horizontal or vertical progress bar. \ingroup basicwidgets - \mainclass + A progress bar is used to give the user an indication of the progress of an operation and to reassure them that the application diff --git a/src/gui/widgets/qpushbutton.cpp b/src/gui/widgets/qpushbutton.cpp index 94b39e0..f991620 100644 --- a/src/gui/widgets/qpushbutton.cpp +++ b/src/gui/widgets/qpushbutton.cpp @@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE \brief The QPushButton widget provides a command button. \ingroup basicwidgets - \mainclass + The push button, or command button, is perhaps the most commonly used widget in any graphical user interface. Push (click) a button diff --git a/src/gui/widgets/qradiobutton.cpp b/src/gui/widgets/qradiobutton.cpp index feada97..4b5cead 100644 --- a/src/gui/widgets/qradiobutton.cpp +++ b/src/gui/widgets/qradiobutton.cpp @@ -80,7 +80,7 @@ void QRadioButtonPrivate::init() \brief The QRadioButton widget provides a radio button with a text label. \ingroup basicwidgets - \mainclass + A QRadioButton is an option button that can be switched on (checked) or off (unchecked). Radio buttons typically present the user with a "one diff --git a/src/gui/widgets/qrubberband.cpp b/src/gui/widgets/qrubberband.cpp index 5b61bd4..a04bc55 100644 --- a/src/gui/widgets/qrubberband.cpp +++ b/src/gui/widgets/qrubberband.cpp @@ -98,9 +98,6 @@ void QRubberBand::initStyleOption(QStyleOptionRubberBand *option) const \brief The QRubberBand class provides a rectangle or line that can indicate a selection or a boundary. - \ingroup misc - \mainclass - A rubber band is often used to show a new bounding area (as in a QSplitter or a QDockWidget that is undocking). Historically this has been implemented using a QPainter and XOR, but this approach diff --git a/src/gui/widgets/qscrollarea.cpp b/src/gui/widgets/qscrollarea.cpp index 32d3c2b..31e558b 100644 --- a/src/gui/widgets/qscrollarea.cpp +++ b/src/gui/widgets/qscrollarea.cpp @@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE another widget. \ingroup basicwidgets - \mainclass + A scroll area is used to display the contents of a child widget within a frame. If the widget exceeds the size of the frame, the diff --git a/src/gui/widgets/qsizegrip.cpp b/src/gui/widgets/qsizegrip.cpp index 080e328..8a1a0e6 100644 --- a/src/gui/widgets/qsizegrip.cpp +++ b/src/gui/widgets/qsizegrip.cpp @@ -165,9 +165,8 @@ Qt::Corner QSizeGripPrivate::corner() const \brief The QSizeGrip class provides a resize handle for resizing top-level windows. - \ingroup application + \ingroup mainwindow-classes \ingroup basicwidgets - \ingroup appearance This widget works like the standard Windows resize handle. In the X11 version this resize handle generally works differently from diff --git a/src/gui/widgets/qslider.cpp b/src/gui/widgets/qslider.cpp index 0b7e7c1..d9c98e1 100644 --- a/src/gui/widgets/qslider.cpp +++ b/src/gui/widgets/qslider.cpp @@ -203,7 +203,7 @@ QStyle::SubControl QSliderPrivate::newHoverControl(const QPoint &pos) \brief The QSlider widget provides a vertical or horizontal slider. \ingroup basicwidgets - \mainclass + The slider is the classic widget for controlling a bounded value. It lets the user move a slider handle along a horizontal or vertical diff --git a/src/gui/widgets/qspinbox.cpp b/src/gui/widgets/qspinbox.cpp index c903610..f17c15f 100644 --- a/src/gui/widgets/qspinbox.cpp +++ b/src/gui/widgets/qspinbox.cpp @@ -106,7 +106,7 @@ public: \brief The QSpinBox class provides a spin box widget. \ingroup basicwidgets - \mainclass + QSpinBox is designed to handle integers and discrete sets of values (e.g., month names); use QDoubleSpinBox for floating point @@ -527,7 +527,7 @@ void QSpinBox::fixup(QString &input) const takes doubles. \ingroup basicwidgets - \mainclass + QDoubleSpinBox allows the user to choose a value by clicking the up and down buttons or by pressing Up or Down on the keyboard to diff --git a/src/gui/widgets/qsplashscreen.cpp b/src/gui/widgets/qsplashscreen.cpp index e4f7307..2357164 100644 --- a/src/gui/widgets/qsplashscreen.cpp +++ b/src/gui/widgets/qsplashscreen.cpp @@ -72,9 +72,6 @@ public: \brief The QSplashScreen widget provides a splash screen that can be shown during application startup. - \ingroup misc - \mainclass - A splash screen is a widget that is usually displayed when an application is being started. Splash screens are often used for applications that have long start up times (e.g. database or diff --git a/src/gui/widgets/qsplitter.cpp b/src/gui/widgets/qsplitter.cpp index 98cf2a8..0aa89f4 100644 --- a/src/gui/widgets/qsplitter.cpp +++ b/src/gui/widgets/qsplitter.cpp @@ -931,7 +931,7 @@ QSplitterLayoutStruct *QSplitterPrivate::insertWidget(int index, QWidget *w) \brief The QSplitter class implements a splitter widget. \ingroup organizers - \mainclass + A splitter lets the user control the size of child widgets by dragging the boundary between the children. Any number of widgets may be controlled by a diff --git a/src/gui/widgets/qstackedwidget.cpp b/src/gui/widgets/qstackedwidget.cpp index da942d1..7dedf4a 100644 --- a/src/gui/widgets/qstackedwidget.cpp +++ b/src/gui/widgets/qstackedwidget.cpp @@ -65,8 +65,7 @@ public: \ingroup organizers \ingroup geomanagement - \ingroup appearance - \mainclass + QStackedWidget can be used to create a user interface similar to the one provided by QTabWidget. It is a convenience layout widget diff --git a/src/gui/widgets/qstatusbar.cpp b/src/gui/widgets/qstatusbar.cpp index ed2d5d8..eb58c61 100644 --- a/src/gui/widgets/qstatusbar.cpp +++ b/src/gui/widgets/qstatusbar.cpp @@ -158,9 +158,9 @@ QRect QStatusBarPrivate::messageRect() const \brief The QStatusBar class provides a horizontal bar suitable for presenting status information. - \ingroup application + \ingroup mainwindow-classes \ingroup helpsystem - \mainclass + Each status indicator falls into one of three categories: diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp index 410c26f..5166390 100644 --- a/src/gui/widgets/qtabbar.cpp +++ b/src/gui/widgets/qtabbar.cpp @@ -192,7 +192,7 @@ void QTabBar::initStyleOption(QStyleOptionTab *option, int tabIndex) const \brief The QTabBar class provides a tab bar, e.g. for use in tabbed dialogs. \ingroup basicwidgets - \mainclass + QTabBar is straightforward to use; it draws the tabs using one of the predefined \link QTabBar::Shape shapes\endlink, and emits a diff --git a/src/gui/widgets/qtabwidget.cpp b/src/gui/widgets/qtabwidget.cpp index 6828c50..14a554a 100644 --- a/src/gui/widgets/qtabwidget.cpp +++ b/src/gui/widgets/qtabwidget.cpp @@ -64,7 +64,7 @@ QT_BEGIN_NAMESPACE \ingroup organizers \ingroup basicwidgets - \mainclass + A tab widget provides a tab bar (see QTabBar) and a "page area" that is used to display pages related to each tab. By default, the diff --git a/src/gui/widgets/qtextbrowser.cpp b/src/gui/widgets/qtextbrowser.cpp index 803b6fb..7a67a8d 100644 --- a/src/gui/widgets/qtextbrowser.cpp +++ b/src/gui/widgets/qtextbrowser.cpp @@ -580,7 +580,7 @@ void QTextBrowserPrivate::restoreHistoryEntry(const HistoryEntry entry) \class QTextBrowser \brief The QTextBrowser class provides a rich text browser with hypertext navigation. - \ingroup text + \ingroup richtext-processing This class extends QTextEdit (in read-only mode), adding some navigation functionality so that users can follow links in hypertext documents. diff --git a/src/gui/widgets/qtextedit.cpp b/src/gui/widgets/qtextedit.cpp index a82adf7..a6e3c83 100644 --- a/src/gui/widgets/qtextedit.cpp +++ b/src/gui/widgets/qtextedit.cpp @@ -333,8 +333,8 @@ void QTextEditPrivate::_q_ensureVisible(const QRectF &_rect) \brief The QTextEdit class provides a widget that is used to edit and display both plain and rich text. - \ingroup text - \mainclass + \ingroup richtext-processing + \tableofcontents diff --git a/src/gui/widgets/qtoolbar.cpp b/src/gui/widgets/qtoolbar.cpp index 37c7998..ef0847b 100644 --- a/src/gui/widgets/qtoolbar.cpp +++ b/src/gui/widgets/qtoolbar.cpp @@ -412,8 +412,8 @@ void QToolBarPrivate::plug(const QRect &r) \brief The QToolBar class provides a movable panel that contains a set of controls. - \ingroup application - \mainclass + \ingroup mainwindow-classes + Toolbar buttons are added by adding \e actions, using addAction() or insertAction(). Groups of buttons can be separated using diff --git a/src/gui/widgets/qtoolbox.cpp b/src/gui/widgets/qtoolbox.cpp index 803c6ab..378ed17 100644 --- a/src/gui/widgets/qtoolbox.cpp +++ b/src/gui/widgets/qtoolbox.cpp @@ -252,7 +252,7 @@ void QToolBoxButton::paintEvent(QPaintEvent *) \brief The QToolBox class provides a column of tabbed widget items. - \mainclass + \ingroup basicwidgets A toolbox is a widget that displays a column of tabs one above the diff --git a/src/gui/widgets/qtoolbutton.cpp b/src/gui/widgets/qtoolbutton.cpp index bb8c32f..4ca3d62 100644 --- a/src/gui/widgets/qtoolbutton.cpp +++ b/src/gui/widgets/qtoolbutton.cpp @@ -116,7 +116,7 @@ bool QToolButtonPrivate::hasMenu() const commands or options, usually used inside a QToolBar. \ingroup basicwidgets - \mainclass + A tool button is a special button that provides quick-access to specific commands or options. As opposed to a normal command diff --git a/src/gui/widgets/qvalidator.cpp b/src/gui/widgets/qvalidator.cpp index 7db0247..8f43097 100644 --- a/src/gui/widgets/qvalidator.cpp +++ b/src/gui/widgets/qvalidator.cpp @@ -55,9 +55,6 @@ QT_BEGIN_NAMESPACE \class QValidator \brief The QValidator class provides validation of input text. - \ingroup misc - \mainclass - The class itself is abstract. Two subclasses, \l QIntValidator and \l QDoubleValidator, provide basic numeric-range checking, and \l QRegExpValidator provides general checking using a custom regular @@ -246,8 +243,6 @@ void QValidator::fixup(QString &) const \brief The QIntValidator class provides a validator that ensures a string contains a valid integer within a specified range. - \ingroup misc - Example of use: \snippet doc/src/snippets/code/src_gui_widgets_qvalidator.cpp 0 @@ -497,8 +492,6 @@ public: \brief The QDoubleValidator class provides range checking of floating-point numbers. - \ingroup misc - QDoubleValidator provides an upper bound, a lower bound, and a limit on the number of digits after the decimal point. It does not provide a fixup() function. @@ -767,8 +760,6 @@ QDoubleValidator::Notation QDoubleValidator::notation() const \brief The QRegExpValidator class is used to check a string against a regular expression. - \ingroup misc - QRegExpValidator uses a regular expression (regexp) to determine whether an input string is \l Acceptable, \l Intermediate, or \l Invalid. The regexp can either be supplied diff --git a/src/gui/widgets/qworkspace.cpp b/src/gui/widgets/qworkspace.cpp index d8bcf9b..cd98671 100644 --- a/src/gui/widgets/qworkspace.cpp +++ b/src/gui/widgets/qworkspace.cpp @@ -834,7 +834,6 @@ QSize QWorkspaceTitleBar::sizeHint() const \obsolete \brief The QWorkspace widget provides a workspace window that can be used in an MDI application. - \ingroup application This class is deprecated. Use QMdiArea instead. diff --git a/src/network/access/qftp.cpp b/src/network/access/qftp.cpp index 5d5c978..308037a 100644 --- a/src/network/access/qftp.cpp +++ b/src/network/access/qftp.cpp @@ -1294,9 +1294,9 @@ int QFtpPrivate::addCommand(QFtpCommand *cmd) \class QFtp \brief The QFtp class provides an implementation of the client side of FTP protocol. - \ingroup io + \ingroup network \inmodule QtNetwork - \mainclass + This class provides a direct interface to FTP that allows you to have more control over the requests. However, for new diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp index 9d0b413..e789a9c 100644 --- a/src/network/access/qhttp.cpp +++ b/src/network/access/qhttp.cpp @@ -516,7 +516,7 @@ public: \obsolete \brief The QHttpHeader class contains header information for HTTP. - \ingroup io + \ingroup network \inmodule QtNetwork In most cases you should use the more specialized derivatives of @@ -1011,7 +1011,7 @@ public: \obsolete \brief The QHttpResponseHeader class contains response header information for HTTP. - \ingroup io + \ingroup network \inmodule QtNetwork This class is used by the QHttp class to report the header @@ -1216,7 +1216,7 @@ public: \obsolete \brief The QHttpRequestHeader class contains request header information for HTTP. - \ingroup io + \ingroup network \inmodule QtNetwork This class is used in the QHttp class to report the header @@ -1421,9 +1421,9 @@ QString QHttpRequestHeader::toString() const \brief The QHttp class provides an implementation of the HTTP protocol. - \ingroup io + \ingroup network \inmodule QtNetwork - \mainclass + This class provides a direct interface to HTTP that allows you to download and upload data with the HTTP protocol. diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index cc83e40..721f8c4 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE \brief The QNetworkRequest class holds one request to be sent with the Network Access API. \since 4.4 - \ingroup io + \ingroup network \inmodule QtNetwork QNetworkRequest is part of the Network Access API and is the class diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index d0e60f7..fc9ff8b 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -64,7 +64,7 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas \since 4.3 \reentrant - \ingroup io + \ingroup network \inmodule QtNetwork The QAuthenticator class is usually used in the diff --git a/src/network/kernel/qhostaddress.cpp b/src/network/kernel/qhostaddress.cpp index 2391732..84bfee5 100644 --- a/src/network/kernel/qhostaddress.cpp +++ b/src/network/kernel/qhostaddress.cpp @@ -419,7 +419,7 @@ void QNetmaskAddress::setPrefixLength(QAbstractSocket::NetworkLayerProtocol prot /*! \class QHostAddress \brief The QHostAddress class provides an IP address. - \ingroup io + \ingroup network \inmodule QtNetwork This class holds an IPv4 or IPv6 address in a platform- and diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp index 0b8e15c..ee1369d 100644 --- a/src/network/kernel/qhostinfo.cpp +++ b/src/network/kernel/qhostinfo.cpp @@ -73,7 +73,7 @@ void QHostInfoAgent::staticCleanup() \reentrant \inmodule QtNetwork - \ingroup io + \ingroup network QHostInfo uses the lookup mechanisms provided by the operating system to find the IP address(es) associated with a host name, diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp index f4088f8..d6ce745 100644 --- a/src/network/kernel/qnetworkinterface.cpp +++ b/src/network/kernel/qnetworkinterface.cpp @@ -148,7 +148,7 @@ QString QNetworkInterfacePrivate::makeHwAddress(int len, uchar *data) \since 4.2 \reentrant - \ingroup io + \ingroup network Each network interface can contain zero or more IP addresses, which in turn can be associated with a netmask and/or a broadcast @@ -333,7 +333,7 @@ void QNetworkAddressEntry::setBroadcast(const QHostAddress &newBroadcast) \since 4.2 \reentrant - \ingroup io + \ingroup network QNetworkInterface represents one network interface attached to the host where the program is being run. Each network interface may diff --git a/src/network/kernel/qnetworkproxy.cpp b/src/network/kernel/qnetworkproxy.cpp index 4a8d997..0fa54ed 100644 --- a/src/network/kernel/qnetworkproxy.cpp +++ b/src/network/kernel/qnetworkproxy.cpp @@ -48,7 +48,7 @@ \brief The QNetworkProxy class provides a network layer proxy. \reentrant - \ingroup io + \ingroup network \inmodule QtNetwork QNetworkProxy provides the method for configuring network layer @@ -1118,7 +1118,7 @@ void QNetworkProxyQuery::setUrl(const QUrl &url) \brief The QNetworkProxyFactory class provides fine-grained proxy selection. \since 4.5 - \ingroup io + \ingroup network \inmodule QtNetwork QNetworkProxyFactory is an extension to QNetworkProxy, allowing diff --git a/src/network/kernel/qurlinfo.cpp b/src/network/kernel/qurlinfo.cpp index 626bce2..5ab200c 100644 --- a/src/network/kernel/qurlinfo.cpp +++ b/src/network/kernel/qurlinfo.cpp @@ -85,7 +85,7 @@ public: \brief The QUrlInfo class stores information about URLs. \ingroup io - \ingroup misc + \ingroup network The information about a URL that can be retrieved includes name(), permissions(), owner(), group(), size(), lastModified(), diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 49ffe3d..1ebe213 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -48,7 +48,7 @@ common to all socket types. \reentrant - \ingroup io + \ingroup network \inmodule QtNetwork QAbstractSocket is the base class for QTcpSocket and QUdpSocket diff --git a/src/network/socket/qnativesocketengine.cpp b/src/network/socket/qnativesocketengine.cpp index a1643fe..45b06cb 100644 --- a/src/network/socket/qnativesocketengine.cpp +++ b/src/network/socket/qnativesocketengine.cpp @@ -47,7 +47,7 @@ \brief The QNativeSocketEngine class provides low level access to a socket. \reentrant - \ingroup io + \ingroup network \inmodule QtNetwork QtSocketLayer provides basic socket functionality provided by the diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp index 11d5c3a..a73c2ac 100644 --- a/src/network/socket/qtcpserver.cpp +++ b/src/network/socket/qtcpserver.cpp @@ -46,7 +46,7 @@ \brief The QTcpServer class provides a TCP-based server. \reentrant - \ingroup io + \ingroup network \inmodule QtNetwork This class makes it possible to accept incoming TCP connections. diff --git a/src/network/socket/qtcpsocket.cpp b/src/network/socket/qtcpsocket.cpp index af1cee7..604143a 100644 --- a/src/network/socket/qtcpsocket.cpp +++ b/src/network/socket/qtcpsocket.cpp @@ -47,7 +47,7 @@ \brief The QTcpSocket class provides a TCP socket. \reentrant - \ingroup io + \ingroup network \inmodule QtNetwork TCP (Transmission Control Protocol) is a reliable, diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 3883ff5..0d055f7 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -46,7 +46,7 @@ \reentrant \brief The QUdpSocket class provides a UDP socket. - \ingroup io + \ingroup network \inmodule QtNetwork UDP (User Datagram Protocol) is a lightweight, unreliable, diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp index c4f792e..1913b49 100644 --- a/src/network/ssl/qssl.cpp +++ b/src/network/ssl/qssl.cpp @@ -49,7 +49,8 @@ QT_BEGIN_NAMESPACE \brief The QSsl namespace declares enums common to all SSL classes in QtNetwork. \since 4.3 - \ingroup io + \ingroup network + \ingroup ssl \inmodule QtNetwork */ diff --git a/src/network/ssl/qsslcertificate.cpp b/src/network/ssl/qsslcertificate.cpp index 7e4bd7f..2782e1b 100644 --- a/src/network/ssl/qsslcertificate.cpp +++ b/src/network/ssl/qsslcertificate.cpp @@ -46,7 +46,7 @@ \since 4.3 \reentrant - \ingroup io + \ingroup network \ingroup ssl \inmodule QtNetwork diff --git a/src/network/ssl/qsslcipher.cpp b/src/network/ssl/qsslcipher.cpp index e13733a..d8ad88b 100644 --- a/src/network/ssl/qsslcipher.cpp +++ b/src/network/ssl/qsslcipher.cpp @@ -46,7 +46,7 @@ \since 4.3 \reentrant - \ingroup io + \ingroup network \ingroup ssl \inmodule QtNetwork diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp index f207e99..87db324 100644 --- a/src/network/ssl/qsslconfiguration.cpp +++ b/src/network/ssl/qsslconfiguration.cpp @@ -66,7 +66,7 @@ template<> void QSharedDataPointer<QSslConfigurationPrivate>::detach() \reentrant \inmodule QtNetwork - \ingroup io + \ingroup network \ingroup ssl QSslConfiguration is used by Qt networking classes to relay diff --git a/src/network/ssl/qsslerror.cpp b/src/network/ssl/qsslerror.cpp index 3536bc4..8fbd61f 100644 --- a/src/network/ssl/qsslerror.cpp +++ b/src/network/ssl/qsslerror.cpp @@ -46,7 +46,7 @@ \since 4.3 \reentrant - \ingroup io + \ingroup network \ingroup ssl \inmodule QtNetwork diff --git a/src/network/ssl/qsslkey.cpp b/src/network/ssl/qsslkey.cpp index 185d1e5..c5c7277 100644 --- a/src/network/ssl/qsslkey.cpp +++ b/src/network/ssl/qsslkey.cpp @@ -46,7 +46,7 @@ \since 4.3 \reentrant - \ingroup io + \ingroup network \ingroup ssl \inmodule QtNetwork diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 390b1fc..cdbcb86 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -49,7 +49,7 @@ \since 4.3 \reentrant - \ingroup io + \ingroup network \ingroup ssl \inmodule QtNetwork diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 67c02f2..e031fb5 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -147,7 +147,7 @@ QGLSignalProxy *QGLSignalProxy::instance() \brief The QGL namespace specifies miscellaneous identifiers used in the Qt OpenGL module. - \ingroup multimedia + \ingroup painting-3D */ /*! @@ -190,7 +190,7 @@ QGLSignalProxy *QGLSignalProxy::instance() \brief The QGLFormat class specifies the display format of an OpenGL rendering context. - \ingroup multimedia + \ingroup painting-3D A display format has several characteristics: \list @@ -1554,7 +1554,7 @@ Q_OPENGL_EXPORT QGLShareRegister* qgl_share_reg() \class QGLContext \brief The QGLContext class encapsulates an OpenGL rendering context. - \ingroup multimedia + \ingroup painting-3D An OpenGL rendering context is a complete set of OpenGL state variables. The rendering context's \l {QGL::FormatOption} {format} @@ -2775,8 +2775,8 @@ const QGLContext* QGLContext::currentContext() \class QGLWidget \brief The QGLWidget class is a widget for rendering OpenGL graphics. - \ingroup multimedia - \mainclass + \ingroup painting-3D + QGLWidget provides functionality for displaying OpenGL graphics integrated into a Qt application. It is very simple to use. You diff --git a/src/opengl/qglcolormap.cpp b/src/opengl/qglcolormap.cpp index 0d38ce7..cdbf1c8 100644 --- a/src/opengl/qglcolormap.cpp +++ b/src/opengl/qglcolormap.cpp @@ -45,7 +45,7 @@ QGLWidgets. \module OpenGL - \ingroup multimedia + \ingroup painting-3D \ingroup shared QGLColormap provides a platform independent way of specifying and diff --git a/src/opengl/qglframebufferobject.cpp b/src/opengl/qglframebufferobject.cpp index f48c18d..db33297 100644 --- a/src/opengl/qglframebufferobject.cpp +++ b/src/opengl/qglframebufferobject.cpp @@ -90,7 +90,7 @@ public: \since 4.6 - \ingroup multimedia + \ingroup painting-3D A framebuffer object has several characteristics: \list @@ -275,7 +275,6 @@ public: GLenum target; QSize size; QGLFramebufferObjectFormat format; - int samples; uint valid : 1; uint bound : 1; QGLFramebufferObject::Attachment fbo_attachment; @@ -368,7 +367,6 @@ void QGLFramebufferObjectPrivate::init(const QSize &sz, QGLFramebufferObject::At valid = checkFramebufferStatus(); color_buffer = 0; - samples = 0; } else { GLint maxSamples; glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples); @@ -478,7 +476,7 @@ void QGLFramebufferObjectPrivate::init(const QSize &sz, QGLFramebufferObject::At \brief The QGLFramebufferObject class encapsulates an OpenGL framebuffer object. \since 4.2 - \ingroup multimedia + \ingroup painting-3D The QGLFramebufferObject class encapsulates an OpenGL framebuffer object, defined by the \c{GL_EXT_framebuffer_object} extension. In diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp index 884bb36..4140bdf 100644 --- a/src/opengl/qglpixelbuffer.cpp +++ b/src/opengl/qglpixelbuffer.cpp @@ -44,7 +44,7 @@ \brief The QGLPixelBuffer class encapsulates an OpenGL pbuffer. \since 4.1 - \ingroup multimedia + \ingroup painting-3D Rendering into a pbuffer is normally done using full hardware acceleration. This can be significantly faster than rendering diff --git a/src/opengl/qglshaderprogram.cpp b/src/opengl/qglshaderprogram.cpp index e3627ff..f8bffd3 100644 --- a/src/opengl/qglshaderprogram.cpp +++ b/src/opengl/qglshaderprogram.cpp @@ -55,6 +55,7 @@ QT_BEGIN_NAMESPACE \class QGLShaderProgram \brief The QGLShaderProgram class allows OpenGL shader programs to be linked and used. \since 4.6 + \ingroup painting-3D \section1 Introduction @@ -181,6 +182,7 @@ QT_BEGIN_NAMESPACE \class QGLShader \brief The QGLShader class allows OpenGL shaders to be compiled. \since 4.6 + \ingroup painting-3D This class supports shaders written in the OpenGL Shading Language (GLSL) and in the OpenGL/ES Shading Language (GLSL/ES). diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp index a1edbd6..774162c 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.cpp @@ -64,13 +64,16 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; IDirectFB *dfb; - IDirectFBSurface *dfbSurface; DFBSurfaceFlipFlags flipFlags; + QDirectFBScreen::DirectFBFlags directFBFlags; + QImage::Format alphaPixmapFormat; + IDirectFBScreen *dfbScreen; +#ifdef QT_NO_DIRECTFB_WM + IDirectFBSurface *primarySurface; +#endif #ifndef QT_NO_DIRECTFB_LAYER IDirectFBDisplayLayer *dfbLayer; #endif - IDirectFBScreen *dfbScreen; - QSet<IDirectFBSurface*> allocatedSurfaces; #ifndef QT_NO_DIRECTFB_MOUSE @@ -79,26 +82,26 @@ public: #ifndef QT_NO_DIRECTFB_KEYBOARD QDirectFBKeyboardHandler *keyboard; #endif - QDirectFBScreen::DirectFBFlags directFBFlags; - QImage::Format alphaPixmapFormat; QColor backgroundColor; QDirectFBScreen *q; }; QDirectFBScreenPrivate::QDirectFBScreenPrivate(QDirectFBScreen *qptr) - : QWSGraphicsSystem(qptr), dfb(0), dfbSurface(0), flipFlags(DSFLIP_NONE) + : QWSGraphicsSystem(qptr), dfb(0), flipFlags(DSFLIP_NONE), + directFBFlags(QDirectFBScreen::NoFlags), alphaPixmapFormat(QImage::Format_Invalid), + dfbScreen(0) +#ifdef QT_NO_DIRECTFB_WM + , primarySurface(0) +#endif #ifndef QT_NO_DIRECTFB_LAYER , dfbLayer(0) #endif - , dfbScreen(0) #ifndef QT_NO_DIRECTFB_MOUSE , mouse(0) #endif #ifndef QT_NO_DIRECTFB_KEYBOARD , keyboard(0) #endif - , directFBFlags(QDirectFBScreen::NoFlags) - , alphaPixmapFormat(QImage::Format_Invalid) , q(qptr) { #ifndef QT_NO_QWS_SIGNALHANDLER @@ -119,8 +122,10 @@ QDirectFBScreenPrivate::~QDirectFBScreenPrivate() (*it)->Release(*it); } - if (dfbSurface) - dfbSurface->Release(dfbSurface); +#ifdef QT_NO_DIRECTFB_WM + if (primarySurface) + primarySurface->Release(primarySurface); +#endif #ifndef QT_NO_DIRECTFB_LAYER if (dfbLayer) @@ -366,10 +371,12 @@ IDirectFB *QDirectFBScreen::dfb() return d_ptr->dfb; } -IDirectFBSurface *QDirectFBScreen::dfbSurface() +#ifdef QT_NO_DIRECTFB_WM +IDirectFBSurface *QDirectFBScreen::primarySurface() { - return d_ptr->dfbSurface; + return d_ptr->primarySurface; } +#endif #ifndef QT_NO_DIRECTFB_LAYER IDirectFBDisplayLayer *QDirectFBScreen::dfbDisplayLayer() @@ -863,6 +870,36 @@ static inline bool setIntOption(const QStringList &arguments, const QString &var return false; } +static inline int depth(QImage::Format format) +{ + switch (format) { + case QImage::Format_Mono: + case QImage::Format_MonoLSB: + return 1; + case QImage::Format_Indexed8: + return 8; + case QImage::Format_RGB32: + case QImage::Format_ARGB32: + case QImage::Format_ARGB32_Premultiplied: + return 32; + case QImage::Format_ARGB8565_Premultiplied: + case QImage::Format_RGB666: + case QImage::Format_ARGB6666_Premultiplied: + case QImage::Format_ARGB8555_Premultiplied: + case QImage::Format_RGB888: + return 24; + case QImage::Format_RGB555: + case QImage::Format_RGB444: + case QImage::Format_RGB16: + case QImage::Format_ARGB4444_Premultiplied: + return 16; + case QImage::Format_Invalid: + case QImage::NImageFormats: + break; + } + return -1; +} + bool QDirectFBScreen::connect(const QString &displaySpec) { DFBResult result = DFB_OK; @@ -923,7 +960,9 @@ bool QDirectFBScreen::connect(const QString &displaySpec) DFBSurfaceDescription description; memset(&description, 0, sizeof(DFBSurfaceDescription)); + IDirectFBSurface *surface; +#ifdef QT_NO_DIRECTFB_WM description.flags = DSDESC_CAPS; if (::setIntOption(displayArgs, QLatin1String("width"), &description.width)) description.flags |= DSDESC_WIDTH; @@ -952,15 +991,22 @@ bool QDirectFBScreen::connect(const QString &displaySpec) } // We don't track the primary surface as it's released in disconnect - d_ptr->dfbSurface = createDFBSurface(description, DontTrackSurface); - if (!d_ptr->dfbSurface) { + d_ptr->primarySurface = createDFBSurface(description, DontTrackSurface); + if (!d_ptr->primarySurface) { DirectFBError("QDirectFBScreen: error creating primary surface", result); return false; } + surface = d_ptr->primarySurface; +#else + description.flags = DSDESC_WIDTH|DSDESC_HEIGHT; + description.width = description.height = 1; + surface = createDFBSurface(description, DontTrackSurface); +#endif // Work out what format we're going to use for surfaces with an alpha channel - d_ptr->alphaPixmapFormat = QDirectFBScreen::getImageFormat(d_ptr->dfbSurface); + d_ptr->alphaPixmapFormat = QDirectFBScreen::getImageFormat(surface); + setPixelFormat(d_ptr->alphaPixmapFormat); switch (d_ptr->alphaPixmapFormat) { case QImage::Format_RGB666: @@ -994,31 +1040,11 @@ bool QDirectFBScreen::connect(const QString &displaySpec) // works already break; } - d_ptr->dfbSurface->GetSize(d_ptr->dfbSurface, &w, &h); + QScreen::d = ::depth(pixelFormat()); data = 0; lstep = 0; size = 0; - dw = w; - dh = h; - - DFBSurfacePixelFormat format; - result = d_ptr->dfbSurface->GetPixelFormat(d_ptr->dfbSurface, &format); - if (result == DFB_OK) - QScreen::d = depth(format); - else - DirectFBError("QDirectFBScreen: error getting surface format", result); - - setPixelFormat(getImageFormat(d_ptr->dfbSurface)); - - physWidth = physHeight = -1; - ::setIntOption(displayArgs, QLatin1String("mmWidth"), &physWidth); - ::setIntOption(displayArgs, QLatin1String("mmHeight"), &physHeight); - const int dpi = 72; - if (physWidth < 0) - physWidth = qRound(dw * 25.4 / dpi); - if (physHeight < 0) - physHeight = qRound(dh * 25.4 / dpi); #ifndef QT_NO_DIRECTFB_LAYER result = d_ptr->dfb->GetDisplayLayer(d_ptr->dfb, DLID_PRIMARY, @@ -1037,12 +1063,35 @@ bool QDirectFBScreen::connect(const QString &displaySpec) "Unable to get screen!", result); return false; } + result = d_ptr->dfbScreen->GetSize(d_ptr->dfbScreen, &w, &h); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen::connect: " + "Unable to get screen size!", result); + return false; + } + + dw = w; + dh = h; + + Q_ASSERT(dw != 0 && dh != 0); + + physWidth = physHeight = -1; + ::setIntOption(displayArgs, QLatin1String("mmWidth"), &physWidth); + ::setIntOption(displayArgs, QLatin1String("mmHeight"), &physHeight); + const int dpi = 72; + if (physWidth < 0) + physWidth = qRound(dw * 25.4 / dpi); + if (physHeight < 0) + physHeight = qRound(dh * 25.4 / dpi); setGraphicsSystem(d_ptr); #if (Q_DIRECTFB_VERSION >= 0x000923) if (displayArgs.contains(QLatin1String("debug"), Qt::CaseInsensitive)) - printDirectFBInfo(d_ptr->dfb, d_ptr->dfbSurface); + printDirectFBInfo(d_ptr->dfb, surface); +#endif +#ifndef QT_NO_DIRECTFB_WM + surface->Release(surface); #endif QRegExp backgroundColorRegExp("bgcolor=?(.+)"); @@ -1058,8 +1107,10 @@ bool QDirectFBScreen::connect(const QString &displaySpec) void QDirectFBScreen::disconnect() { - d_ptr->dfbSurface->Release(d_ptr->dfbSurface); - d_ptr->dfbSurface = 0; +#ifdef QT_NO_DIRECTFB_WM + d_ptr->primarySurface->Release(d_ptr->primarySurface); + d_ptr->primarySurface = 0; +#endif foreach (IDirectFBSurface *surf, d_ptr->allocatedSurfaces) surf->Release(surf); @@ -1155,25 +1206,9 @@ QWSWindowSurface *QDirectFBScreen::createSurface(const QString &key) const // QT_NO_DIRECTFB_WM isn't set), exposeRegion will simply return. If // QT_NO_DIRECTFB_WM is set, exposeRegion will compose only non-directFB // window surfaces. Normal, directFB surfaces are handled by DirectFB. -static inline bool needExposeRegion() -{ -#ifdef QT_NO_DIRECTFB_WM - return true; -#endif -#ifdef QT_NO_DIRECTFB_LAYER -#ifndef QT_NO_QWS_CURSOR - return true; -#endif -#endif - return false; -} - void QDirectFBScreen::exposeRegion(QRegion r, int changing) { - if (!needExposeRegion()) { - return; - } - +#ifdef QT_NO_DIRECTFB_WM const QList<QWSWindow*> windows = QWSServer::instance()->clientWindows(); if (changing < 0 || changing >= windows.size()) return; @@ -1207,9 +1242,9 @@ void QDirectFBScreen::exposeRegion(QRegion r, int changing) const DFBRectangle rect = { source.x(), source.y(), source.width(), source.height() }; - d_ptr->dfbSurface->Blit(d_ptr->dfbSurface, surface, &rect, - windowGeometry.x() + source.x(), - windowGeometry.y() + source.y()); + d_ptr->primarySurface->Blit(d_ptr->primarySurface, surface, &rect, + windowGeometry.x() + source.x(), + windowGeometry.y() + source.y()); } else { const QVector<QRect> rects = insideWindow.rects(); QVarLengthArray<DFBRectangle, 16> dfbRectangles(n); @@ -1225,8 +1260,8 @@ void QDirectFBScreen::exposeRegion(QRegion r, int changing) dfbPoints[i].x = (windowGeometry.x() + source.x()); dfbPoints[i].y = (windowGeometry.y() + source.y()); } - d_ptr->dfbSurface->BatchBlit(d_ptr->dfbSurface, surface, dfbRectangles.constData(), - dfbPoints.constData(), n); + d_ptr->primarySurface->BatchBlit(d_ptr->primarySurface, surface, dfbRectangles.constData(), + dfbPoints.constData(), n); } } } @@ -1237,29 +1272,37 @@ void QDirectFBScreen::exposeRegion(QRegion r, int changing) if (cursor->isVisible() && !cursor->isAccelerated() && cursorRectangle.intersects(brect)) { const QImage image = cursor->image(); IDirectFBSurface *surface = createDFBSurface(image, QDirectFBScreen::DontTrackSurface); - d_ptr->dfbSurface->SetBlittingFlags(d_ptr->dfbSurface, DSBLIT_BLEND_ALPHACHANNEL); - d_ptr->dfbSurface->Blit(d_ptr->dfbSurface, surface, 0, cursorRectangle.x(), cursorRectangle.y()); + d_ptr->primarySurface->SetBlittingFlags(d_ptr->primarySurface, DSBLIT_BLEND_ALPHACHANNEL); + d_ptr->primarySurface->Blit(d_ptr->primarySurface, surface, 0, cursorRectangle.x(), cursorRectangle.y()); surface->Release(surface); #if (Q_DIRECTFB_VERSION >= 0x010000) - d_ptr->dfbSurface->ReleaseSource(d_ptr->dfbSurface); + d_ptr->primarySurface->ReleaseSource(d_ptr->primarySurface); #endif } } - flipSurface(d_ptr->dfbSurface, d_ptr->flipFlags, r, QPoint()); + flipSurface(d_ptr->primarySurface, d_ptr->flipFlags, r, QPoint()); +#else + Q_UNUSED(r); + Q_UNUSED(changing); +#endif } void QDirectFBScreen::solidFill(const QColor &color, const QRegion ®ion) { +#ifdef QT_DIRECTFB_WM + Q_UNUSED(color); + Q_UNUSED(region); +#else if (region.isEmpty()) return; - d_ptr->dfbSurface->SetColor(d_ptr->dfbSurface, + d_ptr->primarySurface->SetColor(d_ptr->primarySurface, color.red(), color.green(), color.blue(), color.alpha()); const int n = region.numRects(); if (n > 1) { const QRect r = region.boundingRect(); - d_ptr->dfbSurface->FillRectangle(d_ptr->dfbSurface, r.x(), r.y(), r.width(), r.height()); + d_ptr->primarySurface->FillRectangle(d_ptr->primarySurface, r.x(), r.y(), r.width(), r.height()); } else { const QVector<QRect> rects = region.rects(); QVarLengthArray<DFBRectangle, 32> rectArray(n); @@ -1270,8 +1313,9 @@ void QDirectFBScreen::solidFill(const QColor &color, const QRegion ®ion) rectArray[i].w = r.width(); rectArray[i].h = r.height(); } - d_ptr->dfbSurface->FillRectangles(d_ptr->dfbSurface, rectArray.constData(), n); + d_ptr->primarySurface->FillRectangles(d_ptr->primarySurface, rectArray.constData(), n); } +#endif } void QDirectFBScreen::erase(const QRegion ®ion) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h index 78765ac..3f9248e 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbscreen.h @@ -50,6 +50,31 @@ QT_BEGIN_HEADER QT_MODULE(Gui) +#if !defined QT_NO_DIRECTFB_LAYER && !defined QT_DIRECTFB_LAYER +#define QT_DIRECTFB_LAYER +#endif +#if !defined QT_NO_DIRECTFB_WM && !defined QT_DIRECTFB_WM +#define QT_DIRECTFB_WM +#endif +#if !defined QT_DIRECTFB_IMAGECACHE && !defined QT_NO_DIRECTFB_IMAGECACHE +#define QT_NO_DIRECTFB_IMAGECACHE +#endif +#if !defined QT_NO_DIRECTFB_PALETTE && !defined QT_DIRECTFB_PALETTE +#define QT_DIRECTFB_PALETTE +#endif +#if !defined QT_NO_DIRECTFB_PREALLOCATED && !defined QT_DIRECTFB_PREALLOCATED +#define QT_DIRECTFB_PREALLOCATED +#endif +#if !defined QT_NO_DIRECTFB_MOUSE && !defined QT_DIRECTFB_MOUSE +#define QT_DIRECTFB_MOUSE +#endif +#if !defined QT_NO_DIRECTFB_KEYBOARD && !defined QT_DIRECTFB_KEYBOARD +#define QT_DIRECTFB_KEYBOARD +#endif +#if !defined QT_NO_DIRECTFB_OPAQUE_DETECTION && !defined QT_DIRECTFB_OPAQUE_DETECTION +#define QT_DIRECTFB_OPAQUE_DETECTION +#endif + #define Q_DIRECTFB_VERSION ((DIRECTFB_MAJOR_VERSION << 16) | (DIRECTFB_MINOR_VERION << 8) | DIRECTFB_MICRO_VERSION) #define DIRECTFB_DECLARE_OPERATORS_FOR_FLAGS(F) \ @@ -108,7 +133,9 @@ public: } IDirectFB *dfb(); - IDirectFBSurface *dfbSurface(); +#ifdef QT_NO_DIRECTFB_WM + IDirectFBSurface *primarySurface(); +#endif #ifndef QT_NO_DIRECTFB_LAYER IDirectFBDisplayLayer *dfbDisplayLayer(); #endif diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp index d837509..584f334 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.cpp @@ -55,14 +55,11 @@ QDirectFBWindowSurface::QDirectFBWindowSurface(DFBSurfaceFlipFlags flip, QDirect #ifndef QT_NO_DIRECTFB_WM , dfbWindow(0) #endif - , engineHeight(-1) , flipFlags(flip) , boundingRectFlip(scr->directFBFlags() & QDirectFBScreen::BoundingRectFlip) { #ifdef QT_NO_DIRECTFB_WM mode = Offscreen; -#else - mode = Window; #endif setSurfaceFlags(Opaque | Buffered); #ifdef QT_DIRECTFB_TIMING @@ -76,21 +73,21 @@ QDirectFBWindowSurface::QDirectFBWindowSurface(DFBSurfaceFlipFlags flip, QDirect #ifndef QT_NO_DIRECTFB_WM , dfbWindow(0) #endif - , engineHeight(-1) , flipFlags(flip) , boundingRectFlip(scr->directFBFlags() & QDirectFBScreen::BoundingRectFlip) { +#ifdef QT_NO_DIRECTFB_WM if (widget && widget->testAttribute(Qt::WA_PaintOnScreen)) { setSurfaceFlags(Opaque | RegionReserved); mode = Primary; } else { -#ifdef QT_NO_DIRECTFB_WM mode = Offscreen; -#else - mode = Window; -#endif setSurfaceFlags(Opaque | Buffered); } +#else + setSurfaceFlags(Opaque | Buffered); +#endif + #ifdef QT_DIRECTFB_TIMING frames = 0; timer.start(); @@ -172,8 +169,10 @@ static DFBResult setGeometry(IDirectFBWindow *dfbWindow, const QRect &old, const void QDirectFBWindowSurface::setGeometry(const QRect &rect) { - IDirectFBSurface *primarySurface = screen->dfbSurface(); +#ifdef QT_NO_DIRECTFB_WM + IDirectFBSurface *primarySurface = screen->primarySurface(); Q_ASSERT(primarySurface); +#endif if (rect.isNull()) { #ifndef QT_NO_DIRECTFB_WM if (dfbWindow) { @@ -182,9 +181,10 @@ void QDirectFBWindowSurface::setGeometry(const QRect &rect) } #endif if (dfbSurface) { - if (dfbSurface != primarySurface) { +#ifdef QT_NO_DIRECTFB_WM + if (dfbSurface != primarySurface) +#endif dfbSurface->Release(dfbSurface); - } dfbSurface = 0; } } else if (rect != geometry()) { @@ -192,8 +192,12 @@ void QDirectFBWindowSurface::setGeometry(const QRect &rect) DFBResult result = DFB_OK; // If we're in a resize, the surface shouldn't be locked Q_ASSERT((lockedImage == 0) || (rect.size() == geometry().size())); - switch (mode) { - case Primary: +#ifdef QT_DIRECTFB_WM + if (!dfbWindow) + createWindow(); + ::setGeometry(dfbWindow, oldRect, rect); +#else + if (mode == Primary) { if (dfbSurface && dfbSurface != primarySurface) dfbSurface->Release(dfbSurface); if (rect == screen->region().boundingRect()) { @@ -203,15 +207,7 @@ void QDirectFBWindowSurface::setGeometry(const QRect &rect) rect.width(), rect.height() }; result = primarySurface->GetSubSurface(primarySurface, &r, &dfbSurface); } - break; - case Window: -#ifndef QT_NO_DIRECTFB_WM - if (!dfbWindow) - createWindow(); - ::setGeometry(dfbWindow, oldRect, rect); -#endif - break; - case Offscreen: { + } else { if (!dfbSurface || oldRect.size() != rect.size()) { if (dfbSurface) dfbSurface->Release(dfbSurface); @@ -220,16 +216,16 @@ void QDirectFBWindowSurface::setGeometry(const QRect &rect) const QRegion region = QRegion(oldRect.isEmpty() ? screen->region() : QRegion(oldRect)).subtracted(rect); screen->erase(region); screen->flipSurface(primarySurface, flipFlags, region, QPoint()); - break; } + } +#endif + if (size() != geometry().size()) { + delete engine; + engine = 0; } if (result != DFB_OK) DirectFBErrorFatal("QDirectFBWindowSurface::setGeometry()", result); } - if (engine) { - delete engine; - engine = 0; - } QWSWindowSurface::setGeometry(rect); } @@ -349,7 +345,8 @@ void QDirectFBWindowSurface::flush(QWidget *, const QRegion ®ion, } const QRect windowGeometry = QDirectFBWindowSurface::geometry(); - IDirectFBSurface *primarySurface = screen->dfbSurface(); +#ifdef QT_NO_DIRECTFB_WM + IDirectFBSurface *primarySurface = screen->primarySurface(); if (mode == Offscreen) { primarySurface->SetBlittingFlags(primarySurface, DSBLIT_NOFX); const QRect windowRect(0, 0, windowGeometry.width(), windowGeometry.height()); @@ -401,9 +398,9 @@ void QDirectFBWindowSurface::flush(QWidget *, const QRegion ®ion, } if (mode == Offscreen) { screen->flipSurface(primarySurface, flipFlags, region, offset + windowGeometry.topLeft()); - } else { - screen->flipSurface(dfbSurface, flipFlags, region, offset); - } + } else +#endif + screen->flipSurface(dfbSurface, flipFlags, region, offset); #ifdef QT_DIRECTFB_TIMING enum { Secs = 3 }; @@ -419,12 +416,8 @@ void QDirectFBWindowSurface::flush(QWidget *, const QRegion ®ion, void QDirectFBWindowSurface::beginPaint(const QRegion &) { - const int h = height(); - if (h > engineHeight) { - engineHeight = h; - delete engine; + if (!engine) engine = new QDirectFBPaintEngine(this); - } } void QDirectFBWindowSurface::endPaint(const QRegion &) diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h index 0d6ebc0..64b1920 100644 --- a/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h +++ b/src/plugins/gfxdrivers/directfb/qdirectfbwindowsurface.h @@ -91,13 +91,13 @@ private: void createWindow(); IDirectFBWindow *dfbWindow; #endif - int engineHeight; +#ifdef QT_NO_DIRECTFB_WM enum Mode { Primary, - Offscreen, - Window + Offscreen } mode; +#endif QList<QImage*> bufferImages; DFBSurfaceFlipFlags flipFlags; diff --git a/doc/src/classes/q3sqlfieldinfo.qdoc b/src/qt3support/sql/q3sqlfieldinfo.qdoc index 6f6f359..6f6f359 100644 --- a/doc/src/classes/q3sqlfieldinfo.qdoc +++ b/src/qt3support/sql/q3sqlfieldinfo.qdoc diff --git a/doc/src/classes/q3sqlrecordinfo.qdoc b/src/qt3support/sql/q3sqlrecordinfo.qdoc index ce60f6d..ce60f6d 100644 --- a/doc/src/classes/q3sqlrecordinfo.qdoc +++ b/src/qt3support/sql/q3sqlrecordinfo.qdoc diff --git a/doc/src/classes/q3asciicache.qdoc b/src/qt3support/tools/q3asciicache.qdoc index b86113f..b86113f 100644 --- a/doc/src/classes/q3asciicache.qdoc +++ b/src/qt3support/tools/q3asciicache.qdoc diff --git a/doc/src/classes/q3asciidict.qdoc b/src/qt3support/tools/q3asciidict.qdoc index 1262a37..1262a37 100644 --- a/doc/src/classes/q3asciidict.qdoc +++ b/src/qt3support/tools/q3asciidict.qdoc diff --git a/doc/src/classes/q3cache.qdoc b/src/qt3support/tools/q3cache.qdoc index 20b777f..20b777f 100644 --- a/doc/src/classes/q3cache.qdoc +++ b/src/qt3support/tools/q3cache.qdoc diff --git a/doc/src/classes/q3dict.qdoc b/src/qt3support/tools/q3dict.qdoc index 2234c2d..2234c2d 100644 --- a/doc/src/classes/q3dict.qdoc +++ b/src/qt3support/tools/q3dict.qdoc diff --git a/doc/src/classes/q3intcache.qdoc b/src/qt3support/tools/q3intcache.qdoc index 770532e..770532e 100644 --- a/doc/src/classes/q3intcache.qdoc +++ b/src/qt3support/tools/q3intcache.qdoc diff --git a/doc/src/classes/q3intdict.qdoc b/src/qt3support/tools/q3intdict.qdoc index 731050d..731050d 100644 --- a/doc/src/classes/q3intdict.qdoc +++ b/src/qt3support/tools/q3intdict.qdoc diff --git a/doc/src/classes/q3memarray.qdoc b/src/qt3support/tools/q3memarray.qdoc index eb0648c..eb0648c 100644 --- a/doc/src/classes/q3memarray.qdoc +++ b/src/qt3support/tools/q3memarray.qdoc diff --git a/doc/src/classes/q3ptrdict.qdoc b/src/qt3support/tools/q3ptrdict.qdoc index 531b085..531b085 100644 --- a/doc/src/classes/q3ptrdict.qdoc +++ b/src/qt3support/tools/q3ptrdict.qdoc diff --git a/doc/src/classes/q3ptrlist.qdoc b/src/qt3support/tools/q3ptrlist.qdoc index b2b9c3f..b2b9c3f 100644 --- a/doc/src/classes/q3ptrlist.qdoc +++ b/src/qt3support/tools/q3ptrlist.qdoc diff --git a/doc/src/classes/q3ptrqueue.qdoc b/src/qt3support/tools/q3ptrqueue.qdoc index c60193c..c60193c 100644 --- a/doc/src/classes/q3ptrqueue.qdoc +++ b/src/qt3support/tools/q3ptrqueue.qdoc diff --git a/doc/src/classes/q3ptrstack.qdoc b/src/qt3support/tools/q3ptrstack.qdoc index 071fcd0..071fcd0 100644 --- a/doc/src/classes/q3ptrstack.qdoc +++ b/src/qt3support/tools/q3ptrstack.qdoc diff --git a/doc/src/classes/q3ptrvector.qdoc b/src/qt3support/tools/q3ptrvector.qdoc index c734064..c734064 100644 --- a/doc/src/classes/q3ptrvector.qdoc +++ b/src/qt3support/tools/q3ptrvector.qdoc diff --git a/doc/src/classes/q3valuelist.qdoc b/src/qt3support/tools/q3valuelist.qdoc index 062a9da..062a9da 100644 --- a/doc/src/classes/q3valuelist.qdoc +++ b/src/qt3support/tools/q3valuelist.qdoc diff --git a/doc/src/classes/q3valuestack.qdoc b/src/qt3support/tools/q3valuestack.qdoc index bc44235..bc44235 100644 --- a/doc/src/classes/q3valuestack.qdoc +++ b/src/qt3support/tools/q3valuestack.qdoc diff --git a/doc/src/classes/q3valuevector.qdoc b/src/qt3support/tools/q3valuevector.qdoc index 4ab8896..4ab8896 100644 --- a/doc/src/classes/q3valuevector.qdoc +++ b/src/qt3support/tools/q3valuevector.qdoc diff --git a/src/qt3support/widgets/q3popupmenu.cpp b/src/qt3support/widgets/q3popupmenu.cpp index d2eaaa9..8912748 100644 --- a/src/qt3support/widgets/q3popupmenu.cpp +++ b/src/qt3support/widgets/q3popupmenu.cpp @@ -43,6 +43,43 @@ QT_BEGIN_NAMESPACE /*! + \class Q3PopupMenu + \brief The Q3PopupMenu class is a thin compatibility wrapper around QMenu. + \compat + + Use QMenu in new applications. Note that the menu's actions must + be \l {Q3Action}s. +*/ + +/*! + \fn Q3PopupMenu::Q3PopupMenu(QWidget *parent, const char *name) + + Constructs a menu with the given \a parent and \a name. +*/ + +/*! + \fn int Q3PopupMenu::exec() + + Pops up the menu and returns the ID of the action that was + selected. + + \sa QMenu::exec() +*/ + +/*! + \fn int Q3PopupMenu::exec(const QPoint & pos, int indexAtPoint) + + Pops up the menu at coordinate \a pos and returns the ID of the + action that was selected. + + If \a indexAtPoint is specified, the menu will pop up with the + item at index \a indexAtPoint under the mouse cursor. + + \sa QMenu::exec() +*/ + + +/*! \fn void Q3PopupMenu::setFrameRect(QRect) \internal */ diff --git a/src/script/api/qscriptable.cpp b/src/script/api/qscriptable.cpp index 1d1eec1..eb5972c 100644 --- a/src/script/api/qscriptable.cpp +++ b/src/script/api/qscriptable.cpp @@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE \brief The QScriptable class provides access to the Qt Script environment from Qt C++ member functions. \ingroup script - \mainclass + With QScriptEngine::newQObject(), you can expose the signals and slots and properties of any QObject (or subclass) to script diff --git a/src/script/api/qscriptcontextinfo.cpp b/src/script/api/qscriptcontextinfo.cpp index bd121a1..a305116 100644 --- a/src/script/api/qscriptcontextinfo.cpp +++ b/src/script/api/qscriptcontextinfo.cpp @@ -60,7 +60,7 @@ QT_BEGIN_NAMESPACE \brief The QScriptContextInfo class provides additional information about a QScriptContext. \ingroup script - \mainclass + QScriptContextInfo is typically used for debugging purposes. It can provide information about the code being executed, such as the type diff --git a/src/script/api/qscriptengineagent.cpp b/src/script/api/qscriptengineagent.cpp index d0a60cb..9c352ad 100644 --- a/src/script/api/qscriptengineagent.cpp +++ b/src/script/api/qscriptengineagent.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE \brief The QScriptEngineAgent class provides an interface to report events pertaining to QScriptEngine execution. \ingroup script - \mainclass + The QScriptEngineAgent class is the basis of tools that monitor and/or control the execution of a QScriptEngine, such as debuggers and profilers. diff --git a/src/script/api/qscriptstring.cpp b/src/script/api/qscriptstring.cpp index c5fd83b..bcafa44 100644 --- a/src/script/api/qscriptstring.cpp +++ b/src/script/api/qscriptstring.cpp @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE \brief The QScriptString class acts as a handle to "interned" strings in a QScriptEngine. \ingroup script - \mainclass + QScriptString can be used to achieve faster (repeated) property getting/setting, and comparison of property names, of diff --git a/src/script/api/qscriptvalueiterator.cpp b/src/script/api/qscriptvalueiterator.cpp index 607570d..195a23b 100644 --- a/src/script/api/qscriptvalueiterator.cpp +++ b/src/script/api/qscriptvalueiterator.cpp @@ -63,7 +63,7 @@ QT_BEGIN_NAMESPACE \brief The QScriptValueIterator class provides a Java-style iterator for QScriptValue. \ingroup script - \mainclass + The QScriptValueIterator constructor takes a QScriptValue as argument. After construction, the iterator is located at the very diff --git a/src/scripttools/debugging/qscriptdebugger.cpp b/src/scripttools/debugging/qscriptdebugger.cpp index 8797955..c9bc650 100644 --- a/src/scripttools/debugging/qscriptdebugger.cpp +++ b/src/scripttools/debugging/qscriptdebugger.cpp @@ -136,8 +136,8 @@ static bool scriptDebuggerEventCallback(void **data) \brief The QScriptDebugger class provides a Qt Script debugger. - \ingroup scripttools - \mainclass + \ingroup script + */ class QScriptDebuggerPrivate diff --git a/src/scripttools/debugging/qscriptenginedebugger.cpp b/src/scripttools/debugging/qscriptenginedebugger.cpp index b8ed4ea..0588109 100644 --- a/src/scripttools/debugging/qscriptenginedebugger.cpp +++ b/src/scripttools/debugging/qscriptenginedebugger.cpp @@ -75,8 +75,8 @@ public: \brief The QScriptEngineDebugger class provides a QScriptEngine debugger. - \ingroup scripttools - \mainclass + \ingroup script + The QScriptEngineDebugger class provides a debugger that can be embedded into Qt applications that use Qt Script. The debugger diff --git a/doc/src/qsql.qdoc b/src/sql/kernel/qsql.qdoc index 601a629..8e6e321 100644 --- a/doc/src/qsql.qdoc +++ b/src/sql/kernel/qsql.qdoc @@ -47,7 +47,7 @@ \inheaderfile QtSql \ingroup database - \mainclass + \sa {QtSql Module} */ diff --git a/src/sql/kernel/qsqldatabase.cpp b/src/sql/kernel/qsqldatabase.cpp index e94c247..d155c03 100644 --- a/src/sql/kernel/qsqldatabase.cpp +++ b/src/sql/kernel/qsqldatabase.cpp @@ -363,7 +363,7 @@ void QSqlDatabasePrivate::disable() a database. \ingroup database - \mainclass + \inmodule QtSql The QSqlDatabase class provides an interface for accessing a diff --git a/src/sql/kernel/qsqlquery.cpp b/src/sql/kernel/qsqlquery.cpp index 48ada28..e3944ac 100644 --- a/src/sql/kernel/qsqlquery.cpp +++ b/src/sql/kernel/qsqlquery.cpp @@ -101,7 +101,7 @@ QSqlQueryPrivate::~QSqlQueryPrivate() \ingroup database \ingroup shared - \mainclass + \inmodule QtSql QSqlQuery encapsulates the functionality involved in creating, diff --git a/src/svg/qgraphicssvgitem.cpp b/src/svg/qgraphicssvgitem.cpp index 3a01a41..a287baa 100644 --- a/src/svg/qgraphicssvgitem.cpp +++ b/src/svg/qgraphicssvgitem.cpp @@ -99,7 +99,6 @@ public: /*! \class QGraphicsSvgItem - \ingroup multimedia \ingroup graphicsview-api \brief The QGraphicsSvgItem class is a QGraphicsItem that can be used to render the contents of SVG files. diff --git a/src/svg/qsvggenerator.cpp b/src/svg/qsvggenerator.cpp index 3d9c444..ace4cb8 100644 --- a/src/svg/qsvggenerator.cpp +++ b/src/svg/qsvggenerator.cpp @@ -511,7 +511,7 @@ public: /*! \class QSvgGenerator - \ingroup multimedia + \ingroup painting \since 4.3 \brief The QSvgGenerator class provides a paint device that is used to create SVG drawings. \reentrant diff --git a/src/svg/qsvgrenderer.cpp b/src/svg/qsvgrenderer.cpp index bb1f946..573b4a4 100644 --- a/src/svg/qsvgrenderer.cpp +++ b/src/svg/qsvgrenderer.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE /*! \class QSvgRenderer - \ingroup multimedia + \ingroup painting \brief The QSvgRenderer class is used to draw the contents of SVG files onto paint devices. \since 4.1 diff --git a/src/svg/qsvgtinydocument.cpp b/src/svg/qsvgtinydocument.cpp index 5ab2608..614494f 100644 --- a/src/svg/qsvgtinydocument.cpp +++ b/src/svg/qsvgtinydocument.cpp @@ -61,10 +61,12 @@ QT_BEGIN_NAMESPACE QSvgTinyDocument::QSvgTinyDocument() - : QSvgStructureNode(0), - m_animated(false), - m_animationDuration(0), - m_fps(30) + : QSvgStructureNode(0) + , m_widthPercent(false) + , m_heightPercent(false) + , m_animated(false) + , m_animationDuration(0) + , m_fps(30) { } diff --git a/src/svg/qsvgwidget.cpp b/src/svg/qsvgwidget.cpp index f8e672a..b7b0ab0 100644 --- a/src/svg/qsvgwidget.cpp +++ b/src/svg/qsvgwidget.cpp @@ -52,7 +52,7 @@ QT_BEGIN_NAMESPACE /*! \class QSvgWidget - \ingroup multimedia + \ingroup painting \brief The QSvgWidget class provides a widget that is used to display the contents of Scalable Vector Graphics (SVG) files. diff --git a/doc/src/classes/qsignalspy.qdoc b/src/testlib/qsignalspy.qdoc index 02cb771..02cb771 100644 --- a/doc/src/classes/qsignalspy.qdoc +++ b/src/testlib/qsignalspy.qdoc diff --git a/doc/src/classes/qtestevent.qdoc b/src/testlib/qtestevent.qdoc index 7c67d95..7c67d95 100644 --- a/doc/src/classes/qtestevent.qdoc +++ b/src/testlib/qtestevent.qdoc diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro index 396e9ae..1f81a6c 100644 --- a/src/tools/bootstrap/bootstrap.pro +++ b/src/tools/bootstrap/bootstrap.pro @@ -69,7 +69,7 @@ SOURCES += \ ../../corelib/tools/qbytearraymatcher.cpp \ ../../corelib/tools/qdatetime.cpp \ ../../corelib/tools/qhash.cpp \ - ../../corelib/tools/qlistdata.cpp \ + ../../corelib/tools/qlist.cpp \ ../../corelib/tools/qlocale.cpp \ ../../corelib/tools/qmap.cpp \ ../../corelib/tools/qregexp.cpp \ diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp index 85a31c7..f079851 100644 --- a/src/xml/dom/qdom.cpp +++ b/src/xml/dom/qdom.cpp @@ -1938,7 +1938,7 @@ void QDomNodePrivate::setLocation(int lineNumber, int columnNumber) \inmodule QtXml \ingroup xml-tools - \mainclass + Many functions in the DOM return a QDomNode. @@ -6522,7 +6522,7 @@ void QDomDocumentPrivate::saveDocument(QTextStream& s, const int indent, QDomNod \brief The QDomDocument class represents an XML document. \inmodule QtXml - \mainclass + \ingroup xml-tools The QDomDocument class represents the entire XML document. diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp index 0f17231..b8af8d1 100644 --- a/src/xml/sax/qxml.cpp +++ b/src/xml/sax/qxml.cpp @@ -2986,7 +2986,7 @@ void QXmlSimpleReaderPrivate::initIncrementalParsing() \inmodule QtXml \ingroup xml-tools - \mainclass + This XML reader is suitable for a wide range of applications. It is able to parse well-formed XML and can report the namespaces of diff --git a/src/xmlpatterns/api/qabstractxmlnodemodel.cpp b/src/xmlpatterns/api/qabstractxmlnodemodel.cpp index 307174e..489774e 100644 --- a/src/xmlpatterns/api/qabstractxmlnodemodel.cpp +++ b/src/xmlpatterns/api/qabstractxmlnodemodel.cpp @@ -190,8 +190,7 @@ bool QAbstractXmlNodeModel::isIgnorableInDeepEqual(const QXmlNodeModelIndex &n) Because the node model can be accessed concurrently by threads in the QtXmlPatterns module, subclasses of QAbstractXmlNodeModel must - be written to be \l{Thread Support in Qt#Reentrancy and Thread-Safety} - {thread-safe}. + be written to be \l{Reentrancy and Thread-Safety}{thread-safe}. Classes that simplify implementing thread-safety include QReadLocker and QWriteLocker. diff --git a/src/xmlpatterns/api/qxmlquery.cpp b/src/xmlpatterns/api/qxmlquery.cpp index b5b5244..9f9b136 100644 --- a/src/xmlpatterns/api/qxmlquery.cpp +++ b/src/xmlpatterns/api/qxmlquery.cpp @@ -151,7 +151,7 @@ QT_BEGIN_NAMESPACE \endcode \note For the current release, XSLT support should be considered - experimental. See section \l{QtXmlPatterns Module#XSLT + experimental. See section \l{Using XML technologies#XSLT 2.0}{XSLT conformance} for details. Stylesheet parameters are bound using bindVariable(). @@ -291,7 +291,7 @@ QXmlQuery::QXmlQuery(const QXmlNamePool &np) : d(new QXmlQueryPrivate(np)) create instances of QXmlQuery for running XQueries. \note The XSL-T support in this release is considered experimental. - See the \l{QtXmlPatterns Module#XSLT 2.0}{XSLT conformance} for + See the \l{Using XML technologies#XSLT 2.0}{XSLT conformance} for details. \since 4.5 diff --git a/src/xmlpatterns/utils/qautoptr.cpp b/src/xmlpatterns/utils/qautoptr.cpp index 619423b..5ab691d 100644 --- a/src/xmlpatterns/utils/qautoptr.cpp +++ b/src/xmlpatterns/utils/qautoptr.cpp @@ -44,7 +44,5 @@ \brief A smart pointer very similar to std::auto_ptr. \internal \since 4.4 - \ingroup misc - */ diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 585f461..1ae6913 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -11,8 +11,6 @@ SUBDIRS += \ compilerwarnings \ exceptionsafety \ linguist \ - macgui \ - macplist \ mediaobject \ # mediaobject_wince_ds9 \ This is Windows CE only (we test the second phonon backend ds9 here) moc \ @@ -74,7 +72,6 @@ SUBDIRS += \ qabstractspinbox \ qabstracttextdocumentlayout \ qaccessibility \ - qaccessibility_mac \ qaction \ qactiongroup \ qalgorithms \ @@ -97,7 +94,6 @@ SUBDIRS += \ qcombobox \ qcompleter \ qcomplextext \ - qcopchannel \ qcoreapplication \ qcryptographichash \ qcssparser \ @@ -113,7 +109,6 @@ SUBDIRS += \ qdialog \ qdialogbuttonbox \ qdir \ - qdirectpainter \ qdirmodel \ qdockwidget \ qdom \ @@ -209,7 +204,6 @@ SUBDIRS += \ qmouseevent \ qmouseevent_modal \ qmovie \ - qmultiscreen \ qmutex \ qmutexlocker \ qnativesocketengine \ @@ -349,7 +343,6 @@ SUBDIRS += \ qtextlayout \ qtextlist \ qtextobject \ - qtextpiecetable \ qtextscriptengine \ qtextstream \ qtexttable \ @@ -404,6 +397,19 @@ SUBDIRS += \ utf8 contains(QT_CONFIG, OdfWriter):SUBDIRS += qzip qtextodfwriter +mac: { + SUBDIRS += macgui \ + macplist \ + qaccessibility_mac +} +embedded: { + SUBDIRS += qcopchannel \ + qdirectpainter \ + qmultiscreen +} +!win32: { + SUBDIRS += qtextpiecetable +} # Enable the tests specific to QtXmlPatterns. If you add a test, remember to # update runQtXmlPatternsTests.sh too. Remember that this file, auto.pro, is diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp index 7958055..7215ebe 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp +++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/finddialog.cpp @@ -1,44 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - #include "finddialog.h" #include "mainwindow.h" #include "tabbedbrowser.h" @@ -51,83 +10,18 @@ #include <QDateTime> #include <QGridLayout> -CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent) - : QStandardItemModel(rows, columns, parent) -{} -QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, const QVariant &value, - int hits, Qt::MatchFlags flags) const -{ - if (flags == Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) - flags |= Qt::MatchCaseSensitive; - - return QStandardItemModel::match(start, role, value, hits, flags); -} - FindDialog::FindDialog(MainWindow *parent) : QDialog(parent) { - contentsWidget = new QWidget(this); - ui.setupUi(contentsWidget); - ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind)); - - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - l->addWidget(contentsWidget); - - lastBrowser = 0; - onceFound = false; - findExpr.clear(); - sb = new QStatusBar(this); l->addWidget(sb); sb->showMessage(tr("Enter the text you want to find.")); - connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked())); - connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject())); -} - -FindDialog::~FindDialog() -{ -} - -void FindDialog::findButtonClicked() -{ - doFind(ui.radioForward->isChecked()); } void FindDialog::doFind(bool forward) { - QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser()); - sb->clearMessage(); - - if (ui.comboFind->currentText() != findExpr || lastBrowser != browser) - onceFound = false; - findExpr = ui.comboFind->currentText(); - - QTextDocument::FindFlags flags = 0; - - if (ui.checkCase->isChecked()) - flags |= QTextDocument::FindCaseSensitively; - - if (ui.checkWords->isChecked()) - flags |= QTextDocument::FindWholeWords; - - QTextCursor c = browser->textCursor(); - if (!c.hasSelection()) { - if (forward) - c.movePosition(QTextCursor::Start); - else - c.movePosition(QTextCursor::End); - - browser->setTextCursor(c); - } - - QTextDocument::FindFlags options; - if (forward == false) - flags |= QTextDocument::FindBackward; - QTextCursor found = browser->document()->find(findExpr, c, flags); if (found.isNull()) { if (onceFound) { @@ -141,8 +35,6 @@ void FindDialog::doFind(bool forward) } else { browser->setTextCursor(found); } - onceFound |= !found.isNull(); - lastBrowser = browser; } bool FindDialog::hasFindExpression() const diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.ts.result index 21d1ca0..de2c45a 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_noobsolete/project.ts.result @@ -4,22 +4,22 @@ <context> <name>FindDialog</name> <message> - <location filename="finddialog.cpp" line="57"/> + <location filename="finddialog.cpp" line="19"/> <source>Enter the text you want to find.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="107"/> + <location filename="finddialog.cpp" line="29"/> <source>Search reached end of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="109"/> + <location filename="finddialog.cpp" line="31"/> <source>Search reached start of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="111"/> + <location filename="finddialog.cpp" line="33"/> <source>Text not found</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp index 045fab1..756c9a3 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp +++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/finddialog.cpp @@ -1,44 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - #include "finddialog.h" #include "mainwindow.h" #include "tabbedbrowser.h" @@ -51,86 +10,17 @@ #include <QDateTime> #include <QGridLayout> -CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent) - : QStandardItemModel(rows, columns, parent) -{} -QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, const QVariant &value, - int hits, Qt::MatchFlags flags) const -{ - if (flags == Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) - flags |= Qt::MatchCaseSensitive; - - return QStandardItemModel::match(start, role, value, hits, flags); -} - FindDialog::FindDialog(MainWindow *parent) : QDialog(parent) { - contentsWidget = new QWidget(this); - ui.setupUi(contentsWidget); - ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind)); - - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - l->addWidget(contentsWidget); - - lastBrowser = 0; - onceFound = false; - findExpr.clear(); - - sb = new QStatusBar(this); - l->addWidget(sb); - - // Move it to another line and change the text, // then lupdate should add this one as a new one, and mark the old one as obsolete. sb->showMessage(tr("Enter the text you want to find.")); - connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked())); - connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject())); -} - -FindDialog::~FindDialog() -{ -} - -void FindDialog::findButtonClicked() -{ - doFind(ui.radioForward->isChecked()); } void FindDialog::doFind(bool forward) { - QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser()); - sb->clearMessage(); - - if (ui.comboFind->currentText() != findExpr || lastBrowser != browser) - onceFound = false; - findExpr = ui.comboFind->currentText(); - - QTextDocument::FindFlags flags = 0; - - if (ui.checkCase->isChecked()) - flags |= QTextDocument::FindCaseSensitively; - - if (ui.checkWords->isChecked()) - flags |= QTextDocument::FindWholeWords; - - QTextCursor c = browser->textCursor(); - if (!c.hasSelection()) { - if (forward) - c.movePosition(QTextCursor::Start); - else - c.movePosition(QTextCursor::End); - - browser->setTextCursor(c); - } - - QTextDocument::FindFlags options; - if (forward == false) - flags |= QTextDocument::FindBackward; - QTextCursor found = browser->document()->find(findExpr, c, flags); if (found.isNull()) { if (onceFound) { @@ -144,31 +34,4 @@ void FindDialog::doFind(bool forward) } else { browser->setTextCursor(found); } - onceFound |= !found.isNull(); - lastBrowser = browser; -} - -bool FindDialog::hasFindExpression() const -{ - return !findExpr.isEmpty(); -} - -void FindDialog::statusMessage(const QString &message) -{ - if (isVisible()) - sb->showMessage(message); - else - static_cast<MainWindow*>(parent())->statusBar()->showMessage(message, 2000); -} - -MainWindow *FindDialog::mainWindow() const -{ - return static_cast<MainWindow*>(parentWidget()); -} - -void FindDialog::reset() -{ - ui.comboFind->setFocus(); - ui.comboFind->lineEdit()->setSelection( - 0, ui.comboFind->lineEdit()->text().length()); } diff --git a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.ts.result index b7074fe..4012182 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/mergecpp_obsolete/project.ts.result @@ -8,22 +8,22 @@ <translation type="obsolete">Skriv inn teksten du soker etter</translation> </message> <message> - <location filename="finddialog.cpp" line="60"/> + <location filename="finddialog.cpp" line="18"/> <source>Enter the text you want to find.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="110"/> + <location filename="finddialog.cpp" line="28"/> <source>Search reached end of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="112"/> + <location filename="finddialog.cpp" line="30"/> <source>Search reached start of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="114"/> + <location filename="finddialog.cpp" line="32"/> <source>Text not found</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.before b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.before index 076520a..1ad6ec8 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.before +++ b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.before @@ -3,18 +3,18 @@ <context> <name>FindDialog</name> <message> - <location filename="project.ui" line="27"/> + <location filename="project.ui" line="15"/> <source>Qt Assistant - Find text</source> <!--should be changed to unfinished, since we are changing the sourcetext in the UI file--> <translation>Qt Assistant - Finn tekst</translation> </message> <message> - <location filename="project.ui" line="30"/> + <location filename="project.ui" line="18"/> <source>300px</source> <translation>300px</translation> </message> <message> - <location filename="project.ui" line="33"/> + <location filename="project.ui" line="21"/> <source>400px</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result index b21f583..4c5f74d 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ts.result @@ -4,18 +4,18 @@ <context> <name>FindDialog</name> <message> - <location filename="project.ui" line="27"/> + <location filename="project.ui" line="15"/> <source>Qt Assistant - Find Text</source> <oldsource>Qt Assistant - Find text</oldsource> <translation type="unfinished">Qt Assistant - Finn tekst</translation> </message> <message> - <location filename="project.ui" line="30"/> + <location filename="project.ui" line="18"/> <source>300px</source> <translation>300px</translation> </message> <message> - <location filename="project.ui" line="33"/> + <location filename="project.ui" line="21"/> <source>401 pixels</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui index 2a0bb70..d332eeb 100644 --- a/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui +++ b/tests/auto/linguist/lupdate/testdata/good/mergeui/project.ui @@ -1,45 +1,5 @@ <ui version="4.0" > <author></author> - <comment>********************************************************************* -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -*********************************************************************</comment> <exportmacro></exportmacro> <class>FindDialog</class> <widget class="QWidget" name="FindDialog" > diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result index 97d3bce..8c48245 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result @@ -79,27 +79,27 @@ backslashed \ stuff.</source> <context> <name>FindDialog</name> <message> - <location filename="finddialog.cpp" line="57"/> + <location filename="finddialog.cpp" line="85"/> <source>Enter the text you are looking for.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="107"/> + <location filename="finddialog.cpp" line="135"/> <source>Search reached end of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="109"/> + <location filename="finddialog.cpp" line="137"/> <source>Search reached start of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="111"/> + <location filename="finddialog.cpp" line="139"/> <source>Text not found</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="147"/> + <location filename="finddialog.cpp" line="175"/> <source>null comment</source> <translation type="unfinished"></translation> </message> @@ -107,7 +107,7 @@ backslashed \ stuff.</source> <context> <name>KÃ¥ntekst</name> <message utf8="true"> - <location filename="finddialog.cpp" line="152"/> + <location filename="finddialog.cpp" line="180"/> <source>encoding, using QApplication</source> <translation type="unfinished"></translation> </message> @@ -151,28 +151,28 @@ backslashed \ stuff.</source> <context> <name>QCoreApplication</name> <message> - <location filename="finddialog.cpp" line="144"/> + <location filename="finddialog.cpp" line="172"/> <source>with comment</source> <comment>comment</comment> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="145"/> + <location filename="finddialog.cpp" line="173"/> <source>empty comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="146"/> + <location filename="finddialog.cpp" line="174"/> <source>null comment</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="149"/> + <location filename="finddialog.cpp" line="177"/> <source>encoding, using QCoreApplication</source> <translation type="unfinished"></translation> </message> <message> - <location filename="finddialog.cpp" line="150"/> + <location filename="finddialog.cpp" line="178"/> <source>encoding, using QApplication</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result index ddf58c3..7f665f4 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ts.result @@ -4,12 +4,12 @@ <context> <name>FindDialog</name> <message> - <location filename="project.ui" line="27"/> + <location filename="project.ui" line="15"/> <source>Qt Assistant - Finn text</source> <translation type="unfinished"></translation> </message> <message utf8="true"> - <location filename="project.ui" line="30"/> + <location filename="project.ui" line="18"/> <source>Finn tekst - Der Bjørn möchte auch mal.</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui index 9beb8d5..65a00c7 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui +++ b/tests/auto/linguist/lupdate/testdata/good/parseui/project.ui @@ -1,45 +1,5 @@ <ui version="4.0" > <author></author> - <comment>********************************************************************* -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -*********************************************************************</comment> <exportmacro></exportmacro> <class>FindDialog</class> <widget class="QWidget" name="FindDialog" > diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/bar.ts.result b/tests/auto/linguist/lupdate/testdata/recursivescan/bar.ts.result index e132342..f6415bf 100644 --- a/tests/auto/linguist/lupdate/testdata/recursivescan/bar.ts.result +++ b/tests/auto/linguist/lupdate/testdata/recursivescan/bar.ts.result @@ -4,22 +4,22 @@ <context> <name>FindDialog</name> <message> - <location filename="sub/finddialog.cpp" line="57"/> + <location filename="sub/finddialog.cpp" line="16"/> <source>Enter the text you want to find.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="107"/> + <location filename="sub/finddialog.cpp" line="25"/> <source>Search reached end of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="109"/> + <location filename="sub/finddialog.cpp" line="27"/> <source>Search reached start of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="111"/> + <location filename="sub/finddialog.cpp" line="29"/> <source>Text not found</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/foo.ts.result b/tests/auto/linguist/lupdate/testdata/recursivescan/foo.ts.result index 6646014..581e4b6 100644 --- a/tests/auto/linguist/lupdate/testdata/recursivescan/foo.ts.result +++ b/tests/auto/linguist/lupdate/testdata/recursivescan/foo.ts.result @@ -4,32 +4,32 @@ <context> <name>FindDialog</name> <message> - <location filename="project.ui" line="27"/> + <location filename="project.ui" line="15"/> <source>Qt Assistant - Finn text</source> <translation type="unfinished"></translation> </message> <message> - <location filename="project.ui" line="30"/> + <location filename="project.ui" line="18"/> <source>Finn tekst</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="57"/> + <location filename="sub/finddialog.cpp" line="16"/> <source>Enter the text you want to find.</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="107"/> + <location filename="sub/finddialog.cpp" line="25"/> <source>Search reached end of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="109"/> + <location filename="sub/finddialog.cpp" line="27"/> <source>Search reached start of the document</source> <translation type="unfinished"></translation> </message> <message> - <location filename="sub/finddialog.cpp" line="111"/> + <location filename="sub/finddialog.cpp" line="29"/> <source>Text not found</source> <translation type="unfinished"></translation> </message> diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui b/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui index 97553db..8dea10b 100644 --- a/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui +++ b/tests/auto/linguist/lupdate/testdata/recursivescan/project.ui @@ -1,45 +1,5 @@ <ui version="4.0" > <author></author> - <comment>********************************************************************* -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -*********************************************************************</comment> <exportmacro></exportmacro> <class>FindDialog</class> <widget class="QWidget" name="FindDialog" > diff --git a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp index 3800ee7..3875473 100644 --- a/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp +++ b/tests/auto/linguist/lupdate/testdata/recursivescan/sub/finddialog.cpp @@ -1,44 +1,3 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the autotests of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://qt.nokia.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - #include "finddialog.h" #include "mainwindow.h" #include "tabbedbrowser.h" @@ -51,83 +10,14 @@ #include <QDateTime> #include <QGridLayout> -CaseSensitiveModel::CaseSensitiveModel(int rows, int columns, QObject *parent) - : QStandardItemModel(rows, columns, parent) -{} -QModelIndexList CaseSensitiveModel::match(const QModelIndex &start, int role, const QVariant &value, - int hits, Qt::MatchFlags flags) const -{ - if (flags == Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) - flags |= Qt::MatchCaseSensitive; - - return QStandardItemModel::match(start, role, value, hits, flags); -} - FindDialog::FindDialog(MainWindow *parent) : QDialog(parent) { - contentsWidget = new QWidget(this); - ui.setupUi(contentsWidget); - ui.comboFind->setModel(new CaseSensitiveModel(0, 1, ui.comboFind)); - - QVBoxLayout *l = new QVBoxLayout(this); - l->setMargin(0); - l->setSpacing(0); - l->addWidget(contentsWidget); - - lastBrowser = 0; - onceFound = false; - findExpr.clear(); - - sb = new QStatusBar(this); - l->addWidget(sb); - sb->showMessage(tr("Enter the text you want to find.")); - - connect(ui.findButton, SIGNAL(clicked()), this, SLOT(findButtonClicked())); - connect(ui.closeButton, SIGNAL(clicked()), this, SLOT(reject())); -} - -FindDialog::~FindDialog() -{ -} - -void FindDialog::findButtonClicked() -{ - doFind(ui.radioForward->isChecked()); } void FindDialog::doFind(bool forward) { - QTextBrowser *browser = static_cast<QTextBrowser*>(mainWindow()->browsers()->currentBrowser()); - sb->clearMessage(); - - if (ui.comboFind->currentText() != findExpr || lastBrowser != browser) - onceFound = false; - findExpr = ui.comboFind->currentText(); - - QTextDocument::FindFlags flags = 0; - - if (ui.checkCase->isChecked()) - flags |= QTextDocument::FindCaseSensitively; - - if (ui.checkWords->isChecked()) - flags |= QTextDocument::FindWholeWords; - - QTextCursor c = browser->textCursor(); - if (!c.hasSelection()) { - if (forward) - c.movePosition(QTextCursor::Start); - else - c.movePosition(QTextCursor::End); - - browser->setTextCursor(c); - } - - QTextDocument::FindFlags options; - if (forward == false) - flags |= QTextDocument::FindBackward; - QTextCursor found = browser->document()->find(findExpr, c, flags); if (found.isNull()) { if (onceFound) { @@ -138,34 +28,5 @@ void FindDialog::doFind(bool forward) } else { statusMessage(tr( "Text not found" )); } - } else { - browser->setTextCursor(found); } - onceFound |= !found.isNull(); - lastBrowser = browser; -} - -bool FindDialog::hasFindExpression() const -{ - return !findExpr.isEmpty(); -} - -void FindDialog::statusMessage(const QString &message) -{ - if (isVisible()) - sb->showMessage(message); - else - static_cast<MainWindow*>(parent())->statusBar()->showMessage(message, 2000); -} - -MainWindow *FindDialog::mainWindow() const -{ - return static_cast<MainWindow*>(parentWidget()); -} - -void FindDialog::reset() -{ - ui.comboFind->setFocus(); - ui.comboFind->lineEdit()->setSelection( - 0, ui.comboFind->lineEdit()->text().length()); } diff --git a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp index 5af6f39..3ff177a 100644 --- a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp +++ b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp @@ -113,6 +113,7 @@ private slots: void oneKeyValue(); void updateOnSetKeyValues(); void restart(); + void valueChanged(); }; tst_QPropertyAnimation::tst_QPropertyAnimation() @@ -1052,6 +1053,33 @@ void tst_QPropertyAnimation::restart() anim.start(); } +void tst_QPropertyAnimation::valueChanged() +{ + qRegisterMetaType<QVariant>("QVariant"); + + //we check that we receive the valueChanged signal + MyErrorObject o; + o.setOle(0); + QCOMPARE(o.property("ole").toInt(), 0); + QPropertyAnimation anim(&o, "ole"); + anim.setEndValue(5); + anim.setDuration(1000); + QSignalSpy spy(&anim, SIGNAL(valueChanged(QVariant))); + anim.start(); + + QTest::qWait(anim.duration() + 50); + + QCOMPARE(anim.state(), QAbstractAnimation::Stopped); + QCOMPARE(anim.currentTime(), anim.duration()); + + //let's check that the values go forward + QCOMPARE(spy.count(), 6); //we should have got everything from 0 to 5 + for (int i = 0; i < spy.count(); ++i) { + QCOMPARE(qvariant_cast<QVariant>(spy.at(i).first()).toInt(), i); + } +} + + QTEST_MAIN(tst_QPropertyAnimation) #include "tst_qpropertyanimation.moc" diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp index 2f41d77..e650dc8 100644 --- a/tests/auto/qtableview/tst_qtableview.cpp +++ b/tests/auto/qtableview/tst_qtableview.cpp @@ -3270,6 +3270,7 @@ void tst_QTableView::task259308_scrollVerticalHeaderSwappedSections() tv.setModel(&model); tv.show(); tv.verticalHeader()->swapSections(0, model.rowCount() - 1); + tv.setCurrentIndex(model.index(model.rowCount() - 1, 0)); QTest::qWait(60); QTest::keyClick(&tv, Qt::Key_PageUp); // PageUp won't scroll when at top diff --git a/tools/assistant/compat/lib/qassistantclient.cpp b/tools/assistant/compat/lib/qassistantclient.cpp index 7aa9b1a..50e8597 100644 --- a/tools/assistant/compat/lib/qassistantclient.cpp +++ b/tools/assistant/compat/lib/qassistantclient.cpp @@ -75,7 +75,6 @@ static QAssistantClientPrivate *data( const QAssistantClient *client, bool creat \brief The QAssistantClient class provides a means of using Qt Assistant as an application's help tool. - \inmodule QtAssistant \ingroup helpsystem \bold{Note:} \e{This class is obsolete and only required when using diff --git a/tools/configure/configure.pro b/tools/configure/configure.pro index eeec62a..06e9fe0 100644 --- a/tools/configure/configure.pro +++ b/tools/configure/configure.pro @@ -62,7 +62,7 @@ SOURCES = main.cpp configureapp.cpp environment.cpp tools.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qbytearraymatcher.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qchar.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qhash.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qlistdata.cpp \ + $$QT_SOURCE_TREE/src/corelib/tools/qlist.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qlocale.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qvector.cpp \ $$QT_SOURCE_TREE/src/corelib/codecs/qutfcodec.cpp \ diff --git a/tools/designer/src/lib/sdk/abstractdnditem.qdoc b/tools/designer/src/lib/sdk/abstractdnditem.qdoc new file mode 100644 index 0000000..ee7dee3 --- /dev/null +++ b/tools/designer/src/lib/sdk/abstractdnditem.qdoc @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerDnDItemInterface + \brief The QDesignerDnDItemInterface class provides an interface that is used to manage items + during a drag and drop operation. + \inmodule QtDesigner + \internal +*/ + +/*! + \enum QDesignerDnDItemInterface::DropType + + This enum describes the result of a drag and drop operation. + + \value MoveDrop The item was moved. + \value CopyDrop The item was copied. +*/ + +/*! + \fn QDesignerDnDItemInterface::QDesignerDnDItemInterface() + + Constructs a new interface to a drag and drop item. +*/ + +/*! + \fn QDesignerDnDItemInterface::~QDesignerDnDItemInterface() + + Destroys the interface to the item. +*/ + +/*! + \fn DomUI *QDesignerDnDItemInterface::domUi() const + + Returns a user interface object for the item. +*/ + +/*! + \fn QWidget *QDesignerDnDItemInterface::widget() const + + Returns the widget being copied or moved in the drag and drop operation. + + \sa source() +*/ + +/*! + \fn QWidget *QDesignerDnDItemInterface::decoration() const + + Returns the widget used to represent the item. +*/ + +/*! + \fn QPoint QDesignerDnDItemInterface::hotSpot() const + + Returns the cursor's hotspot. + + \sa QDrag::hotSpot() +*/ + +/*! + \fn DropType QDesignerDnDItemInterface::type() const + + Returns the type of drag and drop operation in progress. +*/ + +/*! + \fn QWidget *QDesignerDnDItemInterface::source() const + + Returns the widget that is the source of the drag and drop operation; i.e. the original + container of the widget being dragged. + + \sa widget() +*/ diff --git a/tools/designer/src/lib/sdk/abstracticoncache.qdoc b/tools/designer/src/lib/sdk/abstracticoncache.qdoc new file mode 100644 index 0000000..64b3926 --- /dev/null +++ b/tools/designer/src/lib/sdk/abstracticoncache.qdoc @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerIconCacheInterface + \brief The QDesignerIconCacheInterface class provides an interface to \QD's icon cache. + \inmodule QtDesigner + \internal +*/ + +/*! + \fn QDesignerIconCacheInterface::QDesignerIconCacheInterface(QObject *parent) + + Constructs a new interface with the given \a parent. +*/ + +/*! + \fn QIcon QDesignerIconCacheInterface::nameToIcon(const QString &filePath, const QString &qrcPath) + + Returns the icon associated with the name specified by \a filePath in the resource + file specified by \a qrcPath. + + If \a qrcPath refers to a valid resource file, the name used for the file path is a path + within those resources; otherwise the file path refers to a local file. + + \sa {The Qt Resource System}, nameToPixmap() +*/ + +/*! + \fn QPixmap QDesignerIconCacheInterface::nameToPixmap(const QString &filePath, const QString &qrcPath) + + Returns the pixmap associated with the name specified by \a filePath in the resource + file specified by \a qrcPath. + + If \a qrcPath refers to a valid resource file, the name used for the file path is a path + within those resources; otherwise the file path refers to a local file. + + \sa {The Qt Resource System}, nameToIcon() +*/ + +/*! + \fn QString QDesignerIconCacheInterface::iconToFilePath(const QIcon &icon) const + + Returns the file path associated with the given \a icon. The file path is a path within + an application resources. +*/ + +/*! + \fn QString QDesignerIconCacheInterface::iconToQrcPath(const QIcon &icon) const + + Returns the path to the resource file that refers to the specified \a icon. The resource + path refers to a local file. +*/ + +/*! + \fn QString QDesignerIconCacheInterface::pixmapToFilePath(const QPixmap &pixmap) const + + Returns the file path associated with the given \a pixmap. The file path is a path within + an application resources. +*/ + +/*! + \fn QString QDesignerIconCacheInterface::pixmapToQrcPath(const QPixmap &pixmap) const + + Returns the path to the resource file that refers to the specified \a pixmap. The resource + path refers to a local file. +*/ + +/*! + \fn QList<QPixmap> QDesignerIconCacheInterface::pixmapList() const + + Returns a list of pixmaps for the icons provided by the icon cache. +*/ + +/*! + \fn QList<QIcon> QDesignerIconCacheInterface::iconList() const + + Returns a list of icons provided by the icon cache. +*/ + +/*! + \fn QString QDesignerIconCacheInterface::resolveQrcPath(const QString &filePath, const QString &qrcPath, const QString &workingDirectory) const + + Returns a path to a resource specified by the \a filePath within + the resource file located at \a qrcPath. If \a workingDirectory is + a valid path to a directory, the path returned will be relative to + that directory; otherwise an absolute path is returned. + + \omit + ### Needs checking + \endomit +*/ diff --git a/tools/designer/src/lib/sdk/dynamicpropertysheet.qdoc b/tools/designer/src/lib/sdk/dynamicpropertysheet.qdoc new file mode 100644 index 0000000..8a40254 --- /dev/null +++ b/tools/designer/src/lib/sdk/dynamicpropertysheet.qdoc @@ -0,0 +1,94 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerDynamicPropertySheetExtension + + \brief The QDesignerDynamicPropertySheetExtension class allows you to + manipulate a widget's dynamic properties in Qt Designer's property editor. + + \sa QDesignerPropertySheetExtension, {QObject#Dynamic Properties}{Dynamic Properties} + + \inmodule QtDesigner + \since 4.3 +*/ + +/*! + \fn QDesignerDynamicPropertySheetExtension::~QDesignerDynamicPropertySheetExtension() + + Destroys the dynamic property sheet extension. +*/ + +/*! + \fn bool QDesignerDynamicPropertySheetExtension::dynamicPropertiesAllowed() const + + Returns true if the widget supports dynamic properties; otherwise returns false. +*/ + +/*! + \fn int QDesignerDynamicPropertySheetExtension::addDynamicProperty(const QString &propertyName, const QVariant &value) + + Adds a dynamic property named \a propertyName and sets its value to \a value. + Returns the index of the property if it was added successfully; otherwise returns -1 to + indicate failure. +*/ + +/*! + \fn bool QDesignerDynamicPropertySheetExtension::removeDynamicProperty(int index) + + Removes the dynamic property at the given \a index. + Returns true if the operation succeeds; otherwise returns false. +*/ + +/*! + \fn bool QDesignerDynamicPropertySheetExtension::isDynamicProperty(int index) const + + Returns true if the property at the given \a index is a dynamic property; otherwise + returns false. +*/ + +/*! + \fn bool QDesignerDynamicPropertySheetExtension::canAddDynamicProperty(const QString &propertyName) const + + Returns true if \a propertyName is a valid, unique name for a dynamic + property; otherwise returns false. + +*/ diff --git a/tools/designer/src/lib/sdk/layoutdecoration.qdoc b/tools/designer/src/lib/sdk/layoutdecoration.qdoc new file mode 100644 index 0000000..9fe87d3 --- /dev/null +++ b/tools/designer/src/lib/sdk/layoutdecoration.qdoc @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerLayoutDecorationExtension + \brief The QDesignerLayoutDecorationExtension class provides an extension to a layout in \QD. + \inmodule QtDesigner + \internal +*/ + +/*! + \enum QDesignerLayoutDecorationExtension::InsertMode + + This enum describes the modes that are used to insert items into a layout. + + \value InsertWidgetMode Widgets are inserted into empty cells in a layout. + \value InsertRowMode Whole rows are inserted into a vertical or grid layout. + \value InsertColumnMode Whole columns are inserted into a horizontal or grid layout. +*/ + +/*! + \fn virtual QDesignerLayoutDecorationExtension::~QDesignerLayoutDecorationExtension() + + Destroys the extension. +*/ + +/*! + \fn virtual QList<QWidget*> QDesignerLayoutDecorationExtension::widgets(QLayout *layout) const + + Returns the widgets that are managed by the given \a layout. + + \sa insertWidget(), removeWidget() +*/ + +/*! + \fn QRect QDesignerLayoutDecorationExtension::itemInfo(int index) const + + Returns the rectangle covered by the item at the given \a index in the layout. +*/ + +/*! + \fn int QDesignerLayoutDecorationExtension::indexOf(QWidget *widget) const + + Returns the index of the specified \a widget in the layout. +*/ + +/*! + \fn int QDesignerLayoutDecorationExtension::indexOf(QLayoutItem *item) const + + Returns the index of the specified layout \a item. +*/ + +/*! + \fn QDesignerLayoutDecorationExtension::InsertMode QDesignerLayoutDecorationExtension::currentInsertMode() const + + Returns the current insertion mode. +*/ + +/*! + \fn int QDesignerLayoutDecorationExtension::currentIndex() const + + Returns the current index in the layout. +*/ + +/*! + \fn QPair<int, int> QDesignerLayoutDecorationExtension::currentCell() const + + Returns a pair containing the row and column of the current cell in the layout. +*/ + +/*! + \fn void QDesignerLayoutDecorationExtension::insertWidget(QWidget *widget, const QPair<int, int> &cell) + + Inserts the given \a widget into the specified \a cell in the layout. + + \sa removeWidget() +*/ + +/*! + \fn void QDesignerLayoutDecorationExtension::removeWidget(QWidget *widget) + + Removes the specified \a widget from the layout. + + \sa insertWidget() +*/ + +/*! + \fn void QDesignerLayoutDecorationExtension::insertRow(int row) + + Inserts a new row into the form at the position specified by \a row. +*/ + +/*! + \fn void QDesignerLayoutDecorationExtension::insertColumn(int column) + + Inserts a new column into the form at the position specified by \a column. +*/ + +/*! + \fn void QDesignerLayoutDecorationExtension::simplify() + + Simplifies the layout by removing unnecessary empty rows and columns, and by changing the + number of rows or columns spanned by widgets. +*/ + +/*! + \fn int QDesignerLayoutDecorationExtension::findItemAt(const QPoint &position) const + + Returns the index of the item in the layout that covers the given \a position. +*/ + +/*! + \fn int QDesignerLayoutDecorationExtension::findItemAt(int row, int column) const + + Returns the item in the layout that occupies the specified \a row and \a column in the layout. + + Currently, this only applies to grid layouts. +*/ + +/*! + \fn void QDesignerLayoutDecorationExtension::adjustIndicator(const QPoint &position, int index) + + Adjusts the indicator for the item specified by \a index so that + it lies at the given \a position on the form. +*/ diff --git a/tools/designer/src/lib/sdk/membersheet.qdoc b/tools/designer/src/lib/sdk/membersheet.qdoc new file mode 100644 index 0000000..441a503 --- /dev/null +++ b/tools/designer/src/lib/sdk/membersheet.qdoc @@ -0,0 +1,263 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerMemberSheetExtension + + \brief The QDesignerMemberSheetExtension class allows you to + manipulate a widget's member functions which is displayed when + configuring connections using Qt Designer's mode for editing + signals and slots. + + \inmodule QtDesigner + + QDesignerMemberSheetExtension is a collection of functions that is + typically used to query a widget's member functions, and to + manipulate the member functions' appearance in \QD's signals and + slots editing mode. For example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 2 + + When implementing a custom widget plugin, a pointer to \QD's + current QDesignerFormEditorInterface object (\c formEditor in the + example above) is provided by the + QDesignerCustomWidgetInterface::initialize() function's parameter. + + The member sheet (and any other extension), can be retrieved by + querying \QD's extension manager using the qt_extension() + function. When you want to release the extension, you only need to + delete the pointer. + + All widgets have a default member sheet used in \QD's signals and + slots editing mode with the widget's member functions. But + QDesignerMemberSheetExtension also provides an interface for + creating custom member sheet extensions. + + \warning \QD uses the QDesignerMemberSheetExtension to facilitate + the signal and slot editing mode. Whenever a connection between + two widgets is requested, \QD will query for the widgets' member + sheet extensions. If a widget has an implemented member sheet + extension, this extension will override the default member sheet. + + To create a member sheet extension, your extension class must + inherit from both QObject and QDesignerMemberSheetExtension. Then, + since we are implementing an interface, we must ensure that it's + made known to the meta object system using the Q_INTERFACES() + macro: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 3 + + This enables \QD to use qobject_cast() to query for + supported interfaces using nothing but a QObject pointer. + + In \QD the extensions are not created until they are + required. For that reason, when implementing a member sheet + extension, you must also create a QExtensionFactory, i.e a class + that is able to make an instance of your extension, and register + it using \QD's \l {QExtensionManager}{extension manager}. + + When a widget's member sheet extension is required, \QD's \l + {QExtensionManager}{extension manager} will run through all its + registered factories calling QExtensionFactory::createExtension() + for each until the first one that is able to create a member sheet + extension for that widget, is found. This factory will then make + an instance of the extension. If no such factory is found, \QD + will use the default member sheet. + + There are four available types of extensions in \QD: + QDesignerContainerExtension, QDesignerMemberSheetExtension, + QDesignerPropertySheetExtension and + QDesignerTaskMenuExtension. \QD's behavior is the same whether the + requested extension is associated with a multi page container, a + member sheet, a property sheet or a task menu. + + The QExtensionFactory class provides a standard extension + factory, and can also be used as an interface for custom + extension factories. You can either create a new + QExtensionFactory and reimplement the + QExtensionFactory::createExtension() function. For example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 4 + + Or you can use an existing factory, expanding the + QExtensionFactory::createExtension() function to make the factory + able to create a member sheet extension as well. For example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 5 + + For a complete example using an extension class, see \l + {designer/taskmenuextension}{Task Menu Extension example}. The + example shows how to create a custom widget plugin for Qt + Designer, and how to to use the QDesignerTaskMenuExtension class + to add custom items to \QD's task menu. + + \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget + Extensions} +*/ + +/*! + \fn QDesignerMemberSheetExtension::~QDesignerMemberSheetExtension() + + Destroys the member sheet extension. +*/ + +/*! + \fn int QDesignerMemberSheetExtension::count() const + + Returns the extension's number of member functions. +*/ + +/*! + \fn int QDesignerMemberSheetExtension::indexOf(const QString &name) const + + Returns the index of the member function specified by the given \a + name. + + \sa memberName() +*/ + +/*! + \fn QString QDesignerMemberSheetExtension::memberName(int index) const + + Returns the name of the member function with the given \a index. + + \sa indexOf() +*/ + +/*! + \fn QString QDesignerMemberSheetExtension::memberGroup(int index) const + + Returns the name of the member group specified for the function + with the given \a index. + + \sa indexOf(), setMemberGroup() +*/ + +/*! + \fn void QDesignerMemberSheetExtension::setMemberGroup(int index, const QString &group) + + Sets the member group of the member function with the given \a + index, to \a group. + + \sa indexOf(), memberGroup() +*/ + +/*! + \fn bool QDesignerMemberSheetExtension::isVisible(int index) const + + Returns true if the member function with the given \a index is + visible in \QD's signal and slot editor, otherwise false. + + \sa indexOf(), setVisible() +*/ + +/*! + \fn void QDesignerMemberSheetExtension::setVisible(int index, bool visible) + + If \a visible is true, the member function with the given \a index + is visible in \QD's signals and slots editing mode; otherwise the + member function is hidden. + + \sa indexOf(), isVisible() +*/ + +/*! + \fn virtual bool QDesignerMemberSheetExtension::isSignal(int index) const + + Returns true if the member function with the given \a index is a + signal, otherwise false. + + \sa indexOf() +*/ + +/*! + \fn bool QDesignerMemberSheetExtension::isSlot(int index) const + + Returns true if the member function with the given \a index is a + slot, otherwise false. + + \sa indexOf() +*/ + +/*! + \fn bool QDesignerMemberSheetExtension::inheritedFromWidget(int index) const + + Returns true if the member function with the given \a index is + inherited from QWidget, otherwise false. + + \sa indexOf() +*/ + +/*! + \fn QString QDesignerMemberSheetExtension::declaredInClass(int index) const + + Returns the name of the class in which the member function with + the given \a index is declared. + + \sa indexOf() +*/ + +/*! + \fn QString QDesignerMemberSheetExtension::signature(int index) const + + Returns the signature of the member function with the given \a + index. + + \sa indexOf() +*/ + +/*! + \fn QList<QByteArray> QDesignerMemberSheetExtension::parameterTypes(int index) const + + Returns the parameter types of the member function with the given + \a index, as a QByteArray list. + + \sa indexOf(), parameterNames() +*/ + +/*! + \fn QList<QByteArray> QDesignerMemberSheetExtension::parameterNames(int index) const + + Returns the parameter names of the member function with the given + \a index, as a QByteArray list. + + \sa indexOf(), parameterTypes() +*/ diff --git a/tools/designer/src/lib/sdk/propertysheet.qdoc b/tools/designer/src/lib/sdk/propertysheet.qdoc new file mode 100644 index 0000000..d0389db --- /dev/null +++ b/tools/designer/src/lib/sdk/propertysheet.qdoc @@ -0,0 +1,302 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerPropertySheetExtension + + \brief The QDesignerPropertySheetExtension class allows you to + manipulate a widget's properties which is displayed in Qt + Designer's property editor. + + \sa QDesignerDynamicPropertySheetExtension + + \inmodule QtDesigner + + QDesignerPropertySheetExtension provides a collection of functions that + are typically used to query a widget's properties, and to + manipulate the properties' appearance in the property editor. For + example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 15 + + Note that if you change the value of a property using the + QDesignerPropertySheetExtension::setProperty() function, the undo + stack is not updated. To ensure that a property's value can be + reverted using the undo stack, you must use the + QDesignerFormWindowCursorInterface::setProperty() function, or its + buddy \l + {QDesignerFormWindowCursorInterface::setWidgetProperty()}{setWidgetProperty()}, + instead. + + When implementing a custom widget plugin, a pointer to \QD's + current QDesignerFormEditorInterface object (\c formEditor in the + example above) is provided by the + QDesignerCustomWidgetInterface::initialize() function's parameter. + + The property sheet, or any other extension, can be retrieved by + querying \QD's extension manager using the qt_extension() + function. When you want to release the extension, you only need to + delete the pointer. + + All widgets have a default property sheet which populates \QD's + property editor with the widget's properties (i.e the ones defined + with the Q_PROPERTY() macro). But QDesignerPropertySheetExtension + also provides an interface for creating custom property sheet + extensions. + + \warning \QD uses the QDesignerPropertySheetExtension to feed its + property editor. Whenever a widget is selected in its workspace, + \QD will query for the widget's property sheet extension. If the + selected widget has an implemented property sheet extension, this + extension will override the default property sheet. + + To create a property sheet extension, your extension class must + inherit from both QObject and + QDesignerPropertySheetExtension. Then, since we are implementing + an interface, we must ensure that it's made known to the meta + object system using the Q_INTERFACES() macro: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 16 + + This enables \QD to use qobject_cast() to query for supported + interfaces using nothing but a QObject pointer. + + In \QD the extensions are not created until they are + required. For that reason, when implementing a property sheet + extension, you must also create a QExtensionFactory, i.e a class + that is able to make an instance of your extension, and register + it using \QD's \l {QExtensionManager}{extension manager}. + + When a property sheet extension is required, \QD's \l + {QExtensionManager}{extension manager} will run through all its + registered factories calling QExtensionFactory::createExtension() + for each until the first one that is able to create a property + sheet extension for the selected widget, is found. This factory + will then make an instance of the extension. If no such factory + can be found, \QD will use the default property sheet. + + There are four available types of extensions in \QD: + QDesignerContainerExtension, QDesignerMemberSheetExtension, + QDesignerPropertySheetExtension and QDesignerTaskMenuExtension. Qt + Designer's behavior is the same whether the requested extension is + associated with a multi page container, a member sheet, a property + sheet or a task menu. + + The QExtensionFactory class provides a standard extension factory, + and can also be used as an interface for custom extension + factories. You can either create a new QExtensionFactory and + reimplement the QExtensionFactory::createExtension() function. For + example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 17 + + Or you can use an existing factory, expanding the + QExtensionFactory::createExtension() function to make the factory + able to create a property sheet extension extension as well. For + example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 18 + + For a complete example using an extension class, see the \l + {designer/taskmenuextension}{Task Menu Extension example}. The + example shows how to create a custom widget plugin for Qt + Designer, and how to to use the QDesignerTaskMenuExtension class + to add custom items to \QD's task menu. + + \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget + Extensions} +*/ + +/*! + \fn QDesignerPropertySheetExtension::~QDesignerPropertySheetExtension() + + Destroys the property sheet extension. +*/ + +/*! + \fn int QDesignerPropertySheetExtension::count() const + + Returns the selected widget's number of properties. +*/ + +/*! + \fn int QDesignerPropertySheetExtension::indexOf(const QString &name) const + + Returns the index for a given property \a name. + + \sa propertyName() +*/ + +/*! + \fn QString QDesignerPropertySheetExtension::propertyName(int index) const + + Returns the name of the property at the given \a index. + + \sa indexOf() +*/ + +/*! + \fn QString QDesignerPropertySheetExtension::propertyGroup(int index) const + + Returns the property group for the property at the given \a index. + + \QD's property editor supports property groups, i.e. sections of + related properties. A property can be related to a group using the + setPropertyGroup() function. The default group of any property is + the name of the class that defines it. For example, the + QObject::objectName property appears within the QObject property + group. + + \sa indexOf(), setPropertyGroup() +*/ + +/*! + \fn void QDesignerPropertySheetExtension::setPropertyGroup(int index, const QString &group) + + Sets the property group for the property at the given \a index to + \a group. + + Relating a property to a group makes it appear within that group's + section in the property editor. The default property group of any + property is the name of the class that defines it. For example, + the QObject::objectName property appears within the QObject + property group. + + \sa indexOf(), property(), propertyGroup() +*/ + +/*! + \fn bool QDesignerPropertySheetExtension::hasReset(int index) const + + Returns true if the property at the given \a index has a reset + button in \QD's property editor, otherwise false. + + \sa indexOf(), reset() +*/ + +/*! + \fn bool QDesignerPropertySheetExtension::reset(int index) + + Resets the value of the property at the given \a index, to the + default value. Returns true if a default value could be found, otherwise false. + + \sa indexOf(), hasReset(), isChanged() +*/ + +/*! + \fn bool QDesignerPropertySheetExtension::isVisible(int index) const + + Returns true if the property at the given \a index is visible in + \QD's property editor, otherwise false. + + \sa indexOf(), setVisible() +*/ + +/*! + \fn void QDesignerPropertySheetExtension::setVisible(int index, bool visible) + + If \a visible is true, the property at the given \a index is + visible in \QD's property editor; otherwise the property is + hidden. + + \sa indexOf(), isVisible() +*/ + +/*! + \fn bool QDesignerPropertySheetExtension::isAttribute(int index) const + + Returns true if the property at the given \a index is an attribute, + which will be \e excluded from the UI file, otherwise false. + + \sa indexOf(), setAttribute() +*/ + +/*! + \fn void QDesignerPropertySheetExtension::setAttribute(int index, bool attribute) + + If \a attribute is true, the property at the given \a index is + made an attribute which will be \e excluded from the UI file; + otherwise it will be included. + + \sa indexOf(), isAttribute() +*/ + +/*! + \fn QVariant QDesignerPropertySheetExtension::property(int index) const + + Returns the value of the property at the given \a index. + + \sa indexOf(), setProperty(), propertyGroup() +*/ + +/*! + \fn void QDesignerPropertySheetExtension::setProperty(int index, const QVariant &value) + + Sets the \a value of the property at the given \a index. + + \warning If you change the value of a property using this + function, the undo stack is not updated. To ensure that a + property's value can be reverted using the undo stack, you must + use the QDesignerFormWindowCursorInterface::setProperty() + function, or its buddy \l + {QDesignerFormWindowCursorInterface::setWidgetProperty()}{setWidgetProperty()}, + instead. + + \sa indexOf(), property(), propertyGroup() +*/ + +/*! + \fn bool QDesignerPropertySheetExtension::isChanged(int index) const + + Returns true if the value of the property at the given \a index + differs from the property's default value, otherwise false. + + \sa indexOf(), setChanged(), reset() +*/ + +/*! + \fn void QDesignerPropertySheetExtension::setChanged(int index, bool changed) + + Sets whether the property at the given \a index is different from + its default value, or not, depending on the \a changed parameter. + + \sa indexOf(), isChanged() +*/ diff --git a/tools/designer/src/lib/sdk/taskmenu.qdoc b/tools/designer/src/lib/sdk/taskmenu.qdoc new file mode 100644 index 0000000..698b339 --- /dev/null +++ b/tools/designer/src/lib/sdk/taskmenu.qdoc @@ -0,0 +1,152 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerTaskMenuExtension + \brief The QDesignerTaskMenuExtension class allows you to add custom + menu entries to Qt Designer's task menu. + \inmodule QtDesigner + + QDesignerTaskMenuExtension provides an interface for creating + custom task menu extensions. It is typically used to create task + menu entries that are specific to a plugin in \QD. + + \QD uses the QDesignerTaskMenuExtension to feed its task + menu. Whenever a task menu is requested, \QD will query + for the selected widget's task menu extension. + + \image taskmenuextension-example-faded.png + + A task menu extension is a collection of QActions. The actions + appear as entries in the task menu when the plugin with the + specified extension is selected. The image above shows the custom + \gui {Edit State...} action which appears in addition to \QD's + default task menu entries: \gui Cut, \gui Copy, \gui Paste etc. + + To create a custom task menu extension, your extension class must + inherit from both QObject and QDesignerTaskMenuExtension. For + example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 9 + + Since we are implementing an interface, we must ensure that it + is made known to the meta-object system using the Q_INTERFACES() + macro. This enables \QD to use the qobject_cast() function to + query for supported interfaces using nothing but a QObject + pointer. + + You must reimplement the taskActions() function to return a list + of actions that will be included in \QD task menu. Optionally, you + can reimplement the preferredEditAction() function to set the + action that is invoked when selecting your plugin and pressing + \key F2. The preferred edit action must be one of the actions + returned by taskActions() and, if it's not defined, pressing the + \key F2 key will simply be ignored. + + In \QD, extensions are not created until they are required. A + task menu extension, for example, is created when you click the + right mouse button over a widget in \QD's workspace. For that + reason you must also construct an extension factory, using either + QExtensionFactory or a subclass, and register it using \QD's + \l {QExtensionManager}{extension manager}. + + When a task menu extension is required, \QD's \l + {QExtensionManager}{extension manager} will run through all its + registered factories calling QExtensionFactory::createExtension() + for each until it finds one that is able to create a task menu + extension for the selected widget. This factory will then make an + instance of the extension. + + There are four available types of extensions in \QD: + QDesignerContainerExtension, QDesignerMemberSheetExtension, + QDesignerPropertySheetExtension, and QDesignerTaskMenuExtension. + \QD's behavior is the same whether the requested extension is + associated with a container, a member sheet, a property sheet or a + task menu. + + The QExtensionFactory class provides a standard extension factory, + and can also be used as an interface for custom extension + factories. You can either create a new QExtensionFactory and + reimplement the QExtensionFactory::createExtension() function. For + example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 10 + + Or you can use an existing factory, expanding the + QExtensionFactory::createExtension() function to make the factory + able to create a task menu extension as well. For example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 11 + + For a complete example using the QDesignerTaskMenuExtension class, + see the \l {designer/taskmenuextension}{Task Menu Extension + example}. The example shows how to create a custom widget plugin + for \QD, and how to to use the QDesignerTaskMenuExtension + class to add custom items to \QD's task menu. + + \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget + Extensions} +*/ + +/*! + \fn QDesignerTaskMenuExtension::~QDesignerTaskMenuExtension() + + Destroys the task menu extension. +*/ + +/*! + \fn QAction *QDesignerTaskMenuExtension::preferredEditAction() const + + Returns the action that is invoked when selecting a plugin with + the specified extension and pressing \key F2. + + The action must be one of the actions returned by taskActions(). +*/ + +/*! + \fn QList<QAction*> QDesignerTaskMenuExtension::taskActions() const + + Returns the task menu extension as a list of actions which will be + included in \QD's task menu when a plugin with the specified + extension is selected. + + The function must be reimplemented to add actions to the list. +*/ diff --git a/tools/designer/src/lib/uilib/container.qdoc b/tools/designer/src/lib/uilib/container.qdoc new file mode 100644 index 0000000..93c51ea --- /dev/null +++ b/tools/designer/src/lib/uilib/container.qdoc @@ -0,0 +1,186 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerContainerExtension + \brief The QDesignerContainerExtension class allows you to add pages to + a custom multi-page container in Qt Designer's workspace. + \inmodule QtDesigner + + QDesignerContainerExtension provide an interface for creating + custom container extensions. A container extension consists of a + collection of functions that \QD needs to manage a multi-page + container plugin, and a list of the container's pages. + + \image containerextension-example.png + + \warning This is \e not an extension for container plugins in + general, only custom \e multi-page containers. + + To create a container extension, your extension class must inherit + from both QObject and QDesignerContainerExtension. For example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 6 + + Since we are implementing an interface, we must ensure that it's + made known to the meta object system using the Q_INTERFACES() + macro. This enables \QD to use the qobject_cast() function to + query for supported interfaces using nothing but a QObject + pointer. + + You must reimplement several functions to enable \QD to manage a + custom multi-page container widget: \QD uses count() to keep track + of the number pages in your container, widget() to return the page + at a given index in the list of the container's pages, and + currentIndex() to return the list index of the selected page. \QD + uses the addWidget() function to add a given page to the + container, expecting it to be appended to the list of pages, while + it expects the insertWidget() function to add a given page to the + container by inserting it at a given index. + + In \QD the extensions are not created until they are + required. For that reason you must also create a + QExtensionFactory, i.e a class that is able to make an instance of + your extension, and register it using \QD's \l + {QExtensionManager}{extension manager}. + + When a container extension is required, \QD's \l + {QExtensionManager}{extension manager} will run through all its + registered factories calling QExtensionFactory::createExtension() + for each until the first one that is able to create a container + extension, is found. This factory will then create the extension + for the plugin. + + There are four available types of extensions in \QD: + QDesignerContainerExtension , QDesignerMemberSheetExtension, + QDesignerPropertySheetExtension and QDesignerTaskMenuExtension. + \QD's behavior is the same whether the requested extension is + associated with a multi page container, a member sheet, a property + sheet or a task menu. + + The QExtensionFactory class provides a standard extension factory, + and can also be used as an interface for custom extension + factories. You can either create a new QExtensionFactory and + reimplement the QExtensionFactory::createExtension() function. For + example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 7 + + Or you can use an existing factory, expanding the + QExtensionFactory::createExtension() function to make the factory + able to create a container extension as well. For example: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 8 + + For a complete example using the QDesignerContainerExtension + class, see the \l {designer/containerextension}{Container + Extension example}. The example shows how to create a custom + multi-page plugin for \QD. + + \sa QExtensionFactory, QExtensionManager, {Creating Custom Widget + Extensions} +*/ + +/*! + \fn QDesignerContainerExtension::~QDesignerContainerExtension() + + Destroys the extension. +*/ + +/*! + \fn int QDesignerContainerExtension::count() const + + Returns the number of pages in the container. +*/ + +/*! + \fn QWidget *QDesignerContainerExtension::widget(int index) const + + Returns the page at the given \a index in the extension's list of + pages. + + \sa addWidget(), insertWidget() +*/ + +/*! + \fn int QDesignerContainerExtension::currentIndex() const + + Returns the index of the currently selected page in the + container. + + \sa setCurrentIndex() +*/ + +/*! + \fn void QDesignerContainerExtension::setCurrentIndex(int index) + + Sets the currently selected page in the container to be the + page at the given \a index in the extension's list of pages. + + \sa currentIndex() +*/ + +/*! + \fn void QDesignerContainerExtension::addWidget(QWidget *page) + + Adds the given \a page to the container by appending it to the + extension's list of pages. + + \sa insertWidget(), remove(), widget() +*/ + +/*! + \fn void QDesignerContainerExtension::insertWidget(int index, QWidget *page) + + Adds the given \a page to the container by inserting it at the + given \a index in the extension's list of pages. + + \sa addWidget(), remove(), widget() +*/ + +/*! + \fn void QDesignerContainerExtension::remove(int index) + + Removes the page at the given \a index from the extension's list + of pages. + + \sa addWidget(), insertWidget() +*/ diff --git a/tools/designer/src/lib/uilib/customwidget.qdoc b/tools/designer/src/lib/uilib/customwidget.qdoc new file mode 100644 index 0000000..41fbf21 --- /dev/null +++ b/tools/designer/src/lib/uilib/customwidget.qdoc @@ -0,0 +1,309 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the documentation of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://qt.nokia.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +/*! + \class QDesignerCustomWidgetInterface + + \brief The QDesignerCustomWidgetInterface class enables Qt Designer + to access and construct custom widgets. + + \inmodule QtDesigner + + QDesignerCustomWidgetInterface provides a custom widget with an + interface. The class contains a set of functions that must be subclassed + to return basic information about the widget, such as its class name and + the name of its header file. Other functions must be implemented to + initialize the plugin when it is loaded, and to construct instances of + the custom widget for \QD to use. + + When implementing a custom widget you must subclass + QDesignerCustomWidgetInterface to expose your widget to \QD. For + example, this is the declaration for the plugin used in the + \l{Custom Widget Plugin Example}{Custom Widget Plugin example} that + enables an analog clock custom widget to be used by \QD: + + \snippet examples/designer/customwidgetplugin/customwidgetplugin.h 0 + + Note that the only part of the class definition that is specific + to this particular custom widget is the class name. In addition, + since we are implementing an interface, we must ensure that it's + made known to the meta object system using the Q_INTERFACES() + macro. This enables \QD to use the qobject_cast() function to + query for supported interfaces using nothing but a QObject + pointer. + + After \QD loads a custom widget plugin, it calls the interface's + initialize() function to enable it to set up any resources that it + may need. This function is called with a QDesignerFormEditorInterface + parameter that provides the plugin with a gateway to all of \QD's API. + + \QD constructs instances of the custom widget by calling the plugin's + createWidget() function with a suitable parent widget. Plugins must + construct and return an instance of a custom widget with the specified + parent widget. + + In the implementation of the class you must remember to export + your custom widget plugin to \QD using the Q_EXPORT_PLUGIN2() + macro. For example, if a library called \c libcustomwidgetplugin.so + (on Unix) or \c libcustomwidget.dll (on Windows) contains a widget + class called \c MyCustomWidget, we can export it by adding the + following line to the file containing the plugin implementation: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 14 + + This macro ensures that \QD can access and construct the custom widget. + Without this macro, there is no way for \QD to use it. + + When implementing a custom widget plugin, you build it as a + separate library. If you want to include several custom widget + plugins in the same library, you must in addition subclass + QDesignerCustomWidgetCollectionInterface. + + \warning If your custom widget plugin contains QVariant + properties, be aware that only the following \l + {QVariant::Type}{types} are supported: + + \list + \o QVariant::ByteArray + \o QVariant::Bool + \o QVariant::Color + \o QVariant::Cursor + \o QVariant::Date + \o QVariant::DateTime + \o QVariant::Double + \o QVariant::Int + \o QVariant::Point + \o QVariant::Rect + \o QVariant::Size + \o QVariant::SizePolicy + \o QVariant::String + \o QVariant::Time + \o QVariant::UInt + \endlist + + For a complete example using the QDesignerCustomWidgetInterface + class, see the \l {designer/customwidgetplugin}{Custom Widget + Example}. The example shows how to create a custom widget plugin + for \QD. + + \sa QDesignerCustomWidgetCollectionInterface {Creating Custom + Widgets for Qt Designer} +*/ + +/*! + \fn QDesignerCustomWidgetInterface::~QDesignerCustomWidgetInterface() + + Destroys the custom widget interface. +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::name() const + + Returns the class name of the custom widget supplied by the interface. + + The name returned \e must be identical to the class name used for the + custom widget. +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::group() const + + Returns the name of the group to which the custom widget belongs. +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::toolTip() const + + Returns a short description of the widget that can be used by \QD + in a tool tip. +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::whatsThis() const + + Returns a description of the widget that can be used by \QD in + "What's This?" help for the widget. +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::includeFile() const + + Returns the path to the include file that \l uic uses when + creating code for the custom widget. +*/ + +/*! + \fn QIcon QDesignerCustomWidgetInterface::icon() const + + Returns the icon used to represent the custom widget in \QD's + widget box. +*/ + +/*! + \fn bool QDesignerCustomWidgetInterface::isContainer() const + + Returns true if the custom widget is intended to be used as a + container; otherwise returns false. + + Most custom widgets are not used to hold other widgets, so their + implementations of this function will return false, but custom + containers will return true to ensure that they behave correctly + in \QD. +*/ + +/*! + \fn QWidget *QDesignerCustomWidgetInterface::createWidget(QWidget *parent) + + Returns a new instance of the custom widget, with the given \a + parent. +*/ + +/*! + \fn bool QDesignerCustomWidgetInterface::isInitialized() const + + Returns true if the widget has been initialized; otherwise returns + false. + + \sa initialize() +*/ + +/*! + \fn void QDesignerCustomWidgetInterface::initialize(QDesignerFormEditorInterface *formEditor) + + Initializes the widget for use with the specified \a formEditor + interface. + + \sa isInitialized() +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::domXml() const + + Returns the XML that is used to describe the custom widget's + properties to \QD. +*/ + +/*! + \fn QString QDesignerCustomWidgetInterface::codeTemplate() const + + This function is reserved for future use by \QD. + + \omit + Returns the code template that \QD includes in forms that contain + the custom widget when they are saved. + \endomit +*/ + +/*! + \macro QDESIGNER_WIDGET_EXPORT + \relates QDesignerCustomWidgetInterface + \since 4.1 + + This macro is used when defining custom widgets to ensure that they are + correctly exported from plugins for use with \QD. + + On some platforms, the symbols required by \QD to create new widgets + are removed from plugins by the build system, making them unusable. + Using this macro ensures that the symbols are retained on those platforms, + and has no side effects on other platforms. + + For example, the \l{designer/worldtimeclockplugin}{World Time Clock Plugin} + example exports a custom widget class with the following declaration: + + \snippet examples/designer/worldtimeclockplugin/worldtimeclock.h 0 + \dots + \snippet examples/designer/worldtimeclockplugin/worldtimeclock.h 2 + + \sa {Creating Custom Widgets for Qt Designer} +*/ + + + + + +/*! + \class QDesignerCustomWidgetCollectionInterface + + \brief The QDesignerCustomWidgetCollectionInterface class allows + you to include several custom widgets in one single library. + + \inmodule QtDesigner + + When implementing a custom widget plugin, you build it as a + separate library. If you want to include several custom widget + plugins in the same library, you must in addition subclass + QDesignerCustomWidgetCollectionInterface. + + QDesignerCustomWidgetCollectionInterface contains one single + function returning a list of the collection's + QDesignerCustomWidgetInterface objects. For example, if you have + several custom widgets \c CustomWidgetOne, \c CustomWidgetTwo and + \c CustomWidgetThree, the class definition may look like this: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 12 + + In the class constructor you add the interfaces to your custom + widgets to the list which you return in the customWidgets() + function: + + \snippet doc/src/snippets/code/doc_src_qtdesigner.qdoc 13 + + Note that instead of exporting each custom widget plugin using the + Q_EXPORT_PLUGIN2() macro, you export the entire collection. The + Q_EXPORT_PLUGIN2() macro ensures that \QD can access and construct + the custom widgets. Without this macro, there is no way for \QD to + use them. + + \sa QDesignerCustomWidgetInterface, {Creating Custom Widgets for + Qt Designer} +*/ + +/*! + \fn QDesignerCustomWidgetCollectionInterface::~QDesignerCustomWidgetCollectionInterface() { + + Destroys the custom widget collection interface. +*/ + +/*! + \fn QList<QDesignerCustomWidgetInterface*> QDesignerCustomWidgetCollectionInterface::customWidgets() const + + Returns a list of interfaces to the collection's custom widgets. +*/ diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp index 581662a..e929c0d 100644 --- a/tools/linguist/lupdate/cpp.cpp +++ b/tools/linguist/lupdate/cpp.cpp @@ -58,9 +58,7 @@ QT_BEGIN_NAMESPACE static const char MagicComment[] = "TRANSLATOR "; -#define STRINGIFY_INTERNAL(x) #x -#define STRINGIFY(x) STRINGIFY_INTERNAL(x) -#define STRING(s) static QString str##s(QLatin1String(STRINGIFY(s))) +#define STRING(s) static QString str##s(QLatin1String(#s)) //#define DIAGNOSE_RETRANSLATABILITY // FIXME: should make a runtime option of this @@ -215,9 +213,7 @@ private: bool yyAtNewline; bool yyCodecIsUtf8; bool yyForceUtf8; - QString yyIdent; - QString yyComment; - QString yyString; + QString yyWord; qlonglong yyInteger; QStack<IfdefState> yyIfdefStack; int yyBraceDepth; @@ -312,26 +308,28 @@ void CppParser::setInput(QTextStream &ts, const QString &fileName) uint CppParser::getChar() { + int len = yyInStr.size(); + const ushort *uc = (const ushort *)yyInStr.unicode(); forever { - if (yyInPos >= yyInStr.size()) + if (yyInPos >= len) return EOF; - uint c = yyInStr[yyInPos++].unicode(); - if (c == '\\' && yyInPos < yyInStr.size()) { - if (yyInStr[yyInPos].unicode() == '\n') { + uint c = uc[yyInPos++]; + if (c == '\\' && yyInPos < len) { + if (uc[yyInPos] == '\n') { ++yyCurLineNo; ++yyInPos; continue; } - if (yyInStr[yyInPos].unicode() == '\r') { + if (uc[yyInPos] == '\r') { ++yyCurLineNo; ++yyInPos; - if (yyInPos < yyInStr.size() && yyInStr[yyInPos].unicode() == '\n') + if (yyInPos < len && uc[yyInPos] == '\n') ++yyInPos; continue; } } if (c == '\r') { - if (yyInPos < yyInStr.size() && yyInStr[yyInPos].unicode() == '\n') + if (yyInPos < len && uc[yyInPos] == '\n') ++yyInPos; c = '\n'; ++yyCurLineNo; @@ -346,12 +344,36 @@ uint CppParser::getChar() } } +STRING(Q_OBJECT); +STRING(Q_DECLARE_TR_FUNCTIONS); +STRING(QT_TR_NOOP); +STRING(QT_TRID_NOOP); +STRING(QT_TRANSLATE_NOOP); +STRING(QT_TRANSLATE_NOOP3); +STRING(QT_TR_NOOP_UTF8); +STRING(QT_TRANSLATE_NOOP_UTF8); +STRING(QT_TRANSLATE_NOOP3_UTF8); +STRING(class); +// QTranslator::findMessage() has the same parameters as QApplication::translate() +STRING(findMessage); +STRING(friend); +STRING(namespace); +STRING(qtTrId); +STRING(return); +STRING(struct); +STRING(TR); +STRING(Tr); +STRING(tr); +STRING(trUtf8); +STRING(translate); +STRING(using); + uint CppParser::getToken() { restart: - yyIdent.clear(); - yyComment.clear(); - yyString.clear(); + // Failing this assertion would mean losing the preallocated buffer. + Q_ASSERT(yyWord.isDetached()); + yyWord.resize(0); while (yyCh != EOF) { yyLineNo = yyCurLineNo; @@ -450,6 +472,7 @@ uint CppParser::getToken() tChar = '>'; else break; + ushort *ptr = (ushort *)yyWord.unicode(); forever { yyCh = getChar(); if (yyCh == EOF || yyCh == '\n') @@ -458,8 +481,9 @@ uint CppParser::getToken() yyCh = getChar(); break; } - yyString += yyCh; + *ptr++ = yyCh; } + yyWord.resize(ptr - (ushort *)yyWord.unicode()); return (tChar == '"') ? Tok_QuotedInclude : Tok_AngledInclude; } break; @@ -538,42 +562,43 @@ uint CppParser::getToken() } while (yyCh != '\n' && yyCh != EOF); yyCh = getChar(); } else if (isalpha(yyCh) || yyCh == '_') { + ushort *ptr = (ushort *)yyWord.unicode(); do { - yyIdent += yyCh; + *ptr++ = yyCh; yyCh = getChar(); } while (isalnum(yyCh) || yyCh == '_'); + yyWord.resize(ptr - (ushort *)yyWord.unicode()); - //qDebug() << "IDENT: " << yyIdent; + //qDebug() << "IDENT: " << yyWord; - switch (yyIdent.at(0).unicode()) { + switch (yyWord.unicode()[0].unicode()) { case 'Q': - if (yyIdent == QLatin1String("Q_OBJECT")) + if (yyWord == strQ_OBJECT) return Tok_Q_OBJECT; - if (yyIdent == QLatin1String("Q_DECLARE_TR_FUNCTIONS")) + if (yyWord == strQ_DECLARE_TR_FUNCTIONS) return Tok_Q_DECLARE_TR_FUNCTIONS; - if (yyIdent == QLatin1String("QT_TR_NOOP")) + if (yyWord == strQT_TR_NOOP) return Tok_tr; - if (yyIdent == QLatin1String("QT_TRID_NOOP")) + if (yyWord == strQT_TRID_NOOP) return Tok_trid; - if (yyIdent == QLatin1String("QT_TRANSLATE_NOOP")) + if (yyWord == strQT_TRANSLATE_NOOP) return Tok_translate; - if (yyIdent == QLatin1String("QT_TRANSLATE_NOOP3")) + if (yyWord == strQT_TRANSLATE_NOOP3) return Tok_translate; - if (yyIdent == QLatin1String("QT_TR_NOOP_UTF8")) + if (yyWord == strQT_TR_NOOP_UTF8) return Tok_trUtf8; - if (yyIdent == QLatin1String("QT_TRANSLATE_NOOP_UTF8")) + if (yyWord == strQT_TRANSLATE_NOOP_UTF8) return Tok_translateUtf8; - if (yyIdent == QLatin1String("QT_TRANSLATE_NOOP3_UTF8")) + if (yyWord == strQT_TRANSLATE_NOOP3_UTF8) return Tok_translateUtf8; break; case 'T': // TR() for when all else fails - if (yyIdent.compare(QLatin1String("TR"), Qt::CaseInsensitive) == 0) { + if (yyWord == strTR || yyWord == strTr) return Tok_tr; - } break; case 'c': - if (yyIdent == QLatin1String("class")) + if (yyWord == strclass) return Tok_class; break; case 'f': @@ -581,40 +606,37 @@ uint CppParser::getToken() QTranslator::findMessage() has the same parameters as QApplication::translate(). */ - if (yyIdent == QLatin1String("findMessage")) + if (yyWord == strfindMessage) return Tok_translate; - if (yyIdent == QLatin1String("friend")) + if (yyWord == strfriend) return Tok_friend; break; case 'n': - if (yyIdent == QLatin1String("namespace")) + if (yyWord == strnamespace) return Tok_namespace; break; case 'q': - if (yyIdent == QLatin1String("qtTrId")) + if (yyWord == strqtTrId) return Tok_trid; break; case 'r': - if (yyIdent == QLatin1String("return")) + if (yyWord == strreturn) return Tok_return; break; case 's': - if (yyIdent == QLatin1String("struct")) + if (yyWord == strstruct) return Tok_class; break; case 't': - if (yyIdent == QLatin1String("tr")) { + if (yyWord == strtr) return Tok_tr; - } - if (yyIdent == QLatin1String("trUtf8")) { + if (yyWord == strtrUtf8) return Tok_trUtf8; - } - if (yyIdent == QLatin1String("translate")) { + if (yyWord == strtranslate) return Tok_translate; - } break; case 'u': - if (yyIdent == QLatin1String("using")) + if (yyWord == strusing) return Tok_using; break; } @@ -634,14 +656,17 @@ uint CppParser::getToken() case '/': yyCh = getChar(); if (yyCh == '/') { + ushort *ptr = (ushort *)yyWord.unicode() + yyWord.length(); do { yyCh = getChar(); if (yyCh == EOF) break; - yyComment.append(yyCh); + *ptr++ = yyCh; } while (yyCh != '\n'); + yyWord.resize(ptr - (ushort *)yyWord.unicode()); } else if (yyCh == '*') { bool metAster = false; + ushort *ptr = (ushort *)yyWord.unicode() + yyWord.length(); forever { yyCh = getChar(); @@ -650,7 +675,7 @@ uint CppParser::getToken() qPrintable(yyFileName), yyLineNo); return Tok_Comment; } - yyComment.append(yyCh); + *ptr++ = yyCh; if (yyCh == '*') metAster = true; @@ -659,22 +684,25 @@ uint CppParser::getToken() else metAster = false; } + yyWord.resize(ptr - (ushort *)yyWord.unicode() - 2); + yyCh = getChar(); - yyComment.chop(2); } return Tok_Comment; - case '"': + case '"': { + ushort *ptr = (ushort *)yyWord.unicode() + yyWord.length(); yyCh = getChar(); while (yyCh != EOF && yyCh != '\n' && yyCh != '"') { if (yyCh == '\\') { yyCh = getChar(); if (yyCh == EOF || yyCh == '\n') break; - yyString.append(QLatin1Char('\\')); + *ptr++ = '\\'; } - yyString.append(yyCh); + *ptr++ = yyCh; yyCh = getChar(); } + yyWord.resize(ptr - (ushort *)yyWord.unicode()); if (yyCh != '"') qWarning("%s:%d: Unterminated C++ string\n", @@ -682,6 +710,7 @@ uint CppParser::getToken() else yyCh = getChar(); return Tok_String; + } case '-': yyCh = getChar(); if (yyCh == '>') { @@ -1150,7 +1179,8 @@ bool CppParser::matchString(QString *s) bool matches = (yyTok == Tok_String); s->clear(); while (yyTok == Tok_String) { - *s += yyString; + *s += yyWord; + s->detach(); do { yyTok = getToken(); } while (yyTok == Tok_Comment); @@ -1168,17 +1198,17 @@ bool CppParser::matchEncoding(bool *utf8) if (yyTok != Tok_Ident) return false; - if (yyIdent == strQApplication || yyIdent == strQCoreApplication) { + if (yyWord == strQApplication || yyWord == strQCoreApplication) { yyTok = getToken(); if (yyTok == Tok_ColonColon) yyTok = getToken(); } - if (yyIdent == strUnicodeUTF8) { + if (yyWord == strUnicodeUTF8) { *utf8 = true; yyTok = getToken(); return true; } - if (yyIdent == strDefaultCodec || yyIdent == strCodecForTr) { + if (yyWord == strDefaultCodec || yyWord == strCodecForTr) { *utf8 = false; yyTok = getToken(); return true; @@ -1344,13 +1374,15 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) bool utf8; bool yyTokColonSeen = false; // Start of c'tor's initializer list + yyWord.reserve(yyInStr.size()); // Rather insane. That's because we do no length checking. yyCh = getChar(); yyTok = getToken(); while (yyTok != Tok_Eof) { //qDebug() << "TOKEN: " << yyTok; switch (yyTok) { case Tok_QuotedInclude: { - text = QDir(QFileInfo(yyFileName).absolutePath()).absoluteFilePath(yyString); + text = QDir(QFileInfo(yyFileName).absolutePath()).absoluteFilePath(yyWord); + text.detach(); if (QFileInfo(text).isFile()) { processInclude(text, cd, inclusions); yyTok = getToken(); @@ -1359,14 +1391,15 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) } /* fall through */ case Tok_AngledInclude: { - QStringList cSources = cd.m_allCSources.values(yyString); + QStringList cSources = cd.m_allCSources.values(yyWord); if (!cSources.isEmpty()) { foreach (const QString &cSource, cSources) processInclude(cSource, cd, inclusions); goto incOk; } foreach (const QString &incPath, cd.m_includePath) { - text = QDir(incPath).absoluteFilePath(yyString); + text = QDir(incPath).absoluteFilePath(yyWord); + text.detach(); if (QFileInfo(text).isFile()) { processInclude(text, cd, inclusions); goto incOk; @@ -1398,14 +1431,18 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) 'class Q_EXPORT QMessageBox', in which case 'QMessageBox' is the class name, not 'Q_EXPORT'. */ - fct = QStringList(yyIdent); + text = yyWord; + text.detach(); + fct = QStringList(text); yyTok = getToken(); } while (yyTok == Tok_Ident); while (yyTok == Tok_ColonColon) { yyTok = getToken(); if (yyTok != Tok_Ident) break; // Oops ... - fct += yyIdent; + text = yyWord; + text.detach(); + fct += text; yyTok = getToken(); } if (fct.count() > 1) { @@ -1450,7 +1487,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) yyTokColonSeen = false; yyTok = getToken(); if (yyTok == Tok_Ident) { - QString ns = yyIdent; + QString ns = yyWord; + ns.detach(); yyTok = getToken(); if (yyTok == Tok_LeftBrace) { namespaceDepths.push(namespaces.count()); @@ -1463,8 +1501,11 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) if (yyTok == Tok_ColonColon) fullName.append(QString()); while (yyTok == Tok_ColonColon || yyTok == Tok_Ident) { - if (yyTok == Tok_Ident) - fullName.append(yyIdent); + if (yyTok == Tok_Ident) { + text = yyWord; + text.detach(); + fullName.append(text); + } yyTok = getToken(); } if (fullName.isEmpty()) @@ -1489,8 +1530,11 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) if (yyTok == Tok_ColonColon) fullName.append(QString()); while (yyTok == Tok_ColonColon || yyTok == Tok_Ident) { - if (yyTok == Tok_Ident) - fullName.append(yyIdent); + if (yyTok == Tok_Ident) { + text = yyWord; + text.detach(); + fullName.append(text); + } yyTok = getToken(); } NamespaceList nsl; @@ -1504,8 +1548,11 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) if (yyTok == Tok_ColonColon) fullName.append(QString()); while (yyTok == Tok_ColonColon || yyTok == Tok_Ident) { - if (yyTok == Tok_Ident) - fullName.append(yyIdent); + if (yyTok == Tok_Ident) { + text = yyWord; + text.detach(); + fullName.append(text); + } yyTok = getToken(); } if (fullName.isEmpty()) @@ -1702,7 +1749,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) yyTok = getToken(); break; case Tok_Ident: - prefix += yyIdent; + prefix += yyWord; + prefix.detach(); yyTok = getToken(); if (yyTok != Tok_ColonColon) { prefix.clear(); @@ -1713,24 +1761,29 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) case Tok_Comment: if (!results->tor) goto case_default; - if (yyComment.startsWith(QLatin1Char(':'))) { - yyComment.remove(0, 1); - extracomment.append(yyComment); - } else if (yyComment.startsWith(QLatin1Char('='))) { - yyComment.remove(0, 1); - msgid = yyComment.simplified(); - } else if (yyComment.startsWith(QLatin1Char('~'))) { - yyComment.remove(0, 1); - yyComment = yyComment.trimmed(); - int k = yyComment.indexOf(QLatin1Char(' ')); + if (yyWord.startsWith(QLatin1Char(':'))) { + yyWord.remove(0, 1); + extracomment += yyWord; + extracomment.detach(); + } else if (yyWord.startsWith(QLatin1Char('='))) { + yyWord.remove(0, 1); + msgid = yyWord.simplified(); + msgid.detach(); + } else if (yyWord.startsWith(QLatin1Char('~'))) { + yyWord.remove(0, 1); + text = yyWord.trimmed(); + int k = text.indexOf(QLatin1Char(' ')); if (k > -1) - extra.insert(yyComment.left(k), yyComment.mid(k + 1).trimmed()); - } else if (yyComment.startsWith(QLatin1Char('%'))) { + extra.insert(text.left(k), text.mid(k + 1).trimmed()); + text.clear(); + } else if (yyWord.startsWith(QLatin1Char('%'))) { + sourcetext.reserve(sourcetext.length() + yyWord.length()); + ushort *ptr = (ushort *)sourcetext.data() + sourcetext.length(); int p = 1, c; forever { - if (p >= yyComment.length()) + if (p >= yyWord.length()) break; - c = yyComment.unicode()[p++].unicode(); + c = yyWord.unicode()[p++].unicode(); if (isspace(c)) continue; if (c != '"') { @@ -1739,28 +1792,29 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) break; } forever { - if (p >= yyComment.length()) { + if (p >= yyWord.length()) { whoops: qWarning("%s:%d: Unterminated meta string\n", qPrintable(yyFileName), yyLineNo); break; } - c = yyComment.unicode()[p++].unicode(); + c = yyWord.unicode()[p++].unicode(); if (c == '"') break; if (c == '\\') { - if (p >= yyComment.length()) + if (p >= yyWord.length()) goto whoops; - c = yyComment.unicode()[p++].unicode(); + c = yyWord.unicode()[p++].unicode(); if (c == '\n') goto whoops; - sourcetext.append(QLatin1Char('\\')); + *ptr++ = '\\'; } - sourcetext.append(c); + *ptr++ = c; } } + sourcetext.resize(ptr - (ushort *)sourcetext.data()); } else { - comment = yyComment.simplified(); + comment = yyWord.simplified(); if (comment.startsWith(QLatin1String(MagicComment))) { comment.remove(0, sizeof(MagicComment) - 1); int k = comment.indexOf(QLatin1Char(' ')); @@ -1775,6 +1829,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) results->tor->setExtras(extra); extra.clear(); } + } else { + comment.detach(); } } yyTok = getToken(); @@ -1791,8 +1847,10 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions) prefix += strColons; yyTok = getToken(); #ifdef DIAGNOSE_RETRANSLATABILITY - if (yyTok == Tok_Ident && yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0) - functionName = yyIdent; + if (yyTok == Tok_Ident && yyBraceDepth == namespaceDepths.count() && yyParenDepth == 0) { + functionName = yyWord; + functionName.detach(); + } #endif break; case Tok_RightBrace: diff --git a/tools/qdoc3/test/classic.css b/tools/qdoc3/test/classic.css index 4225a1b..f97bdbe 100644 --- a/tools/qdoc3/test/classic.css +++ b/tools/qdoc3/test/classic.css @@ -45,9 +45,17 @@ table.indextable { border-width: 1px 1px 1px 1px; border-collapse: collapse; background-color: #f0f0f0; - border-color:#555; + border-color:#555; + font-size: 110%; } +table td.largeindex { + border-width: 1px 1px 1px 1px; + border-collapse: collapse; + background-color: #f0f0f0; + border-color:#555; + font-size: 120%; +} table.valuelist th { border-width: 1px 1px 1px 2px; @@ -65,6 +73,17 @@ th.titleheader { border-color: #444; color:white; background-color:#555555; + font-size: 110%; +} + +th.largeheader { + border-width: 1px 0px 1px 0px; + padding: 4px; + border-style: solid; + border-color: #444; + color:white; + background-color:#555555; + font-size: 120%; } p { diff --git a/tools/qdoc3/test/qt-html-templates.qdocconf b/tools/qdoc3/test/qt-html-templates.qdocconf index 8c5bec5..f31e657 100644 --- a/tools/qdoc3/test/qt-html-templates.qdocconf +++ b/tools/qdoc3/test/qt-html-templates.qdocconf @@ -8,36 +8,32 @@ HTML.postheader = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0 "<td class=\"postheader\" valign=\"center\">" \ "<a href=\"index.html\">" \ "<font color=\"#004faf\">Home</font></a> ·" \ - " <a href=\"modules.html\">" \ - "<font color=\"#004faf\">Modules</font></a> ·" \ " <a href=\"classes.html\">" \ - "<font color=\"#004faf\">Classes</font></a> ·" \ - " <a href=\"functions.html\">" \ - "<font color=\"#004faf\">Functions</font></a> ·" \ - " <a href=\"namespaces.html\">" \ - "<font color=\"#004faf\">Namespaces</font></a>" \ + "<font color=\"#004faf\">All Classes</font></a> ·" \ + " <a href=\"overviews.html\">" \ + "<font color=\"#004faf\">Overviews</font></a>" \ "</td>" \ - "<td class=\"searchBar\" align=\"right\" valign=\"center\">" \ - "<form action=\"http://www.google.com/cse\" id=\"cse-search-box\">" \ - "<div>" \ - "<input type=\"hidden\" name=\"cx\" value=\"000136343326384750312:dhbxnqlakyu\" />" \ - "<input type=\"hidden\" name=\"ie\" value=\"UTF-8\" />" \ - "<input type=\"text\" name=\"q\" size=\"31\" />" \ - "<input type=\"submit\" name=\"sa\" value=\"Search\" />" \ - "</div>" \ - "</form>" \ - \ - "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi\"></script>" \ - "<script type=\"text/javascript\">google.load(\"elements\", \"1\", {packages: \"transliteration\"});</script>" \ - "<script type=\"text/javascript\" src=\"http://www.google.com/coop/cse/t13n?form=cse-search-box&t13n_langs=en\"></script>" \ - \ - "<script type=\"text/javascript\" src=\"http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en\"></script>"\ - "</td>\n" \ + "<td class=\"searchBar\" align=\"right\" valign=\"center\">" \ + "<form action=\"http://www.google.com/cse\" id=\"cse-search-box\">" \ + "<div>" \ + "<input type=\"hidden\" name=\"cx\" value=\"000136343326384750312:dhbxnqlakyu\" />" \ + "<input type=\"hidden\" name=\"ie\" value=\"UTF-8\" />" \ + "<input type=\"text\" name=\"q\" size=\"31\" />" \ + "<input type=\"submit\" name=\"sa\" value=\"Search\" />" \ + "</div>" \ + "</form>" \ + \ + "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi\"></script>" \ + "<script type=\"text/javascript\">google.load(\"elements\", \"1\", {packages: \"transliteration\"});</script>" \ + "<script type=\"text/javascript\" src=\"http://www.google.com/coop/cse/t13n?form=cse-search-box&t13n_langs=en\"></script>" \ + \ + "<script type=\"text/javascript\" src=\"http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en\"></script>"\ + "</td>\n" \ "</tr></table>" HTML.footer = "<p /><address><hr /><div align=\"center\">\n" \ "<table width=\"100%\" cellspacing=\"0\" border=\"0\"><tr class=\"address\">\n" \ - "<td width=\"30%\" align=\"left\">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ - "<td width=\"40%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \ - "<td width=\"30%\" align=\"right\"><div align=\"right\">Qt \\version</div></td>\n" \ + "<td width=\"40%\" align=\"left\">Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies)</td>\n" \ + "<td width=\"20%\" align=\"center\"><a href=\"trademarks.html\">Trademarks</a></td>\n" \ + "<td width=\"40%\" align=\"right\"><div align=\"right\">Qt \\version</div></td>\n" \ "</tr></table></div></address>" diff --git a/tools/qtestlib/wince/cetest/bootstrapped.pri b/tools/qtestlib/wince/cetest/bootstrapped.pri index a31374e..3a0ce24 100644 --- a/tools/qtestlib/wince/cetest/bootstrapped.pri +++ b/tools/qtestlib/wince/cetest/bootstrapped.pri @@ -24,7 +24,7 @@ SOURCES += \ $$QT_SOURCE_TREE/src/corelib/tools/qbytearraymatcher.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qvector.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qvsnprintf.cpp \ - $$QT_SOURCE_TREE/src/corelib/tools/qlistdata.cpp \ + $$QT_SOURCE_TREE/src/corelib/tools/qlist.cpp \ $$QT_SOURCE_TREE/src/corelib/tools/qhash.cpp \ $$QT_SOURCE_TREE/src/corelib/global/qglobal.cpp \ $$QT_BUILD_TREE/src/corelib/global/qconfig.cpp \ diff --git a/translations/qt_ar.ts b/translations/qt_ar.ts index 3e7a635..9631883 100644 --- a/translations/qt_ar.ts +++ b/translations/qt_ar.ts @@ -3024,7 +3024,8 @@ Do you want to delete it anyway?</source> <location line="+1"/> <source>Hide Details...</source> <translation type="unfinished"></translation> - </message>.nokiassage> + </message> + <message> <location line="+1570"/> <source><h3>About Qt</h3><p>This program uses Qt version %1.</p><p>Qt is a C++ toolkit for cross-platform application development.</p><p>Qt provides single-source portability across MS&nbsp;Windows, Mac&nbsp;OS&nbsp;X, Linux, and all major commercial Unix variants. Qt is also available for embedded devices as Qt for Embedded Linux and Qt for Windows CE.</p><p>Qt is available under three different licensing options designed to accommodate the needs of our various users.</p>Qt licensed under our commercial license agreement is appropriate for development of proprietary/commercial software where you do not want to share any source code with third parties or otherwise cannot comply with the terms of the GNU LGPL version 2.1 or GNU GPL version 3.0.</p><p>Qt licensed under the GNU LGPL version 2.1 is appropriate for the development of Qt applications (proprietary or open source) provided you can comply with the terms and conditions of the GNU LGPL version 2.1.</p><p>Qt licensed under the GNU General Public License version 3.0 is appropriate for the development of Qt applications where you wish to use such applications in combination with software subject to the terms of the GNU GPL version 3.0 or where you are otherwise willing to comply with the terms of the GNU GPL version 3.0.</p><p>Please see <a href="http://qt.nokia.com/products/licensing">qt.nokia.com/products/licensing</a> for an overview of Qt licensing.</p><p>Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).</p><p>Qt is a Nokia product. See <a href="http://qt.nokia.com/">qt.nokia.com</a> for more information.</p></source> <translation type="unfinished"></translation> |