Question

When adding a QAction* to a QMenu who is responsible for deleting the QAction* object? I couldn't find it mentioned in the documentation for QMenu or 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());
}

The Qt Menus example doesn't delete any of the actions it creates so I assume that QMenu takes ownership of the QAction. Is that correct?

Was it helpful?

Solution

If you add a pre-existing action to a QWidget (which QMenu is) then:

The ownership of action is not transferred to this QWidget.

Note that in your example, deletion of a is handled by MyClass because you have used it as a parent QObject, so a is deleted in QObject's destructor.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top