Qt------初始化构造函数参数,parent

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Qt------初始化构造函数参数,parent
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属性。

当然,如果你不声明这个属性,当整个程序关闭时,操作系统会回收内存——因此我们所说的内存泄漏⼀般是指我们⾃⼰写的应⽤程序的内部,⽽不会影响到整个操作系统——当然,如果你实现太可恶,操作系统也会受不了⾃动关掉你的程序的。

相关文档
最新文档