当前位置: 首页 > news >正文

Qt中的父窗口子窗口和父类子类的区别

好多人在开发初期,往往将父子窗口和父子类搅在一起容易搞混。
今天借着这篇文章给大家分辨一下。
C++中我们常说子类继承自父类,子类具有父类所有的特性和功能。所以父类和子类是继承关系。
而子窗体和父窗体,不是继承关系,准确地讲也不是父子关系,而是一种工作关系。是由于业务的需要,让一个窗体中包含另一个窗体。
在这里插入图片描述
比如上面这张图中,整个画可以看作是个父窗体,上部的骷髅头你可以看作一个子窗体,下面的带黑边的文字,可以看作一个子窗体,这些可以单独拿出来展示,可以作为父窗体再往里边放个子窗体。子窗体拿出来,独立展示,或者放到其他地方嵌进去展示,那他跟现在这个父窗体就没有了这种内嵌/外包的工作关系了,这种关系是基于业务工作的需要才产生的。
放到生活中打个比方:
父类和子类就是,你和你老爸,是真正的父子继承关系。你外出打工,你老爸退休在家,即便你们没生活在一起,也改变不了你们的父子关系,从你出生时,这种关系就建立并一直存在,即便你老爸挂了,这种关系依然在,不能说老爹挂了,我就不是他儿子了,是吧~
而父窗体和子窗体则好比你跟你上司的关系,你们因为工作建立了这种上下属性关系,最上面的老板,就是最顶层窗体,里边内嵌了你的领导作为子窗体,你的领导又内嵌了你作为子窗体,这属于工作关系,你辞职了,他们跟你屁关系都不是了。你辞职出来创业,也招了员工,那员工就是你的子窗体,你就成了他们的父窗体,就是这样。

放到Qt中,比如以一个QMainWindow的对象作为父窗体,里边放了QLabel,QPushbutton,也放了QWidget,这些实例化的对象在这里都是作为子窗体,那么QLabel,QPushbutton,QWidget的父类就是QMainWindow吗,显然不是,反倒QMainWindow的父类是QWidget。QLabel的父类是QFrame,QPushButton的父类是QAbstractButton。
那么这些父窗体和子窗体建立这种工作关系有什么作用呢?
两点:
1.层次展示,就是为了一些显示的需要;
2.层次管理,就是为了管理上的需要;
第一点层次展示比较容易理解,所见即所得,为了显示上的需要,展示某种特殊的方式,其实跟布局的作用类似;
第二点层次管理特别重要,Qt为了很好的管理这些设计师界面类和各个小部件,建立这种类似父子的上下级层次管理关系。当父窗口关闭销毁时,会先检索他有多少子窗体,先把所有的子窗口进行销毁(子窗口里边还有子窗口,那就继续向里先销毁),依次往上,最后销毁父窗口。就相当于老板要破产关门,先给个总监打招呼叫他们辞掉下面的属下,各总监回去给各小组经理打招呼,各个小组经理再给员工打招呼,员工走人后小组经理在走人,小组经理走人后总监再走人,总监都走完后,老板最后关门滚蛋。
就是这么个道理~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nginx: 负载均衡基础配置, 加权轮序, hash算法, ip_hash算法, least_conn算法
  • 单一职责原则介绍
  • wordpress 页面URL自动跳转到图片地址?
  • H5手机端调起支付宝app支付
  • [线程]单例模式 及 指令重排序
  • 面向对象编程
  • axios响应
  • c-数据结构(顺序表、链表)
  • 【GD32】RT-Thread实时操作系统移植(GD32F470ZGT6)
  • 【SpringCloud Alibaba】(十一)学习 Sleuth 链路追踪
  • 百度飞浆目标检测PPYOLOE模型在PC端、Jetson上的部署(python)
  • Python入门笔记
  • 【C/C++】C++类与对象基本概念(抽象封装、类的定义与使用、构造函数、析构函数、静态成员、友元)
  • openlayers10+vue3+ts
  • Java后端 - 常见BUG及其处理策略(持续更新中~)
  • 时间复杂度分析经典问题——最大子序列和
  • CSS相对定位
  • EventListener原理
  • IDEA 插件开发入门教程
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Redis在Web项目中的应用与实践
  • Redis字符串类型内部编码剖析
  • SpringBoot几种定时任务的实现方式
  • SQLServer插入数据
  • SQLServer之创建数据库快照
  • vue 配置sass、scss全局变量
  • win10下安装mysql5.7
  • XML已死 ?
  • zookeeper系列(七)实战分布式命名服务
  • 聊聊directory traversal attack
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 三分钟教你同步 Visual Studio Code 设置
  • 用Visual Studio开发以太坊智能合约
  • hi-nginx-1.3.4编译安装
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (2)Java 简介
  • (2024)docker-compose实战 (9)部署多项目环境(LAMP+react+vue+redis+mysql+nginx)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (Charles)如何抓取手机http的报文
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (待修改)PyG安装步骤
  • (附源码)计算机毕业设计ssm电影分享网站
  • (回溯) LeetCode 78. 子集
  • (九)c52学习之旅-定时器
  • (离散数学)逻辑连接词
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .gitignore文件---让git自动忽略指定文件
  • .Net Core 微服务之Consul(二)-集群搭建