好吧,我似乎遇到了需要遍历目录并仅搜索 .mp3 和 .mpeg 文件的情况。搜索后,我想在我的树视图中显示它们。
基本上我的应用程序中有 2 个树视图,一个显示系统目录,另一个应该只显示 .mp3 和 .mpeg 文件。
这是代码
// Gets called when application starts
void DetailView::onCamStartup()
{
m_SystemModel = new QFileSystemModel(this);
m_SystemListViewModel = new QFileSystemModel(this);
m_SystemModel->setRootPath(QDir::currentPath());
ui->DriveView->setModel(m_SystemModel);
ui->DriveListView->setModel(m_SystemListViewModel);
// regard less how many columns you can do this using for:
for(int nCount = 1; nCount < m_SystemModel->columnCount(); nCount++)
ui->DriveView->hideColumn(nCount);
}
// Displays Files in Detail View on Clicking Drive
void DetailView::on_DriveView_clicked(const QModelIndex &index)
{
QString sPath = m_SystemModel->fileInfo(index).absoluteFilePath();
ui->DriveListView->setRootIndex(m_SystemListViewModel->setRootPath(sPath));
m_SystemModel->setRootPath(QDir::currentPath());
m_SystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs );
m_SystemListViewModel->setFilter( QDir::Files | QDir::NoDotAndDotDot );
QStringList m_list;
QDirIterator dirIt(sPath,QDirIterator::Subdirectories);
while (dirIt.hasNext())
{
dirIt.next();
if (QFileInfo(dirIt.filePath()).isFile())
{
if (QFileInfo(dirIt.filePath()).suffix() == "mp3" || QFileInfo(dirIt.filePath()).suffix() == "mpeg")
{
qDebug()<<dirIt.filePath();
m_list<<dirIt.filePath();
m_list.append(dirIt.filePath());
}
}
m_SystemListViewModel->setNameFilters(m_list);
m_SystemListViewModel->setNameFilterDisables(false);
}
}
DriveView
显示驱动器的树视图在哪里,而树DriveListView
视图应该只显示 mp3 和 mpeg 文件。当我调试代码时,qDebug()<<dirIt.filePath();
在选项卡中为我提供所有 .mp3 和 .mpeg 文件的路径,Application Output
但不会在 DriveListView(treeview) 中显示它们。到目前为止,它仅显示驱动器中的文件,但驱动器内的子文件夹也有未显示的 mp3 文件。
这是供参考的图片:
请注意 SONGS 中有许多文件夹,其中存在 mp3 文件但不显示。
我在哪里犯错???