C++ QVideoProbe控件在运行时被破坏';它仍在被引用
我创建了一个QCamera和一个QVideoProbe,这将允许我访问视频的每一帧。 问题是,每次我关闭应用程序时,我都会在Qt Creator中看到这样一条消息:“QVideoProbe控件在仍被引用时被销毁!!!” 我在Windows8.1上使用Qt5.11。我的编译器是MSVC 2015(32位) 这是我的密码: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
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时会出现警告。我刚刚编辑了我的帖子,关于内存泄漏,你是对的。