MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ ui->setupUi(this);

1、QMainWindow 是 MainWindow 的父类

2、QWidget *parent 中的 parent 值赋值给 QMainWindow(parent) 中的 parent,这其实是用到C++的语法,执行MainWindow的构造函数前先执行父类QMainWindow的构造函数

3、写这句 QMainWindow(parent) 的原因是 new 一个 MainWindow 对象可以指定父对象,从而使用 Qt 提供的内存自动回收机制

4、QWidget  *parent 中为 QWidget 的原因是 QWidget 为窗口类型的类的基类,对于其他父类(比如非QMainWindow,即非窗口类),parent类型是 QObject

5、ui(new Ui::MainWindow)的作用相当于 ui = new Ui::MainWindow,即对对象 ui 进行实例化

几乎所有的Qt类的构造函数都会有一个parent参数。这个参数通常是QObject* 或者是 QWidget* 类型的。很多情况下它都会有一个初始值0,因此,即便你不去给它复制也没有丝毫的问题。于是,稍微偷懒一下,就会不自觉的忽略了这个参数。那么,这个参数到底是干什么用的呢?
 
其实,这个参数有很多用处。就像它的名字一样,这个参数指定了组件的父组件。对于一个对话框来说,对话框一般是不作为顶层容器出现的,因此在任务栏上一般是没有对话框的位置的。怎么指定这个对话框不是顶层容器呢?有父组件的组件不就不是顶层容器了吗?因此,只要你指定对话框的parent属性,任务栏就不会出现它的身影。当然,如果你不指定,这个对话框就成为顶层容器了,任务栏会给它留个位置的——利用这个特性,就可以实现特殊对话框可以在任务栏出现的效果,比如“关于”对话框的出现。
 

另外比较通用,也是很重要的作用是,parent参数指明了组件的父组件,这样,当父组件delete时,Qt可以保证所有子组件——也就是parent指针指向这个组件的所有组件——都会被正确的delete掉。这是Qt能够帮助我们管理一部分内存的原因所在。Qt是通过遍历parent属性来防止了这一部分内存泄漏的。因此,必要情况下还是不要忘记设置这个parent属性。当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收内存——因此我们所说的内存泄漏一般是指我们自己写的应用程序的内部,而不会影响到整个操作系统——当然,如果你实现太可恶,操作系统也会受不了自动关掉你的程序的。

最新文章

  1. Spring MVC初始化参数绑定
  2. jQuery-1.9.1源码分析系列(十一) DOM操作
  3. Windows 10下通过蓝牙连接iPhone个人热点进行共享上网
  4. 如何获取SQL Server 2008数据库数据文件的位置
  5. sudo
  6. Mysql表复制及备份还原
  7. easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大
  8. JDBC详解系列(四)之建立Stament和执行SQL语句
  9. 个人总结ASP.NET必备面试题
  10. tar.gz压缩,查看,解压
  11. js中slice splice substring substr区别
  12. deep learning 以及deep learning 常用模型和方法
  13. 【PyTorch深度学习60分钟快速入门 】Part4:训练一个分类器
  14. [读书笔记]Linux命令行与shell编程读书笔记01
  15. python 类似java的三目运算符
  16. 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar
  17. Git常用的几个命令
  18. RS交叉表自动汇总后百分比列显示错误之解决方案
  19. 自然语言交流系统 phxnet团队 创新实训 个人博客 (二)
  20. win10下安装配置iis,发布iis

热门文章

  1. Scala学习笔记之Actor多线程与线程通信的简单例子
  2. LeetCode - 389. Find the Difference - 三种不同解法 - ( C++ ) - 解题报告
  3. 向redis插入数据时,返回值问题
  4. lintcode-182-删除数字
  5. TCP系列27—窗口管理&流控—1、概述
  6. 用SC命令 添加或删除windows服务提示OpenSCManager 失败5 拒绝访问
  7. SVM之对偶问题
  8. week1 技术随笔
  9. hadoop fs 部分命令详解
  10. 【python】 requirements使用方法