|
|
|
/****************************************************************************
|
|
|
|
**
|
|
|
|
** Explanation of moc and the meta object system
|
|
|
|
**
|
|
|
|
** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
|
|
|
|
**
|
|
|
|
** This file is part of the TQt 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 TQt Foundation.
|
|
|
|
**
|
|
|
|
** Please review the following information to ensure GNU General
|
|
|
|
** Public Licensing requirements 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 TQ_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 TQ_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 TQ_OBJECT macro, it produces another C++
|
|
|
|
source file which contains the meta object code for the classes that
|
|
|
|
contain the TQ_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 requiring
|
|
|
|
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
|
|
|
|
TQ_OBJECT macro and without meta object code, neither signals and slots
|
|
|
|
nor the other features described here will be available if the
|
|
|
|
TQ_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 TQ_OBJECT macro regardless of whether
|
|
|
|
they actually use signals, slots and properties or not.
|
|
|
|
|
|
|
|
*/
|