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


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();
    

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值