0

私は Qt の初心者で、ここ数日から Qt に取り組み始めました。システム ディレクトリを解析/トラバースし、.mp3、.mpg などのファイルを検索する必要がある状況に遭遇しました。

私の .ui には 2 つのツリー ビューがあり、1 つは右向き、もう 1 つは左向きです。左側にはシステム ディレクトリが表示され、ドライブを選択すると、右側のツリービューには .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;

アプリを実行すると、ドライブに存在するオーディオ/ビデオ ファイルのみが表示されます。つまり、オーディオ/ビデオ ファイルが存在するドライブ内に存在するフォルダーを解析しません。サブディレクトリではなく、ドライブにあるファイルを表示するだけです。どうすれば達成できますか?:)

4

1 に答える 1

1

「コンピューターはあなたが言ったことをしますが、あなたは望んでいません」

ドライブ内に存在するすべてのファイルを取得する場合は、すべてのディレクトリを再帰的に通過する必要があります。

これは似たような答えの質問です:SO質問

答えの1つとして、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;
}
于 2012-11-19T08:54:55.027 に答える