如何让 QFileDialog 提示覆盖?
Posted
技术标签:
【中文标题】如何让 QFileDialog 提示覆盖?【英文标题】:How can I get a QFileDialog to prompt for overwrite? 【发布时间】:2012-02-14 23:07:09 【问题描述】:我有一个像这样打开 QFileDialog 的 QDialog:
QFileDialog fd(this);
fd.setFileMode(QFileDialog::AnyFile);
if (fd.exec())
// save data to a file
不幸的是,the default behavior 似乎不是那么默认,如果我选择一个已经存在的文件,文件对话框不会提示我覆盖。首先调用setConfirmOverwrite(true)
或setOption(QFileDialog::DontConfirmOverwrite, false)
也无济于事。我已经在 Ubuntu 11.04 和 Windows XP 上的 Qt 4.7.3 和 4.7.4 上对此进行了测试。
我环顾四周,发现this bug report。 QFileDialog::getSaveFileName()
有这个问题,但它是 Maemo 特有的,并且在 Qt 4.7.3 出来之前就已经修复了。如果我在我的应用程序中使用该方法,它工作得很好,我会收到关于覆盖文件的提示。 (出于不相关的原因,我不想使用getSaveFileName()
。)
我找不到其他人抱怨这对他们不起作用。我做错了什么,还是这是一个错误?我认为这可能是由于对话框不知道它是否只是一个简单的打开对话框,提示没有意义,但我没有办法告诉它它是一个保存对话框(除了设置确认覆盖选项,失败),并且文档确实说它应该默认提示。
【问题讨论】:
我对 Qt 4.8.0 有同样的问题 【参考方案1】:您还应该确保对话框处于保存模式,因为在打开模式下它不会认为您正在覆盖文件。您可以通过在代码示例中调用 fd.setAcceptMode(QFileDialog::AcceptSave);
来完成此操作。见QFileDialog::acceptMode。
【讨论】:
太完美了,谢谢!不知道我怎么错过了。我希望您注册您的 SO 帐户并坚持下去:)以上是关于如何让 QFileDialog 提示覆盖?的主要内容,如果未能解决你的问题,请参考以下文章