【问题标题】:Specify default extension in QFileDialog::getSaveFileName在 QFileDialog::getSaveFileName 中指定默认扩展名
【发布时间】:2011-08-29 18:41:35
【问题描述】:

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

这是来自 MSDN 的描述:

LPCTSTR lpstrDefExt

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

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

【问题讨论】:

    标签: c++ qt qfiledialog


    【解决方案1】:

    编辑:如果这对您不起作用,请查看@user52366 的the answer below

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

    【讨论】:

    • 这对我不起作用,我无法在文档中引用此类用法。你能给我一个指针吗?
    【解决方案2】:

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

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

    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' ...
    }
    

    【讨论】:

    • 也许他们在新版本中改变了它
    【解决方案3】:

    不确定 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

    【讨论】:

    • 在 Windows 中,如果您从记事本中获得“保存文件”对话框,并且您只键入“a”而不是“a.txt”,则创建的文件不会是“a”。 (即没有扩展名),它将是'a.txt'。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2017-11-24
    • 2019-01-16
    • 2014-04-18
    相关资源
    最近更新 更多