元对象系统的整体结构分析
忙了一天了,终于有时间清静下来,可以做下自己的事情了。今天继续分析我们的元对象系统。
今天的入手点还是在qmetaobject.h文件,昨天看到了QMetaMethod类,总的来说,该类就是提供了一种新的函数调用方法,至于其中的具体实现,在今后的分析中继续研究了。接下来是QMetaEnum类,该类的主要功能是将元对象系统中的名字与id相对应。QMetaProperty类则是负责属性部分,QMetaClassInfo保存了类信息。QMetaObjectPrivate类则是真正负责系统核心实现的部分。
分析,从QMetaObjectPrivate类的定义开始:
int revision;
int className;
int classInfoCount, classInfoData;
int methodCount, methodData;
int propertyCount, propertyData;
int enumeratorCount, enumeratorData;
int constructorCount, constructorData; //since revision 2
int flags; //since revision 3
int signalCount; //since revision 4
QMetaObjectPrivate类定义了struct类型,这样,所有变量都是公用的,我们先从字面上猜测一下其含义:
int revision;这个单词是修订的意思,具体含义不是很明白;
int className;这个很明显了,保存了对应类的类名,
int classInfoCount, classInfoData;这两个应该是保存类相关信息的,可能会与元对象编译器生成的那个文件中一开始的结构体相关。
int methodCount, methodData;同上
int propertyCount, propertyData; 同上
int enumeratorCount, enumeratorData; 同上
int constructorCount, constructorData; //since revision 2同上
int flags; //since revision 3
int signalCount; //since revision 4
结合这里,我想就比较清楚了:
static const uint qt_meta_data_MainWindow[] = {
// content:
4, // revision
0, // classname
0, 0, // classinfo
4, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
2, // signalCount
// signals: signature, parameters, type, tag, flags
12, 11, 11, 11, 0x05,
20, 11, 11, 11, 0x05,
// slots: signature, parameters, type, tag, flags
25, 11, 11, 11, 0x09,
38, 11, 11, 11, 0x09,
0 // eod
};
好了,今天就只能分析到这里了,电池没电了,也太累了,需要休息,明天继续。
2009年10月22日星期四 23:22