7

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

我宁愿不为此完全失去本机保存对话框。exec() 没有从 QDialog 重载,因此它完全绕过了本机挂钩(忽略 DontUseNativeDialog 选项,即使它为假)。

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

是否有一些信号我可以捕获并快速注入默认后缀(如果它不存在)?我猜不是,因为它是本机对话。

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

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

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

4

2 回答 2

5

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

于 2010-04-09T17:43:35.043 回答
0

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

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

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

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

如果已经存在具有该名称的文件,这些都将显示适当的覆盖对话框。

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

于 2010-04-09T17:19:59.090 回答