我已经在
的帮助下实现了自定义文件浏览对话框QListView
QTreeView
QFileSystemModel
一个浏览对话框,仅用于浏览xml文件。所以我想只在QListView
中显示dirs和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。
请告诉我该怎么做。答案 0 :(得分:3)
实际上,这是@Andreas在对这个问题的评论中提出的解决方案。 我的贡献是指向名称过滤器中的另一个错误。
解决方案:如何显示按扩展程序过滤的所有目录+文件
使用标志QDir :: AllDirs。根据{{3}},此标志旨在避免将过滤器应用于文件夹。
setFilter(QDir :: Files | QDir :: AllDirs | QDir :: NoDotAndDotDot);
使用setNameFilters
为文件设置过滤器。过滤条件为docs
您使用的错误将其设置为&#34; .xml&#34;这意味着文件不应该只有其名称,但扩展名只能与您的过滤器匹配。正确的过滤器是:
setNameFilters(QStringList()&lt;&lt;&#34; * .xml&#34;)