如何让QFileDialog提示是否覆盖文件?

5

我有一个QDialog,它打开一个QFileDialog:

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

if (fd.exec()) {
    // save data to a file
}

很不幸,默认行为似乎并不是真正的默认,如果我选择一个已经存在的文件,文件对话框不会提示我是否要覆盖它。先调用setConfirmOverwrite(true)setOption(QFileDialog::DontConfirmOverwrite, false)也没有帮助。我在Ubuntu 11.04和Windows XP上都测试了Qt 4.7.3和4.7.4版本。
我找到了这个bug报告。虽然QFileDialog::getSaveFileName()有这个问题,但它只针对Maemo,并且在Qt 4.7.3发布之前就已经解决了。如果我在我的应用程序中使用该方法,它可以正常工作,我会被提示是否覆盖该文件。(由于其他原因,我不想使用getSaveFileName()。)
我找不到其他人抱怨这个问题没有解决。我是做错了什么,还是这是一个bug?我认为这可能是由于对话框不知道它是否只是一个简单的打开对话框,其中提示是没有意义的,但我看不到告诉它它是保存对话框的方法(除了设置确认覆盖选项失败),而且文档确实说默认情况下应该提示。

1
我在使用Qt 4.8.0时遇到了相同的问题。 - user1373500
1个回答

10

你还应该确保对话框处于保存模式,因为在打开模式下,它不会认为你正在覆盖文件。你可以通过在代码示例中调用fd.setAcceptMode(QFileDialog::AcceptSave);来实现这一点。请参见QFileDialog::acceptMode


太好了,谢谢!我不知道我怎么错过了它。希望你能注册一个SO账户并留下来 :) - Matthew Read

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接