如何让QFileDialog提示覆盖?

Mat*_*ead 3 qt qfiledialog

我有一个QDialog打开一个QFileDialog,如下所示:

QFileDialog fd(this);
fd.setFileMode(QFileDialog::AnyFile);

if (fd.exec()) {
    // save data to a file
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,默认行为似乎不是那么默认,如果我选择一个已经存在的文件,文件对话框不会提示我覆盖.呼叫setConfirmOverwrite(true)setOption(QFileDialog::DontConfirmOverwrite, false)首先也没有帮助.我在Ubuntu 11.04和Windows XP上都在Qt 4.7.3和4.7.4上测试了这一点.

我环顾四周,发现了这个错误报告. QFileDialog::getSaveFileName()有这个问题,但它是特定于Maemo并在Qt 4.7.3出现之前修好.如果我在我的应用程序中使用该方法它工作得很好,我得到有关覆盖文件的提示.(我不想getSaveFileName()因为无关的原因而使用.)

我找不到任何抱怨这个不适合他们的人.我做错了什么,或者这是一个错误?我想这可能是因为对话框不知道它是否只是一个简单的Open对话框,其中提示没有意义,但我没有看到一种方法告诉它它是一个Save对话框(除了设置confirm-overwrite选项,哪个失败了),文档确实说它应该默认提示.

小智 6

您还应该确保对话框处于保存模式,因为在打开模式下它不会认为您正在覆盖文件.您可以通过调用fd.setAcceptMode(QFileDialog::AcceptSave);代码示例来完成此操作.请参阅QFileDialog :: acceptMode.