@jsulm said in Audio duration for file manager:
@Nemooo said in Audio duration for file manager:
The result is the same - doesn't fill the last column
Yes, because you need to take the correct index now instead of 0.
May be this way?
void MainWindow::CreateTable(const QString & p) {
filemodel->removeRows( 0, filemodel->rowCount() );
filemodelcurrentdir = QDir(p).path();
files = QDir(p).entryInfoList(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
int in = 0;
foreach(const QFileInfo &fi, files) {
QString name = QString("%0").arg(fi.fileName());
filemodel->insertRow(in);
if (fi.isDir()) {
filemodel->setData(filemodel->index(in, 0), name);
filemodel->setData(filemodel->index(in, 0), dirIcon, Qt::DecorationRole);
} else {
filemodel->setData(filemodel->index(in, 0), name);
filemodel->setData(filemodel->index(in, 0), fileIcon, Qt::DecorationRole);
filemodel->setData(filemodel->index(in, 1), size_human(fi.size()));
}
++in;
}
in = 0;
foreach(const QFileInfo &fi, files) {
QString name = QString("%0").arg(fi.fileName());
if (!fi.isDir()) {
QMediaPlayer* player = new QMediaPlayer();
player->setMedia(QUrl::fromLocalFile(filemodelcurrentdir + "/" + name));
auto index = filemodel->index(in, 2);
connect(player, &QMediaPlayer::durationChanged, this, [this, index](qint64 dur) {
filemodel->setData(index, QString().setNum(static_cast<double>(dur)/60000.0));
});
delete player;}
++in;
}
filemodel->setHeaderData(0,Qt::Horizontal,QObject::tr("Name" ));
filemodel->setHeaderData(1,Qt::Horizontal,QObject::tr("Size" ));
filemodel->setHeaderData(2,Qt::Horizontal,QObject::tr("Duration" ));
pTreeView2->setSortingEnabled(true);
pTreeView2->setColumnWidth(0, 300);
pTreeView2->setColumnWidth(1, 100);
pTreeView2->setColumnWidth(2, 100);
}