c++ - 如何从 QFileSystemModel 中清除 setNameFilters?
问题描述
我正在编写一些代码,每当在不同的列表视图中单击新类别时,它就会显示与类别关联的目录的内容。为方便起见,我想提供一个过滤器选项,它只显示与给定字符串输入匹配的目录内容。
我让所有这些都正常工作,但是每当我将过滤器应用于一个类别然后切换到另一个类别时都会出现错误。过滤器已正确应用于我目前正在查看的类别。但是当我尝试单击另一个类别时,每个类别的每个文件列表都显示为空。此错误仅在我应用过滤器时发生,当我在未使用过滤器的情况下切换类别时不会发生此错误。
我想,“没关系,我会在每个类别更改之间删除过滤器。” 所以我尝试了:
if (filemodel->nameFilters().size() > 0)
{
// create an empty list of strings to pass to the filter.
QListString clearFilter;
filemodel->setNameFilters(clearFilter);
fileView->setModel(filemodel);
}
可悲的是,这并没有改变行为。我什至尝试将一个空字符串附加到列表中。没变。最终,我不得不求助于以下代码:
if (filemodel->nameFilters().size() > 0)
{
// throw away the old filemodel and start over with a fresh one.
delete filemodel;
filemodel = new QFileSystemModel;
filemodel->setFilter(QDir::Files);
filemodel->setRootPath("/");
fileView->setModel(filemodel);
}
这行得通,但这似乎是非常错误的。看来我不应该扔掉它filemodel
并从头开始一个新的。这个问题有更好的解决方案吗?
为了便于参考,这里是与我如何在 MainWindow 构造函数中进行设置以及如何实现过滤方法相关的所有代码:
MainWindow::MainWindow(...)
{
// ... skipping a bunch of stuff
fileView = new QListView(this);
filemodel = new QFileSystemModel;
filemodel->setFilter(QDir::Files);
filemodel->setRootPath("/");
fileView->setModel(filemodel);
filterText = new QLineEdit(this);
doFilter = new QPushButton(this);
doFilter->setText("Filter Filenames");
connect(doFilter, SIGNAL(clicked(bool)), this, SLOT(filterFileView()));
// ... skipping a bunch of other stuff
}
void MainWindow::filterFileView()
{
QStringList filterToApply;
filterToApply.append("*" + filterText->text() + "*");
filemodel->setNameFilters(filterToApply);
filemodel->setNameFilterDisables(false);
fileView->setModel(filemodel);
}
解决方案
将过滤器重置为“*”对我有用。
QStringList filters;
filters << "*";
filemodel->setNameFilters(filters);
推荐阅读
- json - 从 pandas.io.json 导入带有空列表的 json_normalize
- regex - 使用 awk 时缺少一些文件夹名称
- c# - 从谷歌图像搜索中获取 HTML 后,在 C# 搜索的第一页上获取每个图像的 URL 的最佳方法是什么?
- vba - 在 PowerPoint 中访问任务完成状态
- javascript - Nativescript 水平滚动效果很好,但不适用于项目模板
- autodesk-forge - 将 AutoDesk Forge 查看器环境从本地切换到 AutodeskProduction
- ios - 如果用户的信息不正确,如何阻止用户通过登录页面 IOS
- python-3.x - ValueError:尝试在python中对列表进行排序时无法将列转换为布尔值
- authentication - 我的 nuxt-auth 令牌配置正确,但令牌从未存储
- c++ - 如何为 c/c++ 程序生成没有崩溃/段错误的核心转储文件