我可以用QtQuick代替QFileSystemModel + QSortFilterProxyModel + QTreeView吗?

时间:2019-09-14 10:34:07

标签: python qml qtquick2 pyside2

我还没有使用QML / QtQuick,但是我听说它更简单。

我想构建一个本地文件管理系统,该系统需要QFileSystemModel + QSortFilterProxyModel + QTreeView。

我的问题是:我可以使用QML / QtQuick做同样的事情吗?

1 个答案:

答案 0 :(得分:0)

我不知道更简单,尤其是在这种情况下。我想这取决于您要寻找的UI功能集。当然,如果您确实想要/需要,几乎可以做任何 ,但是...

您提到的最大(也许)障碍是,实际上并没有受支持的Tree View组件。有旧的Controls 1 TreeView,但已弃用(具有讽刺意味的是,它显示了文件浏览器树的示例,但这是red herring)。它也基于大量的QML / JS代码,速度很慢。据我所知,控件2中没有合适的replacement

然后,缺少简单的QSortFilterProxyModel等效项。我猜我们应该将DelegateModel用于此类操作,但这充其量是很尴尬的。例如。查看this example。现在,制作与QML兼容的QSortFilterProxyModel子类实际上并不难,并且有一些这样的已发布版本(例如this,但我还没有亲自尝试过),但是基本的QML组件恕我直言令人惊讶地缺乏。人们还可以在C ++中创建/配置QSortFilterProxyModel并将其作为上下文属性(或类似属性)公开给QML,但是当然,它也需要从C ++方面进行操作(例如,这里的{ {3}}就是这样做的。

最后QFileSystemModel也没有真正暴露给QtQuick。实验室的example版本非常接近(但要特别注意,它是一个列表模型,而不是树模型)。您还可以通过C ++公开QFileSystemModel(例如,作为上下文属性),但这也不是那么简单(例如,请参见此FolderListModel)。

YMMV。如果需要一个“通用” UI(桌面/移动/等),那么坦率地说,HTML / CSS / JS可能是一个更好的选择(当然,带有Qt C ++后端;-)。我个人发现QML对于编写类似桌面的应用程序感到沮丧,因为可用的QML组件缺少许多功能,而C ++的子类化几乎是不可能的,因为大多数“好东西”都是私有API。