如何在 MacOS 下使用 QFileDialog::getSaveFileName(...)

Posted

技术标签:

【中文标题】如何在 MacOS 下使用 QFileDialog::getSaveFileName(...)【英文标题】:How to use QFileDialog::getSaveFileName(...) under MacOS 【发布时间】:2012-05-03 09:50:56 【问题描述】:

我目前正在测试为 MacOS X.6 下的 windows 编写的软件。大多数东西已经有效,但目前我坚持一件事: Mac 下原生的 SaveFileName Dialog。

QString fileName = m_sSaveAsDir + "untitled." + m_sFileExtension;
qDebug() << "File Extension:" << m_sFileExtension; //"jpg"
qDebug() << "SaveDir:" << m_sSaveAsDir; //""
qDebug() << "Filename:" << fileName; //Filename: "untitled.jpg"
fileName = QFileDialog::getSaveFileName( 0, tr( "Save As" ), 
           fileName, tr("Images (*.dng *.tif *.jpg)"), 0, 0 );
qDebug() << "Filename:" << fileName; //Filename: "//...../Pictures/untitled.dng"

所以很明显以前的扩展名 jpg 在 MacOs 下被忽略,因此不显示也不保存。这对我来说很好。 此外,Qt 手册说在 MacOS 下过滤器被忽略。如果我在 SaveDialog 中查看浏览器中的文件夹,这是正确的(文件未过滤)。但是好像只要在filedialog中没有输入扩展名,过滤器中的第一个扩展名就被用作扩展名,这很烦人。 我怎样才能解决这个问题? 我尝试通过将 getSaveFileName() 方法中的最后一个参数更改为“DontUseNativeDialog”来使用 NonNativeSaveDialog,这非常有效,但看起来不太好。 有什么建议吗?

你好,唐尼

【问题讨论】:

【参考方案1】:

您可以使用非静态 QFileDialog 方法自己构建对话框。为此请关注QFileDialog docs,然后查看QFileDialog::setDefaultSuffix(),您可以将其设置为空字符串,如下所示:

dialog.setDefaultSuffix(QString());

然后不会自动将任何内容附加到文件的末尾。我没有方便的 Mac 来测试这个,但它应该可以工作。

【讨论】:

以上是关于如何在 MacOS 下使用 QFileDialog::getSaveFileName(...)的主要内容,如果未能解决你的问题,请参考以下文章

如何在pyside中为QtGui.QFileDialog.getOpenFileName定义一个QDir?

QFileDialog : 获取文件名

如何在 Qt Designer 中创建一个打开 QFileDialog 的信号?

如何将自定义项目添加到 QFileDialog?

在 Qt 中如何在 QLineEdit 中添加带有 QFileDialog 的文件

QT QFileDialog::getSaveFileName如何把文件默认保存路径设为桌面;