c++ - Qt:删除MainWindow后QMenu好像没有被删除

标签 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 似乎在说这里存在内存泄漏。 QMenu 不应该在 MainWindow 被删除之前自动删除吗?我试着记住指向 filemenu 的指针并在 MainWindow 析构函数中手动删除它,但它没有改变任何东西。有谁知道我做错了什么?

最佳答案

Shouldn’t the QMenu be automatically deleted right before MainWindow is deleted?

您可以将插槽连接到 QMenu 实例(filemenu)的 destroyed() 信号,然后使用 qDebug() 在那里打印一些东西。如果在主窗口销毁时打印出来,则意味着析构函数被调用,即被删除。

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

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

有时,如果下面的东西像 glibc 等泄漏内存,valgrind 会在 Qt 应用程序中检测到内存泄漏。可能是这样,但您的问题的答案是 QMenu 将被自动删除。

关于c++ - Qt:删除MainWindow后QMenu好像没有被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23720959/

相关文章:

c++ - GoogleMock,out参数返回,正常返回,消费数组

c++ - Linux system() 调用偶尔会阻塞

c++ - 简单 qtest 失败并显示 'multiple definition of main'

c++ - 获取 Qt 应用程序输出到 Qwidget C++

c++ - 如何在C++中删除一个对象?

c++ - 使用基类指针删除派生类时内存泄漏

arrays - 如何判断 Fortran 数组指针是否已直接分配,或者与另一个对象关联?

c++ - 在编译时为 C++ 中的成员函数添加别名

c++ - 为什么这个程序的输出在 C 和 C++ 之间不同?

c++ - 从 Qt 应用程序内部模拟 TAB 或 SPACE 按键