0

.ui に 2 つのツリー ビューがあります。1 つのツリービューはDriveViewで、もう 1 つは です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 ファイルのあるサブフォルダーをクリックすると、ツリービューに表示されます。これは私が問題に直面していた場合です。メールフォルダをクリックしても何も表示されません。理想的には、メイン フォルダーとそのサブフォルダーに存在するすべての mp3 ファイルを表示する必要があります。アプリを実行してqDebug()<<dirIt.filePath();ドライブをクリックすると.mp3、アプリケーション出力にすべてのファイルが出力されますが、ツリービューには表示されませんDriveListView

4

1 に答える 1

0

とにかくすべてのサブディレクトリを手動で繰り返し処理しているので、QStringListModelfor を使用してみてください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を参照してください。

于 2012-11-21T15:22:44.177 に答える