我的 .ui 中有 2 个树视图。一个树视图是DriveView
,另一个是DriveListView
。现在我已经编写了一个代码,它在“DriveView”中显示我系统的驱动器。我已经这样做了:
// 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);
}
现在,一旦我单击我的特定驱动器,DriveView
它就会向我显示其中的子文件夹。我基本上需要做的是迭代/遍历整个驱动器并搜索.mp3
里面的文件。基本上检查所有文件夹和子文件夹。一旦找到文件,它应该在我的另一个 Treeview 中显示它们,即DriveListView
. 我为此编写了以下代码:
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")
{
qDebug()<<dirIt.filePath();
m_list<<dirIt.filePath();
m_list.append(dirIt.filePath());
}
}
QStringListModel *model = new QStringListModel();
model->setStringList(m_list);
m_SystemListViewModel->setNameFilterDisables(false);
}
}
每当我单击包含 mp3 文件的子文件夹时,它都会在树视图中显示它们。这是我面临的问题。当我单击邮件文件夹时,什么都没有显示。理想情况下,我想显示主文件夹及其子文件夹中存在的所有 mp3 文件。我已经放了qDebug()<<dirIt.filePath();
,当我运行应用程序并单击驱动器时,这会打印.mp3
应用程序输出中的所有文件,但它不会在树视图中显示它们,即DriveListView
。