QDialog::show() 和 QDialog::open() 有什么区别?
show()
只会显示对话框,而不会影响程序中的其他窗口。 open()
将show()
窗口 + 阻止其他窗口通过setWindowModality()
访问,即它成为一个模态窗口。
例如,如果要打开文件,并且不希望用户在选择文件并关闭该对话框之前能够在程序中执行任何操作,这将非常有用。
引用Qt的手册:
模式对话框是阻止输入到同一应用程序中其他可见窗口的对话框。用于向用户请求文件名或用于设置应用程序首选项的对话框通常是模式对话框。对话框可以是应用程序模式(默认)或窗口模式。
打开应用程序模式对话框时,用户必须完成与对话框的交互并关闭它,然后才能访问应用程序中的任何其他窗口。窗口模式对话框仅阻止对与对话框关联的窗口的访问,允许用户继续使用应用程序中的其他窗口。
显示模式对话框的最常见方法是调用其 exec() 函数。当用户关闭对话框时,exec() 将提供一个有用的返回值。通常,为了让对话框关闭并返回适当的值,我们将默认按钮(例如 OK)连接到 accept() 插槽,将取消按钮连接到 reject() 插槽。或者,您可以使用"已接受"或"已拒绝"调用 done() 插槽。
正如文档中所述,QDialog::open()
将对话框显示为窗口模式对话框,并立即返回。
而QDialog::show(),实际上是QWidget::show(),只会将您的对话框显示为标准的,非模态的小部件。