用 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.txt 在 a.txt 之前。幸运的是,将 C++ 类与 QML 连接起来很容易,因此您将始终能够扩展默认的 QML 功能。
如何连接C++和QML:http://doc.qt.io/qt-5/qtqml-cppintegration-topic.html
【讨论】:
谢谢!您使用的是FolerListModel
或QFileSystemModel
,还是定制模型?如果您之前使用FolderListModel
,您是否注意到一旦将showHidden
设置为true
(相应地更新视图),然后将其设置为false
,视图就不再更新?你知道解决方法吗?相关问题是here。
我使用自定义模型 (QAbstractListModel
) 和来自 QDir
的信息。不幸的是,我没有显示隐藏文件。然而,这个问题似乎很有趣。也许showHidden
标志不应该在应用程序运行时切换。以上是关于用 QML 编写文件管理器的主要内容,如果未能解决你的问题,请参考以下文章