QtCreator QMediaPlayer元数据返回空白QString

时间:2014-05-15 12:51:02

标签: c++ qt audio metadata media

我有一个使用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)

2 个答案:

答案 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包含您需要的所有代码。