1

在 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 被删除之前自动删除吗?我尝试记住指向文件菜单的指针并在 MainWindow 析构函数中手动删除它,但它没有改变任何东西。有谁知道我做错了什么?

4

1 回答 1

1

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

您可以将插槽连接到 QMenu 实例(filemenu)的destroy() 信号,并使用qDebug() 打印出一些内容。如果为主窗口销毁打印了这意味着调用了析构函数,即被删除。

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

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

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

于 2014-05-18T12:05:44.800 回答