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

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

忙了一天了,终于有时间清静下来,可以做下自己的事情了。今天继续分析我们的元对象系统。

今天的入手点还是在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

};

好了,今天就只能分析到这里了,电池没电了,也太累了,需要休息,明天继续。

 

20091022日星期四 2322

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值