我使用Qt构建应用程序的基本GUI时,我有几个问题。
所以我创建了GUI,它工作正常,我想我会检查一下..

for(int i=0; i < 100000; i++)
{
    menu = new QMenu(this);
    act = new QAction("About", menu);
    menu->addAction(act);
    connect(act, SIGNAL(triggered()), this, SLOT(slotHelpAbout()));
    menuBar()->addMenu(menu)->setText("Help");
}
menuBar()->clear();

我使用QMainWindow类的QMenuBar并用QMenu填充,QMenu也用QAction填充,以便将触发信号连接到几个插槽。这很好,但是当我调用clear时,它应该删除菜单/ Action 项我正在任务管理器中 checkin ,并且内存使用量仍然很大。
即使:
    QList<QAction*> lst = menuBar()->actions();

    for(int i=0;i < lst.length(); i++)
    {
        delete lst.at(i);
    }

不应该释放QMenus和QActions使用的所有内存吗?

最佳答案

@@ ave Mateer指出,QMenuBar::clear对您无济于事,因为它仅从QMenuBar中删除操作,而不删除它们。

同样,从QMenuBar删除操作列表不会导致每个QMenu本身被删除。

您拥有的每个QMenu都将作为this的父项,而QMainWindow可能是您的QMainWindow。仅当您删除QMenu而不是菜单栏时,它们才会被删除。您可以更改代码,以便将每个QMenuBar作为ojit_code的父项,以便删除菜单栏会删除菜单(及其操作)。另外,您可以保留指向每个菜单的指针,然后手动删除它们。

08-08 01:51