如何为系统驱动器、文件夹和文件创建浏览器

Posted

技术标签:

【中文标题】如何为系统驱动器、文件夹和文件创建浏览器【英文标题】:How to create a browser for system drives, folders and files 【发布时间】:2014-10-25 23:47:06 【问题描述】:

我想创建如下:

不幸的是,Qt 不支持为此准备好的小部件。

是否有插件或任何方法可以做到这一点?

【问题讨论】:

对 *** 来说太宽泛了。 @CaptainObvlious:不,它不是太宽泛。它有一个非常具体的答案。 仅仅因为你不知道答案或认为它是一个广泛的主题,这意味着情况确实如此!在 Qt 的情况下,它就像创建两个类的实例并将它们连接起来一样简单。完毕。我绝对讨厌它,如果人们投票否决完美的答案并投票支持结束,只是因为他们自己对主题一无所知。 +1,但是为什么这些天你不使用 QML 而不是小部件?有一个现成的元素!我还认为您在这里接受答案太快了。通常,会有比“阅读此链接”更好的答案。至少,我希望我们的目标是在这里。 :) 我删除了驱动程序标签。我不确定为什么要添加它。 【参考方案1】:

在QTreeView 上使用QFileSystemModel。如果您查看这两个链接中的第一个,它实际上包含的示例代码正是这样做的。

【讨论】:

【参考方案2】:

如果可以避免的话,个人会建议不要使用 QWidgets 来完成这项任务。相反,尝试利用新的闪亮的 QML 方式来构建 Qt UI。这可能只是我个人的看法,但QTreeView 在我看来有几个缺陷。

QML

在这里您可以找到simple example 这些天是如何使用 QML 完成的。它使用来自Qt.labs.folderlistmodel 2.1 的FolderListModel。

FolderListModel 提供对本地文件系统中文件夹内容信息的访问,将文件列表公开给视图和其他数据组件。

注意:通过导入 Qt.labs.folderlistmodel 模块可以使用此类型。 Qt.labs 模块中的元素不保证在未来版本中保持兼容。

导入 Qt.labs.folderlistmodel 2.1

文件夹属性指定要访问的文件夹。有关文件夹中文件和目录的信息是通过模型的界面提供的。

C++ 和 QWidgets

如果您坚持在 C++ 中使用旧的 QWidget 集,您的选择可能是使用 QTreeView,因为它毕竟是一个树视图,然后将其与 QFileSystemModel 结合。

代码是这样的:

QFileSystemModel *model = new QFileSystemModel;
model->setRootPath(QDir::currentPath());
QTreeView *tree = new QTreeView(splitter);
tree->setModel(model);
tree->setRootIndex(model->index(QDir::currentPath()));

【讨论】:

如今人们不需要使用 QML 来完成每个 UI。 感谢您的详细解答。和+1 为您解答。 @dom0:这真的与 QML 无关。这是关于 QWidget 已被视为“完成”并且在技术上非常有限,并且由于您找不到适用于 SG 的适当 C++ API。所以是的,这与 QML 无关,但新技术毕竟是由 QML 带给我们的。一旦我们获得适用于 SG 的适当 C++ API(我等了多久了……),我也将能够发布基于非 QWidget 的 C++ 解决方案。一个典型的例子是它在移动平台上看起来很丑。 »QWidget 已被视为“完成”并且在技术上非常有限« 嗯,不,抱歉,QWidget 得到了积极的开发和支持。这是一项很好的技术,只是不适合移动和嵌入式平台(以及某些类型的桌面应用程序)。它们都是(基于 QWidget/QPainter 的 UI 和基于 QML/QSG 的)。 @dom0:它没有得到任何认真的积极发展,没有。如果有的话,它基本上处于维护模式。话虽如此,即使是我的一个内存泄漏补丁也卡住了,所以......积极的开发意味着从头开始重新设计它,而这正是 QML 堆栈的意义所在,一个真正的跨平台(和硬件加速!)在我看来,UI 堆栈是 Qt 对 boost 等的唯一添加。希望以后也会有到 SG 的 C++ API,但是现在是 QML。无论如何,让我们停止燃烧,我的回答也为老顽固的头脑提供了一个解决方案。 :-)

以上是关于如何为系统驱动器、文件夹和文件创建浏览器的主要内容,如果未能解决你的问题,请参考以下文章

如何为输出创建虚拟文件? [重复]

如何为指定文件夹创建和保存包含完整文件和文件夹层次结构的 XML 文件?

如何为 AVD 管理器创建自定义 Android 设备配置文件?

如何为文件类型创建所有文件关联(友好的应用程序名称和可执行文件)的 C# 列表

如何为 JPA 和 Hibernate 创建一个 persistence.xml 文件?

如何为安卓创建apk文件?