7

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

这是来自 MSDN 的描述:

LPCTSTR lpstrDefExt

默认扩展名。如果用户未能键入扩展名,GetOpenFileName 和 GetSaveFileName 会将此扩展名附加到文件名中。此字符串可以是任意长度,但仅附加前三个字符。该字符串不应包含句点 (.)。如果此成员为 NULL 并且用户未能键入扩展名,则不会附加任何扩展名。

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

4

3 回答 3

6

编辑:如果这对您不起作用,请查看@user52366下面的答案

如果指定,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() 方法。

于 2013-04-09T14:22:34.627 回答
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' ...
}
于 2021-03-04T17:53:43.597 回答
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

于 2011-08-29T18:54:58.800 回答