-1

さて、ディレクトリをトラバースして.mp3ファイルと.mpegファイルのみを検索する必要がある状況に遭遇したようです。検索したら、ツリービューに表示したいと思います。

基本的に、アプリには2つのツリービューがあります。1つはシステムディレクトリを表示し、もう1つは.mp3ファイルと.mpegファイルのみを表示する必要があります。

これがコードです

// 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);
}

// Displays Files in Detail View on Clicking Drive
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" || QFileInfo(dirIt.filePath()).suffix() == "mpeg")
        {
            qDebug()<<dirIt.filePath();
            m_list<<dirIt.filePath();
            m_list.append(dirIt.filePath());
        }
    }

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

ここDriveViewで、はドライブを表示するツリービューであり、DriveListViewはmp3ファイルとmpegファイルのみを表示するツリービューです。コードをデバッグすると、タブqDebug()<<dirIt.filePath();内のすべての.mp3ファイルと.mpegファイルのパスが表示されApplication Outputますが、DriveListView(treeview)内に表示されません。現在のところ、ドライブ内のファイルのみが表示されますが、ドライブ内のサブフォルダーにも表示されないmp3ファイルがあります。

参考までに写真を次に示します。 ここに画像の説明を入力してください

SONGS内には、mp3ファイルが存在するが、表示されないフォルダが多数あることに注意してください。

どこを間違えているの?

4

2 に答える 2

0

私には、への呼び出し m_SystemListViewModel->setFilter( QDir::Files | QDir::NoDotAndDotDot );が明示的に Qt にファイルのみを表示するように指示するように見えます。

documentation によるとQDir::AllDirs、以前のフィルターで単純に渡す必要があります。

QDir::AllDirs - すべてのディレクトリを一覧表示します。つまり、フィルタをディレクトリ名に適用しないでください。

于 2012-11-20T13:00:28.467 に答える
0

に使うのではなくQFileSystemModelm_SystemListViewModelを継承した独自のモデルを作成し、それを上書きしてQAbstractItemModel使用QStyledItemDelegateすることもできます。

于 2012-11-20T18:41:31.710 に答える