当前位置: 首页 > article >正文

QT的exec函数

在Qt框架中,exec()方法是QDialog类(及其子类)的一个成员函数,用于以模态(modal)方式显示对话框。当exec()被调用时,它会启动一个局部的事件循环,这个循环会阻塞对对话框之外的其他窗口的访问,直到对话框被关闭。

exec()方法的返回类型通常是intQDialog::DialogCode(后者是一个枚举类型,提供了标准对话框结果的预定义值,如QDialog::AcceptedQDialog::Rejected)。返回的值通常用于指示对话框是如何被关闭的,例如用户点击了哪个按钮。

点击按钮打开新窗口 

void Widget::on_btnOpen_clicked(){
    SetDialog dlg;
    dlg.exec();
}

错误写法:窗口一闪而过

void Widget::on_btnOpen_clicked(){
    SetDialog dlg;
    dlg.show();
    //dlg.exec();
}

在Qt框架中,对话框的显示方式通常有两种:模态(modal)和非模态(non-modal)。这两种方式的区别在于用户与对话框之外的其他窗口的交互能力。

  1. 模态对话框
    当使用exec()方法显示对话框时,它会以模态方式运行。这意味着在对话框关闭之前,用户不能与对话框之外的其他窗口进行交互。exec()方法会启动一个局部的事件循环,直到对话框被关闭,这个循环才会结束。因此,exec()是阻塞的,它会暂停代码的执行,直到对话框关闭。

  2. 非模态对话框
    当使用show()方法显示对话框时,它会以非模态方式运行。这意味着对话框显示后,用户仍然可以与对话框之外的其他窗口进行交互。show()方法不会启动新的事件循环,也不会阻塞代码的执行。因此,对话框的显示是即时的,而代码的执行会继续进行。

当你调用dlg.show()时,对话框会以非模态方式显示,用户可以与对话框和其他窗口进行交互。

如果你注释掉// dlg.exec();这一行,那么对话框将以非模态方式继续运行,这是符合预期的。但是,如果你取消注释并调用dlg.exec();,那么对话框会首先以非模态方式显示(因为show()已经被调用),然后exec()会尝试以模态方式运行对话框。这通常会导致一些不期望的行为,因为对话框已经显示了一次,而且exec()会再次进入事件循环等待对话框关闭。


http://www.kler.cn/a/415741.html

相关文章:

  • Rust 力扣 - 740. 删除并获得点数
  • 【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?
  • 解决 el-input 红色波浪线问题
  • Python 3 教程第32篇(正则表达式)
  • 初窥门径:React中的事件机制
  • instanceof运算符
  • 详细说说 JDK 的线程池的创建参数
  • 数据结构进阶(C++) -- 红黑树的模拟实现
  • 深入理解Redis线程模型
  • elementUI如何dialog对话框 不设置 点击遮罩层 自动关闭的功能
  • 【LC】303. 区域和检索 - 数组不可变
  • Vue使用Mockjs插件实现模拟数据
  • Redis使用场景-缓存-缓存穿透
  • 3.10 内核 BUG_ON() at xfs_vm_writepage() -> page_buffers()
  • 【Linux】文件系统与设备文件
  • 在CodeIgniter中创建库
  • VSCode 使用教程:项目使用配置、使用哪些插件、Live Server使用问题及解决方案(你想要的,都在这里)
  • 百度实习内推
  • Oracle SCN与时间戳的映射关系
  • 恶补英语初级第12天,《描述进行中的动作》