在 QTreeView 中将文件列表显示为树

Show files list in QTreeView as a tree

有没有一种简单的方法可以让一些QStringList文件在QTreeView中显示为树状? 当然,我们可以用“/”分割每条路径,并在 QStandardItemModel 中做一些类似 appendRow 的事情,然后得到一个结果。但我认为必须有一种更简单的方法。 例如,我们有这样的文件列表 (QStringList):

"dir/subdir/file.dat",
"dir/app.exe",
"other_dir/file2.dat"

结果必须是这样的 QTreeView:

Is there an easy way to make some QStringList of files displaying in QTreeView as a tree?

如果数据隐含为 QStringList,则建议将其转换为 TreeItem-based data and use Qt documentation example "Simple Tree Model Example". You cannot avoid creating tree-like structure one way or another for that. Find that example with Qt Creator or in its directory and look for TreeModel class definition/implementation.

如果数据不是来自 QStringList 或其他形式的内存中集合,而是来自实际文件系统:当然是非常可行的。您只需要 QFileSystemModel 和 QTreeView。可能有点相似的例子之一 here.

创建您需要的最小 UI 并像这样使用模型过滤器:

auto* dirModel = new QFileSystemModel(this);
dirModel->setFilter(QDir::NoDotAndDotDot |
                    QDir::Files | QDir::Dirs);

...或者您可以根据需要自行指定更好的过滤器。