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

时间:2014-09-19 05:38:46

标签: c++ qt qt5

我已经在

的帮助下实现了自定义文件浏览对话框
QListView
QTreeView
QFileSystemModel

我想要的!

一个浏览对话框,仅用于浏览xml文件。所以我想只在QListView

中显示dirs和xml文件

如果dir有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。

请告诉我该怎么做。

1 个答案:

答案 0 :(得分:3)

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

解决方案如何显示按扩展程序过滤的所有目录+文件

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

      

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

  2. 使用setNameFilters为文件设置过滤器。过滤条件为docs 您使用的错误将其设置为&#34; .xml&#34;这意味着文件不应该只有其名称,但扩展名只能与您的过滤器匹配。正确的过滤器是:

      

    setNameFilters(QStringList()&lt;&lt;&#34; * .xml&#34;)