首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用QTreeView和QFileSystemModel仅显示包含特定文件的文件夹?

如何使用QTreeView和QFileSystemModel仅显示包含特定文件的文件夹?
EN

Stack Overflow用户
提问于 2012-03-07 02:17:01
回答 2查看 3.2K关注 0票数 3

我在使用QTreeView和QFileSystemModel过滤特定文件夹时遇到问题。

我将根QFileSystemModel设置为一个特定的文件夹--这是可行的。但我只想显示包含.jpg文件的文件夹。这个是可能的吗?

我过滤了.jpg文件,但我的QTreeView显示了所有文件夹,甚至那些没有.jpg文件的文件夹也是如此。因此,如果用户试图打开某个没有.jpg文件的文件夹,什么也不会发生。

如何隐藏这些文件夹?

注意:下面是代码的一部分。

代码语言:javascript
运行
复制
QStringList filterTypeFile;
filterTypeFile.append("*.jpg");
this->m_pModelTreeViewImage->setNameFilters(filterTypeFile);
this->m_pModelTreeViewImage->setNameFilterDisables(false);

this->ui->treeViewImages->setModel(this->m_pModelTreeViewImage);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-07 03:18:15

坏消息,我担心:如果你想要这样的行为,你将不得不自己实现它。文件系统读取器不是用来做这类事情的。

这也是有原因的。隐藏文件通常是受支持的,因为它既快速又简单--要么文件名匹配你的正则表达式,要么不匹配。隐藏目录(或者使它们不能打开--相同的区别)要复杂得多。您不能只查看目录名;您必须搜索文件系统,寻找可打开的文件。而且硬盘访问速度很慢。想象一下,您的用户正在查看一个非常接近文件系统根目录的目录--您必须遍历所有内容。然后,如果过滤器改变了,你必须重新做一次。

还要考虑:这种情况下的既定模式是只隐藏文件,而从不隐藏目录。这可能是由于上述技术困难造成的,但它已经成为标准的UI行为。因此,如果用户遇到一个文件系统查看器,它没有显示他们期望的所有文件夹(或者如果他们无法打开某些文件夹,似乎是随机的),他们就会认为有些东西坏了。

也就是说,如果有很好的理由这样做,您可能会重新实现QFileSystemModel来做您想做的事情(或者,如果做不到这一点,您肯定可以让AbstractModel子类按照您所描述的那样工作)。你的用户将会适应,特别是如果有一个很好的理由来解释新的行为。

祝好运!

票数 4
EN

Stack Overflow用户

发布于 2012-10-07 22:32:02

您应该从QSortFilterProxyModel派生并重新实现virtual bool filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const函数。像这样的东西

代码语言:javascript
运行
复制
bool JPGFilter::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
   QFileSystemModel *fs = static_cast<QFileSystemModel*>(sourceModel());
   QModelIndex i = fs->index(source_row, 0, source_parent);
   bool accept=false;
   if( fs->hasChildren(i) ){
     for( int j=0; j<fs->rowCount(i); j++  )
       if( fs->fileInfo(fs->index(j,0,i)).suffix()=="jpg" ){
         accept=true;
         break;
       }
   }
   return accept;
}

我自己还没试过呢。它速度很慢,但应该可以工作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9589530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档