Qt 应用程序断言在第二次启动时失败
Qt application assertion fails on second launch
再次尝试在 QGraphicsView 中显示视频。现在我在第二次应用程序启动后断言失败:
ASSERT: "m_surface" in file player\mfvideorenderercontrol.cpp, line 2346
这是我的代码:
pl = new QMediaPlayer();
vid = new QGraphicsVideoItem();
pl->setVideoOutput(vid);
qDebug() << pl->error();
vid->setSize( QSizeF(1920, 1080) );
vid->setPos(QPointF(-500,-500));
pl->setMedia( QUrl::fromLocalFile( path ) );
qDebug() << pl->error();
ui->graphicsView->scene()->addItem(vid);
ui->graphicsView->setFixedSize(1920, 1080);
qDebug() << pl->error();
pl->play();
我用 *.avi 和 *.mp4 文件进行了测试。同样的问题。步骤如下:
- 我正在把 avi 文件放在路径中。
- Build/launch申请。
- 一切都很棒。视频作品。
- 关闭应用程序,再启动一次。
- 断言失败。
- 将路径中的文件更改为 mp4。
- Build/launch申请。
- 一切都好起来了。
- 以此类推
如果我在断言 window 中按 Skip
,一切都会再次正常。
提前致谢。
已解决。当调用 set media 时,有可能不是播放器需要的所有东西都在那个时候被初始化。解决方案是添加诸如 QTimer::singleShot( 1000, this, SLOT( initAndPlayVideo() ) );
之类的内容,或者将此插槽放在某些按钮点击上。
再次尝试在 QGraphicsView 中显示视频。现在我在第二次应用程序启动后断言失败:
ASSERT: "m_surface" in file player\mfvideorenderercontrol.cpp, line 2346
这是我的代码:
pl = new QMediaPlayer();
vid = new QGraphicsVideoItem();
pl->setVideoOutput(vid);
qDebug() << pl->error();
vid->setSize( QSizeF(1920, 1080) );
vid->setPos(QPointF(-500,-500));
pl->setMedia( QUrl::fromLocalFile( path ) );
qDebug() << pl->error();
ui->graphicsView->scene()->addItem(vid);
ui->graphicsView->setFixedSize(1920, 1080);
qDebug() << pl->error();
pl->play();
我用 *.avi 和 *.mp4 文件进行了测试。同样的问题。步骤如下:
- 我正在把 avi 文件放在路径中。
- Build/launch申请。
- 一切都很棒。视频作品。
- 关闭应用程序,再启动一次。
- 断言失败。
- 将路径中的文件更改为 mp4。
- Build/launch申请。
- 一切都好起来了。
- 以此类推
如果我在断言 window 中按 Skip
,一切都会再次正常。
提前致谢。
已解决。当调用 set media 时,有可能不是播放器需要的所有东西都在那个时候被初始化。解决方案是添加诸如 QTimer::singleShot( 1000, this, SLOT( initAndPlayVideo() ) );
之类的内容,或者将此插槽放在某些按钮点击上。