• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
我是张洪铭我是熊博士
时光静好,与君同;细水长流,与君语
博客园    首页    新随笔    联系   管理    订阅  订阅

Qt 半模式对话框 && 模态(应用程序级 | 窗口级) && 非模态

今天看视频,学习好半模式对话框,好新奇哟,这里记录下来。

 

半模式对话框,介于模式对话框和飞模式对话框之间。半模式对话框会像模式对话框一样阻塞主界面的事件响应,同时,半模式对话框会像非模态对话框一样,立即执行后面的程序。

 

半模式对话框,先调用setModal(true),或者setWindowModality(true),再调用show()。

setModal(true) 和 setWindowModality(true) 的区别: 前者会像模态对话框的效果---双击主界面时,模态对话框会闪烁,并且发出声音。 而后者只是达到模式对话框的效果,双击主界面没有任何反应。

QDialog * dlg = new QDialog(&w);
    dlg->setWindowTitle(QObject::tr("半模式对话框"));
    dlg->setModal(true);  //我更推荐
    //dlg->setWindowModified(true);
    dlg->show();

    qDebug()<<QStringLiteral("半模态对话框显示后,立即执行后面的的代码,而不用等待半模态对话框被关闭。 ");
    qDebug()<<QStringLiteral("但是,在半模态对话框未关闭的情况下,会阻塞主窗体的消息");

模态对话框调用exec()显示;  非模态对话框调用show()显示。

 

2019-08-26

今天看豆子网站对话框部分,然后回头看了看过去写的博客(上面的内容), 觉得好新奇,又好奇怪,留着它不删除。下面写一下新的收获:

             Qt支持模态和非模态对话框。 并且,Qt支持的模态对话框有两种,

                       1-应用程序级模态,调用QApplication::exec()

                       2-窗口级别模态,调用QDialog::open()

                       当然了,非模态调用show()

      QDialog的两种创建方式,对内存的影响:

                       1-栈上创建, 离开局部作用域,内存销毁

                        2-堆上创建,如果指定parent,则parent销毁时,销毁对话框; 如果不指定parent,有两种处理方式:

                                    2.1-在合适的地方判断并delete(),或deleteLater()

                                    2-2-设置对话框属性,对话框关闭时,自动销魂内存,调用QDialog::setAttribute(Qt::WA_DeleteOnClose);

               

              作操作,show()非模态显示的对话框,可以调用QDialog::setAttribute(Qt::WA_ShowModal, true),达到模态效果。

 

    

          

posted @ 2019-03-14 22:14  我是张洪铭我是熊博士  阅读(786)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3