如何为系统驱动器、文件夹和文件创建浏览器
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# 列表