繁体   English   中英

在Qt中仅过滤QFileSystemModel中的dirs和xml文件

[英]Filtering only dirs and xml file in QFileSystemModel in Qt

我已经实现了自定义文件浏览对话框的帮助

QListView
QTreeView
QFileSystemModel

我想要的是 !

用于浏览xml文件的浏览对话框。 所以我想只在QListView中显示dirs和xml文件

如果一个目录有xml文件,那么xml文件将列在该目录下

否则只显示dir为空(无论它有多少,除了xml)

就像你在浏览特定类型文件的大多数情况一样。 在MSWord中(仅显示.doc和.docx进行浏览)

我做了什么

m_ptrModelForTree  = new QFileSystemModel(this);
m_ptrModelForTree->setFilter(QDir::Dirs | QDir::NoDotAndDotDot);
m_ptrModelForTree->setRootPath("");
ui->treeView->setModel(m_ptrModelForTree);
ui->treeView->hideColumn(1);
ui->treeView->hideColumn(2);
ui->treeView->hideColumn(3);
ui->treeView->header()->hide();

m_ptrModelForList = new QFileSystemModel(this);
m_ptrModelForList->setFilter(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);
m_ptrModelForList->setRootPath("");
ui->listView->setModel(m_ptrModelForList);
ui->listView->setRootIndex(m_ptrModelForList->index("c:\\"));

我得到了什么

显示所有目录和所有文件的对话框(但我只需要显示xml文件)

我尝试了什么

m_ptrModelForList->setNameFilters(QStringList()<<".xml");

但它只显示xml文件,而不是dirs。

请给我建议做什么。

实际上这是@Andreas在对这个问题的评论中提出的解决方案。 我的贡献是指向名称过滤器中的另一个错误。

解决方案如何显示通过扩展名筛选的所有目录+文件

  1. 使用标志QDir :: AllDirs。 根据文档,此标志旨在避免将过滤器应用于文件夹。

    setFilter(QDir :: Files | QDir :: AllDirs | QDir :: NoDotAndDotDot);

  2. 使用setNameFilters为文件设置过滤器。 过滤器是通配符
    您使用的错误将其设置为“.xml”,这意味着文件不应具有其名称,而只是扩展名以匹配您的过滤器。 正确的过滤器是:

    setNameFilters(QStringList()<<“* .xml”)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM