gpt4 book ai didi

c++ - Qt QMediaPlayer 仅适用于 main

转载 作者:行者123 更新时间:2023-11-28 04:40:15 26 4
gpt4 key购买 nike

我用 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 中)

为什么会这样?

最佳答案

根据文档:

If a stream is supplied; media data will be read from it instead of resolving the media source. In this case the media source may still be used to resolve additional information about the media such as mime type. The stream must be open and readable.

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

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

关于c++ - Qt QMediaPlayer 仅适用于 main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com