在QFileDialog :: getSaveFileName中指定默认扩展名

时间:2011-08-29 18:41:35

标签: c++ qt qfiledialog

Win32函数GetSaveFileName中是否有等效的OPENFILENAME结构的lpstrDefExt成员?

以下是MSDN的描述:

  

LPCTSTR lpstrDefExt

     

默认扩展名。 GetOpenFileName和GetSaveFileName附加此内容   如果用户无法键入扩展名,则扩展名为文件名。   此字符串可以是任意长度,但只有前三个字符   追加。该字符串不应包含句点(。)。如果是这个成员   为NULL且用户无法键入扩展名,没有扩展名   追加。

因此,如果lpstrDefExt设置为“txt”并且用户键入“myfile”而不是“myfile.txt”,则该函数仍会返回“myfile.txt”。

3 个答案:

答案 0 :(得分:6)

如果指定,Qt将从“selectedFilter”参数中提取默认扩展名。

以下是一个例子:

QString filter = "Worksheet Files (*.abd)";
QString filePath = QFileDialog::getSaveFileName(GetQtMainFrame(), tr("Save Worksheet"), defaultDir, filter, &filter);

使用此代码时,如果用户未在对话框中指定,则getSaveFileName()方法将自动添加“.abd”文件扩展名。您可以在“qfiledialog_win.cpp”Qt源文件中的qt_win_get_save_file_name()中看到此实现。

不幸的是,这对getOpenFileName()方法不起作用。

答案 1 :(得分:1)

正如上面评论中提到的,这不起作用,至少对我来说是这样。

最后我跳过了静态方法并使用了以下内容:

QFileDialog dialog(this, "Save someting", QString(),
                   "Comma-separated file (*.csv)");
dialog.setDefaultSuffix(".csv");
dialog.setAcceptMode(QFileDialog::AcceptSave);
if (dialog.exec()) {
    const auto fn = dialog.selectedFiles().front();
    // a QStringList is returned but it always contains a single file
    // do something using filename 'fn' ...
}

答案 2 :(得分:0)

不确定LPCTSTR lpstrDefExt到底要做什么,但Qt文档给出了以下示例

 QString fileName = QFileDialog::getSaveFileName(this, tr("Save File"),
                            "/home/jana/untitled.png",
                            tr("Images (*.png *.xpm *.jpg)"));

http://doc.qt.io/qt-5/qfiledialog.html#getSaveFileName