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

标签 qt qgraphicsview assertion

再次尝试在 QGraphicsView 中显示视频。现在我在第二次应用程序启动后断言失败:

ASSERT:文件 player\mfvideorenderercontrol.cpp 中的“m_surface”,第 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,一切都会再次正常。

提前谢谢你。

最佳答案

找到解决方案。当调用 set media 时,有可能不是播放器需要的所有东西都在那个时候被初始化。解决方案是添加诸如 QTimer::singleShot( 1000, this, SLOT( initAndPlayVideo() ) ); 之类的内容,或者将此插槽放在某些按钮点击上。

关于Qt 应用程序断言在第二次启动时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049004/

相关文章:

c++ - 断言失败 : calling a list's node deconstructor

java - 如何使用assertThat 包含Junit中列表比较的任意顺序方法(java)

c++ - Qt - 将文件拖放到 ListView 中

c++ - QGraphicsView 缩放窗口大小

qt - 对 QMainWindow 的大小调整使用react以调整小部件的大小

c++ - 使用 2 个 channel 编写自定义 QIODevice

Qt:在QDrag的QMimeData中发送QPixmap?

c++ - 在多个图形 View 中显示和选择的自定义小部件

python - pyqt获取图像位置

utf-8 - 当数组包含 UTF-8 字符时,CodeCeption assertContains 失败