QT的exec函数

打印 上一主题 下一主题

主题 1032|帖子 1032|积分 3096

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在Qt框架中,exec()方法是QDialog类(及其子类)的一个成员函数,用于以模态(modal)方式表现对话框。当exec()被调用时,它会启动一个局部的变乱循环,这个循环会壅闭对对话框之外的其他窗口的访问,直到对话框被关闭。
exec()方法的返回类型通常是int或QDialog:ialogCode(后者是一个罗列类型,提供了标准对话框结果的预定义值,如QDialog::Accepted和QDialog::Rejected)。返回的值通常用于指示对话框是怎样被关闭的,例如用户点击了哪个按钮。
点击按钮打开新窗口 
  1. void Widget::on_btnOpen_clicked(){
  2.     SetDialog dlg;
  3.     dlg.exec();
  4. }
复制代码
错误写法:窗口一闪而过
  1. void Widget::on_btnOpen_clicked(){
  2.     SetDialog dlg;
  3.     dlg.show();
  4.     //dlg.exec();
  5. }
复制代码
在Qt框架中,对话框的表现方式通常有两种:模态(modal)和非模态(non-modal)。这两种方式的区别在于用户与对话框之外的其他窗口的交互本领。

  • 模态对话框
    当使用exec()方法表现对话框时,它会以模态方式运行。这意味着在对话框关闭之前,用户不能与对话框之外的其他窗口进行交互。exec()方法会启动一个局部的变乱循环,直到对话框被关闭,这个循环才会结束。因此,exec()是壅闭的,它会暂停代码的执行,直到对话框关闭。
  • 非模态对话框
    当使用show()方法表现对话框时,它会以非模态方式运行。这意味着对话框表现后,用户仍然可以与对话框之外的其他窗口进行交互。show()方法不会启动新的变乱循环,也不会壅闭代码的执行。因此,对话框的表现是即时的,而代码的执行会继承进行。
当你调用dlg.show()时,对话框会以非模态方式表现,用户可以与对话框和其他窗口进行交互。
如果你注释掉// dlg.exec();这一行,那么对话框将以非模态方式继承运行,这是符合预期的。但是,如果你取消注释并调用dlg.exec();,那么对话框会起首以非模态方式表现(因为show()已经被调用),然后exec()会尝试以模态方式运行对话框。这通常会导致一些不盼望的行为,因为对话框已经表现了一次,而且exec()会再次进入变乱循环等候对话框关闭。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表