当前位置:   article > 正文

[Qt][对话框][上]详细讲解

[Qt][对话框][上]详细讲解


0.是什么?

  • ⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中
  • 对话框通常是⼀个顶层窗⼝,出现在程序最上层,⽤于实现短期任务或者简洁的⽤⼾交互
  • Qt中使用QDialog类表示对话框,该类继承自QWidget
    • QWidget的各种属性方法,QDialog也能使用
  • 每次弹出一个QDialog,都是新创建的一个新的QDialog
    • 要考虑内存泄漏问题

1.对话框的分类

  • 模态对话框
    • 显⽰后⽆法与⽗窗⼝进⾏交互,是⼀种阻塞式的对话框
    • 使⽤QDialog::exec()调⽤
    • 模态对话框适⽤于必须依赖⽤⼾选择的场合,⽐如消息显⽰,⽂件选择,打印设置等
    QDialog dlg(this);
    dlg.resize(299, 100);
    dlg.exec();
    
    • 1
    • 2
    • 3
  • 非模态对话框
    • 显⽰后独⽴存在,可以同时与⽗窗⼝进⾏交互,是⼀种⾮阻塞式对话框
    • 使⽤QDialog::show()调⽤
    • ⾮模态对话框⼀般在堆上创建
      • 因为如果创建在栈上时,弹出的⾮模态对话框就会⼀闪⽽过
      • 同时还需要设置Qt:WA_DeleteOnClose属性,在关闭时,自动进行delete
        • ⽬的:当创建多个⾮模态对话框时(如打开了多个⾮模态窗⼝),为了避免内存泄漏要设置此属性
        • 模态对话框也可以设置,其作用就是在对话框关闭后自动delete
    • ⾮模态对话框适⽤于特殊功能设置的场合,⽐如查找操作,属性设置等
    // 非模态对话框,为了防止一闪而过,创建在堆区
    QDialog* dlg = new QDialog(this);
    dlg->resize(200, 100);
    
    // 当dlg无限创建时(即一直不断的打开关闭窗口)
    // 设置以下属性即可在关闭非模态对话框时释放这个对象
    dlg->setAttribute(Qt::WA_DeleteOnClose);
    
    dlg->show();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

2.混合属性对话框

  • 混合属性对话框同时具有模态对话框和⾮模态对话框的属性
    • 对话框的⽣成和销毁具有⾮模态对话框属性
    • 功能上具有模态对话框的属性
  • 使⽤QDialog::setModal()可以创建混合特性的对话框
    • 通常,创建对话框时需要指定对话框的⽗组件
    QDialog* dialog = new QDialog(this);
    dialog->setAttribute(Qt::WA_DeleteOnClose);
    dialog->setModal(true); // 设置混合特性的对话框
    dialog->resize(200, 100);
    dialog->show();
    
    • 1
    • 2
    • 3
    • 4
    • 5

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/981765
推荐阅读
相关标签
  

闽ICP备14008679号