无法使用QFileSystemModel为不同的音频/视频文件解析系统目录

时间:2012-11-19 08:05:42

标签: c++ qt qt4 qfilesystemmodel

我是Qt的新手,并且从过去的几天开始研究它。我遇到过一种情况,我需要解析/遍历我的系统目录并搜索.mp3,.mpg等文件。

在我的.ui中,我有2个树视图,一个朝右,另一个朝左。左侧显示系统目录,在选择驱动器时,右侧树视图显示.mp3,.mpg等文件。

这是我的Cpp类:

    //Gets called on App startup
void PanasonicViewer::onCamStartup()
{
    m_SystemModel = new QFileSystemModel(this);
    m_SystemListViewModel = new QFileSystemModel(this);
    m_SystemModel->setRootPath(QDir::homePath());
    ui->DriveView->setModel(m_SystemModel); //Left side TreeView
    ui->DriveListView->setModel(m_SystemListViewModel); //Right Side TreeView

    // regard less how many columns you can do this using for:
    for(int nCount = 1; nCount < m_SystemModel->columnCount(); nCount++)
       ui->DriveView->hideColumn(nCount);
}

void PanasonicViewer::on_DriveView_clicked(const QModelIndex &index)
{
    QStringList sDriveFilters;

    QString sPath = m_SystemModel->fileInfo(index).absoluteFilePath();
    ui->DriveListView->setRootIndex(m_SystemListViewModel->setRootPath(sPath));    

    m_SystemModel->setRootPath(QDir::homePath());
    m_SystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs );
    m_SystemListViewModel->setFilter( QDir::Files | QDir::NoDotAndDotDot );

    sDriveFilters << "*.aac" << "*.wmv" << "*.avi" << "*.mpeg" << "*.mov" << "*.3gp" << "*.flv" << "*.mp3" ;

    m_SystemListViewModel->setNameFilters(sDriveFilters);
    m_SystemListViewModel->setNameFilterDisables(false);
}

Here is my .h file:

  QFileSystemModel *m_SystemModel;
  QFileSystemModel *m_SystemListViewModel;

当我运行我的应用程序时,它仅显示驱动器中存在的那些音频/视频文件。我的意思是它不会解析存在音频/视频文件的驱动器中存在的文件夹。它只显示驱动器中的文件而不是子目录。我怎样才能实现它? :)

1 个答案:

答案 0 :(得分:1)

“计算机做你说的,但不是你想要的”

如果要获取驱动器中存在的所有文件 - 必须递归遍历所有目录。

以下是类似且已回答的问题:SO question

通过其中一个答案,在Qt中你可以使用这种方法:

#include <qapplication.h>
#include <qdir.h>
#include <iostream>

int main( int argc, char **argv )
{
    QApplication a( argc, argv );
    QDir currentDir = QDir::current();

    currentDir.setFilter( QDir::Dirs );
    QStringList entries = currentDir.entryList();
    for( QStringList::ConstIterator entry=entries.begin(); entry!=entries.end(); ++entry) 
    {
          std::cout << *entry << std::endl;
    }
    return 0;
}