Qt ------ 初始化构造函数参数,parent
2024-09-04 12:50:21
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属性。当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收内存——因此我们所说的内存泄漏一般是指我们自己写的应用程序的内部,而不会影响到整个操作系统——当然,如果你实现太可恶,操作系统也会受不了自动关掉你的程序的。
最新文章
- Spring MVC初始化参数绑定
- jQuery-1.9.1源码分析系列(十一) DOM操作
- Windows 10下通过蓝牙连接iPhone个人热点进行共享上网
- 如何获取SQL Server 2008数据库数据文件的位置
- sudo
- Mysql表复制及备份还原
- easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大
- JDBC详解系列(四)之建立Stament和执行SQL语句
- 个人总结ASP.NET必备面试题
- tar.gz压缩,查看,解压
- js中slice splice substring substr区别
- deep learning 以及deep learning 常用模型和方法
- 【PyTorch深度学习60分钟快速入门 】Part4:训练一个分类器
- [读书笔记]Linux命令行与shell编程读书笔记01
- python 类似java的三目运算符
- 背水一战 Windows 10 (40) - 控件(导航类): AppBar, CommandBar
- Git常用的几个命令
- RS交叉表自动汇总后百分比列显示错误之解决方案
- 自然语言交流系统 phxnet团队 创新实训 个人博客 (二)
- win10下安装配置iis,发布iis