一种在 Mac 上强制关闭模态 QFileDialog 的方法

Posted

技术标签:

【中文标题】一种在 Mac 上强制关闭模态 QFileDialog 的方法【英文标题】:A way to forcefully close modal QFileDialog on Mac 【发布时间】:2017-01-27 22:03:15 【问题描述】:

我有一个 Qt 应用程序,它有时会调用 QFileDialog::getOpenFileName。但是,在任何时候我的应用程序都可能收到一个事件,这将使该文件对话框无关紧要,所以我想强制关闭它。

这是我尝试关闭此对话框的方式:

QWidget *modalWidget = QApplication::activeModalWidget();
if (modalWidget)
    modalWidget->close();

这适用于 Windows,但我在 Mac 上遇到奇怪的行为。它不是关闭,而是隐藏对话框。执行永远不会离开QFileDialog::getOpenFileName 调用,因为它是一个模态对话框,所以底层应用程序会永久冻结。

【问题讨论】:

您可能需要避免调用 QFileDialog::getOpenFileName() 而是手动创建一个 QFileDialog 对象并显示()它。 【参考方案1】:

为了关闭,我最终通过调用原生 [NSApp abortModal] 关闭了对话框。

请注意,如果此问题在最近的 Qt 版本中已修复(自 Qt 5.8 以来未检查),则可能不需要此解决方法。

【讨论】:

以上是关于一种在 Mac 上强制关闭模态 QFileDialog 的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何强制关闭mac后台程序呢!

css 一种在Mac OS X Lion中始终保持滚动条的方法

模态导航和关闭

如何强制系统关闭底层套接字

mac强制退出windowserver

mac 强制关闭指定端口