博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt 非模态对话框exec()与模态对话框show()
阅读量:1816 次
发布时间:2019-04-25

本文共 1058 字,大约阅读时间需要 3 分钟。

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

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

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

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

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里

转载地址:http://cuwkf.baihongyu.com/

你可能感兴趣的文章
python网页解析器
查看>>
linux安装svn并设置自启动
查看>>
svn常用命令
查看>>
python2网页采集案例
查看>>
svn的服务端配置
查看>>
python3 urllib和requests模块
查看>>
Axure常见的几种原型图
查看>>
svn的checkout与export的区别与使用
查看>>
js实现点击复制功能
查看>>
phpquery采集案例
查看>>
jsp内置对象request的常用方法
查看>>
javascript 0和-0
查看>>
jsDelivr使用小记
查看>>
AJAX_ Asynchronous JavaScript and XML
查看>>
Vue_基本入门
查看>>
Java(1)
查看>>
Java(2)
查看>>
Java(3)
查看>>
react使用antd警告:Warning: findDOMNode is deprecated in StrictMode. findDOMNode was passed an instance
查看>>
react 使用router 和 ts 进行页面跳转报错
查看>>