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

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

QT原理与源码分析之QT反射机制原理的更多相关文章

  1. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  2. ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap实现原理 ConcurrentHashMap源码分析 总结 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对Ha ...

  3. HashMap和ConcurrentHashMap实现原理及源码分析

    HashMap实现原理及源码分析 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表, ...

  4. (转)ReentrantLock实现原理及源码分析

    背景:ReetrantLock底层是基于AQS实现的(CAS+CHL),有公平和非公平两种区别. 这种底层机制,很有必要通过跟踪源码来进行分析. 参考 ReentrantLock实现原理及源码分析 源 ...

  5. 【转】HashMap实现原理及源码分析

    哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景极其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出 ...

  6. 【OpenCV】SIFT原理与源码分析:DoG尺度空间构造

    原文地址:http://blog.csdn.net/xiaowei_cqu/article/details/8067881 尺度空间理论   自然界中的物体随着观测尺度不同有不同的表现形态.例如我们形 ...

  7. 《深入探索Netty原理及源码分析》文集小结

    <深入探索Netty原理及源码分析>文集小结 https://www.jianshu.com/p/239a196152de

  8. HashMap实现原理及源码分析之JDK8

    继续上回HashMap的学习 HashMap实现原理及源码分析之JDK7 转载 Java8源码-HashMap  基于JDK8的HashMap源码解析  [jdk1.8]HashMap源码分析 一.H ...

  9. 【OpenCV】SIFT原理与源码分析:关键点描述

    <SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<方向赋值>,为找到的关键点即SI ...

  10. 【OpenCV】SIFT原理与源码分析:方向赋值

    <SIFT原理与源码分析>系列文章索引:http://www.cnblogs.com/tianyalu/p/5467813.html 由前一篇<关键点搜索与定位>,我们已经找到 ...

随机推荐

  1. [oeasy]python0108_谷腾堡活字_哥特字体_罗马帝国_希腊文化_文艺复兴

    谷腾堡活字 回忆上次内容 上次回顾了字型编码的进化过程 7-seg 七位数码管 显示数字   14-seg 十四位数码管 显示字母     ​   添加图片注释,不超过 140 字(可选)   米字管 ...

  2. 学习笔记--Java合集

    学习笔记--Java合集 JDK8 基础篇 我的第一个Java程序 Java标识符 Java 字面值 Java中的变量 Java中的数据类型 Java 运算符 Java 控制语句 方法 Java方法基 ...

  3. c++17 using继承所有构造函数

    //使用using继承所有的构造函数 #include "tmp.h" #include <iostream> using namespace std; struct ...

  4. Fiddler关于https抓包

    一.Fiddler默认只抓取HTTP请求 Fiddler安装后默认只抓取HTTP请求,如要抓取HTTPS请求需要进行证书安装 二.Fiddler导出HTTPS证书 1.勾选HTTPS 工具栏Tools ...

  5. 统计平台广告推送工具支持百度、51拉、CNZZ 用法详解

    此软件用于伪造站长统计的搜素关键词,可以模拟百度.360.搜狗等搜索引擎来路 支持自定义刷词次数.多线程支持自定义线程数,速度更快 支持指定网址推广,带来更精确的网站IP来路 一键导入几十万个网站,支 ...

  6. 6、Git之团队协作机制

    6.1.团队内协作 6.1.1.创建本地库 如上图所示,一个名叫刘备的人,在本地电脑中创建了一个项目,并使用 git 来维护. 6.1.2.推送本地库到代码托管中心 如上图所示,刘备想让别人也能看到自 ...

  7. 【Mybatis】02 快速入门Part2 补完CRUD

    这是我们的UserMapper.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...

  8. mini_imagenet 数据集生成工具 (续)

    续接前文:  mini_imagenet 数据集生成工具 ============================================ 前文接受了mini_imagenet数据集的生成,但 ...

  9. baselines算法库common/retro_wrappers.py模块分析

    retro_wrappers.py模块代码: from collections import deque import cv2 cv2.ocl.setUseOpenCL(False) from .at ...

  10. 人工智能、机器学习等科技领域论文中常见的词汇SOTA到底是什么意思,具体的用法是什么???

    如题,经常可以在文章中看到这个SOTA的词汇,也就是state of the art,这个词汇我是看着感觉十分的不懂,这个词汇有时候被用作名词有时候又被用作形容词,但是不管用作形容词还是名词大多数人的 ...