Qt QMediaPlayer仅适用于main

时间:2018-05-14 16:03:27

标签: c++ windows qt qt5

我在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);

playervw现在位于MAINWINDOW.h

为什么会这样?

1 个答案:

答案 0 :(得分:1)

根据文件:

  

如果提供了流;将从中读取媒体数据而不是   解决媒体来源。在这种情况下,媒体源可能仍然是   用于解决有关媒体的其他信息,如mime   类型。流必须是开放的,可读的。

在您的情况下,流的源是QFile,但这是一个局部变量,在构造函数完成运行时将被删除。解决方案是在堆中创建它

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