Mac 沙箱的 QFileDialog 和 setDefaultSuffix

QFileDialog and setDefaultSuffix for Mac Sandbox

我想在 QFileDialog 中设置默认文件扩展名,以便在我的应用程序中保存文件(在 mac 应用程序商店沙箱中需要 运行)。 mac 上 setDefaultSuffix 的默认行为(没有沙箱)是它向用户输入的任何名称添加扩展名。

当沙盒打开时,这会有所不同;它只是在交互开始时添加扩展名字符串,但是当用户删除建议的文件名(带扩展名)并输入一个没有扩展名的文件时,来自 QFileDialog 的文件不包含后缀。有没有办法破解对话框以使其在沙盒中以相同的方式运行?

我正在使用 Qt 4.8.5(现在无法升级)

我认为您无法更改 Mac 沙盒的行为,但您可以像这样为 Mac 添加简单的解决方法:

QString suffix = ".txt";  // your suffix here
QString fileName = ... // get filename after QFileDialog work
QFileInfo file(filename);
if(file.suffix().isEmpty()) fileName += suffix ;

事实证明,使用静态方法显示 QFileDialog 可以使正确的默认后缀在 Mac 沙箱中工作,因此无需创建 QFileDialog 实例并设置默认后缀,只需使用:

getSaveFileName(QWidget * parent = 0, const QString & caption = QString(), 
                const QString & dir = QString(), const QString & filter = QString(), 
                QString * selectedFilter = 0, Options options = 0)

过滤器设置为仅允许您需要的扩展。