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

 

仅供参考,做一些深层次的分析