diff options
Diffstat (limited to 'doc/metaobjects.doc')
-rw-r--r-- | doc/metaobjects.doc | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/doc/metaobjects.doc b/doc/metaobjects.doc new file mode 100644 index 000000000..705929178 --- /dev/null +++ b/doc/metaobjects.doc @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Explanation of moc and the meta object system +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of the Qt GUI Toolkit. +** +** This file may be used under the terms of the GNU General +** Public License versions 2.0 or 3.0 as published by the Free +** Software Foundation and appearing in the files LICENSE.GPL2 +** and LICENSE.GPL3 included in the packaging of this file. +** Alternatively you may (at your option) use any later version +** of the GNU General Public License if such license has been +** publicly approved by Trolltech ASA (or its successors, if any) +** and the KDE Free Qt Foundation. +** +** Please review the following information to ensure GNU General +** Public Licensing retquirements will be met: +** http://trolltech.com/products/qt/licenses/licensing/opensource/. +** If you are unsure which license is appropriate for your use, please +** review the following information: +** http://trolltech.com/products/qt/licenses/licensing/licensingoverview +** or contact the sales department at sales@trolltech.com. +** +** This file may be used under the terms of the Q Public License as +** defined by Trolltech ASA and appearing in the file LICENSE.QPL +** included in the packaging of this file. Licensees holding valid Qt +** Commercial licenses may use this file in accordance with the Qt +** Commercial License Agreement provided with the Software. +** +** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, +** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted +** herein. +** +**********************************************************************/ + +/*! +\page metaobjects.html + +\title Meta Object System + +\keyword meta object +\keyword Q_OBJECT + +Qt's Meta Object System provides the signals and slots mechanism for +inter-object communication, runtime type information, and the dynamic +property system. + +The Meta Object System is based on three things: +\list 1 +\i the \l QObject class; +\i the Q_OBJECT macro inside the private section of the class +declaration; +\i the \link moc.html Meta Object Compiler (moc)\endlink. +\endlist + +The \e moc reads a C++ source file. If it finds one or more class +declarations that contain the Q_OBJECT macro, it produces another C++ +source file which contains the meta object code for the classes that +contain the Q_OBJECT macro. This generated source file is either +#included into the class's source file or compiled and linked with the +class's implementation. + +In addition to providing the \link signalsandslots.html signals and +slots \endlink mechanism for communication between objects (the main +reason for introducing the system), the meta object code provides +additional features in QObject: + +\list + +\i the \link QObject::className() className() \endlink function that +returns the class name as a string at runtime, without retquiring +native runtime type information (RTTI) support through the C++ +compiler. + +\i the \link QObject::inherits() inherits() \endlink function that +returns whether an object is an instance of a class that inherits a +specified class within the QObject inheritance tree. + +\i the \link QObject::tr() tr() \endlink and +\link QObject::trUtf8() trUtf8() \endlink functions for string +translation as used for internationalization. + +\i the \link QObject::setProperty() setProperty() \endlink and \link +QObject::property() property() \endlink functions for dynamically +setting and getting \link properties.html object properties\endlink by +name. + +\i the \link QObject::metaObject() metaObject() \endlink function that +returns the associated \link QMetaObject meta object \endlink for the +class. + +\endlist + +While it is possible to use QObject as a base class without the +Q_OBJECT macro and without meta object code, neither signals and slots +nor the other features described here will be available if the +Q_OBJECT macro is not used. From the meta object system's point of +view, a QObject subclass without meta code is equivalent to its +closest ancestor with meta object code. This means for example, that +className() will not return the actual name of your class, but the +class name of this ancestor. We \e strongly recommend that all +subclasses of QObject use the Q_OBJECT macro regardless of whether +they actually use signals, slots and properties or not. + +*/ |