我正在尝试简单地保存文件。但是,我需要输入一个没有后缀的文件名来自动获取默认后缀(setDefaultSuffix()会这样做。)
我不想完全失去本机保存对话框。 exec()没有从QDialog重载,所以它完全绕过本机钩子(忽略DontUseNativeDialog选项,即使它是假的)。
如果我禁用文件覆盖警告并在函数返回后自己附加默认后缀,那么如果用户不想覆盖那么我会重新打开对话框......这只是丑陋。
是否有一些我可以捕获的信号并快速注入默认后缀,如果它不存在?我猜不是,因为它是一个原生的对话框。
我的过滤器有问题吗?我只有一个过滤器选择。它应该使用该扩展名。
这看起来很蹩脚。启动保存对话框并简单地键入“test”不应该导致无扩展名文件。 “测试。”,是的。 “测试”没办法。当用户点击Load并且无法看到他们刚刚保存的文件时,这会让用户感到困惑。
我想Qt的跨平台部分给了我最小的公分母文件对话框功能?
答案 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
仍然会包含对话框中显示的过滤器,即使它没有被使用过。)