Qt中的模态、非模态、半模态对话框

大海

 

1. 模态对话框(Modal)


模态对话框 是指在同一个应用程序中,阻塞其他可见窗口输入的对话框。一般用于用户输入文件名或用于应用程序的配置选项。可以分为应用模态和窗口模态。

下面是一个模态对话框的显示效果:

模态对话框
对话框的完整代码如下:
头文件:

cpp文件

整体对话框是继承自QDialog,界面实现内容比较简单。

接下来是调用部分:

点击 模态对话框 后,调用这部分代码

  • dialog.exec() , 函数 exec() 会调用显示一个模态对话框,并使代码不能向下运行,直到该函数返回。
  • accept() 这是一个槽函数,关联点击确定的信号。当点击按钮时,函数 exec() 返回 Accepted
  • reject() 这是一个槽函数,关联点击取消的信号。当点击按钮时,函数 exec() 返回 Rejected
  • 当点击关闭按钮是,函数 exec() 也返回 Rejected 。 因此当点击关闭对话框时,输出 Modal: Clicked Cannel Button
 

2. 非模态对话框(Modeless)


非模态对话框 是独立于同一应用程序中的其他窗口而运行的对话框。例如,文字处理程序中的查找和替换对话框通常是非模态的,以允许用户与应用程序的主窗口和对话框交互。

下面是非模态对话框的展示效果:
非模态对话框
其中对话框的内容部分与上面的模态相同,调用 部分有所差异:

  • 直接使用函数 show 即可实现非模态对话框,本例子中指定了 parent 否则会出现点击父窗口子窗口跑到父窗口下面的情况。
  • 这里使用了 setAttribute(Qt::WA_DeleteOnClose) 表示当关闭是自动释放内存,否则窗口关闭时不会被自动释放。
  • 与模态对话框不同,当调用函数 show() 后,代码不会被阻塞,可以继续被执行。如果想被阻塞可以使用 QEventLoop 实现。
 

3. 半模态对话框


我们所说的 半模态 通常是指模态对话框但是代码不会被阻塞。

下面时一个半模态的效果示例:
半模态对话框

调用部分代码如下:

  • 这里使用函数 setModal(true) 指定窗口为模态窗口。也可以使用函数 setWindowModality() 实现。
  • 调用函数 show() 后, 代码继续向下执行,而不是阻塞在此处。

You May Also Like

About the Author: admin

喜欢编程、爱游戏,更爱生活。

发表评论

电子邮件地址不会被公开。