QT之对话框(十四)

  
 <代码>我们在平时的软件设计中,难免会遇到对话框,那么我们今天就来看看Qt中的对话框。 
  

对话框是与用户进行简短交互的顶层窗口,QDialog 是 Qt 中所有对话框窗口的基类。QDialog 继承于 QWidget 是一种容器类型的组件。关系入下图所示:
QT之对话框(十四)
QDialog 的意义:1、QDialog 作为一种专用的交互窗口而存在;2、QDialog 不能作为子部件嵌入其它容器中;3、QDialog 是定制了窗口式样的特殊的 QWidget。
我们做如下实验:
QT之对话框(十四)
那么这块就涉及到两个概念了:模态对话框和非模态对话框。我们下来就分别介绍下这两个对话框的特点。
模态对话框(QDialog::exec()):显示后无法与父窗口进行交互,是一种阻塞式的对话框调用方式。
非模态对话框(QDialog::show()):显示后独立存在可以同时与父窗口进行交互,是一种非阻塞式的对话框调用方式。
那么在一般情况下:模态对话框用于必须依赖用户选择的场合,如消息提示、文件选择、打印设置等;非模态对话框用于特殊功能设置的场合,如查找操作、属性设置等。
那么我们在栈上创建模态对话框是最简单常用的方式,在一般情况下非模态对话框需要在堆上创建,通过 QDialog::setModal 函数可以创建混合特性的对话框,非模态对话框需要指定 Qt::QA_DeleteOnClose 属性。
我们下面就做个试验,建立3个按钮,按下每个按钮则打印出 begin 和 end 。如下所示:
头文件:
QT之对话框(十四)
源文件,每个按钮对应打印 begin 和 end。如下:
QT之对话框(十四)
那么我们运行得到如下所示,每按下一个按钮,就会对应打印出相应信息:
QT之对话框(十四)
那么只有模态对话框才有返回值的概念,模态对话框的返回值用于表示交互结果。QDialog::exec() 的返回值为交互结果:1、void QDialog::done(int i) 关闭对话框并将参数作为交互结果;2、QDialog::Accepted - 用户操作成功;3、QDialog::Rejected - 用户操作失败。
我们分别在三个函数里做如下设置,ModalBtn_Clicked返回Accepted;NormalBtn_Clicked返回Rejected;MixedBtn_Clicked返回100,如下所示:
QT之对话框(十四)
主程序如下所示:
QT之对话框(十四)
结果分别如下:
QT之对话框(十四)QT之对话框(十四)QT之对话框(十四)
那么今天我们就学习了对话框相关的知识,分为模态对话框和非模态对话框;模态对话框是阻塞式的,用于依赖用户交互结果的场合;非模态对话框是非阻塞式的,用于功能设置的场合。

QT之对话框(十四)