C++ QVideoProbe控件在运行时被破坏';它仍在被引用

C++ QVideoProbe控件在运行时被破坏';它仍在被引用,c++,windows,qt5,qt-creator,C++,Windows,Qt5,Qt Creator,我创建了一个QCamera和一个QVideoProbe,这将允许我访问视频的每一帧。 问题是,每次我关闭应用程序时,我都会在Qt Creator中看到这样一条消息:“QVideoProbe控件在仍被引用时被销毁!!!” 我在Windows8.1上使用Qt5.11。我的编译器是MSVC 2015(32位) 这是我的密码: Window::Window() { if(!checkCameraAvailability()) { QMessageBox::critical

我创建了一个QCamera和一个QVideoProbe,这将允许我访问视频的每一帧。 问题是,每次我关闭应用程序时,我都会在Qt Creator中看到这样一条消息:“QVideoProbe控件在仍被引用时被销毁!!!”

我在Windows8.1上使用Qt5.11。我的编译器是MSVC 2015(32位)

这是我的密码:

Window::Window()
{
    if(!checkCameraAvailability())
    {
        QMessageBox::critical(this, "Error", "No camera is available");
        return;
    }

    m_camera = new QCamera;
    m_camera->setCaptureMode(QCamera::CaptureVideo);

    m_videoProbe = new QVideoProbe(this);

    if(!m_videoProbe->setSource(m_camera))
    {
        QMessageBox::critical(this, "Error", "setSource");
        return;
    }

    connect(m_videoProbe, SIGNAL(videoFrameProbed(QVideoFrame)), this, SLOT(cameraFrameProbed(QVideoFrame)));
    // For now the slot 'cameraFrameProbed' is empty

    m_camera->start();
}

我错过了什么?问题解决了!我替换了这一行:

m_videoProbe = new QVideoProbe(this);
关于这一点:

m_videoProbe = new QVideoProbe;
但我还是不明白第一行怎么了

编辑:以前的解决方案存在内存泄漏!下面是正确的答案:

在构造QCamera时,我忘了提到它的父级,实际上有两个内存泄漏

因此,代码变成:

m_camera = new QCamera(this);
m_videoProbe = new QVideoProbe(this);
现在它工作了


非常感谢Jeremy Friesner

之前,QVideoProbe被设置为窗口对象的子对象(
),而更改后,QVideoProbe没有父对象。这意味着,除非您在关机时手动
删除m\u videoProbe
,否则QVideoProbe对象正在泄漏。你只是把一个问题换成了另一个问题;现在,不是警告消息,而是内存泄漏。最好的办法是浏览Qt源代码,查看警告消息的来源,并根据导致警告消息的代码,找出到底是什么引用了您的对象,然后向应用程序中添加代码以取消引用它。这可能与从窗口析构函数调用m_camera->stop()一样简单(我没有使用QVideoProbe,所以我不能肯定)谢谢你的回复!我刚刚修复了内存泄漏,我完全忘记了删除。警告来自这里:。但我不知道如何取消对对象的引用。我还尝试调用m_camera->stop()但这并不能解决问题。删除QVideoProbe时会出现警告。我刚刚编辑了我的帖子,关于内存泄漏,你是对的。