Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 播放视频时断言:“m_surface”_C++_Qt_Video - Fatal编程技术网

C++ 播放视频时断言:“m_surface”

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

我有两个相似的代码,但有点不同。在第一个代码中,我通过调用构造函数中的play函数直接播放视频,在第二个代码中,我调用button click事件中的play函数

第二个代码正确播放视频,但第一个代码显示此运行时错误:

第一个代码有什么问题

这是我的第一个代码:

#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()));