Не в состоянии отображать mp3-файлы в TreeView в Qt

Хорошо, я, кажется, столкнулся с ситуацией, когда мне нужно пройти по моим каталогам и искать только файлы .mp3 и .mpeg. После поиска я хочу отобразить их в виде дерева.

По сути, в моем приложении 2 вида дерева, один отображает системные каталоги, а другой должен отображать только файлы .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 (древовидное представление). На данный момент он отображает только файлы на диске, но подпапки на диске также имеют файлы mp3, которые не отображаются.

Вот картинка для справки:
введите описание изображения здесь

Обратите внимание, что внутри SONGS есть много папок, в которых присутствуют mp3-файлы, но они не отображаются.

Где я делаю ошибку ???

-1

Решение

Для меня это выглядит как призыв к
m_SystemListViewModel->setFilter( QDir::Files | QDir::NoDotAndDotDot ); явно скажет Qt только показывать файлы.

Согласно документации, Вы должны просто пройти QDir::AllDirs с вашими предыдущими фильтрами.

QDir :: AllDirs — список всех каталогов; не применять фильтры к именам каталогов.

0

Другие решения

Может быть, попытаться использовать не QFileSystemModel на ваш m_SystemListViewModel, но создайте свою собственную модель, которая наследует QAbstractItemModelи использовать QStyledItemDelegate над ним.

0

По вопросам рекламы [email protected]