我在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
)
为什么会这样?
答案 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);