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

QT反射机制原理

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

【QT免费公开课】您可以到这里观看大量的QT视频课程

【QT付费视频课程】QT核心模块原理与源码分析

【QT付费视频课程】QT Widgets应用程序优化

【QT付费视频课程】QT QML应用程序优化

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软件开发技术

【QT免费公开课】您可以到这里观看大量的QT视频课程

【QT付费视频课程】QT核心模块原理与源码分析

【QT付费视频课程】QT Widgets应用程序优化

【QT付费视频课程】QT QML应用程序优化

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值