首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

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
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9589530

复制
相关文章

相似问题

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