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