Право собственности на QAction
При добавлении QAction* в QMenu, кто отвечает за удаление объекта QAction*? Я не смог найти это упомянутое в документации для QMenu или QAction.
void MyClass::contextMenuEvent(QContextMenuEvent *evt)
{
QMenu menu(this);
QAction *a = new QAction(tr("Some action"), this);
menu.addAction(a); // who owns a?
menu.exec(evt->globalPos());
}
Пример Qt Menus не удаляет ни одно из создаваемых им действий, поэтому я предполагаю, что QMenu становится владельцем QAction. Это верно?
1 ответ
Решение
Если вы добавите ранее существующее действие к QWidget
(который QMenu
затем:
Право собственности на действие не передается этому QWidget.
Обратите внимание, что в вашем примере удаление a
обрабатывается MyClass
потому что вы использовали его в качестве родителя QObject
, так a
удаляется в QObject
деструктор.