Право собственности на QAction - PullRequest
5 голосов
/ 06 января 2012

При добавлении 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 Ответ

5 голосов
/ 06 января 2012

Если вы добавите ранее существующее действие к QWidget (что QMenu есть), то:

Владение действием не передается этому QWidget.

Обратите внимание, что в вашем примере удаление a обрабатывается MyClass, потому что вы использовали его как родительский QObject, поэтому a удаляется в деструкторе QObject.

...