Qt QFileDialog - 只有静态函数的原生对话框?

时间:2010-04-09 16:27:43

标签: qt qt4 qfiledialog

我正在尝试简单地保存文件。但是,我需要输入一个没有后缀的文件名来自动获取默认后缀(setDefaultSuffix()会这样做。)

我不想完全失去本机保存对话框。 exec()没有从QDialog重载,所以它完全绕过本机钩子(忽略DontUseNativeDialog选项,即使它是假的)。

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

是否有一些我可以捕获的信号并快速注入默认后缀,如果它不存在?我猜不是,因为它是一个原生的对话框。

我的过滤器有问题吗?我只有一个过滤器选择。它应该使用该扩展名。

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:0)

您是否尝试过静态功能中的过滤器选项? [编辑:糟糕,注意到你已经拥有。]

例如,我自己尝试过,事情似乎相当合理:

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

在保存对话框中输入 test 会返回 test.txt
在保存对话框中输入 test。将返回 test..txt 在保存对话框中输入 test.foo 会返回 test.foo

如果已存在具有该名称的现有文件,则这些都会显示相应的覆盖对话框。

我可以获得 test 而没有任何后缀的唯一方法是用引号(“test”)包围它,或者先输入 *。 * (将显示所有文件),然后输入 test 。 (虽然有一个奇怪的是selectedFilter仍然会包含对话框中显示的过滤器,即使它没有被使用过。)