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声明的所有函数和所有信号的实现。
可以用下面的图来概括