【问题标题】:Implementing Qt File Dialog with a Different File System Library (boost)使用不同的文件系统库实现 Qt 文件对话框 (boost)
【发布时间】:2010-04-11 08:57:27
【问题描述】:

我正在编写一个应用程序,它要求我使用另一个文件系统和文件引擎处理程序,而不是 qt 的默认处理程序。基本上我想要做的是使用 qt 的文件对话框,但有一个我的底层文件系统处理程序(例如使用 boost 文件系统库构建)来处理与该对话框中的文件和目录操作有关的所有操作。我已经编写了一个自定义文件引擎来处理一些操作,但我现在坚持使用 Qt 的文件系统模型和文件系统观察程序引擎,因为我需要为这个自定义文件引擎传输信号。看来我前面有一项艰巨的任务。我的方向正确吗?

还有其他更简单的方法可以实现吗?谁能给我有关如何进行的任何想法。我正在考虑研究代理模型,但不确定这是否可行。

提前感谢您的帮助。

【问题讨论】:

    标签: qt boost filesystems boost-filesystem


    【解决方案1】:

    代理模型使用底层模型包含的数据进行操作,因此,您不能使用它来获取全新的模型内容。

    执行此类任务的明显方法是调查 QFileDialog 具有什么样的模型,然后替换模型。

    当然,您可以从 QFileDialog 复制模型,相对于您的新文件引擎,然后以一种有点奇怪的方式使用 propxy 模型:设置它(它将连接到 QFileDialog 的底层模型,您可以't access other way)然后使用您的代理的 setSourceModel() 来设置您的模型。

    或者您可以简单地获取 QFileDialog 的代码并用您的替换文件系统感知的代码。但我认为它闻起来很糟糕,而且我不知道它是否合法,以及由于许可证等原因你会面临哪些问题。

    【讨论】:

    • 非常感谢您的回复 Max,我的想法与您提到的获取 QFileDialog 代码并修改它的方向相同,但由于许可问题等原因,这似乎不正确。另外,正如您所建议的,代理模型不会提供任何东西,因为 QDir 进行的某些调用是从 QFileSystemModel 中调用的。在这种情况下,唯一的解决方案是编写全新的模型,然后创建一个类似于 QFileDialog 的视图,这充其量是不平凡的。
    • 我觉得应该有一个更简单的解决方案。我可能必须在我的自定义文件引擎中提供 Qdir 和 QFileEnginePrivate 的一些功能,然后希望我仍然可以使用相同的模型视图对通过我的自定义引擎访问文件。我不确定我的想法是否可行,或者它是否有意义。
    • 也许您只需要重新实现 QFileSystemModel,然后使用 proxymodel 的 setSourceModel() 方法将您的模型连接到 QFileDialog?
    【解决方案2】:

    以前可以使用 QAbstractFileEngine 等来执行此操作,但 Qt 4.6 中对 QDir 的更改在某种程度上破坏了它 - 请参阅 Qt bug 10333 了解我的经验。

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 1970-01-01
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-18
      • 2011-06-14
      • 2011-08-16
      • 1970-01-01
      相关资源
      最近更新 更多