c ++ - Qt QMediaPlayer fungerer kun fra main

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg byggede en simpel medieafspiller i QT,
Dette er koden:


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();


}


når jeg forsøger at køre koden fra filen MAIN.CPP virker det, og alt er fint.


Når jeg prøver at køre den fra filen MAINWINDOW.CPP, virker det ikke (selv er koden den samme undtagen for disse linjer -


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

this->setCentralWidget(vw);


og player og vw er nu i MAINWINDOW.h)


hvorfor sker det?

Bedste reference


Ifølge dokumenterne:



  Hvis en strøm leveres Mediedata vil blive læst fra det i stedet for
  løse mediekilden. I dette tilfælde kan mediekilden stadig være
  bruges til at løse yderligere oplysninger om medierne som mime
  type. Strømmen skal være åben og læsbar.



I dit tilfælde er kilden til streamen QFile, men dette er en lokal variabel, der vil blive slettet, når konstruktøren er færdig med at køre. løsningen er at skabe den i bunken


QFile *io = new QFile("C:\file.mp4", this);
if(io->open(QFile::ReadOnly))
    player->setMedia(QUrl::fromLocalFile("C:\file.mp4"), io);