Qt:删除MainWindow后QMenu似乎没有被删除
Posted
技术标签:
【中文标题】Qt:删除MainWindow后QMenu似乎没有被删除【英文标题】:Qt: QMenu seems to not be deleted after deleting MainWindow 【发布时间】:2014-05-18 10:32:21 【问题描述】:在 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 析构函数中手动删除它,但它没有改变任何东西。有谁知道我做错了什么?
【问题讨论】:
This 说它不应该发生。您能否显示您解释的 valgrind 输出?你确定主窗口析构函数执行了吗? 这里是输出:pastebin.com/RPgTa0Ft。是的,我很确定,因为我告诉他用 qDebug() 发送一些废话。 Here is 另一个育儿。您使用的是哪个 Qt 版本以及哪个平台? 我使用的系统是 Ubuntu。根据 Creator 的说法,我使用的版本是“Qt version 5.2.1 for Desktop”。 你能把一个槽连接到你的 QMenu 实例(filemenu)的destroy() 信号上,然后用qDebug() 打印出一些东西吗?它是否会为主窗口销毁而打印?尝试以某种方式在主窗口之外执行此操作。 【参考方案1】:QMenu不应该在MainWindow被删除之前自动删除吗?
你可以将一个槽连接到你的 QMenu 实例(filemenu)的destroyed() 信号,然后用qDebug() 打印出一些东西。如果为主窗口销毁打印了这意味着调用了析构函数,即被删除。
...
connect(myMenuPointer, SIGNAL(destroyed()), receiverPointer, SLOT(test()));
...
MyClass::test()
qDebug() << "My menu deleted automatically";
有时,如果下面的某些东西泄漏了 glibc 等内存,则 valgrind 在 Qt 应用程序中检测到内存泄漏。可能是这样,但您的问题的答案是 QMenu 将被自动删除。
【讨论】:
以上是关于Qt:删除MainWindow后QMenu似乎没有被删除的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Qt Designer 中删除 QMenu 分隔符?
Qt5-控件-QMenu,QMenuBar-菜单栏详解-菜单热键-菜单校验功能
QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?
QPushButton.setMenu (self, QMenu menu) 使用从 Qt Designer 生成的代码