4

QDirIteratorを使用してシステム ドライブをトラバースし、オーディオ/ビデオ ファイルを検索し、QStandardItemModel を使用して詳細を取得し、 QTreeviewに表示できるアプリケーションに取り組んでいます。ファイル名、タイプ、サイズ、変更日を表示することに成功しましたが、DURATIONは表示できません。

コードは次のとおりです。

// Displays Files in Detail View on Clicking Drive
void DetailView::on_DriveView_clicked(const QModelIndex &index)
{
int m_count_row = 0;

QStandardItemModel *model = new QStandardItemModel(0,0);
QString sPath = pSystemModel->fileInfo(index).absoluteFilePath();
pSystemTreeViewModel->setRootPath(sPath);
ui->DriveListView->setRootIndex(pSystemTreeViewModel->index(sPath));

pSystemModel->setRootPath(QDir::currentPath());
pSystemModel->setFilter(QDir::NoDotAndDotDot | QDir::AllDirs );
pSystemTreeViewModel->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() == "mts" ) ||(QFileInfo(dirIt.filePath()).suffix() == "m2ts" ))
        {
            m_list << dirIt.filePath();

            QModelIndex m_index = model->index(m_count_row, 0, QModelIndex());
            model->setHeaderData( 0, Qt::Horizontal, "Name" );
            model->setHeaderData( 1, Qt::Horizontal, "Type" );
            model->setHeaderData( 2, Qt::Horizontal, "Size" );
            model->setHeaderData( 3, Qt::Horizontal, "Date Modified" );

            model->setData( m_index, dirIt.fileName(), Qt::DecorationRole );
            QStandardItem *itemName = new QStandardItem(dirIt.fileName());
            model->setItem(m_count_row, 0, itemName);

            model->setData( m_index, dirIt.fileInfo().suffix(), Qt::DecorationRole );
            QStandardItem *itemExtention = new QStandardItem( dirIt.fileInfo().suffix());
            model->setItem(m_count_row, 1, itemExtention);

            model->setData( m_index, dirIt.fileInfo().size(), Qt::DecorationRole );
            float fFileSize = dirIt.fileInfo().size();
            float fFileKB = fFileSize / 1024; //kilobyte
            float fFileMB = fFileKB / 1024; //megabyte
            float fFinalSize = ceilf(fFileMB * 100) / 100;

            QString sSizeValue = QString::number(fFinalSize);
            QStandardItem *itemSize = new QStandardItem(sSizeValue + " MB");
            model->setItem(m_count_row, 2, itemSize);

            model->setData( m_index, dirIt.fileInfo().lastModified(), Qt::DecorationRole );
            QDateTime m_time = dirIt.fileInfo().lastModified();
            QString sTime = m_time.toString("dd/MM/yyyy hh:mm:ss");
            QStandardItem *itemDate = new QStandardItem(sTime);
            model->setItem(m_count_row, 3, itemDate);

            ui->DriveListView->setModel(model);
            ui->DriveListView->setRootIsDecorated(false);
            m_count_row++;
        }
    }

    pSystemTreeViewModel->setNameFilterDisables(false);
}
}

そのようなプロパティが見つからなかったため、上記の方法で期間を取得できるかどうかはわかりません。それを行う他の方法はありますか?QMediaPlayer を使用したくありません。上記のコードを Duration で更新するのに役立つ他の代替ソリューションはありますか???

4

1 に答える 1

1

Qt の使用

Qt のPhonon Moduleを調べてみることができます。

Phonon の MediaObject クラスのこの関数は、達成しようとしているものを取得するのに役立つと思います。

PS 間違った結果を避けるために、その関数の最後に書かれた警告を読んでください。


編集1: Qtを使用せずに

TagLib ライブラリについては、こちらをご覧ください。ファイルの長さの取得に関して言及されているこの関数を確認してください。また、LGPL の下にもあります。

于 2012-11-26T09:29:26.160 に答える