2015-11-27 54 views
0

我想过滤文件系统模型,只显示扩展名为.ncr(NCReport模板)的文件。该视图改为显示所有文件。任何想法如何使过滤工作?谢谢。基于文件扩展名的过滤不工作在QFileSystemModel?

(我知道有很多其他笨拙这里,建议表示欢迎。)

 fsmodel = new QFileSystemModel(this); 
     connect(fsmodel,SIGNAL(rootPathChanged(QString)),this,SLOT(fileSystemModelRootSetSuccessfully())); 

     // this call is required on windows to show anything in file view 
     QModelIndex rootIndex=fsmodel->setRootPath(reportdirstring); 
     // root index could be removed 
     Q_UNUSED(rootIndex); 

     fsmodel->setReadOnly(true); 

     ui->reportTemplateDirView->setModel(fsmodel); 
     ui->reportTemplateDirView->setRootIndex(fsmodel->index(reportdirstring)); 
     ui->reportTemplateDirView->expandAll(); 
     ui->reportTemplateDirView->header()->hide(); 

     // selecting the first file entry with selectFileInDirView(); requires the qtreeview to be sorted 
     // sort in desc order since that is the only way to get the first item selected? 
     ui->reportTemplateDirView->sortByColumn(0,Qt::AscendingOrder); 
     fsmodel->sort(0,Qt::AscendingOrder); 
     QStringList filters; 
     filters << "*.ncr"; 
     fsmodel->setNameFilters(filters); 
     fsmodel->setNameFilterDisables(false); 

     // hide report template directory view extra columns, 
     //type? 
     ui->reportTemplateDirView->setColumnHidden(1,true); 
     //size? 
     ui->reportTemplateDirView->setColumnHidden(2,true); 
     //date 
     ui->reportTemplateDirView->setColumnHidden(3,true); 

     #if QT_VERSION >= 0x040700 
     // as soon as QFileSystemModel has parsed the entire directory tree, tell the QTreeView to expand its hierarchy 
     // note that if there are a lot of files, this could be too inefficient. 
     // if problems arise, consider commenting this out or using a QDirModel, which could be equally inefficient though. 
     connect(fsmodel,SIGNAL(directoryLoaded(QString)),ui->reportTemplateDirView,SLOT(expandAll())); 
     connect(fsmodel,SIGNAL(directoryLoaded(QString)),this,SLOT(selectFileInDirView())); 
     #endif 

     // show a fake folder name + icon at the top of the folder tree of report template directory 
     QFileIconProvider iconProvider; 
     QIcon folderIcon=iconProvider.icon(QFileIconProvider::Folder); 
     ui->reportTemplatesLabel->setPixmap(QPixmap(folderIcon.pixmap(QSize(16,16)))); 
+1

我刚刚重新创建了您的示例,它像一个魅力一样工作!你使用的是什么版本的Qt? –

+0

关于MSVC 2013 Qt 5.5。我知道没有其他异常。 – savolai

+0

可能你在像“selectFileInDirView”这样的插槽中有某个问题?因为否则它会按预期过滤文件夹中的文件 –

回答

0

正如亚历山大指出,这实际工作。问题是我在其他地方设置了过滤器。 ^。^

相关问题