QObject类 moc处理后代码
QObject在QT中是所有类的基类,经过MOC处理后代码如下
之所以贴出这段代码,是因为很多流程追踪到最后一些关键性函数都是出自这个类
源码 4.8.6 MOC版本 63
1 /**************************************************************************** 2 ** Meta object code from reading C++ file 'qobject.h' 3 ** 4 ** Created by: The Qt Meta Object Compiler version 63 (Qt 4.8.6) 5 ** 6 ** WARNING! All changes made in this file will be lost! 7 *****************************************************************************/ 8 9 #include "qobject.h" 10 #if !defined(Q_MOC_OUTPUT_REVISION) 11 #error "The header file 'qobject.h' doesn't include." 12 #elif Q_MOC_OUTPUT_REVISION != 63 13 #error "This file was generated using the moc from 4.8.6. It" 14 #error "cannot be used with the include files from this version of Qt." 15 #error "(The moc has changed too much.)" 16 #endif 17 18 QT_BEGIN_MOC_NAMESPACE 19 static const uint qt_meta_data_QObject[] = { 20 21 // content: 22 6, // revision 23 0, // classname 24 0, 0, // classinfo 25 4, 14, // methods 26 1, 34, // properties 27 0, 0, // enums/sets 28 2, 37, // constructors 29 0, // flags 30 2, // signalCount 31 32 // signals: signature, parameters, type, tag, flags 33 9, 8, 8, 8, 0x05, 34 29, 8, 8, 8, 0x25, 35 36 // slots: signature, parameters, type, tag, flags 37 41, 8, 8, 8, 0x0a, 38 55, 8, 8, 8, 0x08, 39 40 // properties: name, type, flags 41 90, 82, 0x0a095103, 42 43 // constructors: signature, parameters, type, tag, flags 44 108, 101, 8, 8, 0x0e, 45 126, 8, 8, 8, 0x2e, 46 47 0 // eod 48 }; 49 50 static const char qt_meta_stringdata_QObject[] = { 51 "QObject\0\0destroyed(QObject*)\0destroyed()\0" 52 "deleteLater()\0_q_reregisterTimers(void*)\0" 53 "QString\0objectName\0parent\0QObject(QObject*)\0" 54 "QObject()\0" 55 }; 56 57 void QObject::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 58 { 59 if (_c == QMetaObject::CreateInstance) { 60 switch (_id) { 61 case 0: { QObject *_r = new QObject((*reinterpret_cast< QObject*(*)>(_a[1]))); 62 if (_a[0]) *reinterpret_cast (_a[0]) = _r; } break; 63 case 1: { QObject *_r = new QObject(); 64 if (_a[0]) *reinterpret_cast (_a[0]) = _r; } break; 65 } 66 } else if (_c == QMetaObject::InvokeMetaMethod) { 67 Q_ASSERT(staticMetaObject.cast(_o)); 68 QObject *_t = static_cast (_o); 69 switch (_id) { 70 case 0: _t->destroyed((*reinterpret_cast< QObject*(*)>(_a[1]))); break; 71 case 1: _t->destroyed(); break; 72 case 2: _t->deleteLater(); break; 73 case 3: _t->d_func()->_q_reregisterTimers((*reinterpret_cast< void*(*)>(_a[1]))); break; 74 default: ; 75 } 76 } 77 } 78 79 const QMetaObjectExtraData QObject::staticMetaObjectExtraData = { 80 0, qt_static_metacall 81 }; 82 83 const QMetaObject QObject::staticMetaObject = { 84 { 0, qt_meta_stringdata_QObject, 85 qt_meta_data_QObject, &staticMetaObjectExtraData } 86 }; 87 88 #ifdef Q_NO_DATA_RELOCATION 89 const QMetaObject &QObject::getStaticMetaObject() { return staticMetaObject; } 90 #endif //Q_NO_DATA_RELOCATION 91 92 const QMetaObject *QObject::metaObject() const 93 { 94 return QObject::d_ptr->metaObject ? QObject::d_ptr->metaObject : &staticMetaObject; 95 } 96 97 void *QObject::qt_metacast(const char *_clname) 98 { 99 if (!_clname) return 0;100 if (!strcmp(_clname, qt_meta_stringdata_QObject))101 return static_cast (const_cast< QObject*>(this));102 return 0;103 }104 105 int QObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)106 {107 if (_id < 0)108 return _id;109 if (_c == QMetaObject::InvokeMetaMethod) {110 if (_id < 4)111 qt_static_metacall(this, _c, _id, _a);112 _id -= 4;113 }114 #ifndef QT_NO_PROPERTIES115 else if (_c == QMetaObject::ReadProperty) {116 void *_v = _a[0];117 switch (_id) {118 case 0: *reinterpret_cast< QString*>(_v) = objectName(); break;119 }120 _id -= 1;121 } else if (_c == QMetaObject::WriteProperty) {122 void *_v = _a[0];123 switch (_id) {124 case 0: setObjectName(*reinterpret_cast< QString*>(_v)); break;125 }126 _id -= 1;127 } else if (_c == QMetaObject::ResetProperty) {128 _id -= 1;129 } else if (_c == QMetaObject::QueryPropertyDesignable) {130 _id -= 1;131 } else if (_c == QMetaObject::QueryPropertyScriptable) {132 _id -= 1;133 } else if (_c == QMetaObject::QueryPropertyStored) {134 _id -= 1;135 } else if (_c == QMetaObject::QueryPropertyEditable) {136 _id -= 1;137 } else if (_c == QMetaObject::QueryPropertyUser) {138 _id -= 1;139 }140 #endif // QT_NO_PROPERTIES141 return _id;142 }143 144 // SIGNAL 0145 void QObject::destroyed(QObject * _t1)146 {147 void *_a[] = { 0, const_cast (reinterpret_cast (&_t1)) };148 QMetaObject::activate(this, &staticMetaObject, 0, _a);149 }150 QT_END_MOC_NAMESPACE
仅供参考,做一些深层次的分析