Qt应用程序断言在第二次启动时失败

时间:2015-10-10 00:31:24

标签: qt qgraphicsview assertion

再次尝试在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文件放在路径上。
  • 构建/启动应用程序。
  • 一切都很棒。视频有效。
  • 关闭应用程序,再启动一次。
  • 断言失败。
  • 将路径中的文件更改为mp4。
  • 构建/启动应用程序。
  • 一切都很好。
  • 等等。

如果我在断言窗口按Skip,一切都会好起来的。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

得到解决方案。当调用set media时,有一个机会并不是玩家在那个时刻初始化所需的一切。解决方案是添加类似QTimer::singleShot( 1000, this, SLOT( initAndPlayVideo() ) );的内容,或者将此插槽放在某个按钮上。