无法在QTreeView中显示.mp3文件

时间:2012-11-21 14:03:21

标签: c++ qt qt4 treeview

我的.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文件的子文件夹时,它都会在treeview中显示它们。这是我面临的问题。单击邮件文件夹时,不显示任何内容。理想情况下,我想显示主文件夹及其子文件夹中显示的所有mp3文件。我已经放了qDebug()<<dirIt.filePath();,当我运行应用程序并单击一个驱动器时,这会打印出应用程序输出中的所有.mp3文件,但它不会在树视图中显示它们,即DriveListView

1 个答案:

答案 0 :(得分:0)

由于您无论如何手动迭代所有子目录,请尝试使用QStringListModel m_SystemListViewModel。这样,您可以直接在视图中显示m_list。见http://qt-project.org/doc/qt-4.8/qstringlistmodel.html

或者,看起来QSortFilterProxyModel可能会用于过滤列表视图中显示的结果,但我从未使用它。见http://qt-project.org/doc/qt-4.8/qsortfilterproxymodel.html