2012-01-05 3 views
5

При добавлении QAction * в QMenu, который несет ответственность за удаление объекта QAction *? Я не мог найти это в документации для QMenu или QAction.Собственность 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 example не удаляет любые действия, которые она создает, так я предполагаю, что QMenu становится владельцем QAction. Это верно?

ответ

5

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

Принадлежность действия не переведения в QWidget.

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

+0

Спасибо. Ваш ответ неоднозначен относительно уничтожения «а». Будет ли QObject делать это для меня или я должен делать это явно в MyClass? – glennr

+0

Каждый QObject поддерживает список QObjects, что он является «родительским», когда объект QObject уничтожен, его «дети» также удаляются. Так что нет, вам ничего не нужно, кроме передачи QObject родительскому аргументу объектов, основанных на QObject. Прочтите документы в QObject, это объяснит это намного лучше, чем эти усилия ... – cmannett85

Смежные вопросы