0.是什么?
- ⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中
- 对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互
- Qt中使用
QDialog
类表示对话框,该类继承自QWidget
QWidget
的各种属性方法,QDialog
也能使用
- 每次弹出一个
QDialog
,都是新创建的一个新的QDialog
- 要考虑内存泄漏问题
1.对话框的分类
- 模态对话框:
- 显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框
- 使⽤
QDialog::exec()
调⽤ - 模态对话框适⽤于必须依赖⽤⼾选择的场合,⽐如消息显⽰,⽂件选择,打印设置等
QDialog dlg(this); dlg.resize(299, 100); dlg.exec();
- 非模态对话框:
- 显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种⾮阻塞式对话框
- 使⽤
QDialog::show()
调⽤ - ⾮模态对话框⼀般在堆上创建
- 因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过
- 同时还需要设置
Qt:WA_DeleteOnClose
属性,在关闭时,自动进行delete
- ⽬的:当创建多个⾮模态对话框时(如打开了多个⾮模态窗⼝),为了避免内存泄漏要设置此属性
- 模态对话框也可以设置,其作用就是在对话框关闭后自动
delete
- ⾮模态对话框适⽤于特殊功能设置的场合,⽐如查找操作,属性设置等
// 非模态对话框,为了防止一闪而过,创建在堆区 QDialog* dlg = new QDialog(this); dlg->resize(200, 100); // 当dlg无限创建时(即一直不断的打开关闭窗口) // 设置以下属性即可在关闭非模态对话框时释放这个对象 dlg->setAttribute(Qt::WA_DeleteOnClose); dlg->show();
2.混合属性对话框
- 混合属性对话框同时具有模态对话框和⾮模态对话框的属性
- 对话框的⽣成和销毁具有⾮模态对话框属性
- 功能上具有模态对话框的属性
- 使⽤
QDialog::setModal()
可以创建混合特性的对话框- 通常,创建对话框时需要指定对话框的⽗组件
QDialog* dialog = new QDialog(this); dialog->setAttribute(Qt::WA_DeleteOnClose); dialog->setModal(true); // 设置混合特性的对话框 dialog->resize(200, 100); dialog->show();