我在使用 QTreeView 和 QFileSystemModel 过滤特定文件夹时遇到问题。
我将我的根 QFileSystemModel 设置到一个特定的文件夹 - 这有效。但我只想显示包含 .jpg
文件的文件夹。这可能吗?
我过滤了 .jpg
文件并且工作正常,但是我的 QTreeView 显示了所有文件夹,甚至是那些没有 .jpg
文件的文件夹。因此,如果用户尝试打开某个没有 .jpg
文件的文件夹,则什么也不会发生。
如何隐藏这些文件夹?
注:下面是部分代码
QStringList filterTypeFile;
filterTypeFile.append("*.jpg");
this->m_pModelTreeViewImage->setNameFilters(filterTypeFile);
this->m_pModelTreeViewImage->setNameFilterDisables(false);
this->ui->treeViewImages->setModel(this->m_pModelTreeViewImage);
最佳答案
恐怕是个坏消息:如果您想要那种行为,您将不得不自己实现它。文件系统读取器并未设置为执行此类操作。
这也是有原因的。隐藏文件通常受到支持,因为它既快速又简单 - 文件名与您的正则表达式匹配或不匹配。隐藏目录(或使它们无法打开 - 同样的区别)要复杂得多。您不能只看目录名;你必须爬行文件系统,寻找可打开的文件。访问硬盘驱动器很慢。想象一下,您的用户正在查看一个非常接近文件系统根目录的目录 - 您必须遍历所有内容。然后,如果过滤器发生变化,您就必须重新做一遍。
另请考虑:为此建立的模式是只隐藏文件,从不隐藏目录。这可能是上述技术困难的结果,但它已成为标准的 UI 行为。因此,如果用户遇到文件系统查看器未显示他们期望的所有文件夹(或者如果他们无法打开某些文件夹,看似是随机的),他们会假设某些东西是坏了。
就是说,如果无论如何都有充分的理由这样做,您可能可以重新实现 QFileSystemModel 来执行您想要的操作(或者,如果失败,您当然可以让 AbstractModel 子类像您描述的那样运行)。您的用户会适应环境,尤其是在新行为有充分理由的情况下。
祝你好运!
关于qt - 如何使用 QTreeView 和 QFileSystemModel 只显示包含特定文件的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9589530/