免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 886 | 回复: 0
打印 上一主题 下一主题

QT Embedded二三事之QObject的元对象 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-24 00:33 |只看该作者 |倒序浏览

1.元对象    
  元对象被称做是meta object.在运行时刻(runtime),能够提供对象的运行时信息。
    在C++语言发展的早期,C++语言本身没有定义对象的运行时信息,如输出类的名称,父类的名称,判断对象的继承关系等等。虽然新的C++语言增加了RTTI,但还是不够的。这些信息在面向对象编程和调试程序过程中是非常有用的。因此不同的类库采取了不同的方式来扩展语言。
    MFC的实现方式是宏定义:如DECLARE_DYNAMIC,DECLARE_DYNCREATE,DECLARE_SERIAL。这种实现方式没有扩展语言本身,因此可以不加处理的兼容所有的C++编译器。
  QT的实现方式是宏定义加moc编译,定义宏Q_OBJECT,并对语言本身做了部分扩展,因此需要用QT的moc编译器特殊处理一下,产生一个moc_XXX.cpp的文件,然后就可以使用通用C++编译器编译了。
 Q_OBJECT的定义如下:
#define Q_OBJECT                                                        \
public:                                                                        \
    virtual QMetaObject *metaObject() const {                                 \
         return staticMetaObject();                                        \
    }                                                                        \
    virtual const char *className() const;                                \
    virtual void* qt_cast( const char* );                                 \
    virtual bool qt_invoke( int, QUObject* );                                 \
    virtual bool qt_emit( int, QUObject* );                                 \
    QT_PROP_FUNCTIONS                                                        \
    static QMetaObject* staticMetaObject();                                \
    QObject* qObject() { return (QObject*)this; }                         \
    QT_TR_FUNCTIONS                                                        \
private:                                                                \
    static QMetaObject *metaObj;
 
 从定义上看,QT的元对象信息主是通过QMetaObject对象来管理的,每一个类都会增加一个static QMetaObject *metaobj。QMetaObject中包含三部分信息:
 (1)className,superclassname
  这是用来判断对象的继承关系的,是实现QObject::isA(const char *classname)和QObject::inherits(const char *classname)的基础。
 (2)用来实现Q_PROPERTY的property信息。
 (3)用来实现signal/slot的信息
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/92787/showart_1840418.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP