您的位置:首页 > 其它

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

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



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



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



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

程序架构又一次重写了,这次应该会作为本次测试的最终架构模型了,又需要加班几天才行了。不过源码分析是不会变得,已经坚持了两星期,我要慢慢走向我的两年计划!
好了,现在开始今天的探索:
再次来到corelib/kernel/qmetaobject.h文件,今天研究一下QMetaEnum类,该类通过映射的关系提供了keyToValue和valueToKey的方式进行提取。
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类的简单引用,提供了一定得方法封装。这样一来,我们得到了一种新的封装方式,可以通过该类的写法完成对大型类方法的分类,以及降低耦合度。
采用同样的方法,Qt将QMetaMethod、QMetaProperty、QMetaClassInfo类从QMetaObject中分离出来,进行分类管理。
我们看到,QMetaObject类的定义和实现位置分别在qobjectdefs.h和qobject.cpp中,Qt将该类列入了object类型,而QMetaObject中分离出来的方法被放在了元对象系统当中。整个元对象系统,QMetaObject提供信号和槽的主要实现机制,而其他的几个类则是做了一些辅助的数据处理方法封装。
到这里,简单的QMetaObject类的分析完成了,大致了解了Qt在这一部分的类间关系,和一些简单的机制。至于其编码方面更深层次的东西,一时还看不明白,需要继续对Qt其他部分研究之后,再做详细分析。接下来,我们该向Qt的哪部分进军呢?明天就去再探QApplication类吧,该类提供了Qt的事件机制,从系统手中接管消息并进行派送,是如何实现的呢?让我们拭目以待。

2009年10月25日星期日 23:25
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: