QT原理与源码分析之QT反射机制原理

QT反射机制原理

本文将介绍QT反射机制创建QT对象实例的原理和流程以及源代码。

QT反射机制创建QT对象实例

QT框架提供的基于元对象的反射机制是一项非常基础的功能,在使用QT框架开发一些比较复杂的软件开发框架时可能会很有用。

现在假设有以下这个QT对象类型。
在这里插入图片描述

现在使用QT反射机制来创建ButianyunWidget类型的对象实例。
在这里插入图片描述

从上面的代码可以看到,整个代码中并没有使用到C++创建对象时的传统方法中的new这种语句,但是确实实实在在的创建出来了一个QT对象。

原理

根据newInstance()传递的参数情况在QT元对象数据中去匹配合适的构造函数,然后通过QT元调用来调用这个构造函数,从而创建出QT对象实例。这个在QT元对象数据中的匹配过程和进行元调用的过程都隐藏到QT框架内部实现细节中去了。

流程

既然最终肯定会调用到QT对象类型的构造函数,那么这个调用栈是怎么样的呢?

在这里插入图片描述

下面先来讨论一个QT反射机制创建QT对象的代码执行流程。

在这里插入图片描述

然后来讨论一下newInstance()函数内部执行流程。

在这里插入图片描述

源码

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 总结

尽管表面上来看,使用QT反射机制能够在不使用new语句的情况下实例化C++对象,但是严格来讲,在newInstance()函数执行过程中肯定还是最终使用new语句来实例化C++对象,只是new语句被newInstance()包装到了底层实现细节中去了而已。毕竟QT框架只是一个应用层框架而已,并不能完全突破C++带来的语言层面上的限制。

当然,这里分析的只是QT框架核心模块的很少的一点源代码片段而已。有兴趣想深入学习QT原理的朋友可以关注一下这个课程:QT5原理与源码分析视频课程

如果读者对如何快速全面了解QT框架感兴趣,可以看一下这篇文章:

bird:快速全面了解QT软件界面开发技术

如果读者对如何学习QT框架有兴趣,可以看一下这篇文章:

bird:如何学习C/C++/QT软件开发技术

如果您认为这篇文章对您有所帮助,请您一定立即点赞+喜欢+收藏,本文作者将能从您的点赞+喜欢+收藏中获取到创作新的好文章的动力。如果您认为作者写的文章还有一些参考价值,您也可以关注这篇文章的作者。

posted @ 2023-07-27 15:43  QT界面美化性能优化  阅读(65)  评论(0编辑  收藏  举报  来源