您的位置:首页 > 其它

元对象系统的整体结构分析

2010-12-04 18:06 357 查看
注:此文是从我的QQ空间里移出来的,因为觉的用那么多空间,blog了太累了,它发表于 2009年12月31日 13:58

-----------------------------------------------------------------------------------------------------------------------------------------------------

本文转自:我朋友的QQ空间,如需要转载,请注明本地址



元对象系统的整体结构分析
忙了一天了,终于有时间清静下来,可以做下自己的事情了。今天继续分析我们的元对象系统。
今天的入手点还是在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
};
好了,今天就只能分析到这里了,电池没电了,也太累了,需要休息,明天继续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: