0

システムに存在するドライブをトラバースし、その中のオーディオ/ビデオ ファイルを検索したいと考えています。基本的にサブディレクトリをトラバースし、ツリービュー内にファイルを表示します。2 つのツリー ビューがあります。1 つはシステム ディレクトリを表示し、もう 1 つはオーディオ/ビデオ ファイルを表示します。

// Displays System Drives inside TreeView(Drive View) When Application Starts
void PanasonicViewer::onCamStartup()
{
    m_SystemModel = new QFileSystemModel(this);
    m_SystemListViewModel = new QFileSystemModel(this);
    m_SystemModel->setRootPath(QDir::currentPath());
    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);
}

//On Clicking The TreeView, it should display Audio and Video files in DriveListView
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::currentPath());
    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);
}

上記のクリック イベントで、フィルターを選択した拡張機能に設定したことがわかります。これは機能しているようで、ドライブ、つまり E:\ をクリックするとオーディオ ファイルとビデオ ファイルが表示されますが、サブフォルダー内に存在するファイルは表示されません。どこが間違っているのですか?

4

3 に答える 3

0

問題は、設定内容が原因ですQFileSystemModel::filter

のデフォルト設定はQDir::AllEntries | QDir::NoDotAndDotDot | QDir::AllDirs、です。ここで、はにQDir::AllEntries変換されQDir::Dirs | QDir::Files | QDir::Drivesます。展開すると、デフォルト設定は次のようになります。

QDir::Dirs | QDir::Files | QDir::Drives | QDir::NoDotAndDotDot | QDir::AllDirs

を呼び出すことによりm_SystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs )、標準ディレクトリのみを表示し、すべてのファイルを除外することをモデルに指示します。呼び出しをsetFilter完全に削除するだけで、問題はありません。

于 2012-11-19T18:11:25.920 に答える
0

変更してみる

ui->DriveListView->setRootIndex(m_SystemListViewModel->setRootPath(sPath));

m_SystemListViewModel->setRootPath(sPath)
ui->DriveListView->setRootIndex(m_SystemListViewModel->index(sPath);

によって返された QModelIndex があなたが考えているものであるかどうか、私は懐疑的setRootPathです。これをトラブルシューティングするには、m_SystemListViewModel からフィルターを削除して、自分が思っているフォルダーを実際に表示していることを確認します。

sPath がディレクトリ パスの場合、これが機能するはずです。ファイルパスだと期待通りに動くかどうかわかりません。

于 2012-11-19T21:48:01.047 に答える