Qt 非模态对话框exec()与模态对话框show()

嵌入式Qt界面编程 专栏收录该内容
17 篇文章 1 订阅

下面两段话摘自:《基于嵌入式Linux的Qt图形程序实战开发》P41~42


用一句来表示我对exec()的理解吧:首先会显示对话框,然后会阻塞后面的代码的执行,直到对话框关闭,返回结果。


模式对话框:所谓模式对话框就是说,该对话框会把该应用程序的其他窗口的输入锁定,其他应用程序仍然可以被用户访问。也就是说当一个模式对话框运行时,该应用程序的其他窗口就不能进行操作了。想要恢复对其他对话框的操作必须先处理该模式对话框。因此模式对话框常用于需要用户输入文件名的地方,比如保存文件时。通常情况下,模式对话框运行时调用它的exec()函数。


非模式对话框:所谓非模式对话框其实就是和模式对话框相对应的,在该对话框运行后,仍然可以对该应用程序中的其他窗口进行操作。对于一个非模式的对话框,它的运行通常调用show()函数。


http://blog.csdn.net/goforwardtostep/article/details/53667566

void Dialog::slotAddRow()
{
//        int num = tableWidget->rowCount();
//        tableWidget->insertRow(num);
    //下面的代码重要***
    int num = tableWidget->rowCount();//得到表格中有多少行
    Info *info = new Info();
    info->exec();
    QString name = info->nametext;
    tableWidget->insertRow(num);
    tableWidget->setItem(num,0,new QTableWidgetItem(name));
}

模式对话框有自己的事件循环。按照我的理解,实际上 exec() 方法是先设置modal属性为Qt::ApplicationModal,然后调用 show() 显示对话框,最后启用事件循环来阻止exec() 方法的结束直到窗口关闭,得到返回结果(DialogCode),退出事件循环最后exec()方法调用结束,exec()方法后的代码将继续执行

 tableWidget->insertRow(num);
    tableWidget->setItem(num,0,new QTableWidgetItem(name));

而show()函数是非模式对话框,调用后不等对话框关闭马上执行后面的代码。(如果调用了show(),还没等到对话框关闭,就执行了后面的代码,所以就不能添加到tablewidget里






  • 0
    点赞
  • 1
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值