【笔记】在堆上和栈上建立对话框对象

1、在栈上建立对话框:
QDialog dialog(this);
引用时用点.:
dialog.setWindowTitle(tr("..."));
dialog.exec();//这是采用模态对话框
dialog.show();//这是采用非模态对话框,而当对象建立在栈上,非
模态对话框会一闪消失这是因为,show() 函数不会阻塞当前线程,对话框会显示出来,然后函数立即返回,代码继续执行。注意,dialog 是建立在栈上的,show() 函数返回,MainWindow::open() 函数结束,dialog 超出作用域被析构,因此对话框消失了。

2、在堆上建立对象
QDialog *dialog = new QDialog(this);
引用时用箭头:
dialog->show();//这是在堆上建立的对话框对象,即使采用show()也不会消失

3、顶层窗口与非顶层窗口的区别:顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置。

4、在堆上建立对话框,不用MainWindow作为父窗口则关闭对话框却没有delete,而想用Mainwindow作为父窗口时,若不是在界面类Mainwindow中出现dialog时,也无法使用this指针,这时可以设置dialog的window attribute
dialog->setAttribute(Qt::WA_DeleteOnClose);// setAttribute() 函数设置对话框关闭时,自动销毁对话框。另外,QObject     还有一个 deleteLater() 函数,该函数会在当前事件循环结束时销毁该对话框(具体到这里,需要使用 exec() 开始一个新的事件循环)。

你可能感兴趣的:(【笔记】在堆上和栈上建立对话框对象)