Нет, они все еще существуют в памяти, потому что они будут удалены только при удалении меню и меню только при этом (при условии QMainWindow
) удалено.Вызов clear
не удаляет их.
Причина, по которой clear
не делает этого, заключается в том, что (помимо прочего) он поддерживает сценарий, подобный следующему: вы назвали переменные, ссылающиеся на QAction
экземпляры, и вы хотите изменить их в своем меню.Вы вызываете clear
, чтобы удалить их все, затем вызываете addAction
с теми же действиями в желаемом порядке.
Если вы хотите удалить их напрямую, вы можете просто удалить строку меню.Это приведет к рекурсивному удалению всех меню и действий, связанных с панелью меню.Вызов menuBar()
автоматически создает новый, если он не существует, так что вам даже не нужно об этом беспокоиться.
#include <QtGui>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QMainWindow m;
QMenu *menu = m.menuBar()->addMenu("test");
for (int i = 0; i < 30000; ++i) {
menu->addAction(QString::number(i)); // memory going up, up, up...
}
delete m.menuBar(); // frees memory
menu = m.menuBar()->addMenu("test2"); // Automatically creates new menu bar
menu->addAction("test 2 action");
m.show();
return app.exec();
}