Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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/0/windows/15.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++ 如何正确关闭QWebView而不导致内存泄漏?_C++_Windows_Qt_Memory Leaks_Qwebview - Fatal编程技术网

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

C++ 如何正确关闭QWebView而不导致内存泄漏?,c++,windows,qt,memory-leaks,qwebview,C++,Windows,Qt,Memory Leaks,Qwebview,我有一个自定义的QWebView声明为: class browserControl : public QWebView { Q_OBJECT public: explicit browserControl(QWidget *parent = 0); ~browserControl(); // .... } 它是按下按钮时我调用的MainWindow类(与Qt在GUI应用程序上生成的类相同)的成员。因此,它在新窗口中打开web浏览器,但当我关闭主窗口

我有一个自定义的
QWebView
声明为:

class browserControl : public QWebView {
  Q_OBJECT
 public:
         explicit browserControl(QWidget *parent = 0);
         ~browserControl();
  // ....
}
它是按下按钮时我调用的
MainWindow
类(与Qt在GUI应用程序上生成的类相同)的成员。因此,它在新窗口中打开web浏览器,但当我关闭主窗口或web浏览器时,会出现大量内存泄漏(每次运行可能会有所不同,具体取决于打开的页面),比如(如果关闭主窗口,则关闭浏览器)

泄漏:24缓存源

泄漏:231 WebCoreNode

或者,如果关闭浏览器,则主窗口:

泄漏:1 XMLHttpRequest

泄漏:49缓存源

泄漏:2528 WebCoreNode

我该如何解决这个问题

编辑

所要求的构造函数代码:

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

browserControl::~browserControl()
{
}
您有两个选择:

  • 您可以将父QObject直接或间接地作为QApplication对象的子对象传递给小部件的构造函数。由于qobject的析构函数删除了它的子项,最终您的小部件将被删除

  • 第二个选项是在小部件上设置
    Qt::WA_DeleteOnClose
    属性,这样,当您关闭小部件时,它将被删除,而不会等待应用程序关闭。执行此操作:
    widget->setAttribute(Qt::WA_DeleteOnClose)

  • 您有两个选择:

  • 您可以将父QObject直接或间接地作为QApplication对象的子对象传递给小部件的构造函数。由于qobject的析构函数删除了它的子项,最终您的小部件将被删除

  • 第二个选项是在小部件上设置
    Qt::WA_DeleteOnClose
    属性,这样,当您关闭小部件时,它将被删除,而不会等待应用程序关闭。执行此操作:
    widget->setAttribute(Qt::WA_DeleteOnClose)


  • 你能发布构造函数代码吗?你是如何构造这个对象的?@MehrdadMomeny:查看编辑。我输入了constructor代码。该对象是主窗口类(在GUI应用程序中由Qt生成的类)的成员。我没有设定一个家长。也许这就是原因?如果您没有设置父窗口,也没有手动删除小部件,您希望如何删除它?@MehrdadMomeny:当我将父窗口设置为主窗口时,浏览器将嵌入主窗口的窗体中,位于同一窗体中的选项卡控件顶部。我应该使用哪个父级,或者如何手动删除它?请检查我答案中的第二个选项,您不需要设置父级。您可以发布构造函数代码吗?你是如何构造这个对象的?@MehrdadMomeny:查看编辑。我输入了constructor代码。该对象是主窗口类(在GUI应用程序中由Qt生成的类)的成员。我没有设定一个家长。也许这就是原因?如果您没有设置父窗口,也没有手动删除小部件,您希望如何删除它?@MehrdadMomeny:当我将父窗口设置为主窗口时,浏览器将嵌入主窗口的窗体中,位于同一窗体中的选项卡控件顶部。我应该使用哪个父项,或者如何手动删除它?请选中我答案中的第二个选项,这样您就不需要设置父项。