Qt:删除MainWindow后似乎没有删除QMenu

时间:2014-05-18 10:32:21

标签: c++ qt memory-leaks qtgui qmenu

在MainWindow的构造函数中,我有一大块代码:

QMenu * filemenu = this->menuBar()->addMenu(tr("File"));
QAction * openButton = new QAction(tr("Open"), this);
connect(openButton, SIGNAL(triggered()), this, SLOT(input()));
filemenu->addAction(openButton);

在我进行记忆检查之前,一切似乎都很好。 Valgrind似乎在说这里有内存泄漏。在MainWindow被删除之前,不应该自动删除QMenu吗?我试着记住指向filemenu的指针并在MainWindow析构函数中手动删除它,但它没有改变任何东西。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

在MainWindow被删除之前,不应该自动删除QMenu吗?

您可以将插槽连接到QMenu实例(filemenu)的destroyed()信号,然后使用qDebug()打印出来。如果为主窗口破坏打印,则意味着调用析构函数,即删除。

...
   connect(myMenuPointer, SIGNAL(destroyed()), receiverPointer, SLOT(test()));
...

MyClass::test()
{
    qDebug() << "My menu deleted automatically";
}

有时,如果下面的某些内容像glibc一样泄漏内存,那么valgrind会在Qt应用程序中检测到内存泄漏。可能是这种情况,但问题的答案是QMenu将被自动删除。