Qt 的几个核心机制总结之 元对象系统

1.Qt的元对象与标准C++中对象的区别

Qt中的对象系统和标准C++中的对象系统是存在区别的,更确切得讲前者是对后者的一种扩展。每个元对象具有一个元信息,包含有对象的类名以及相应的信号和槽的列表,以及指向对应函数的指针。

Qt中的元对象系统和标准C++系统的区别有哪些?

1.支持对象间使用信号和槽的机制进行通信

2.动态对象转化

3.可查询可设计的对象属性

4.层次结构可查询的对象树

5.安全的指针管理

6.支持国际化的文本转化

7.支持多任务定时器

8.事件和事件过滤器

但是要注意这些都是靠标准的C++语言来实现的,也是基于标准C++对象实现的。

2.如何实现元对象?

元对象是基于如下3个方面的实现

Object基类

Q_OBJECT宏

moc工具

实现的过程如下:

qmake 生成的makefile自动调用moc工具,moc工具读取头文件,查看是否包含有Q_OBJECT宏定义,如果包含则根据这个文件生成另一个头文件,该头文件包含了元对象必须包含的一些函数的声明,相应的类的源程序也会经过moc工具进行扩展形成最终的源文件,传递给编译器,编译器再根据上一步处理的源文件形成连接文件,最后链接器再将链接文件同其他链接文件链接起来,形成可执行文件。

在这个过程中Q_OBJECT宏的作用是声明了每一个Q_object子类中必须实现的一些函数。

而moc工具生成了Q_OBJECT声明的所有函数和所有信号的实现。

可以用下面的图来概括

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值