如何正确关闭QWebView而不会导致内存泄漏?

时间:2016-01-29 17:29:48

标签: c++ windows qt memory-leaks qwebview

我将自定义QWebView声明为:

class browserControl : public QWebView {
  Q_OBJECT
 public:
         explicit browserControl(QWidget *parent = 0);
         ~browserControl();
  // ....
}

它是MainWindow类的成员(由Qt在GUI应用程序上生成的同一个)当按下按钮时,我调用show()。所以它在一个新窗口中打开Web浏览器但是当我关闭主窗口我们的Web浏览器时,我得到了一堆内存泄漏(它可能因每次运行而异,具体取决于打开的页面,我猜)喜欢(如果我关闭主窗口然后浏览器)

  

LEAK:24 CachedResource

     

LEAK:231 WebCoreNode

或者如果我关闭浏览器然后关闭主窗口:

  

LEAK:1 XMLHttpRequest

     

LEAK:49 CachedResource

     

LEAK:2528 WebCoreNode

我该如何解决这个问题?

修改

要求的构造函数代码:

browserControl::browserControl(QWidget *parent)
    : QWebView(parent)
{
}

browserControl::~browserControl()
{
}

1 个答案:

答案 0 :(得分:2)

您有两种选择:

  1. 您可以将父QObject(直接或间接是QApplication对象的子项)传递给窗口小部件的构造函数。由于qobject的析构函数会删除它的子节点,因此最终会删除您的小部件。

  2. 第二个选项是您在窗口小部件上设置Qt::WA_DeleteOnClose属性,这样当关闭窗口小部件时它将被删除,并且不会等待应用程序关闭。这样做:widget->setAttribute(Qt::WA_DeleteOnClose);