我有一个使用QMediaPlayer的工作媒体播放器。它可以使用QFileDialog打开一首歌然后播放并暂停。我希望能够读取音乐文件的元数据并将其用作字符串。我知道这个音乐有Windows元数据显示在Windows文件资源管理器中。这是我的代码。
void MainWindow::playAudioFile(QString openItem){
player = new QMediaPlayer(this);
player->setMedia(QUrl(openItem));
player->setVolume(50);
player->play();
QString albumTitle = player->metaData(QMediaMetaData::AlbumTitle).toString();
ui->albumLabel->setText(albumTitle);
qDebug()<<player->metaData(QMediaMetaData::Title);
ui文本的设置结束为空白,应用程序输出中的qDebug print语句结束为空白。 QtCreator中的应用程序输出也说QVariant(Invalid)
。
答案 0 :(得分:2)
您无需开始播放媒体即可获取元数据。但是,您需要等到媒体加载完毕。
当你调用player->setMedia(QUrl(openItem));
实际加载发生在后台时(你可以在调试器中看到Qt产生一堆线程)。然而,setMedia()不等待加载媒体,它只是返回。如果您立即查询元数据,则根据线程调度(即取决于是否已加载媒体),它可能可用也可能不可用。
要可靠地检索它,您需要连接到mediaStatusChanged()
信号,并等待状态QMediaPlayer::LoadedMedia
- 一旦收到它,您就可以在其插槽中查询元数据。< / p>
并且,为了获得最佳性能,请记住,您一次可以创建多个QMediaPlayer
实例。
答案 1 :(得分:1)
尝试通过Qt检查元数据是否确实可用
if (player->isMetaDataAvailable())
{
/* YOUR CODE HERE */
}
else
{
qDebug() << "No metadata.";
}
Qt Media Player example包含您需要的所有代码。