2012-01-05 17 views
5

Al agregar una QAction * a un QMenu que es responsable de eliminar el objeto QAction *? No pude encontrarlo mencionado en la documentación para QMenu o QAction.Propiedad de la 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()); 
} 

El Qt Menus example no elimina ninguna de las acciones que crea, así que supongo que QMenu toma posesión del QAction. ¿Es eso correcto?

Respuesta

5

Si se agrega una acción pre-existente a un QWidget (que es QMenu) a continuación:

La propiedad de la acción no se transfiere a este QWidget.

Tenga en cuenta que en su ejemplo, la supresión de a es manejado por MyClass porque se lo ha usado como padre QObject, por lo que se suprime en a destructor QObject 's.

+0

Gracias. Su respuesta es ambigua con respecto a la destrucción de "a". ¿QObject lo hará por mí o debo hacerlo explícitamente en algún lugar de MyClass? – glennr

+0

Cada QObject mantiene una lista de QObjects de los que es el 'padre', cuando se destruye el QObject, también se eliminan 'hijos'. Entonces, no, no necesitas nada más que pasar tu QObject al argumento principal de los objetos derivados de QObject. Lea los documentos en QObject, lo explicará mucho mejor que ese esfuerzo ... – cmannett85

Cuestiones relacionadas