我正在编写一个应用程序,它要求我使用另一个文件系统和文件引擎处理程序而不是qt的默认处理程序。基本上我想要做的是使用qt的文件对话框,但是有一个底层文件系统处理程序(例如使用boost文件系统库构建),我可以处理该对话框中文件和目录操作的所有操作。我已经编写了一个自定义文件引擎来处理一些操作,但我现在仍然坚持使用Qt的文件系统模型和文件系统观察引擎,因为我需要为这个自定义文件引擎传输信号。好像我前面有一项艰巨的任务。我正朝着正确的方向前进吗?
还有其他更简单的方法可以实现吗?任何人都可以给我任何关于如何进行的想法。我正在考虑研究代理模型,但不确定这是否有用。
提前感谢您的帮助。
答案 0 :(得分:1)
代理模型使用底层模型包含的数据进行操作,因此,您无法使用它来获取全新的模型内容。
执行此类任务的显而易见的方法是调查QFileDialog具有哪种模型,然后替换模型。
当然,您可以从QFileDialog复制模型,相对于您的新文件引擎,然后以一种有点奇怪的方式使用propxy模型:设置它(它将连接到QFileDialog的底层模型,你可以不要以另一种方式访问),然后使用代理的setSourceModel()代替设置模型。
或者您只需获取QFileDialog的代码并用您的代码替换文件系统感知代码。但是我认为它闻起来很糟糕,而且我不知道它是否合法以及由于许可证而可能面临的问题等等。
答案 1 :(得分:0)
以前可以用QAbstractFileEngine等来做到这一点,但是Qt 4.6中对QDir的更改有点破坏了 - 请参阅Qt bug 10333了解我的经验。