元对象系统的整体结构分析(续三)

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

 

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

 

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

 

 

元对象系统的整体结构分析(续三)

程序架构又一次重写了,这次应该会作为本次测试的最终架构模型了,又需要加班几天才行了。不过源码分析是不会变得,已经坚持了两星期,我要慢慢走向我的两年计划!

好了,现在开始今天的探索:

再次来到corelib/kernel/qmetaobject.h文件,今天研究一下QMetaEnum类,该类通过映射的关系提供了keyToValuevalueToKey的方式进行提取。

const char *QMetaEnum::key(int index) const

{

    if (!mobj)

        return 0;

    int count = mobj->d.data[handle + 2];

    int data = mobj->d.data[handle + 3];

    if (index >= 0  && index < count)

        return mobj->d.stringdata + mobj->d.data[data + 2*index];

    return 0;

}

这是该类中一个方法的实现,可以看出来,这些方法的实现都是对QMetaObject类的简单引用,提供了一定得方法封装。这样一来,我们得到了一种新的封装方式,可以通过该类的写法完成对大型类方法的分类,以及降低耦合度。

采用同样的方法,QtQMetaMethodQMetaPropertyQMetaClassInfo类从QMetaObject中分离出来,进行分类管理。

我们看到,QMetaObject类的定义和实现位置分别在qobjectdefs.hqobject.cpp中,Qt将该类列入了object类型,而QMetaObject中分离出来的方法被放在了元对象系统当中。整个元对象系统,QMetaObject提供信号和槽的主要实现机制,而其他的几个类则是做了一些辅助的数据处理方法封装。

到这里,简单的QMetaObject类的分析完成了,大致了解了Qt在这一部分的类间关系,和一些简单的机制。至于其编码方面更深层次的东西,一时还看不明白,需要继续对Qt其他部分研究之后,再做详细分析。接下来,我们该向Qt的哪部分进军呢?明天就去再探QApplication类吧,该类提供了Qt的事件机制,从系统手中接管消息并进行派送,是如何实现的呢?让我们拭目以待。

 

20091025日星期日 2325

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值