在QFileDialog的结果中附加缺少的扩展名

时间:2014-04-23 23:51:54

标签: c++ qt qt5

使用QFileDialog,我想提示用户输入文件名,如果缺少则添加扩展名。

一个建议是在事后手动添加扩展名。此方法的问题是可能不会警告用户他们正在覆盖文件(例如, test.txt 存在,用户输入 test 并且不会提示它们实际上是在覆盖 test.txt

我已阅读QFileDialog上的所有文档,但没有取得任何成功。我已尝试setDefaultSuffix,但fileDialog.getSaveFileName()的结果未包含扩展程序。有人可以提供一个如何成功完成此操作的示例吗?

1 个答案:

答案 0 :(得分:3)

不幸的是,当您使用“本机”文件对话框时,看起来此功能不可用。但是,如果您使用Qt文件对话框,它的工作方式与您预期的一样。

以下是使用Qt文件对话框的方法:

QFileDialog saveDialog;
saveDialog.setAcceptMode(QFileDialog::AcceptSave);
saveDialog.setDefaultSuffix("txt");
saveDialog.exec();
QString file = saveDialog.selectedFiles().first();

作为替代方案,您可以实施自己的覆盖验证:

QString file;
do 
{
  file = QFileDialog::getSaveFileName();
  if(!file.endsWith(".txt"))
  {
    file.append(".txt");

    if(QFile::exists(file))
    {
      if(QMessageBox::Yes != QMessageBox::question(NULL, QString(), "Confirm overwrite?", QMessageBox::Yes | QMessageBox::No))
      {
        file.clear();
      }
    }
  }
} while (file.isEmpty());