QFileSystemModel中的文件是灰色的

时间:2011-12-10 15:03:06

标签: c++ qt qfilesystemmodel

我正在使用以下过滤器设置我的QFileSystemModel:

QDir::Filters( Dirs|AllDirs|Files|Drives|NoDotAndDotDot|AllEntries )  

在我的代理模型中,我使用正则表达式按名称过滤文件:

proxy_model_->setFilterRegExp(".*\\.(cpp$|cxx$|c$|hpp$|h$)");

....然后我的model_是QFileSystemModel,我有一行:

model_->setNameFilters(QStringList(proxy->filterRegExp().pattern()));

...但显示的文件显示为灰色。为什么,以及如何使它们“正常”。

2 个答案:

答案 0 :(得分:1)

实际上,不同Qt类之间的格式不一致。如果他们只使用一个QString,那就像@HostileFork所说的那样。但是,在这种情况下,函数setNameFilters()采用QStringList,这意味着您需要:

fileModel->setNameFilters({"*.cpp", "*.cxx", "*.c", "*.hpp", "*.h"});

由于您的输入格式错误(正则表达式,而不是Window的通配符),所有内容都标记为“过滤掉”,因为没有任何内容符合奇怪的语法。

为何灰色?因为QFileSystemModel默认禁用/灰屏文件被过滤(bwah?),而不是隐藏它们。这可以通过调用:

来改变
fileModel->setNameFilterDisables(false);

QFileSystemModel's 'nameFilterDisables' property

答案 1 :(得分:0)

QFileSystemModel使用的“名称过滤器”没有很好地记录。但我会假设它们的格式可能与QFileDialog在其setNameFilter中使用的格式相同:

http://doc.qt.nokia.com/stable/qfiledialog.html#setNameFilter

如果是这样,那些不是正则表达式。它们是一种奇怪的文本格式,后面是包含命令行终端风格通配符的括号。

所以我猜这会起作用:

model_->setNameFilters(
    QStringList("Supported files (*.cpp *.cxx *.c *.hpp *.h)"));

一般情况下,除非文档或函数名称另有说明,否则我会谨慎地假设将过滤器作为QString的地方知道如何制作正则表达式!