Qt: QMenu在删除主窗口后似乎没有被删除

Qt: QMenu seems to not be deleted after deleting MainWindow

本文关键字:删除 窗口 QMenu Qt      更新时间:2023-10-16

在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不应该在主窗口被删除之前被自动删除吗?我试着记住指向文件菜单的指针,并在主窗口析构函数中手动删除它,但它没有改变任何东西。有人知道我哪里做错了吗?

应该在主窗口被删除之前自动删除QMenu吗?

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

...
   connect(myMenuPointer, SIGNAL(destroyed()), receiverPointer, SLOT(test()));
...
MyClass::test()
{
    qDebug() << "My menu deleted automatically";
}

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