Причина
Требуется время для загрузки носителя после вызова QMediaPlayer::setMedia
, следовательно, запрос метаданных сразу после установки носителя приводит к:
QVariant(Invalid)
Решение
Я бы посоветовал вам дождаться загрузки носителя, подключившись к QMediaPlayer::mediaStatusChanged
и прочитав метаданные, когда статус станет QMediaPlayer::LoadedMedia
.
Примечание: Если вы сделаете sound
локальной переменной, она будет уничтожена, когда выйдет из области видимости. Лучше использовать auto *sound = new QMediaPlayer(this);
.
Пример
Вот пример, который я подготовил для вас, как вы могли бы изменить свой код для реализации предложенного решения:
connect(sound, &QMediaPlayer::mediaStatusChanged, [this, sound, info](QMediaPlayer::MediaStatus status){
if (status == QMediaPlayer::LoadedMedia) {
ui->label_3->setText(sound->metaData("Title").toString());
if (ui->label_3->text()=="")
ui->label_3->setText(sound->metaData("AlbumTitle").toString());
if (ui->label_3->text()=="")
ui->label_3->setText(info.baseName());
ui->label_5->setText(sound->metaData("Author").toString());
if (ui->label_5->text()=="")
ui->label_5->setText(sound->metaData("AlbumArtist").toString());
if (ui->label_5->text()=="")
ui->label_5->setText(sound->metaData("Composer").toString());
}
});