QMediaMetaData возвращает пустое значение

230
10 ноября 2017, 09:41

Есть две взаимосвязанные функции, collectInfo()

    void collectInfo(){
   title = player->metaData(QMediaMetaData::Title).toString();
   artist = player->metaData(QMediaMetaData::ContributingArtist).toString();
   cover = player->metaData(QMediaMetaData::CoverArtImage).toString();
}

Где title, artist и player - переменные типа QString.

И playMusic(), которая обращается к формам

void guiPlayer::playMusic(){
         player->play();
         play = 1;
         ui->nameLabel->setText("Playing");
         ui->trackNameLabel->setText( title );
         ui->trackComposeLabel->setText( artist );
         if(!cover.isEmpty())  ui->Cover->setPixmap(cover);
     setWindowTitle(list[lurking]);
}

То есть сначала собирается информация об ID3 тегах, которые затем передаются на форму.

Данные функции вызываются по нажатии одной из кнопок.

//загрузить музыку
        void guiPlayer::on_loadButton_clicked()
        {
            QFileDialog dialog(this);
            dialog.setDirectory(QDir::homePath());
            dialog.setFileMode(QFileDialog::ExistingFiles);
            dialog.setNameFilter(trUtf8("Mp3 files (*.mp3)"));
            if (dialog.exec()){
                list = dialog.selectedFiles();

                lurking = 0;
                player->setMedia(QUrl::fromLocalFile(list[lurking]));
                ui->trackNameLabel->setText("Press \"play\" to begin");
                 empty = 0;
        }}
//воспроизведение музыки
        void guiPlayer::on_playButton_clicked()
        {
            if(!empty){
                if(!play){
                    collectInfo();
                    playMusic();
               }
                else{
                    ui->nameLabel->setText("Paused");
                    player->pause();
                    play = 0;}
        }}

//предыдущий трек
    void guiPlayer::on_backButton_clicked()
    {
        if(!empty){
            if(player->position() <= 5000){
                if(--lurking > 0){
                    --lurking;
                    player->setMedia(QUrl::fromLocalFile(list[lurking]));
                    playMusic();}
                    else{
                        player->setMedia(QUrl::fromLocalFile(list[
                                                                  lurking = list.size()-1]));
                        playMusic();
                }}
            else
                player->setPosition(0);
    }}

//следующий трек
    void guiPlayer::on_nextButton_clicked()
    {
       lurking +=1;
       if(!empty){
           if( lurking < list.size())
               player->setMedia(QUrl::fromLocalFile(list[lurking]));
                else{
                    lurking = 0;
                    player->setMedia(QUrl::fromLocalFile(list[lurking]));
                    }
      collectInfo();
      playMusic();
    }}

Где player - объект типа QMediaPlayer, list - QStringList, lurking - индекс воспроизводимого трека, play - играет ли трек, empty - пустой ли list.

В итоге отображаются теги только при нажатии на кнопку "играть", когда же при нажатии на другие кнопки лишь играет музыка. В таком случае помогает способ поставить трек на паузу (двойное нажатие на "играть") и продолжить воспроизведение, тогда теги появляются.

Пробовал вызывать on_playButton при нажатии на другие кнопки, но эффект был тот же.

Подскажите, как можно решить данную проблему?

READ ALSO
удаления из списка элементов класса list&lt;classT&gt; С++

удаления из списка элементов класса list<classT> С++

здраствуйте, есть список с элементов класса код класса:

216
Вывод данных из БД в TableView(Qt)

Вывод данных из БД в TableView(Qt)

Здравствуйте, стал изучить работу с БД в Qt creator

448
Указатель this c++

Указатель this c++

Добрый вечерУ меня такой вопрос, недавно лазил в инете и наткнулся на такой код: return*this*Fraction(fra

270
Проверка введенных данных QTableWidget

Проверка введенных данных QTableWidget

Доброго времени суток коллегиЕсть задача используя QTableWidget проверять введенные пользователем данные в ячейки с помощью нехитрой конструкции

212