【问题标题】:QDialog: show() vs open()QDialog:显示()与打开()
【发布时间】:2016-07-08 11:55:13
【问题描述】:

QDialog::show()QDialog::open() 有什么区别?

【问题讨论】:

    标签: qt qt5 qdialog


    【解决方案1】:

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

    例如,如果您想打开一个文件,并且您不希望用户能够在程序中执行任何操作,直到选择了一个文件并关闭了该对话框,这将非常有用。

    引用Qt's manual:

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

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

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

    【讨论】:

    • 那么“dialog.open()”是否与“dialog.setWindowModality(...);dialog.show();”完全一样?
    • @JanRüegg 是的。至少文档是这么说的。我通常手动启用模态。
    【解决方案2】:

    正如文档中所述,QDialog::open()

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你自己链接到文档很有趣。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-21
          • 1970-01-01
          相关资源
          最近更新 更多