qobjectdefs.h
上传用户:detong
上传日期:2022-06-22
资源大小:20675k
文件大小:15k
- /****************************************************************************
- **
- ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
- ** Contact: Qt Software Information (qt-info@nokia.com)
- **
- ** This file is part of the QtCore module of the Qt Toolkit.
- **
- ** Commercial Usage
- ** Licensees holding valid Qt Commercial licenses may use this file in
- ** accordance with the Qt Commercial License Agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and Nokia.
- **
- **
- ** GNU General Public License Usage
- ** Alternatively, 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 file LICENSE.GPL included in
- ** the packaging of this file. Please review the following information
- ** to ensure GNU General Public Licensing requirements will be met:
- ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
- ** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
- ** exception, Nokia gives you certain additional rights. These rights
- ** are described in the Nokia Qt GPL Exception version 1.3, included in
- ** the file GPL_EXCEPTION.txt in this package.
- **
- ** Qt for Windows(R) Licensees
- ** As a special exception, Nokia, as the sole copyright holder for Qt
- ** Designer, grants users of the Qt/Eclipse Integration plug-in the
- ** right for the Qt/Eclipse Integration to link to functionality
- ** provided by Qt Designer and its related libraries.
- **
- ** If you are unsure which license is appropriate for your use, please
- ** contact the sales department at qt-sales@nokia.com.
- **
- ****************************************************************************/
- #ifndef QOBJECTDEFS_H
- #define QOBJECTDEFS_H
- #include <QtCore/qnamespace.h>
- QT_BEGIN_HEADER
- QT_BEGIN_NAMESPACE
- QT_MODULE(Core)
- class QString;
- class QByteArray;
- #ifndef Q_MOC_OUTPUT_REVISION
- #define Q_MOC_OUTPUT_REVISION 59
- #endif
- // The following macros are our "extensions" to C++
- // They are used, strictly speaking, only by the moc.
- #ifndef Q_MOC_RUN
- # if defined(QT_NO_KEYWORDS)
- # define QT_NO_EMIT
- # else
- # define slots
- # define signals protected
- # endif
- # define Q_SLOTS
- # define Q_SIGNALS protected
- # define Q_PRIVATE_SLOT(d, signature)
- # define Q_EMIT
- #ifndef QT_NO_EMIT
- # define emit
- #endif
- #define Q_CLASSINFO(name, value)
- #define Q_INTERFACES(x)
- #define Q_PROPERTY(text)
- #define Q_OVERRIDE(text)
- #define Q_ENUMS(x)
- #define Q_FLAGS(x)
- #ifdef QT3_SUPPORT
- # define Q_SETS(x)
- #endif
- #define Q_SCRIPTABLE
- #define Q_INVOKABLE
- #ifndef QT_NO_TRANSLATION
- # ifndef QT_NO_TEXTCODEC
- // full set of tr functions
- // ### Qt 5: merge overloads
- # define QT_TR_FUNCTIONS
- static inline QString tr(const char *s, const char *c = 0)
- { return staticMetaObject.tr(s, c); }
- static inline QString trUtf8(const char *s, const char *c = 0)
- { return staticMetaObject.trUtf8(s, c); }
- static inline QString tr(const char *s, const char *c, int n)
- { return staticMetaObject.tr(s, c, n); }
- static inline QString trUtf8(const char *s, const char *c, int n)
- { return staticMetaObject.trUtf8(s, c, n); }
- # else
- // no QTextCodec, no utf8
- // ### Qt 5: merge overloads
- # define QT_TR_FUNCTIONS
- static inline QString tr(const char *s, const char *c = 0)
- { return staticMetaObject.tr(s, c); }
- static inline QString tr(const char *s, const char *c, int n)
- { return staticMetaObject.tr(s, c, n); }
- # endif
- #else
- // inherit the ones from QObject
- # define QT_TR_FUNCTIONS
- #endif
- #if defined(QT_NO_MEMBER_TEMPLATES) || defined(QT_NO_QOBJECT_CHECK)
- /* tmake ignore Q_OBJECT */
- #define Q_OBJECT_CHECK
- #else
- /* This is a compile time check that ensures that any class cast with qobject_cast
- actually contains a Q_OBJECT macro. Note: qobject_cast will fail if a QObject
- subclass doesn't contain Q_OBJECT.
- In qt_check_for_QOBJECT_macro, we call a dummy templated function with two
- parameters, the first being "this" and the other the target of the qobject
- cast. If the types are not identical, we know that a Q_OBJECT macro is missing.
- If you get a compiler error here, make sure that the class you are casting
- to contains a Q_OBJECT macro.
- */
- /* tmake ignore Q_OBJECT */
- #define Q_OBJECT_CHECK
- template <typename T> inline void qt_check_for_QOBJECT_macro(const T &_q_argument) const
- { int i = qYouForgotTheQ_OBJECT_Macro(this, &_q_argument); i = i; }
- template <typename T>
- inline int qYouForgotTheQ_OBJECT_Macro(T, T) { return 0; }
- template <typename T1, typename T2>
- inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {}
- #endif // QT_NO_MEMBER_TEMPLATES
- /* tmake ignore Q_OBJECT */
- #define Q_OBJECT
- public:
- Q_OBJECT_CHECK
- static const QMetaObject staticMetaObject;
- virtual const QMetaObject *metaObject() const;
- virtual void *qt_metacast(const char *);
- QT_TR_FUNCTIONS
- virtual int qt_metacall(QMetaObject::Call, int, void **);
- private:
- /* tmake ignore Q_OBJECT */
- #define Q_OBJECT_FAKE Q_OBJECT
- /* tmake ignore Q_GADGET */
- #define Q_GADGET
- public:
- static const QMetaObject staticMetaObject;
- private:
- #else // Q_MOC_RUN
- #define slots slots
- #define signals signals
- #define Q_SLOTS Q_SLOTS
- #define Q_SIGNALS Q_SIGNALS
- #define Q_CLASSINFO(name, value) Q_CLASSINFO(name, value)
- #define Q_INTERFACES(x) Q_INTERFACES(x)
- #define Q_PROPERTY(text) Q_PROPERTY(text)
- #define Q_OVERRIDE(text) Q_OVERRIDE(text)
- #define Q_ENUMS(x) Q_ENUMS(x)
- #define Q_FLAGS(x) Q_FLAGS(x)
- #ifdef QT3_SUPPORT
- # define Q_SETS(x) Q_SETS(x)
- #endif
- /* tmake ignore Q_OBJECT */
- #define Q_OBJECT Q_OBJECT
- /* tmake ignore Q_OBJECT */
- #define Q_OBJECT_FAKE Q_OBJECT_FAKE
- /* tmake ignore Q_GADGET */
- #define Q_GADGET Q_GADGET
- #define Q_SCRIPTABLE Q_SCRIPTABLE
- #define Q_INVOKABLE Q_INVOKABLE
- #endif //Q_MOC_RUN
- // macro for onaming members
- #ifdef METHOD
- #undef METHOD
- #endif
- #ifdef SLOT
- #undef SLOT
- #endif
- #ifdef SIGNAL
- #undef SIGNAL
- #endif
- #define METHOD(a) "0"#a
- #define SLOT(a) "1"#a
- #define SIGNAL(a) "2"#a
- #ifdef QT3_SUPPORT
- #define METHOD_CODE 0 // member type codes
- #define SLOT_CODE 1
- #define SIGNAL_CODE 2
- #endif
- #define QMETHOD_CODE 0 // member type codes
- #define QSLOT_CODE 1
- #define QSIGNAL_CODE 2
- #define Q_ARG(type, data) QArgument<type >(#type, data)
- #define Q_RETURN_ARG(type, data) QReturnArgument<type >(#type, data)
- class QObject;
- class QMetaMethod;
- class QMetaEnum;
- class QMetaProperty;
- class QMetaClassInfo;
- class Q_CORE_EXPORT QGenericArgument
- {
- public:
- inline QGenericArgument(const char *aName = 0, const void *aData = 0)
- : _data(aData), _name(aName) {}
- inline void *data() const { return const_cast<void *>(_data); }
- inline const char *name() const { return _name; }
- private:
- const void *_data;
- const char *_name;
- };
- class Q_CORE_EXPORT QGenericReturnArgument: public QGenericArgument
- {
- public:
- inline QGenericReturnArgument(const char *aName = 0, void *aData = 0)
- : QGenericArgument(aName, aData)
- {}
- };
- template <class T>
- class QArgument: public QGenericArgument
- {
- public:
- inline QArgument(const char *aName, const T &aData)
- : QGenericArgument(aName, static_cast<const void *>(&aData))
- {}
- };
- template <typename T>
- class QReturnArgument: public QGenericReturnArgument
- {
- public:
- inline QReturnArgument(const char *aName, T &aData)
- : QGenericReturnArgument(aName, static_cast<void *>(&aData))
- {}
- };
- struct Q_CORE_EXPORT QMetaObject
- {
- const char *className() const;
- const QMetaObject *superClass() const;
- QObject *cast(QObject *obj) const;
- #ifndef QT_NO_TRANSLATION
- // ### Qt 4: Merge overloads
- QString tr(const char *s, const char *c) const;
- QString trUtf8(const char *s, const char *c) const;
- QString tr(const char *s, const char *c, int n) const;
- QString trUtf8(const char *s, const char *c, int n) const;
- #endif // QT_NO_TRANSLATION
- int methodOffset() const;
- int enumeratorOffset() const;
- int propertyOffset() const;
- int classInfoOffset() const;
- int methodCount() const;
- int enumeratorCount() const;
- int propertyCount() const;
- int classInfoCount() const;
- int indexOfMethod(const char *method) const;
- int indexOfSignal(const char *signal) const;
- int indexOfSlot(const char *slot) const;
- int indexOfEnumerator(const char *name) const;
- int indexOfProperty(const char *name) const;
- int indexOfClassInfo(const char *name) const;
- QMetaMethod method(int index) const;
- QMetaEnum enumerator(int index) const;
- QMetaProperty property(int index) const;
- QMetaClassInfo classInfo(int index) const;
- QMetaProperty userProperty() const;
- static bool checkConnectArgs(const char *signal, const char *method);
- static QByteArray normalizedSignature(const char *method);
- static QByteArray normalizedType(const char *type);
- // internal index-based connect
- static bool connect(const QObject *sender, int signal_index,
- const QObject *receiver, int method_index,
- int type = 0, int *types = 0);
- // internal index-based disconnect
- static bool disconnect(const QObject *sender, int signal_index,
- const QObject *receiver, int method_index);
- // internal slot-name based connect
- static void connectSlotsByName(QObject *o);
- // internal index-based signal activation
- static void activate(QObject *sender, int signal_index, void **argv);
- static void activate(QObject *sender, int from_signal_index, int to_signal_index, void **argv);
- static void activate(QObject *sender, const QMetaObject *, int local_signal_index, void **argv);
- static void activate(QObject *sender, const QMetaObject *, int from_local_signal_index, int to_local_signal_index, void **argv);
- // internal guarded pointers
- static void addGuard(QObject **ptr);
- static void removeGuard(QObject **ptr);
- static void changeGuard(QObject **ptr, QObject *o);
- static bool invokeMethod(QObject *obj, const char *member,
- Qt::ConnectionType,
- QGenericReturnArgument ret,
- QGenericArgument val0 = QGenericArgument(0),
- QGenericArgument val1 = QGenericArgument(),
- QGenericArgument val2 = QGenericArgument(),
- QGenericArgument val3 = QGenericArgument(),
- QGenericArgument val4 = QGenericArgument(),
- QGenericArgument val5 = QGenericArgument(),
- QGenericArgument val6 = QGenericArgument(),
- QGenericArgument val7 = QGenericArgument(),
- QGenericArgument val8 = QGenericArgument(),
- QGenericArgument val9 = QGenericArgument());
- static inline bool invokeMethod(QObject *obj, const char *member,
- QGenericReturnArgument ret,
- QGenericArgument val0 = QGenericArgument(0),
- QGenericArgument val1 = QGenericArgument(),
- QGenericArgument val2 = QGenericArgument(),
- QGenericArgument val3 = QGenericArgument(),
- QGenericArgument val4 = QGenericArgument(),
- QGenericArgument val5 = QGenericArgument(),
- QGenericArgument val6 = QGenericArgument(),
- QGenericArgument val7 = QGenericArgument(),
- QGenericArgument val8 = QGenericArgument(),
- QGenericArgument val9 = QGenericArgument())
- {
- return invokeMethod(obj, member, Qt::AutoConnection, ret, val0, val1, val2, val3,
- val4, val5, val6, val7, val8, val9);
- }
- static inline bool invokeMethod(QObject *obj, const char *member,
- Qt::ConnectionType type,
- QGenericArgument val0 = QGenericArgument(0),
- QGenericArgument val1 = QGenericArgument(),
- QGenericArgument val2 = QGenericArgument(),
- QGenericArgument val3 = QGenericArgument(),
- QGenericArgument val4 = QGenericArgument(),
- QGenericArgument val5 = QGenericArgument(),
- QGenericArgument val6 = QGenericArgument(),
- QGenericArgument val7 = QGenericArgument(),
- QGenericArgument val8 = QGenericArgument(),
- QGenericArgument val9 = QGenericArgument())
- {
- return invokeMethod(obj, member, type, QGenericReturnArgument(), val0, val1, val2,
- val3, val4, val5, val6, val7, val8, val9);
- }
- static inline bool invokeMethod(QObject *obj, const char *member,
- QGenericArgument val0 = QGenericArgument(0),
- QGenericArgument val1 = QGenericArgument(),
- QGenericArgument val2 = QGenericArgument(),
- QGenericArgument val3 = QGenericArgument(),
- QGenericArgument val4 = QGenericArgument(),
- QGenericArgument val5 = QGenericArgument(),
- QGenericArgument val6 = QGenericArgument(),
- QGenericArgument val7 = QGenericArgument(),
- QGenericArgument val8 = QGenericArgument(),
- QGenericArgument val9 = QGenericArgument())
- {
- return invokeMethod(obj, member, Qt::AutoConnection, QGenericReturnArgument(), val0,
- val1, val2, val3, val4, val5, val6, val7, val8, val9);
- }
- enum Call {
- InvokeMetaMethod,
- ReadProperty,
- WriteProperty,
- ResetProperty,
- QueryPropertyDesignable,
- QueryPropertyScriptable,
- QueryPropertyStored,
- QueryPropertyEditable,
- QueryPropertyUser
- };
- #ifdef QT3_SUPPORT
- QT3_SUPPORT const char *superClassName() const;
- #endif
- struct { // private data
- const QMetaObject *superdata;
- const char *stringdata;
- const uint *data;
- const QMetaObject **extradata;
- } d;
- };
- inline const char *QMetaObject::className() const
- { return d.stringdata; }
- inline const QMetaObject *QMetaObject::superClass() const
- { return d.superdata; }
- #ifdef QT3_SUPPORT
- inline const char *QMetaObject::superClassName() const
- { return d.superdata ? d.superdata->className() : 0; }
- #endif
- QT_END_NAMESPACE
- QT_END_HEADER
- #endif // QOBJECTDEFS_H