簡體   English   中英

無法在 Qt 的 TreeView 中顯示 mp3 文件

[英]Fails to display mp3 files in TreeView in 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(); Application Output選項卡中給了我所有 .mp3 和 .mpeg 文件的路徑,但沒有在 DriveListView(treeview) 中顯示它們。 截至目前,它僅顯示驅動器中的文件,但驅動器內的子文件夾也有未顯示的 mp3 文件。

這是圖片供參考:在此處輸入圖片說明

請注意 SONGS 中有許多文件夾,其中存在 mp3 文件但不顯示。

我哪里出錯了???

對我來說,它看起來像是對m_SystemListViewModel->setFilter( QDir::Files | QDir::NoDotAndDotDot ); 將明確告訴 Qt 只顯示文件。

根據文檔,您應該簡單地將QDir::AllDirs與您以前的過濾器一起傳遞。

QDir::AllDirs - 列出所有目錄; 即不要將過濾器應用於目錄名稱。

可能嘗試不使用QFileSystemModel到您的m_SystemListViewModel ,而是創建您自己的繼承QAbstractItemModel的模型,並在其上使用QStyledItemDelegate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM