QDialog:show()vs open()

时间:2016-07-08 11:55:13

标签: qt qt5 qdialog

QDialog::show()QDialog::open()之间的区别是什么?

4 个答案:

答案 0 :(得分:2)

show()只会显示对话框,而不会影响程序中的其他窗口。 open()show()窗口+阻止通过setWindowModality()访问其他窗口,即它成为模态窗口。

例如,如果要打开文件,这很有用,并且您不希望用户在选择文件并关闭对话框之前能够在程序中执行任何操作。

引自Qt's manual

  

模态对话框是一个对话框,用于阻止同一应用程序中其他可见窗口的输入。用于从用户请求文件名或用于设置应用程序首选项的对话框通常是模态的。对话框可以是应用程序模式(默认)或窗口模式。

     

当打开应用程序模式对话框时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模式对话框仅阻止访问与对话框关联的窗口,允许用户继续使用应用程序中的其他窗口。

     

显示模式对话框的最常用方法是调用其exec()函数。当用户关闭对话框时,exec()将提供有用的返回值。通常,要使对话框关闭并返回适当的值,我们会连接一个默认按钮,例如好的,到accept()插槽和拒绝()插槽的取消按钮。或者,您可以使用Accepted或Rejected来调用done()插槽。

答案 1 :(得分:2)

正如文档QDialog::open()

中所述
  

将对话框显示为窗口模式对话框,立即返回。

而QDialog :: show()实际上是QWidget::show(),只会将对话框显示为标准的非模态小部件。

答案 2 :(得分:0)

您自己与文档链接很有趣。

QDialog::open将窗口显示为模态。 QWidget::show是所有QWidget实现的基本方法,可确保向用户显示窗口。

  

将对话框显示为窗口模式对话框,立即返回。

答案 3 :(得分:0)

鉴于对话框的模态是通过执行show()或open()来控制的,因此QDialog :: modal()属性似乎是多余的/未使用的。 还是调用show()或open()会相应地动态设置此bool属性?