我正在使用以下过滤器设置我的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()));
...但显示的文件显示为灰色。为什么,以及如何使它们“正常”。
答案 0 :(得分:1)
实际上,不同Qt类之间的格式不一致。如果他们只使用一个QString,那就像@HostileFork所说的那样。但是,在这种情况下,函数setNameFilters()采用QStringList,这意味着您需要:
fileModel->setNameFilters({"*.cpp", "*.cxx", "*.c", "*.hpp", "*.h"});
由于您的输入格式错误(正则表达式,而不是Window的通配符),所有内容都标记为“过滤掉”,因为没有任何内容符合奇怪的语法。
为何灰色?因为QFileSystemModel默认禁用/灰屏文件被过滤(bwah?),而不是隐藏它们。这可以通过调用:
来改变fileModel->setNameFilterDisables(false);
答案 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的地方知道如何制作正则表达式!