我使用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的父项,以便删除菜单栏会删除菜单(及其操作)。另外,您可以保留指向每个菜单的指针,然后手动删除它们。