Win32函数GetSaveFileName中是否有等效的OPENFILENAME结构的lpstrDefExt成员?
以下是MSDN的描述:
LPCTSTR lpstrDefExt
默认扩展名。 GetOpenFileName和GetSaveFileName附加此内容 如果用户无法键入扩展名,则扩展名为文件名。 此字符串可以是任意长度,但只有前三个字符 追加。该字符串不应包含句点(。)。如果是这个成员 为NULL且用户无法键入扩展名,没有扩展名 追加。
因此,如果lpstrDefExt设置为“txt”并且用户键入“myfile”而不是“myfile.txt”,则该函数仍会返回“myfile.txt”。
答案 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)"));