Qt QMediaPlayer работает только с основного - PullRequest
0 голосов
/ 14 мая 2018

Я построил простой медиаплеер в QT, это код:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

   QMediaPlayer* player = new QMediaPlayer;
   QVideoWidget *vw = new QVideoWidget;

   player->setVideoOutput(vw);
   w.setCentralWidget(vw);

   QFile io("C:\\file.mp4");
   io.open(QFile::ReadOnly);

   player->setMedia(QUrl::fromLocalFile("C:\\file.mp4"), &io);

   vw->show();
   player->play();

   return a.exec();

}

, когда я пытаюсь запустить код из файла MAIN.CPP, он работает и всевсе в порядке.

Когда я пытаюсь запустить его из файла MAINWINDOW.CPP не работает (даже сделать код такой же, за исключением этой строки -

player = new QMediaPlayer(this);
vw= new QVideoWidget(this);

this->setCentralWidget(vw);

и playerи vw сейчас в MAINWINDOW.h)

почему это происходит?

1 Ответ

0 голосов
/ 14 мая 2018

По документам:

Если предоставляется поток; медиа данные будут считываться с него вместо разрешение медиа источника. В этом случае медиа-источник все еще может быть используется для разрешения дополнительной информации о средствах массовой информации, таких как MIME тип. Поток должен быть открытым и читаемым.

В вашем случае источником потока является QFile, но это локальная переменная, которая будет удалена после завершения работы конструктора. решение состоит в том, чтобы создать его в куче

QFile *io = new QFile("C:\\file.mp4", this);
if(io->open(QFile::ReadOnly))
    player->setMedia(QUrl::fromLocalFile("C:\\file.mp4"), io);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...