Qt的元对象系统

Qt的主要成就之一就是使用了一种机制对C++进行了扩展,并且使用这种机制创建了独立的软件组件。这些组件可以绑定在一起,但任一个组件对于它所要连的组件的情况事先都一无所知。

这种机制称为元对象系统(mate-object system),它提供了关键的两项技术:信号槽以及内省(introspection)。内省功能对于实现信号槽是必需的,并且允许应用程序的开发人员在行时获得有关QObject子类的“元信息”(meta-information)。包括一个含有对象的类名以及它所支的信号和槽的列表。这一机制也支持属性(广泛用于Qt设计师(Qt Designer)中)和文本翻译(用于国际化),它也为QScript模块奠定了基础。从Qt4.2开始,可以动态添加属性。

标准C++没有对Qt的元对象系统所需要的动态元信息提供支持。Qt通过提供一个独立的moc工具解决了这个问题,moc解析QObject类的定义并通过C++函数来提供可供使用的信息。由于moc使用纯C++来实现它所有功能,所以Qt的元对象系统可以在任何的C++编译器上工作。

元对象系统机制是这样工作的:

  1. Q_OBJECT宏声明了在每一个QObject子类中必须实现的一些内省函数:metaObject()、tr()、qt_metacall(),以及其他一些函数。
  2. Qt的moc工具生成了用于由Q_OBJECT声明的所有函数和所有信号的实现。
  3. connect()和disconnect()这样的QObject的成员函数使用这些内省函数来完成它们的工作。

由于所有这些工作都是由qmake、moc和QObject自动处理的,所以很少需要再去考虑这些事情。可以阅读有关QMetaObject类的文档和由moc生成的c++源代码文件来理解它的工作原理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值