作者:kakaka2011
转自:http://blog.csdn.net/love_gaohz/article/details/10379367
1.Qt 中使用 QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承 QDialog。QDialog(及其子类,以及所有 Qt::Dialog 类型的类)的对于其 parent指针都有额外的解释:如果 parent为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent的中心)。顶层窗口与非顶层窗口的区别在于,顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置。
2.对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。模态对话框很常见,比如“打开文件”功能。你可以尝试一下记事本的打开文件,当打开文件对话框出现时,我们是不能对除此对话框之外的窗口部分进行操作的。
与此相反的是非模态对话框,例如查找对话框,我们可以在显示着查找对话框的同时,继续对记事本的内容进行编辑。
Qt 支持模态对话框和非模态对话框。其中,Qt有两种级别的模态对话框:应用程序级别的模态和窗口级别的模态,默认是应用程序级别的模态。
应用程序级别的模态是指,当该种模态的对话框出现时,用户必须首先对对话框进行交互,直到关闭对话框,然后才能访问程序中其他的窗口。
窗口级别的模态是指,该模态仅仅阻塞与对话框关联的窗口,但是依然允许用户与程序中其它窗口交互。窗口级别的模态尤其适用于多窗口模式,更详细的讨论可以看以前发表过的文章。
① 使用 QDialog::exec() 实现应用程序级别的模态对话框,
②使用 QDialog::open() 实现窗口级别的模态对话框,
③使用 QDialog::show() 实现非模态对话框。
exec() 函数的真正含义是开启一个新的事件循环.
所谓事件循环,可以理解成一个无限循环。Qt 在开启了事件循环之后,系统发出的各种事件才能够被程序监听到。这个事件循环相当于一种轮询的作用。既然是无限循环,当然在开启了事件循环的地方,代码就会被阻塞,后面的语句也就不会被执行到,只有在对话框关闭,exec()函数返回之后再能继续事件循环后的代码。因此,对于使用了 exec() 显示的模态对话框
引用自:Qt学习之路2