2012-01-05 25 views
5

Quando si aggiunge un QAction * a un QMenu responsabile dell'eliminazione dell'oggetto QAction *? Non riuscivo a trovarlo menzionato nella documentazione di QMenu o QAction.Proprietà di 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()); 
} 

Il Qt Menus example non comporta l'eliminazione delle azioni che crea quindi immagino che QMenu prende la proprietà del QAction. È corretto?

risposta

5

Se si aggiunge un'azione di pre-esistente a un QWidget (che QMenu è) allora:

La proprietà di azione non viene trasferita a questa QWidget.

Si noti che nel tuo esempio, la cancellazione di a è gestita da MyClass perché avete usato come un genitore QObject, così a è soppressa nel distruttore QObject s'.

+0

Grazie. La tua risposta è ambigua riguardo alla distruzione di "a". QObject lo farà per me o devo farlo esplicitamente da qualche parte in MyClass? – glennr

+0

Ogni QObject mantiene un elenco di QObjects di cui è il "genitore", quando il QObject viene distrutto anche i "figli" vengono cancellati. Quindi no, non è necessario alcunché se non passare il QObject all'argomento principale degli oggetti derivati ​​QObject. Leggi i documenti su QObject, lo spiegherà molto meglio di quello sforzo ... – cmannett85