2010-04-09 48 views
7

我试图简单地保存一个文件。但是,我需要输入一个没有后缀的文件名来自动获取默认后缀(setDefaultSuffix())。Qt QFileDialog - 只有静态函数的本机对话框?

我宁愿不完全失去了这个本地保存对话框而已。 exec()不会从QDialog中重载,所以它完全绕过原生钩子(即使它是假的,也忽略DontUseNativeDialog选项)。

如果我禁用了文件覆盖警告,并在函数返回后自己附加了默认后缀,那么如果用户不想覆盖它,我会重新打开对话框......这很丑陋。

有一些信号,我能赶上并迅速注入的默认后缀,如果它不存在?我猜不是,因为它是一个本机对话框。

有没有我做错了过滤器?我只有一个过滤器选择。它应该使用该扩展名。

这看起来很蹩脚。启动保存对话框,只需输入“test”不应该导致扩展文件。 “测试”,是的。 “测试”没办法。当用户点击Load时,这会让用户感到困惑,并且无法看到他们刚刚保存的文件。

我猜的Qt跨平台的一部分是给我最小公分母文件对话框的功能?

回答

5

是的,如果你看看Qt的源代码,很明显,只有静态函数使用本机文件对话框。不幸的是,不可能以任何其他方式获得本机对话框......不过,可能...

0

您是否尝试过静态函数中的过滤器选项? [编辑:哎呀,发现你已经有了]

我只是这个尝试我自己,例如,事情似乎是相当合理的:

QString filter = "Text files (*.txt)"; 
QString selectedFilter; 
QString filename = QFileDialog::getSaveFileName(0, "", "", filter, &selectedFilter); 

进入测试在保存对话框返回test.txt
输入测试。在保存对话框中返回test ..txt
进入test.foo在保存对话框返回test.foo

这些都表明适当的覆盖对话框,如果已经有一个相同名称的现有文件。

我能得到测试,没有任何后缀的唯一方法,是用引号包围它(“测试”),或者先进入*。*(这将使它显示所有文件)然后输入测试。 (尽管奇怪的是selectedFilter仍将包含对话框中显示的过滤器,即使它未被使用)。

+0

也许这是一个平台的事情。我的本地对话框是GTK(GNOME/Linux),你的是什么? – darron 2010-04-09 17:50:02

+0

我的是Windows。猜猜这可能是差异所在。 – richardwb 2010-04-09 19:47:58