用 QML 编写文件管理器

Posted

技术标签:

【中文标题】用 QML 编写文件管理器【英文标题】:Writing a file manager in QML 【发布时间】:2015-11-06 22:48:40 【问题描述】:

我刚开始学习 QML,以前没有 Qt 或 GUI 开发方面的一般经验。我的第一个任务是编写一个文件管理器。到目前为止,我喜欢 QML 的地方在于我可以用纯文本进行设计,但是challenging 找到了实现甚至简单的事情的方法。目前我使用Qt.labs.FolderListModel 2.1作为目录列表的工作马,我什至还没有接触过C++或PyQt,现在它纯粹是QML。

所以我对我的小文件管理器的未来路径有几个问题:

    FolderListModel 是否强大到足以做所有事情 多才多艺的文件管理器能做什么?据我所知, QFileSystemModel 看起来功能更完整?而事实 前者在Qt.labs 让我有点担心。如果确实 FolderListModel 旨在用作“快速而肮脏”的东西, 这是否意味着最好切换到QFileSystemModel 早点?因为我是从 QML 而不是从 传统的 C++ 角度,替换我现在的是什么感觉 FolderListModel QML 中的代码到由 Qt/C++ 或 PyQt 支持的东西? 相关:我听说实际上可以用纯 QML(使用 javascript)编写完整的应用程序。如果应用程序由某个后端驱动,例如一个数据库,我可以看到单独的 QML 可能不够表达。但是,在我编写文件管理器的情况下,尽管存在“性能”参数,但尝试坚持纯 QML 并使用 JavaScript 处理所有业务逻辑是否是个好主意?

【问题讨论】:

您现在已经多次提到您发现在 QML 中做事很困难。我想知道这些东西是什么,如果你正在尝试对初学者来说太高级的任务,那么从更简单的开始会有所帮助。此外,这个问题中有很多问题,其中一些(尤其是第二个)非常基于意见。对于此类问题,您可能会在邮件列表中获得更好的帮助。 1) AFAIK 它位于“实验室”内,因为它仍然缺少一些功能。因此,不,它不够强大。不过,我认为您应该尝试使用更简单的 C++/QML。 2)这取决于。 QML 可以做很多事情。问题是,您通常拆分业务逻辑和 UI 以更好地构建和维护代码。但是您正在尝试学习 QML,而不是创建最好的文件管理器。就这样开始。你已经在这里触及了表面,相信我。 :) 我已经通过添加一些属性来修补 QFolderListModel,并且 AFAIR 它在引擎盖下使用 QFileSystemModel。我希望如果您缺少某些功能,您将修补 FolderListModel 并向上游报告更改。 @Mitch 我的困难之一是弄清楚如何在TableView drag-able 中创建行。 @BaCaRoZzo 我一定会研究可用于 QML 的 C++ 模型。 【参考方案1】:

我最近一直在研究 QML 中的一个简单文件管理器。如果只坚持 QML,您将面临的问题是:

无法知道当前插入了多少驱动器。 无法轻松按名称对文件进行排序。由于这种情况,使用提供的排序标志将导致 B.txta.txt 之前。

幸运的是,将 C++ 类与 QML 连接起来很容易,因此您将始终能够扩展默认的 QML 功能。

如何连接C++和QML:http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html

【讨论】:

谢谢!您使用的是FolerListModelQFileSystemModel,还是定制模型?如果您之前使用FolderListModel,您是否注意到一旦将showHidden 设置为true(相应地更新视图),然后将其设置为false,视图就不再更新?你知道解决方法吗?相关问题是here。 我使用自定义模型 (QAbstractListModel) 和来自 QDir 的信息。不幸的是,我没有显示隐藏文件。然而,这个问题似乎很有趣。也许showHidden 标志不应该在应用程序运行时切换。

以上是关于用 QML 编写文件管理器的主要内容,如果未能解决你的问题,请参考以下文章

qml-自定义quick模块

保存后Livereload

如何将 qml 文件重新加载到 QQuickView

寻找 QML 格式文件的解析器 [关闭]

在 qt creator 中从 ..qml 文件生成 .cpp 和 .h 文件

QML 应用程序和安全性 - 有吗?