C++ 播放视频时断言:“m_surface”
我有两个相似的代码,但有点不同。在第一个代码中,我通过调用构造函数中的play函数直接播放视频,在第二个代码中,我调用button click事件中的play函数 第二个代码正确播放视频,但第一个代码显示此运行时错误: 第一个代码有什么问题 这是我的第一个代码:C++ 播放视频时断言:“m_surface”,c++,qt,video,C++,Qt,Video,我有两个相似的代码,但有点不同。在第一个代码中,我通过调用构造函数中的play函数直接播放视频,在第二个代码中,我调用button click事件中的play函数 第二个代码正确播放视频,但第一个代码显示此运行时错误: 第一个代码有什么问题 这是我的第一个代码: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QFileDialog> MainWindow::MainWindow(QWidget *paren
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene;
ui->graphicsView->setScene(scene);
mp1.setVideoOutput(&v1);
QString foo("C:/Users/user/Desktop/files/1.mov");
play(QUrl(foo));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::play(QUrl url)
{
mp1.setMedia(url);
mp1.play();
mp1.setVolume(0);
scene->addItem(&v1);
}
这是我的第二个代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scene = new QGraphicsScene;
ui->graphicsView->setScene(scene);
mp1.setVideoOutput(&v1);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::play(QUrl url)
{
mp1.setMedia(url);
mp1.play();
mp1.setVolume(0);
scene->addItem(&v1);
}
void MainWindow::on_pushButton_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"),
"");
play(fileName);
}
更多详情:
-操作系统:windows 7 64位
-编译器:mscv2013 64位
-mp1:QMediaPlayer
-v1:QGraphicsVideoItem由于您是从构造函数中调用play,似乎有些东西尚未完全初始化,这导致断言失败
要测试此功能,请尝试将以下功能添加到插槽:部分的MainWindow:
并在主窗口构造函数中执行以下操作:
QTimer::singleShot(0, this, SLOT(playVideo()));
而不是直接给play打电话
QTimer::singleShot(0, this, SLOT(playVideo()));